Компании удалось поместить безопасные вычисления в одном кристалле

Развитие процессоров идет в двух направлениях: за счет увеличения производительности процессоров для ПК и путем уменьшения размеров больших ЭВМ до уровня системы на кристалле. Несмотря на то что на процессорах первого типа начинают строить крупные вычислительные системы, по сути они остаются «большими ПК» с присущими им ограничениями. Большие же машины при «уменьшении размеров» своих свойств не теряют. Наглядный пример тому — процессоры «Эльбрус-3М», первая партия которых была выпущена компанией МЦСТ в декабре прошлого года.

Объекты

Объектные процессорные технологии, реализованные в кристаллах «Эльбрус», позволяют строить более защищенные вычислительные комплексы

Основной идеей «Эльбруса» изначально был контроль типов данных на уровне процессора. То есть процессор, считывая информацию о типе данных, проверяет корректность операций с ними и вызывает системное прерывание в случае ее нарушения. Аналогичным образом проверяется выход индекса за границы массива, попытка передачи управления в область данных и другие некорректные результаты адресной арифметики, которые часто используются хакерами для проникновения в систему. Процессоры стандартной архитектуры до недавнего времени не имели средств контроля типов, некоторое время тому назад AMD начала использовать в своих процессорах бит неисполнимости операций — NoneXecutable (NX). Аналогичная технология появилась и в процессорах Intel. В «Эльбрусе» более общая реализация контроля типов была заложена изначально и является неотъемлемой частью архитектуры.

В архитектуре «Эльбруса» есть понятие вычислительных модулей (ВМ), которые представляют собой набор данных и код для их обработки. Данные, к которым может получить доступ код ВМ, называются контекстом ВМ. Все операции с данными в «Эльбрусе» выполняются через ссылки, в которых явно указан тип операндов. Ссылки разных ВМ могут указывать на одну и ту же область памяти, то есть контексты разных ВМ могут пересекаться. Процессор, прежде чем выполнить операцию, проверяет соответствие типов, поэтому передать управление на пользовательские данные даже внутри ВМ невозможно. Передача управления на другой ВМ выполняется по специальной ссылке, которая хранится в процессоре и переход по которой вызывает смену контекста ВМ. Таким образом, с помощью ссылочной арифметики и контроля типов ограничивается доступность памяти для кода. Эти правила вычислений обеспечивают независимое исполнение различных ВМ и исключают их влияние друг на друга.

Если в первых двух версиях «Эльбруса» ссылки были общего типа (они назывались дескрипторами переменных), то в третьей версии архитектуры появились ссылки на объекты, которые имеют публичную и закрытую части. Данные из публичной части доступны всем, из закрытой — только коду, который является внутренним для самого объекта. Таким образом, ВМ превратились в полноценные объекты, а на уровне процессора были реализованы принципы объектно-ориентированного программирования. При этом сам машинный язык такого процессора стал объектно-ориентированным.

Управление памятью, основанное на объектной модели с контролем типов, обеспечивает более надежное исполнение программ, поскольку в этом случае код помечен специальными маркерами, которые могут храниться в ECC-памяти, то есть не могут измениться при переполнении буфера. Однако в архитектуре «Эльбруса» предусмотрен контроль не только за исполнимостью кода — такая возможность реализована и в стандартной процессорной архитектуре, — но и за таким важным типом данных, как ссылки, с помощью которых реализованы массивы и собственно объекты.

Безопасность

Одной из ключевых проблем современных информационных технологий является безопасность. Когда компьютерные вирусы могут вывести из строя системы управления железными дорогами и аэропортами, то поневоле задумаешься о возможности дальнейшего развития существующих технологий. При этом проблема защиты от нападений скрыта не в программном обеспечении, а в процессорах стандартной архитектуры, которые при управлении памятью ничего не знают о хранимых в ней данных. Поэтому у хакеров возникает возможность передаваемые ими данные подсунуть на исполнение процессору. В некоторых случаях этого можно добиться с помощью переполнения буфера, а в некоторых — благодаря инъекции интерпретируемых команд. Как же от этого защититься?

Уязвимость современных вычислительных систем связана с тем, что данные и команды хранятся в одной памяти и до недавнего времени процессоры не могли отличить одно от другого. Отличия «замечались» только самой операционной системой, однако хакеры научились ее «обманывать». Поэтому возникла потребность разделить данные и команды уже на уровне процессора.

Даже в Intel-архитектуре появилась возможность пометить область памяти как данные. А объектные процессорные технологии, реализованные в кристаллах «Эльбрус», позволяют строить более защищенные вычислительные комплексы, чем процессоры стандартной архитектуры. Контроль типов, ограничение прав доступа к памяти и исключение взаимного влияния кода объектов друг на друга максимально снижают вероятность успешной атаки. К тому же ограничение набора команд, которые процессор может выполнить с данным типом операндов, позволяет выявлять угрозу безопасности еще на этапе компиляции. То есть при переносе любой программы на машинный язык «Эльбрус» ошибки будут фиксироваться в тех местах, где произошло нарушение правил работы с типами.

Впрочем, нельзя сказать, что любая система, построенная на «Эльбрусах», будет безопасной. В частности, в процессорах «Эльбрус-3М» есть режим эмуляции системы команд x86, в котором проверка типизации выключена, и системы, использующие этот режим, лишаются описанной выше защиты. Но и на «родной» для «Эльбруса» системе команд можно построить незащищенную систему — это зависит от квалификации разработчика программного обеспечения.

Например, в Web-приложениях, написанных на языке PHP, используется интерпретатор этого сценарного языка. В интерпретаторе же, в частности, есть команда на запуск внешнего приложения. Допустим, что разработчик приложения допустил стандартную ошибку — не включил проверку входного потока на спецсимволы. Тогда у нападающих возникает возможность реализовать PHP-инъекцию с возможностью запуска команд операционной системы от имени интерпретатора. В результате ошибка, допущенная разработчиком Web-приложения, делает уязвимой всю систему.