Защита данных в системах с сегментной организацией памяти на основе процессоров с архитектурой IA32
Процессор Пентиум, при работе в защищенном режиме, предоставляет ОС средства защиты процессов друг от друга:
1) Отдельная таблица дескрипторов для каждого процесса (LDT) – и ее начальный адрес заносится в регистр LDTR на этапе загрузки процесса в память.
Т.е. система делает недоступным для процесса локальные таблицы других процессов.
2) Таблица GDT, которая доступна всем процессам, защищается посредством поддержки системы безопасности на основе привилегий.
· У каждого сегмента есть атрибуты безопасности, определяющие степень защищенности этого сегмента
· У каждого процесса есть атрибуты привилегий этого процесса
3) Существует аппаратное ограничение набора инструкций, разрешенных процессу для выполнения (чтобы он не мог загрузить адрес чужой LDT или установить для себя другие приоритеты).
Среди самых привилегированных инструкций (доступных только процессу с наивысшим приоритетом):
· Останов процессора
· Загрузка регистра GDTR и LDTR
4) Ограничения на способ использования сегмента (сегмент данных, кодовый сегмент, системный сегмент – некоторые действия для них запрещены – нельзя в кодовый сегмент писать данные и нельзя передавать сегменту данных управление)
А подробнее так:
Способ использования, как мы помним, закодирован несколькими битами 5-го байта дескриптора (который в рамочке):
· 7-й бит 5-го байта – Р – бит присутствия
· 6-й и 5-й – хранят DPL (уровень привилегий)
· 4-й по 0-й – кодируют тип сегмента (см рисунок)
Бит S – кодирует ТИП дескриптора (cистемный или нет):
· Системный (0) – например LDT или TSS – конкретный тип указан в его младших битах
· Данные или Код (1)
Бит E – для отличия сегмента данных (0) от сегмента кода (1)
Для сегмента ДАННЫХ:
· ED Expand Down– направление распространения сегмента:
o 0 – к увеличению адресов
o 1 – к уменьшению адресов
· W – writeable – бит разрешения записив сегмент (1 – можно, 0 - нельзя)
· A – accessed – признак обращения(фиксация обращения к молю, может использоваться в алгоритме замещения сегментов в ОП)
Для сегмента КОДА:
· С - conforming – бит подчинения сегмента:
o 0 – неподчиненный сегмент, можно вызвать только при CPL = DPL
o 1 – подчиненный сегмент, можно вызвать при CPL >= DPL
· R – readable – бит разрешения чтения(1 – можно, 0 - нельзя)
· A – accessed – признак обращения(фиксация обращения к молю, может использоваться в алгоритме замещения сегментов в ОП)
1) При попытке сделать какую-то операцию – проверка допустимости операции (при загрузке сегмента в регистр, чтобы не загружали сегменты данных в регистры кода и тд).
2) Проверка ссылок операндов чтобы не
· Не читали данные из сегмента кода (он только выполняется)
· Не писали данные в кодовые сегменты
· Не писали данные в сегмент, откуда можно только читать
Привилегии подробнее:
В процессоре Пентиум – МАНДАТНЫЙспособ определения прав доступа (механизм колец защиты):
Есть 4 уровня привилений:
0 – ядро
1, 2 – системные утилиты
3 – прикладные проги
Для характеристики уровня привилегий есть несколько переменных:
· DPL – Descripror Privilege Level – (DPL –поле в дескрипторе сегмента – в таблице дескрипторов)
· RPL – Request Privilege Level – (RPL – поле в селекторе сегмента (то, с чем мы запрашиваем память))
· СPL – Current Privilege Level – (RPL – поле в селекторе кодового сегмента (то, что сейчас выполняется))
· EPL – Effective Privilege Level – эффективный уровень привилегий запроса. Что это?
Уровни привилегий назначаются дескрипторам и селекторам. В любом случае это 2 бита: 00 01 10 11. Основное из чего оно вычисляются все переменные – DPL.
При остановке процесса уровень привилегий процесса сохраняется в его контексте. В Процессоре Пентиум это записывается в системный сегмент TSS – task state segment
Контроль доступа:
- к сегментам данных
Сопоставление EPL запроса и DPL сегмента данных:
EPL = max (RPL, CPL) - худшее
CPL – привилегии выполняемого кода
RPL – это привилегии, с которыми запрашиваем данные
DPL – привилегии, с которыми данные могут быть запрошены
- к сегменту стека
Предотвратить доступ низкоуровневого кода к данным, выработанным высокоуровневым кодом и помещенным в стек
EPL кода = DPL сегмента стека, тогда разрешен доступ
Т.е. для каждого уровня привилегий используется отдельный сегмент стека.
- к сегменту кода
CPL сравниваем с DPL, а как именно – все сложно.