Архивы: по дате | по разделам | по авторам

«Эльбрус» — пик безопасности?

Архив
автор : Александр Карабуто   31.03.2004

В заключительной статье темы мы познакомимся с еще одним оригинальным взглядом на защиту информационных систем, которого придерживается известный российский разработчик микропроцессоров семейства «Эльбрус» Борис Бабаян.

В заключительной статье темы мы познакомимся с еще одним оригинальным взглядом на защиту информационных систем, которого придерживается известный российский разработчик микропроцессоров семейства «Эльбрус» Борис Бабаян.1

Еще во времена СССР команда создателей вычислительных комплексов «Эльбрус» 1 и 2 (1978, 1985) имела за плечами опыт разработки и эксплуатации системы, в которой, в частности, была успешно решена проблема защищенности вычислений. Архитектура последующих микропроцессоров «Эльбрус» 3М и Е2К адаптирует эту технологию для современного окружения. Технология основана на использовании контроля типов данных и аргументов на всех уровнях системы: в аппаратуре, в языке и в ОС.

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

Стратегический подход

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

Изначально концепция современных языков программирования высокого уровня не страдает такими недостатками. Все проблемы появляются при реализации этой концепции.2 Но для полного решения проблемы на подобных же идеях должны быть разработаны операционная система и аппаратура, включая организацию регистров и систему команд процессора.

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

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

Другой важный базовый принцип — система идентификации и переключения контекста. Не вдаваясь в детали, подчеркнем, что защищенность такой системы базируется на двух простых положениях.

1. Никто не тронет меня
Благодаря механизму ссылки, только вычислительный процесс, создавший некоторую область данных, имеет к ней доступ. Если, конечно, ссылка на эту область не была добровольно передана ее владельцем кому-либо другому.

2. Я не трону никого
С помощью механизма ссылки в любой момент времени формируется контекст работающей программы, строго ограничивающий множество доступных ей данных.

В описываемой системе элементарным звеном защиты является контекст. Любой контекст защищен от ошибочных или злонамеренных действий программ, работающих в других контекстах. Иными словами, обеспечивается защита одной процедуры от другой. Эта защита (в «Эльбрусе» она называется контекстной) существенно отличается от других подобных схем (Unix или Windows), таких, например, как защита между двумя виртуальными пространствами, когда невозможно никакое взаимодействие, — в нашем же случае два контекста могут активно взаимодействовать, работая в одной задаче.

Из этих принципов доказуемо вытекает полная и удобная в использовании защищенность. Это верно, по крайней мере, на уровне проектирования системы. Остается проследить, чтобы не вкралась ошибка при реализации этих принципов. Весьма ограниченное количество функций, описанных выше, ответственных за защищенность, сильно упрощает и повышает надежность реализации. Такая система значительно облегчает обнаружение ошибок в программах.3 Прежде всего, введение динамического контроля типов позволяет автоматически обнаружить ряд ошибок, которые иначе приходилось бы искать сложным образом, через семантику программы.

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


1 Борис Арташесович Бабаян — один из первых выпускников Физтеха, а ныне — семидесятилетний патриарх с мировым именем в области архитектуры и программного обеспечения вычислительных комплексов, устойчивых к отказам и сбоям, директор Института микропроцессорных вычислительных систем РАН, главный конструктор вычислительных средств систем ПРО/ПКО и микропроцессорных вычислительных комплексов «Эльбрус», научный руководитель ТОО «Московский центр SPARC-технологий» (www.elbrus.ru), с 1984 года — член-корреспондент РАН. Мы предлагаем вам конспект основных положений стостраничной статьи Бориса Бабаяна «Защита информационных систем», опубликованной в 2003 году на www.elbrus.ru/mcst/ secure_ information_system_v5_2r.pdf и излагающей взгляды автора на защиту информационных систем. За деталями желающие могут обратиться к первоисточнику.
2 Даже при разработке языков в целях повышения эффективности эти исходные положения размываются, модифицируются, приводя в результате, конечно, к более эффективному, но ненадежному языку. Тому есть две причины. Во-первых, прежде, когда оборудование было медленное и громоздкое, задача достижения высокой эффективности имела высший приоритет, а проблема защищенности не была такой острой, как сейчас. Не было и компьютерных сетей, значительно реже происходил обмен программами и пр. Во-вторых, упомянутые выше модели использовались лишь при разработке языков программирования, но ни при разработке операционных систем, ни, тем более, при разработке архитектуры вычислительных машин соображения защищенности не фигурировали даже в таком виде.
3 В результате заметно облегчается сборка всей программной системы, а значит, и отладка больших программных комплексов. В качестве объективного подтверждения этого факта можно привести два примера. Первый: на машины «Эльбрус» переносилось много отлаженных программ с других систем. Во всех случаях в отлаженных программах обнаруживались ошибки. При прогоне в системе симуляторов Э3-Е2К широко распространенных тестов SPEC92 было обнаружены около трех десятков ошибок. Второй: система имеет большой эффект при разработке ОС, так как отпадает необходимость заботится о внутренней защите между модулями самой системы. По своему характеру системное программирование становится подобным прикладному. Алгоритмы ОС, вызванные из пользовательской программы или по прерыванию, работают на стеках пользователя и т. д. Иными словами, ОС превращается в набор описаний, глобальных для любой пользовательской программы.
4 Нет необходимости отдельно оговаривать права доступа и т. д. Если по алгоритму необходимо что-то передать, то передача одновременно означает и передачу прав. В практике других систем известны случаи, когда сложные действия в принципе могли бы улучшить защищенность, но их сложность приводит к тому, что программисты ими не пользуются. Логика здесь простая. Действия для обеспечения защищенности не ощущаются программистом как абсолютно необходимые, поскольку не очевидно, будет ли нарушена защита именно в этом месте. А раз так, программист о них благополучно «забывает».

Реализация

Практика разработки трех поколений машин с архитектурой «Эльбрус» привела к выработке следующего подхода. Архитектура поддерживает реализацию в аппаратуре базовых типов (с обязательным включением всех адресных типов), типовый контроль и формирование контекста с помощью ссылок. На первом этапе («Эльбрус» 1 и 2) в аппаратуру были введены ссылки (дескрипторы) на простые массивы и эффективная поддержка контекста статически вложенных процедур. На втором этапе («Эльбрус» 3М, Е2К) введены ссылки (объектные дескрипторы) на объекты объектно-ориентированного программирования, но контекст поддержан простой одноуровневый с глобальными данными. Обе реализации допускают применение любых языков программирования.

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

Одно из отличий описываемой системы от традиционных — введение дополнительных разрядов в памяти, которые описывают тип данных, хранящихся в каждом слове, — тег. К сожалению, для этого нужны дополнительные разряды, так как все информационные разряды доступны для обработки обычными операциями, и их число нельзя сокращать, чтобы выделить разряды под тип. Число дополнительных битов (тег) зависит от выбранного подхода. В «Эльбрусе» 1, 2 каждое 64-разрядное слово сопровождалось дополнительными восемью битами, в которых кодировался тип данных и контрольная информация для обнаружения сбоев, а для Э3-Е2К было введено только по два дополнительных бита на каждое 32-разрядное слово, поскольку в Э3-Е2К используются стандартные кристаллы памяти и/или SIMM, DIMM, RIMM. Для хранения тегов служат ЕСС-биты, но возможности «коррекции» не исключаются полностью, просто увеличивается объем битов, охватываемых одним ЕСС-кодом, и в освободившихся кодовых комбинациях хранятся теги. В пользовательских файлах не следует реализовывать ссылки в память, а значит, не нужно вводить теги.

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

Совместимость и вирусы

Достижение защищенности находится в очевидном противоречии с задачей обеспечения совместимости. Во-первых, само определение наиболее распространенных языков С и С++ не полностью соответствует требованиям защищенности. Во-вторых, выполнение не всех требований языка контролируется реализацией (например, выход за границы массивов или использование неинициализированных данных), в результате программы обычно содержат ошибки (в том числе приводящие к нарушению защищенности).5

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


5 То есть защищенная система не может быть совместима с существующими реализациями с точностью до нарушений защищенности. В связи с этим в «Эльбрусе» реализована технология полной двоичной совместимости с архитектурой Intel х86. Исполнение программ в этом режиме соответствует семантике двоичного кода с точностью до незащищенных черт внутри виртуального пространства, в котором решается задача. Существует защищенный режим, в котором исполняются программы, оттранслированные с языков, с учетом обозначенных ограничений. Наконец, существует смешанный вариант, когда защищенная программа может, например, вызывать незащищенные библиотеки. При этом задача будет работать в двух пространствах: защищенном и незащищенном.

© ООО "Компьютерра-Онлайн", 1997-2022
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.