УРОВЕНЬ ЗАЩИТЫ СЕГМЕНТОВ

Все пять аспектов защиты используются при сегментной трансляции:

• проверка типа;

• проверка границы;

• ограничение адресуемой области;

• ограничение точек входа в процедуру;

• ограничение набора команд.

Сегмент с позиций защиты - это единица защиты, а дескрипторы сегментов хранят параметры защиты. Проверка защиты выполняется ЦП автоматически в момент загрузки селектора дескриптора сегмента в сегментный регистр и при каждом обращении к сегмен­ту. Сегментные регистры хранят параметры защиты текущих сегментов (сегменты текуще­го, выполняемого процесса).

Сохраняемые параметры защиты в дескрипторах. На рис.3.24 показаны поля дес­крипторов сегментов, имеющие отношение к защите сегментов.

Параметры защиты помещаются в дескриптор операционной системой в момент со­здания дескриптора. Обычно программисты-прикладники не имеют дело с параметрами защиты.

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

Проверка типа. Поле «тип дескриптора» имеет две функции:

• устанавливает различие между разными форматами дескрипторов;

• специфицирует функциональное назначение сегмента.

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

 

Заметим, что не все дескрипторы описывают сегменты; дескрипторы вентилей вызова имеют другую цель.

Поля типа дескрипторов сегментов данных и кодовых сегментов включают разряды, которые в дальнейшем определяют степень защиты сегмента (см. рис. 3.24.).

Разряд разрешения записи (W) в дескрипторе сегмента данных указывает, могут ли команды осуществлять запись в этот сегмент.

Разряд разрешения чтения (R) в дескрипторе кодового сегмента указывает, разре­шено ли командам читать из сегмента (например, для доступа к константам, которые хранятся в командах). Кодовый сегмент, разрешенный для чтения, может быть прочитан двумя способами:

• через регистр CS, путем использования префикса переопределения CS;

• путем загрузки селектора дескриптора кодового сегмента в регистр сегментов дан­ных (DS, ES, FS nnnGS).

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

1) когда селектор дескриптора загружается в сегментный регистр; определенные сегмен­тные регистры могут содержать только определенные типы дескрипторов, например: CS- регистр может загружаться только селектором кодового сегмента; селекторы кодовых сег­ментов, для которых не разрешено чтение, не могут быть загружены в регистры сегментов данных; только селекторы сегментов данных с разрешением записи в сегмент могут быть загружены в регистр SS;

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

Уровни привилегий. Концепция привилегий реализуется посредством задания ключа, принимающего значения от 0 до 3, объектам, распознаваемым процессором. Это значение называется уровнем привилегий. Значение «О» представляет самые большие привилегии, а значение «3» - самые малые. К числу объектов с распознаваемым процессором уровнем привилегий относятся:

• дескрипторы - они содержат поле, называемое уровнем привилегий дескриптора (DPL);

• селекторы - они содержат поле, называемое запрашиваемым уровнем привилегий (RPL),

RPL предназначен для задания уровня привилегий процедуры, которая вызывает (заг­ружает) селектор;

• скрытый в процессоре регистр сегмента хранит текущий уровень привилегий (CPL),

обычно CPL равен DPL сегмента, который процессор выполняет в данный момент.

Процессор автоматически реализует право процедуры на доступ к другому сегменту

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

На рис. 3.25 показано, как уровни привилегий могут интерпретироваться кольцами за­щиты. Центральное кольцо содержит сегменты части ПО, наиболее критичной с позиций защиты, обычно ядра операционной системы. Другие кольца используются под сегменты, менее критичные с точки зрения защиты.

Можно и не использовать все четыре уровня привилегий. Существующие системы ПО спро­ектированы как одно- или двухуровневые. Такие системы просто игнорируют другие уровни.

Одноуровневая система должна использовать уровень «О». Двухуровневая система дол­жна использовать уровни «О» и «3».

Ограничение доступа к данным.Прежде чем программа сможет обратиться к операн­дам, она должна загрузить селектор соответствующего сегмента данных в сегментный регистр данных (DS, ES, FS, GS, SS). Процессор автоматически оценивает обращение к сегменту дан­ных путем сравнения уровней привилегий. Эта оценка обращения происходит в момент загруз­ки селектора для дескриптора сегмента назначения в сегментный регистр данных. Как следу­ет из рис. 3.26, в проверке привилегий участвуют три значения уровня привилегий:

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

• RPL (уровень привилегий источника обращений к сегменту) из селектора, используе­мый для спецификации сегмента назначения;

• DPL дескриптора сегмента назначения.

Команды могут загрузить сегментный регистр данных (и затем использовать целевой сегмент), лишь если DPL целевого сегмента численно больше или равен максимальному из значений CPL и RPL селектора. Другими словами, процедура может иметь доступ к данным того же самого или менее привилегированного уровня.

Разрешенная для адресации область задачи изменяется, когда изменяется CPL. Если CPL - нулевое, сегменты данных всех уровней привилегий доступны. Когда CPL = 1, доступ­ны только данные с уровнями привилегий от 1 до 3. Когда CPL равно 3, доступны только сегменты данных с уровнем привилегий 3. Это свойство может быть использовано, напри­мер, чтобы предотвратить возможность чтения или изменения таблиц операционной систе­мы прикладной программой.

Доступность данных в кодовых сегментах. Менее общий характер, чем использова­ние сегментов данных, носит работа с данными, сохраняемыми в кодовых сегментах. Ко­довые сегменты могут на совершенно законном основании содержать константы, нельзя только что-либо писать в кодовый сегмент. Возможны следующие варианты доступа к дан­ным в кодовом сегменте:

• загрузить регистр сегмента данных селектором несогласованного, с разрешением чтения кодового сегмента;

• загрузить регистр сегмента данных селектором кодового сегмента, который являет­ся согласованным и разрешенным для чтения;

• использовать префикс переопределения CS, чтобы прочитать разрешенный для чте­ния кодовый сегмент, селектор которого уже загружен в CS регистр.

В 1-м случае используются те же самые правила доступа, как и для доступа к сегментам данных. Во 2-м случае доступ корректен, так как уровень привилегий согласованных сегментов является, по существу, тем же самым, что и CPL независимо от DPL. В 3-м случае обращение правильное, так как DPL кодового сегмента в CS является при переопределении равным CPL.

Ограничения передач управления. Передачи управления осуществляются МП по командам JMP, CALL, INT и RET, а также при прерываниях и исключениях. В этой главе обсуждаются передачи управления по командам JMP, CALL, и RET.

Так называемые «близкие» передачи управления по командам JMP, CALL, и RET пред­полагают передачи управления в пределах исполняемого (текущего) кодового сегмента, и поэтому проверяются только на границу сегмента. Процессор реализует только те переда­чи управления, которые не превышают границу исполняемого сегмента. Предел сегмента находится в скрытом CS-регистре, а потому проверка защиты для «близких» передач уп­равления не требует дополнительных тактовых циклов.

Операнды так называемых «дальних» передач управления, осуществляемых по коман­дам JMP и CALL, находятся в других сегментах. Возможны два варианта передач управле­ния другому сегменту по командам JMP и CALL:

• операнд команды - это дескриптор другого кодового сегмента;

• операнд команды - это дескриптор вентиля вызова.

Векторизация передач управления через вентили вызова будет рассматриваться позднее.

Рис. 3.27 показывает, что при проверке привилегий для передач управления, которые не используют вентиль вызова, контролируются два различных уровня привилегий:

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

• DPL дескриптора вызываемого сегмента.

Обычно CPL равен DPL сегмента, который в данный момент выполняет процессор, CPL может, однако, быть больше (по величине), чем DPL, если в дескрипторе выполняемо­го сегмента установлен бит согласования (С = 1).

Процессор разрешает обращения непосредственно к другому сегменту, если удовлет­воряется одно из двух правил привилегий:

• DPL целевого сегмента равен CPL;

• разряд согласования дескриптора целевого кодового сегмента установлен (С = 1), a DPL целевого сегмента меньше или равен CPL.

Кодовый сегмент, разряд согласования дескриптора которого установлен, называется согласованным сегментом.

Механизм согласования позволяет обращаться к процедурам из сегментов с разным уровнем привилегий и при этом выполнять их на уровне привилегий вызывающего сегмен­та. Примерами таких процедур являются различные библиотеки процедур и некоторые процедуры обработки исключений. Когда управление передается согласованному сегмен­ту, CPL не изменяется, но это происходит лишь в случае неравенства CPL и DPL текущего кодового сегмента. Большинство кодовых сегментов не согласованы.

Основные правила привилегий, описанные выше, означают, что для несогласованных сегментов управление может быть передано без использования вентиля вызова лишь ко­довым сегментам на том же уровне привилегий. Нужно, однако, передавать управление и сегментам с (численно) меньшим уровнем привилегий, это обеспечивается передачей уп­равления по команде CALL через дескрипторы вентилей вызова. Команды JMP никогда не передают управление несогласованному сегменту, DPL которых не равен CPL.








Дата добавления: 2015-03-07; просмотров: 1085;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.011 сек.