русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Использование шлюзов вызова


Дата добавления: 2014-12-01; просмотров: 1130; Нарушение авторских прав


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

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

Здесь наиболее интересный момент связан с реализацией этого шлюза. ● С одной стороны, пользователю необходимо предоставить возможность выполнить необходимую ему более привилегированную программу. ● Но, с другой стороны, бесконтрольный вызов таких программ, например, запуск драйвера с его середины вследствие ошибок программирования или злого умысла, может привести к непредсказуемым последствиям.

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

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

То есть нельзя перейти в более привилегированный сегмент командой с полной передачей управления: "пришел на уровень с более высокими привилегиями и там остался", а переход возможен только с помощью команд с возвратом. Эти команды должны адресовать шлюз вызова, а не сегмент кода назначения. Шлюз вызова определяет сегмент кода, которому передается управление, и точное смещение в этом сегменте, где начинается выполнение процедуры. Формат шлюза вызова представлен на рис. 3.



Рис. 3. Формат шлюза вызова

►Шлюз вызова содержит селектор того сегмента, куда передается управление, и смещение в этом сегменте. Это, с одной стороны, позволяет найти данную программу, но, с другой стороны, строго определяет точку входа в прог-рамму, чтобы можно было запустить ее только со строго определенного места.

Другими важными параметрами, определяемыми шлюзом вызова, являются:

P- бит присутствия; WC - количество параметров, передаваемых из стека текущей программы в стек вызываемой программы; DPL -уровень привилегий.

При использовании шлюза вызова проводится анализ уровней привилегий:

· значение DPL шлюза вызова должно быть больше или равно значению текущего уровня привилегий CPL и значению RPL селектора, вызывающего шлюз;

  • значение DPL шлюза вызова должно быть больше или равно значению DPL целевого сегмента кода;

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

Рис. 4. Использование шлюза вызова для обращения к программам на более высоком уровне привилегий
Порядок использования шлюза вызова - на рис. 4.

1. Как любая команда межсегментного пере-хода, команда FAR CALL содержит селектор сегмента и смещение в этом сегменте. Смещение, которое указано в команде, МП игнорирует: положение вызываемого кода в более привилегированном сегменте опреде-ляется не им, а шлюзом вызова. По селектору, определенному в команде, идет обращение к таблице дескрипторов. По типу дескриптора определяется, что это системный объект типа "шлюз вызова".

2. Селектор из шлюза вызова заносится в регистр CS микропроцессора, а смещение - в регистр - указателя команд EIP.

3. По полученному селектору обращаемся к дескриптору сегмента более привилегированной программы.

4. Из дескриптора извлекается базовый адрес нового сегмента. Его суммиро-вание со значением смещения из шлюза вызова, занесенного в EIP, определяет физический адрес начала новой программы.

 

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

Предположим теперь, что пользователь хочет воспользоваться некоторыми системными утилитами. Пусть пользовательская программа имеет уровень привилегий 3, ядро ОС - уровень 0, утилиты ОС - уровень 1 (рис. 5).

Рис. 5. Последовательное обращение к более привилегированным программам

В этом случае шлюз утилиты должен иметь DPL = 3. Это позволит пользовательской программе вызвать утилиты ОС, но не ее ядро. При необходимости к ядру ОС могут обратиться утилиты.

Механизм вызова:

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

Таким образом, программа может последовательно обратиться к ряду более привилегированных программ.

Конкретная ОС необязательно должна поддерживать 4 уровня привилегий. ● ОС UNIX работает с двумя кольцами защиты: супервизор (уровень 0) и пользователь (уровни 1, 2, 3).

OS/2 поддерживает 3 уровня: код ОС - в кольце 0, специальные процедуры для обращения к устройствам ввода/вывода - в кольце 1, а прикладные программы выполняются в кольце 3.

● В Windows NT используются два уровня привилегий: нулевое и третье кольцо. В нулевом кольце работает ядро системы и системные драйверы, а в третьем - все запущенные приложения.

►Защита по привилегиямначинает работать уже на этапе загрузки селектора в сегментные регистры.

При загрузке селектора в сегментные регистры данных должно выполняться соотношение: DPL < max(CPL, RPL),

а при загрузке селектора в сегментный регистр стека SS должно быть выполнено соотношение: DPL = CPL.

При страничном преобразовании адреса применяется 2-х уровневый механизм защиты по привилегиям: пользователь (уровень 3 привилегий сегмента) и супервизор (уровни 0, 1, 2), указываемый в бите U/SЭТС.

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

□ сначала реализуется защита сегментов, а

□ затем защита страниц.

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

В такой ситуации элементы каталога таблиц страниц и/или элементы таблиц страниц должны иметь соответствующие значения атрибута R/W.

Краткие итоги.

ü Рассмотрены основные требования, предъявляемые к средствам защиты памяти,

ü механизмы защиты, используемые при управлении памятью и при защите по привилегиям,

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



<== предыдущая лекция | следующая лекция ==>
Аппаратные средства защиты информации в МП | АСИНХРОННЫЕ ТРИГГЕРЫ


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.006 сек.