Защита памяти от несанкционированного доступа в многозадачном режиме
Защита памяти в персональной ЭВМ [ 4 ] делится на защиту при управлении памятью и защиту по привилегиям .
Средства защиты при управлении памятью осуществляют проверку
- превышения эффективным адресом длины сегмента,
- прав доступа к сегменту на запись или только на чтение,
- функционального назначения сегмента.
Первый механизм базируется на методе граничных регистров . При этом начальные адреса того или иного сегмента программы устанавливаются операционной системой. Для каждого сегмента фиксируется его длина . При попытке обращения по относительному адресу, превышающему длину сегмента, вырабатывается сигнал нарушения защиты памяти .
При проверке функционального назначения сегмента определяются операции , которые можно проводить над находящимися в нем данными. Так, сегмент, представляющий собой стек программы, должен допускать обращение как на запись , так и на чтение информации. К сегменту, содержащему программу, можно обращаться только на исполнение . Любое обращение на запись или чтение данных из этого сегмента будет воспринято как ошибочное. Здесь наблюдается некоторый отход от принципов Неймана в построении ЭВМ, в которых утверждается, что любая информация , находящаяся в ЗУ, функционально не разделяется на программу и данные, а ее идентификация проводится лишь на стадии применения данной информации. Очевидно, что такое развитие вызвано во многом появлением мультипрограммирования и необходимостью более внимательного рассмотрения вопросов защиты информации.
Защита по привилегиям фиксирует более тонкие ошибки, связанные, в основном, с разграничением прав доступа к той или иной информации.
В какой-то степени защиту по привилегиям можно сравнить с классическим методом ключей защиты памяти. Различным объектам (программам, сегментам памяти, запросам на обращение к памяти и к внешним устройствам), которые должны быть распознаны процессором, присваивается идентификатор, называемый уровнем привилегий . Процессор постоянно контролирует, имеет ли текущая программа достаточные привилегии, чтобы
- выполнять некоторые команды,
- выполнять команды ввода-вывода на том или ином внешнем устройстве,
- обращаться к данным других программ,
- вызывать другие программы.
На аппаратном уровне в процессоре различаются 4 уровня привилегий . Наиболее привилегированными являются программы на уровне 0.
Число программ, которые могут выполняться на более высоком уровне привилегий , уменьшается от уровня 3 к уровню 0. Программы уровня 0 действуют как ядро операционной системы. Поэтому уровни привилегий обычно изображаются в виде четырех колец защиты (рис. 17.3).
Как правило, распределение программ по кольцам защиты имеет следующий вид:
уровень 0 - ядро ОС, обеспечивающее инициализацию работы, управление доступом к памяти, защиту и ряд других жизненно важных функций, нарушение которых полностью выводит из строя процессор ;
уровень 1 - основная часть программ ОС (утилиты);
уровень 2 - служебные программы ОС (драйверы, СУБД , специализированные подсистемы программирования и др.);
уровень 3 - прикладные программы пользователя.
Конкретная операционная система не обязательно должна поддерживать все четыре уровня привилегий . Так, ОС UNIX работает с двумя кольцами защиты : супервизор ( уровень 0) и пользователь ( уровни 1,2,3). Операционная система OS/2 поддерживает три уровня : код ОС работает в кольце 0, специальные процедуры для обращения к устройствам ввода-вывода действуют в кольце 1, а прикладные программы выполняются в кольце 3.
Простую незащищенную систему можно целиком реализовать в одном кольце 0 (в других кольцах это сделать невозможно, так как некоторые команды доступны только на этом уровне ).
Уровень привилегий сегмента определяется полем DPL уровня привилегий его дескриптора. Уровень привилегий запроса к сегменту определяется уровнем привилегий RPL , закодированном в селекторе. Обращение к сегменту разрешается только тогда, когда уровень привилегий сегмента не выше уровня запроса . Обращение к программам, находящимся на более высоком уровне привилегий (например, к утилитам операционной системы из программ пользователя), возможно с помощью специальных аппаратных механизмов - шлюзов вызова.
При страничном преобразовании адреса применяется простой двухуровневый механизм защиты: пользователь ( уровень 3) / супервизор ( уровни 0,1,2), указываемый в поле U/S соответствующей таблицы страниц .
При сегментно- страничном преобразовании адреса сначала проверяются привилегии при доступе к сегменту, а затем - при доступе к странице. Это дает возможность установить более высокую степень защиты отдельных страниц сегмента.
Организация защиты памяти
Современные вычислительные машины, как правило, работают в многопользовательском и многозадачном режимах, когда в основной памяти одновременно находятся программы, относящиеся как к разным пользователям, так и к различным задачам одного пользователя. Если даже ВМ выполняет только одну программу, в ОП, помимо этой программы и относящихся к ней данных, всегда присутствуют фрагменты операционной системы. Каждой задаче в основной памяти выделяется свое адресное пространство. Такие пространства, если только это специально не предусмотрено, обычно независимы. В то же время в программах могут содержаться ошибки, приводящие к вторжению в адресное пространство других задач. Следствием этих ошибок может стать искажение информации, принадлежащей другим программам. Следовательно, в ВМ обязательно должны быть предусмотрены меры, предотвращающие несанкционированное воздействие программ одного пользователя на работу программ других пользователей и на операционную систему. Особенно опасны последствия таких ошибок при нарушении адресного пространства операционной системы. Чтобы воспрепятствовать разрушению одних программ другими, достаточно защитить область памяти данной программы от попыток записи в него со стороны других программ (защита от записи). В ряде случаев необходимо иметь возможность защиты и от чтения со стороны других программ, например при ограничениях на доступ к системной информации.
Защита от вторжения программ в пространства реализуется различными средствами и способами, но в любом варианте к системе защиты предъявляются два требования: ее реализация не должна заметно снижать производительность ВМ и требовать слишком больших аппаратных затрат. Задача обычно решается за счет сочетания программных и хотя ответственность за охрану адресных пространств от несанкционированного доступа обычно возлагается на операционную систему.
Защита памяти в процессоре Intel 80386
Обеспечивается только при CR0.PE =1(защищенный режим). Защита может осуществляться на уровне страниц и на уровне сегментов.
Защита на уровне сегментов и на уровне страниц обеспечивается либо по атрибутам дескриптора сегмента, либо по атрибутам строки таблицы страниц. При защите на уровне сегментов влияет соотношение уровней привилегий:
RPL – запрашиваемый уровень (при помещении селектора в сегментный регистр);
DPL – уровень привилегий дескриптора, фиксируется при первом обращении к данным дескриптора и является минимальным уровнем, при котором данный сегмент доступен.
CPL – текущий уровень привилегий, который соответствует уровню кодового сегмента текущей программы.
Виды защиты на уровне сегментов:
1. Контроль типа не зависит от уровня привилегий, определяется дескриптором
2. Контроль границ
3. Ограничение адресной области памяти
4. Ограничение точек входа в процедуру зависит от RPL, DPL, CPL
5. Ограничение набора команд
Контроль типа выполняется:
1.На этапе загрузки селектора в регистр сегмента (проверка типа сегмента, для которого осуществляется загрузка селектора)
2.На этапе обращения к сегменту.
Примеры: В CS может быть загружен только программный дескриптор; в DS не может быть загружен селектор дескриптора, который не доступен для чтения.
1. Нельзя записать в кодовый сегмент.
2. Нельзя записать в сегмент данных, если бит записи равен нулю.
3. Нельзя читать кодовый сегмент, если бит чтения равен нулю.
Контроль границ. Предотвращает выход за пределы сегмента.
Ограничение адресуемой области памяти. Доступ к памяти возможен при условии
Ограничение точек входа в процедуру.
Если CPL = DPL, то возможен вход в процедуру по Call, Jump.
Если CPL ≥ DPL (численно), то возможен только доступ по Call через специальный дескриптор, называемый «вентиль вызова».
Ограничение набора команд. Все команды по уровню доступа на выполнение делятся на 3 группы:
1. Свободные команды (непривилегированные) – выполняются в любом режиме.
2. Привилегированные команды – выполняются на уровне ядра.
3. Чувствительные команды, зависят от уровня привилегий, но могут выполняться в любом режиме супервизора (от 0 до 2). В основном это команды ввода-вывода.
Виды защиты на уровне страниц:
1. Контроль типа.
2. Ограничение адресной области памяти.
На уровне страниц защита зависит только от битов режима U/S и доступа R/
Кольца защиты
Кольца привилегий архитектуры x86 в защищённом режиме
Кольца защиты — архитектура информационной безопасности и функциональной отказоустойчивости, реализующая аппаратное разделение системного и пользовательского уровней привилегий. Структуру привилегий можно изобразить в виде нескольких концентрических кругов. В этом случае системный режим (режим супервизора или нулевое кольцо, т.н. "кольцо 0"), обеспечивающий максимальный доступ к ресурсам, является внутренним кругом, тогда как режим пользователя с ограниченным доступом — внешним. Традиционно семейство микропроцессоров x86 обеспечивает четыре кольца защиты.
Архитектуре колец защиты обычно противопоставляют системы, основанные на мандатной адресации, обеспечивающей доступ к объекту по его описанию ( англ . Capability-based security ).
Аннотация: Рассматриваются требования к системе защиты информации, общие подходы к организации защиты памяти мультипрограммных ЭВМ, а также организация защиты памяти в персональной ЭВМ.
Средства защиты памяти
Windows предоставляет средства защиты памяти, чтобы пользовательские процессы не могли повредить адресное пространство другого процесса или операционной системы. В системе существует несколько основных механизма защиты. Ниже разберём их все.
Аппаратная защита
Современные процессоры, поддерживаемые Windows, предоставляют некоторую разновидность аппаратной защиты памяти. При этом одна часть памяти доступна на чтение и запись, а другая часть только на чтение. Например, страницы памяти, где располагается исполняемый код, помечаются как доступные только для чтения. Такая защита усложняет жизнь вирусам, которые пытаются изменить код обычных процессов и заставить их делать что-то еще.
Разделение на пользовательский режим работы и режим ядра
Как вы уже знаете, работа системы Windows разделена на два режима. Во-первых это пользовательский режим, в котором работают пользовательские процессы. Во-вторых это режим ядра, в котором работает ядро системы и драйвера устройств. Память выделенная для режима ядра используется только из режима ядра. То есть эта память доступна только для компонентов ядра и для драйверов. Потоки пользовательского режима не могут обращаться к этой памяти.
Предотвращение выполнения данных DEP
Посмотреть какие процессы поддерживают DEP можно в Process Explorer, добавив соответствующую колонку:
Дополнительно про защиту памяти в операционной системе Windows можете почитать тут.
Организация защиты памяти в ЭВМ
При мультипрограммном режиме работы ЭВМ в ее памяти одновременно могут находиться несколько независимых программ. Поэтому необходимы специальные меры по предотвращению или ограничению обращений одной программы к областям памяти, используемым другими программами. Программы могут также содержать ошибки, которые, если этому не воспрепятствовать, приводят к искажению информации, принадлежащей другим программам. Последствия таких ошибок особенно опасны, если разрушению подвергнутся программы операционной системы. Другими словами, надо исключить воздействие программы пользователя на работу программ других пользователей и программ операционной системы. Следует защищать и сами программы от находящихся в них возможных ошибок.
Таким образом, средства защиты памяти должны предотвращать 2
- неразрешенное взаимодействие пользователей друг с другом,
- несанкционированный доступ пользователей к данным,
- повреждение программ и данных из-за ошибок в программах,
- намеренные попытки разрушить целостность системы ,
- использование информации в памяти не в соответствии с ее функциональным назначением.
Чтобы воспрепятствовать разрушению одних программ другими, достаточно защитить область памяти данной программы от попыток записи в нее со стороны других программ, а в некоторых случаях и своей программы ( защита от записи ), при этом допускается обращение других программ к этой области памяти для считывания данных.
В других случаях, например при ограничениях на доступ к информации, хранящейся в системе, необходимо запрещать другим программам любое обращение к некоторой области памяти как на запись , так и на считывание. Такая защита от записи и считывания помогает в отладке программы, при этом осуществляется контроль каждого случая обращения за область памяти своей программы.
Для облегчения отладки программ желательно выявлять и такие характерные ошибки в программах, как попытки использования данных вместо команд или команд вместо данных в собственной программе, хотя эти ошибки могут и не разрушать информацию (несоответствие функционального использования информации).
Если нарушается защита памяти , исполнение программы приостанавливается и вырабатывается запрос прерывания по нарушению защиты памяти .
Защита от вторжения программ в чужие области памяти может быть организована различными методами. Но при любом подходе реализация защиты не должна заметно снижать производительность компьютера и требовать слишком больших аппаратурных затрат.
Методы защиты базируются на некоторых классических подходах, которые получили свое развитие в архитектуре современных ЭВМ. К таким методам можно отнести защиту отдельных ячеек, метод граничных регистров , метод ключей защиты [ 7 ] .
Защита отдельных ячеек памяти организуется в ЭВМ, предназначенных для работы в системах управления, где необходимо обеспечить возможность отладки новых программ без нарушения функционирования находящихся в памяти рабочих программ, управляющих технологическим процессом. Это может быть достигнуто выделением в каждой ячейке памяти специального "разряда защиты". Установка этого разряда в "1" запрещает производить запись в данную ячейку, что обеспечивает сохранение рабочих программ. Недостаток такого подхода - большая избыточность в кодировании информации из-за излишне мелкого уровня защищаемого объекта ( ячейка ).
В системах с мультипрограммной обработкой целесообразно организовывать защиту на уровне блоков памяти, выделяемых программам, а не отдельных ячеек.
Метод граничных регистров (рис. 17.1) заключается во введении двух граничных регистров, указывающих верхнюю и нижнюю границы области памяти, куда программа имеет право доступа .
При каждом обращении к памяти проверяется, находится ли используемый адрес в установленных границах. При выходе за границы обращение к памяти не производится, а формируется запрос прерывания , передающий управление операционной системе. Содержание граничных регистров устанавливается операционной системой при загрузке программы в память .
Модификация этого метода заключается в том, что один регистр используется для указания адреса начала защищаемой области, а другой содержит длину этой области.
Метод граничных регистров , обладая несомненной простотой реализации, имеет и определенные недостатки. Основным из них является то, что этот метод поддерживает работу лишь с непрерывными областями памяти.
Метод ключей защиты, в отличие от предыдущего, позволяет реализовать доступ программы к областям памяти, организованным в виде отдельных модулей, не представляющих собой единый массив .
Память в логическом отношении делится на одинаковые блоки, например, страницы. Каждому блоку памяти ставится в соответствие код, называемый ключом защиты памяти, а каждой программе, принимающей участие в мультипрограммной обработке, присваивается код ключа программы. Доступ программы к данному блоку памяти для чтения и записи разрешен, если ключи совпадают (то есть данный блок памяти относится к данной программе) или один из них имеет код 0 (код 0 присваивается программам операционной системы и блокам памяти, к которым имеют доступ все программы: общие данные, совместно используемые подпрограммы и т. п.). Коды ключей защиты блоков памяти и ключей программ устанавливаются операционной системой.
В ключе защиты памяти предусматривается дополнительный разряд режима защиты. Защита действует только при попытке записи в блок, если в этом разряде стоит 0, и при любом обращении к блоку, если стоит 1. Коды ключей защиты памяти хранятся в специальной памяти ключей защиты, более быстродействующей, чем оперативная память .
Функционирование этого механизма защиты памяти поясняется схемой на рис. 17.2.
При обращении к памяти группа старших разрядов адреса ОЗУ , соответствующая номеру блока, к которому производится обращение, используется как адрес для выборки из памяти ключей защиты кода ключа защиты, присвоенного операционной системой данному блоку. Схема анализа сравнивает ключ защиты блока памяти и ключ программы, находящийся в регистре слова состояния программы ( ССП ), и вырабатывает сигнал "Обращение разрешено" или сигнал " Прерывание по защите памяти". При этом учитываются значения режима обращения к ОЗУ ( запись или считывание), указываемого триггером режима обращения ТгРО, и режима защиты, установленного в разряде режима обращения (РРО) ключа защиты памяти .
Аннотация: Цель лекции: рассмотреть основные механизмы защиты памяти, поддерживаемые аппаратурой микропроцессора.
Права доступа ACL
Закрытое адресное пространство
У каждого процесса имеется отдельное закрытое адресное пространство. Оно защищено от обращений к ней другими процессами. Даже общая память (shared memory) на самом деле для каждого процесса выглядит как его собственная память. Просто виртуальные страницы памяти одного процесса и виртуальные страницы памяти другого процесса ссылаются на одни и те же физические страницы, где фактически находится общая библиотека. Диспетчер памяти следит чтобы процессы не вмешивались в закрытую память других процессов.
Организация защиты памяти в ЭВМ
При мультипрограммном режиме работы ЭВМ в ее памяти одновременно могут находиться несколько независимых программ. Поэтому необходимы специальные меры по предотвращению или ограничению обращений одной программы к областям памяти, используемым другими программами. Программы могут также содержать ошибки, которые, если этому не воспрепятствовать, приводят к искажению информации, принадлежащей другим программам. Последствия таких ошибок особенно опасны, если разрушению подвергнутся программы операционной системы. Другими словами, надо исключить воздействие программы пользователя на работу программ других пользователей и программ операционной системы. Следует защищать и сами программы от находящихся в них возможных ошибок.
Таким образом, средства защиты памяти должны предотвращать 2
- неразрешенное взаимодействие пользователей друг с другом,
- несанкционированный доступ пользователей к данным,
- повреждение программ и данных из-за ошибок в программах,
- намеренные попытки разрушить целостность системы ,
- использование информации в памяти не в соответствии с ее функциональным назначением.
Чтобы воспрепятствовать разрушению одних программ другими, достаточно защитить область памяти данной программы от попыток записи в нее со стороны других программ, а в некоторых случаях и своей программы ( защита от записи ), при этом допускается обращение других программ к этой области памяти для считывания данных.
В других случаях, например при ограничениях на доступ к информации, хранящейся в системе, необходимо запрещать другим программам любое обращение к некоторой области памяти как на запись , так и на считывание. Такая защита от записи и считывания помогает в отладке программы, при этом осуществляется контроль каждого случая обращения за область памяти своей программы.
Для облегчения отладки программ желательно выявлять и такие характерные ошибки в программах, как попытки использования данных вместо команд или команд вместо данных в собственной программе, хотя эти ошибки могут и не разрушать информацию (несоответствие функционального использования информации).
Если нарушается защита памяти , исполнение программы приостанавливается и вырабатывается запрос прерывания по нарушению защиты памяти .
Защита от вторжения программ в чужие области памяти может быть организована различными методами. Но при любом подходе реализация защиты не должна заметно снижать производительность компьютера и требовать слишком больших аппаратурных затрат.
Методы защиты базируются на некоторых классических подходах, которые получили свое развитие в архитектуре современных ЭВМ. К таким методам можно отнести защиту отдельных ячеек, метод граничных регистров , метод ключей защиты [ 7 ] .
Защита отдельных ячеек памяти организуется в ЭВМ, предназначенных для работы в системах управления, где необходимо обеспечить возможность отладки новых программ без нарушения функционирования находящихся в памяти рабочих программ, управляющих технологическим процессом. Это может быть достигнуто выделением в каждой ячейке памяти специального "разряда защиты". Установка этого разряда в "1" запрещает производить запись в данную ячейку, что обеспечивает сохранение рабочих программ. Недостаток такого подхода - большая избыточность в кодировании информации из-за излишне мелкого уровня защищаемого объекта ( ячейка ).
В системах с мультипрограммной обработкой целесообразно организовывать защиту на уровне блоков памяти, выделяемых программам, а не отдельных ячеек.
Метод граничных регистров (рис. 17.1) заключается во введении двух граничных регистров, указывающих верхнюю и нижнюю границы области памяти, куда программа имеет право доступа .
При каждом обращении к памяти проверяется, находится ли используемый адрес в установленных границах. При выходе за границы обращение к памяти не производится, а формируется запрос прерывания , передающий управление операционной системе. Содержание граничных регистров устанавливается операционной системой при загрузке программы в память .
Модификация этого метода заключается в том, что один регистр используется для указания адреса начала защищаемой области, а другой содержит длину этой области.
Метод граничных регистров , обладая несомненной простотой реализации, имеет и определенные недостатки. Основным из них является то, что этот метод поддерживает работу лишь с непрерывными областями памяти.
Метод ключей защиты, в отличие от предыдущего, позволяет реализовать доступ программы к областям памяти, организованным в виде отдельных модулей, не представляющих собой единый массив .
Память в логическом отношении делится на одинаковые блоки, например, страницы. Каждому блоку памяти ставится в соответствие код, называемый ключом защиты памяти, а каждой программе, принимающей участие в мультипрограммной обработке, присваивается код ключа программы. Доступ программы к данному блоку памяти для чтения и записи разрешен, если ключи совпадают (то есть данный блок памяти относится к данной программе) или один из них имеет код 0 (код 0 присваивается программам операционной системы и блокам памяти, к которым имеют доступ все программы: общие данные, совместно используемые подпрограммы и т. п.). Коды ключей защиты блоков памяти и ключей программ устанавливаются операционной системой.
В ключе защиты памяти предусматривается дополнительный разряд режима защиты. Защита действует только при попытке записи в блок, если в этом разряде стоит 0, и при любом обращении к блоку, если стоит 1. Коды ключей защиты памяти хранятся в специальной памяти ключей защиты, более быстродействующей, чем оперативная память .
Функционирование этого механизма защиты памяти поясняется схемой на рис. 17.2.
При обращении к памяти группа старших разрядов адреса ОЗУ , соответствующая номеру блока, к которому производится обращение, используется как адрес для выборки из памяти ключей защиты кода ключа защиты, присвоенного операционной системой данному блоку. Схема анализа сравнивает ключ защиты блока памяти и ключ программы, находящийся в регистре слова состояния программы ( ССП ), и вырабатывает сигнал "Обращение разрешено" или сигнал " Прерывание по защите памяти". При этом учитываются значения режима обращения к ОЗУ ( запись или считывание), указываемого триггером режима обращения ТгРО, и режима защиты, установленного в разряде режима обращения (РРО) ключа защиты памяти .
Аннотация: Цель лекции: рассмотреть основные механизмы защиты памяти, поддерживаемые аппаратурой микропроцессора.
Аппаратные средства защиты информации в микропроцессоре
Если в памяти одновременно могут находиться несколько независимых программ, необходимы специальные меры по предотвращению или ограничению обращений одной программы к областям памяти, используемым другими программами. Программы могут содержать такие ошибки, которые, если этому не воспрепятствовать, приводят к искажению информации, принадлежащей другим программам. Последствия таких ошибок особенно опасны, если разрушению подвергнутся программы операционной системы. Другими словами, надо исключить несанкционированное воздействие программы пользователя на работу программ других пользователей и программ операционной системы.
Чтобы воспрепятствовать разрушению одних программ другими, достаточно защитить область памяти данной программы от попыток записи в нее со стороны других программ, а в некоторых случаях и своей программы ( защита от записи ), при этом допускается обращение других программ к этой области памяти для считывания данных.
В других случаях, например, при ограничениях на доступ к информации, хранящейся в системе, необходимо иметь возможность запрещать другим программам производить как запись , так и считывание в данной области памяти. Такая защита от записи и считывания помогает отладке программы, при этом осуществляется контроль каждого случая выхода за область памяти своей программы.
Для облегчения отладки программ желательно выявлять и такие характерные ошибки в программах, как попытки использования данных вместо команд или команд вместо данных в собственной программе, хотя эти ошибки могут и не разрушать информацию.
Средства защиты памяти должны предотвращать:
- неразрешенное взаимодействие пользователей друг с другом;
- несанкционированный доступ пользователей к данным;
- повреждение программ и данных из-за ошибок в программах;
- намеренные попытки разрушить целостность системы ;
- случайные искажения данных.
Средства защиты микропроцессора делятся на 2 группы:
- защиту при управлении памятью и
- защиту по привилегиям.
Средства управления памятью обнаруживают большинство программных ошибок.
До загрузки селектора в сегментный регистр и кэширования дескриптора осуществляется несколько контро-льных проверок: процессор проверяет, что поле Index селектора находится в пределах таблицы, определяемой его битом TI ;
- при загрузке селектора в сегментный регистр данных ( DS , ES , FS , GS ) тип дескриптора должен разрешать считывание из сегмента.
Только выполняемые сегменты для этих регистров не допускаются, но сегменты с разрешенными операциями выполнения/считывания допустимы;
Если хотя бы одна проверка дала отрицательный результат, то формируется особый случай и загрузка селектора не производится.
После загрузки селектора при фактическом обращении к памяти процессор контролирует, чтобы запрашиваемая операция (чтение/ запись )для этого сегмента была разрешена. На этом этапе обнаруживаются и отвергаются попытки записи в сегмент кода или в только считываемые сегменты данных, а также считывание из сегмента кода, для которого разрешено только выполнение. Здесь же проводится проверка превышения сформированного смещения в сегменте длины сегмента, указанной в поле предела дескриптора. Такие ситуации невозможно выявить при загрузке селектора.
Защита по привилегиям фиксирует более тонкие ошибки и намеренные попытки нарушить целостность системы .
Под привилегиями понимается свойство, определяющее, какие операции и обращения к памяти разрешается производить процессору при выполнении текущей задачи.
На аппаратном уровне в процессоре поддерживаются 4 уровня привилегий. Распознаваемым процессором объектам назначается значение от 0 до 3, причем 0 соответствует высшему, а 3 - низшему уровню привилегий. С помощью указания уровня привилегий и правил защиты обеспечивается управляемый доступ к процедурам и данным операционной системы и других задач.
Привилегии устанавливаются значениями соответствующих полей в следующих основных системных объектах микропроцессора:
- DPL - уровень привилегий сегмента (находится в байте доступа дескриптора сегмента);
- RPL - биты селектора, хранящегося в сегментном регистре ;
текущий уровень привилегий программы CPL задается полем RPL селектора, хранящегося в сегментном регистре CS ;
Так как число программ, которые могут выполняться на более высоком уровне привилегий, уменьшается к уровню 0 и так как программы уровня 0 действуют как ядро системы, уровни привилегий обычно изображаются в виде четырех колец защиты ( Protection Rings ) (рис. 5.1).
Типовое распределение программ по кольцам защиты выглядит следующим образом:
- уровень 0: ядро ОС, обеспечивающее инициализацию работы, управление доступом к памяти, защиту и ряд других жизненно важных функций, нарушение которых полностью выводит из строя процессор;
- уровень 1: основная часть программ ОС (утилиты);
- уровень 2: служебные программы ОС (драйверы, СУБД, специализированные подсистемы программирования и т. д.);
- уровень 3: прикладные программы пользователя.
Аппаратные средства процессора, работающего в защищенном режиме, постоянно контролируют, что текущая программа достаточно привилегированна для того, чтобы:
- выполнять некоторые команды, называемые привилегированными;
- выполнять операции ввода/вывода на том или ином внешнем устройстве;
- обращаться к данным других программ;
- передавать управление внешнему (по отношению к самой программе) коду командами межсегментной передачи управления.
Привилегированные команды - это те команды, которые влияют на механизмы управления памятью, защиты и некоторые другие жизненно важные функции. Это, например, команды загрузки таблиц дескрипторов GDT , IDT , LDT , команды обмена с регистрами управления CRi. Они могут выполняться только программами, имеющими наивысший (нулевой)
уровень привилегий. Это приводит к тому, что простую незащищенную систему можно целиком реализовать только в кольце 0, так как в других кольцах защиты не будут доступны все команды.
Операции ввода/вывода разрешено выполнять программам, уровень привилегий которых не ниже значения, установленного в поле IOPL регистра флагов. То есть должно выполняться соотношение: CPL IOPL .
Обращение к данным других программ разрешается только на своем и менее привилегированном уровнях защиты (рис. 5.2).
Передачи управления между программами ограничиваются только текущим кольцом защиты. В то же время в процессе выполнения любой программы необходимо обращаться к программам, находящимся на более высоком уровне привилегий, например, к драйверам или СУБД . Для этих целей используются специально установленные точки входа в эти программы (шлюзы). Передача управления на более низкий уровень привилегий осуществляется с помощью механизма подчиненных сегментов.
При передаче управления подчиненному сегменту действует правило: DPL >=max ( CPL , RPL ) . Однако при этом подчиненный код будет выполняться на том же уровне привилегий, что и вызвавший его код ( CPL не изменится). Ограничивая передачу управления в пределах одного кольца защиты, процессор предотвращает произвольное изменение уровней привилегий. Ели бы значение CPL можно было легко изменить, все остальные средства защиты по привилегиям потеряли бы смысл.
Защита памяти. Разберёмся с основными средствам защиты памяти в Windows. Ведь одни процессы не должны получить доступ к памяти других процессов.
Читайте также: