Встроенные средства защиты. Принципы модульности и перемещаемости. Проверка привилегированности сегмента, страница 23

Процессоры х86 имеют два класса команд ограниченного применения: привилегированные команды и чувствительные команды.

Привилегированные команды влияют на системные структуры данных и системные регистры. Они могут использоваться только в программах с CPL = 0. Если процессор обнаруживает привилегированную команду в программе с CPL ¹ 0, то он вызывает обработчик ошибки. В число привилегированных команд входят:

LGDT - загрузка регистра GDTR глобальной дескрипторной таблицы;

LLDT - загрузка регистра LDTR  локальной  дескрипторной таблицы;

LIDT  - загрузка регистра IDTR дескрипторной таблицы прерываний;

LTR   -  загрузка регистра задачи TR;

LMSW - загрузка слова состояния машины;

SMSW - запоминание слова состояния машины MSW;

CLTS -  сброс флага переключения задачи;

MOV x,Cri - операции по записи или считыванию управляющих регистров;

MOV x,Dri - операции по записи или считыванию отладочных регистров;

MOV x,Tri  - операции по записи или считыванию регистров тестирования;

HLT  -   останов.

Чувствительные команды. Существуют команды, использование которых может быть ограничено для программ с уровнем привилегий ниже некоторого уровня привилегий, заданного для всей системы в целом. Кроме того, желательно иметь возможность модифицировать функции некоторых команд в соответствии с привилегиями выполняющей их программы. Такие команды называются чувствительными командами. В частности, при обращении к пространству памяти ввода-вывода пользовательские программы ограничены в использовании команд ввода-вывода  IN, OUT, INS, OUTS. Это сделано для того, чтобы пользовательская программа не могла перепрограммировать контроллер прерываний или контроллер прямого доступа к памяти, что, в свою очередь, могло бы открыть путь к непосредственной модификации по физическим адресам. К чувствительным командам также относятся команды CLI, STI, которые воздействуют на флаг IF.

При выполнении этих команд программа не обязательно должна обладать 0 уровнем привилегий. Чувствительность этих команд заключается в том, что их могут выполнять программы, для которых выполняется условие: CPL£IOPL (Поле IOPL в регистре EFlags указывает не текущий уровень привилегий, а минимальный уровень привилегий, необходимый для выполнения чувствительных команд).

Поля IOPL и IF в регистре EFlags являются защищенными. Это означает, что при выполнении операций с регистром флагов, например, при восстановлении его из стека, биты IOPL и IF регистра EFlags меняют свое значение только на 0 уровне привилегий. При попытке изменения EFlags на ненулевом уровне эти поля остаются без изменений.

Защита крупным планом

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

- выполнять некоторые команды;

- обращаться к данным других программ;

- передавать управление в другие сегменты кода.

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

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