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

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

 


Прикладные  программы

 


Расширения ОС (служебные

   программы), базы данных

 


Системные программы и

    утилиты ОС

 


Ядро  ОС

PL = 0

 


PL =1

 


PL =2

 


PL =3

 


                   Рис. Кольца защиты процессора 80х86

Механизм проверки привилегий работает в ситуациях, которые можно назвать межсегментными. К ним относятся доступ к другому сегменту данных или стековому сегменту,  реализация межсегментных передач управления в случае особых ситуаций, при прерываниях или при выполнении команд безусловной передачи управления CALL, INT, JMP, RET, IRET и во всех других случаях, когда осуществляется загрузка какого-либо селектора для выбора соответствующего сегмента.

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

В проверку привилегий входят три различных уровня привилегий:

- текущий уровень привилегий CPL;

- запрашиваемый уровень привилегий RPL (уровень привилегий селектора инициатора запроса);

- уровень привилегий дескриптора целевого сегмента назначения DPL.

При подготовке программы к запуску операционная система, обеспечивающая управление программами в защищенном режиме, например Windows или OS/2, присваивает каждому сегменту кода и данных  определенный уровень привилегий и заносит его в поле DPL (Discriptor Privilege Level) байта доступа соответствующего дескриптора. Уровень привилегий дескриптора DPL  указывает минимальный уровень привилегий, необходимый для доступа к данному сегменту.

Подготовка дескрипторных таблиц и заполнение их дескрипторами осуществляется в реальном режиме. Эта подготовка включает в себя задание структуры дескриптора, определение  дескрипторной таблицы как набора дескрипторов с выбранной структурой и формирование селекторов для каждого дескриптора, в индексном поле которого указывается номер дескриптора в таблице. Формат селектора, рассмотренный ранее, содержит поле RPL (Requested Privilege Level - запрашиваемый уровень привилегий). Важнейшим назначением уровня RPL является использование его в селекторах шлюзов. С помощью шлюзов пользовательская программа получает от ОС только те обслуживания, которые ОС разрешает оказывать пользовательским программам. Более подробно использование шлюзов рассматривается в разделе “Межсегментные вызовы в защищенном режиме”. Другим важным использованием запрашиваемого уровня привилегий RPL является контроль привилегий при межуровневых обращениях к сегментам данных. Запрашиваемый уровень привилегий RPL, указываемый в селекторе, не влияет на выбор дескриптора, но он может запретить доступ к сегменту, если уровень привилегий источника запроса ниже уровня привилегий дескриптора сегмента назначения.. Содержимое поля RPL должно быть численно меньше или равно значению DPL выбираемого дескриптора

Операция присвоения уровней DPL и RPL выполняется во время трансляции: в  файл исходной программы вставляется специальный файл данных, описывающих дескрипторы в дескрипторной таблице и селекторы , их определяющие.