Аппаратные средства защиты информации в микропроцессоре

Рассмотрим основные механизмы защиты памяти, поддерживаемые аппаратурой микропроцессора.

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

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

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

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

  • • неразрешенное взаимодействие пользователей друг с другом;
  • • несанкционированный доступ пользователей к данным;
  • • повреждение программ и данных из-за ошибок в программах;
  • • намеренные попытки разрушить целостность системы;
  • • случайные искажения данных.

Средства защиты микропроцессора делятся на две группы:

  • • защиту при управлении памятью;
  • • защиту по привилегиям.

Средства управления памятью обнаруживают большинство программных ошибок.

До загрузки селектора в сегментный регистр и кэширования дескриптора осуществляется несколько контрольных проверок:

  • • процессор проверяет, что поле Index селектора находится в пределах таблицы, определяемой его битом 77;
  • • при загрузке селектора в сегментный регистр данных (DS, ES, FS, GS) тип дескриптора должен разрешать считывание из сегмента. Только выполняемые сегменты для этих регистров не допускаются, но сегменты с разрешенными операциями выполнения/считывания допустимы;
  • • в случае сегментного регистра стека (SS) в сегменте должны быть разрешены операции считывания и записи;
  • • при загрузке регистра CS сегмент должен быть обязательно исполняемым;
  • • в регистр LDTR можно загружать только селектор, указывающий на дескриптор сегмента типа LDT
  • • в регистр TR можно загружать только селектор, указывающий на дескриптор сегмента состояния задачи.

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

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

Защита по привилегиям фиксирует более тонкие ошибки и намеренные попытки нарушить целостность системы.

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

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

Привилегии устанавливаются значениями соответствующих полей в следующих основных системных объектах микропроцессора:

  • DPL — уровень привилегий сегмента (находится в байте доступа дескриптора сегмента);
  • RPL — биты <0, 1> селектора, хранящегося в сегментном регистре;
  • • текущий уровень привилегий программы CPL задается полем RPL селектора, хранящегося в сегментном регистре CS;
  • IOPL — поле регистра флагов, которое указывает, на каком уровне привилегий разрешено выполнять операции ввода/вывода, а также в некоторых других объектах, используемых, например, при переключении задач и обработке прерываний.

Так как число программ, которые могут выполняться на более высоком уровне привилегий, уменьшается к уровню 0 и так как программы уровня 0 действуют как ядро системы, уровни привилегий обычно изображаются в виде четырех колец защиты (Protection Rings) (рис. 7.8).

Типовое распределение программ по кольцам защиты выглядит

следующим образом:

  • уровень 0: ядро ОС, обеспечивающее инициализацию работы, управление доступом к памяти, защиту и ряд других жизненно важных функций, нарушение которых полностью выводит из строя процессор;
  • уровень Р. основная часть программ ОС (утилиты);
  • уровень 2 служебные программы ОС (драйверы, СУБД, специализированные подсистемы программирования и т.д.);
  • уровень 3: прикладные программы пользователя.

Аппаратные средства процессора, работающего в защищенном режиме, постоянно контролируют, что текущая программа достаточно привилегированна для того, чтобы:

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

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

Операции ввода/вывода разрешено выполнять программам, уровень привилегий которых не ниже значения, установленного в поле IOPL регистра флагов. То есть должно выполняться соотношение CPL < IOPL.

Обращение к данным других программ разрешается только на своем и менее привилегированном уровнях защиты (рис. 7.9).

Порядок взаимодействия программ и данных на разных

Рис. 7.9. Порядок взаимодействия программ и данных на разных

уровнях привилегий

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

При передаче управления подчиненному сегменту действует правило DPL >= max (CPL, RPL). Однако при этом подчиненный код будет выполняться на том же уровне привилегий, что и вызвавший его код (CPL не изменится). Ограничивая передачу управления в пределах одного кольца защиты, процессор предотвращает произвольное изменение уровней привилегий. Если бы значение CPL можно было легко изменить, все остальные средства защиты по привилегиям потеряли бы смысл.

 
< Пред   СОДЕРЖАНИЕ     След >