Защита памяти

редактировать

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

СОДЕРЖАНИЕ
  • 1 Методы
    • 1.1 Сегментация
    • 1.2 Выгружаемая виртуальная память
    • 1.3 Ключи защиты
    • 1.4 Защитные кольца
    • 1.5 Моделируемая сегментация
    • 1.6 Адресация на основе возможностей
    • 1.7 Динамическое заражение
  • 2 меры
  • 3 Защита памяти в разных операционных системах
  • 4 См. Также
  • 5 ссылки
  • 6 Примечания
  • 7 Внешние ссылки
Методы

Сегментация

Основная статья: сегментация памяти

Под сегментацией понимается разделение памяти компьютера на сегменты. Ссылка на ячейку памяти включает значение, которое идентифицирует сегмент и смещение внутри этого сегмента.

Архитектура x86 имеет несколько функций сегментации, которые полезны при использовании защищенной памяти в этой архитектуре. На архитектуре x86, то Global Descriptor Table и локальные таблицы дескрипторов могут быть использованы для справочных сегментов в памяти компьютера. Указатели на сегменты памяти на процессорах x86 также могут храниться в регистрах сегментов процессора. Первоначально процессоры x86 имели 4 сегментных регистра: CS (сегмент кода), SS (сегмент стека), DS (сегмент данных) и ES (дополнительный сегмент); позже были добавлены еще два сегментных регистра - FS и GS.

Выгружаемая виртуальная память

Основная статья: выгружаемая виртуальная память

При подкачке адресное пространство или сегмент памяти делится на блоки равного размера, называемые страницами. Используя оборудование виртуальной памяти, каждая страница может находиться в любом месте на подходящей границе физической памяти компьютера или быть помечена как защищенная. Виртуальная память позволяет иметь линейное адресное пространство виртуальной памяти и использовать его для доступа к блокам, фрагментированным по адресному пространству физической памяти.

Большинство компьютерных архитектур, поддерживающих разбиение на страницы, также используют страницы в качестве основы для защиты памяти.

Таблицы страниц отображает виртуальную память в физической памяти. В зависимости от архитектуры и ОС может быть одна таблица страниц, таблица страниц для каждого процесса, таблица страниц для каждого сегмента или иерархия таблиц страниц. Таблицы страниц обычно невидимы для процесса. Таблицы страниц упрощают выделение дополнительной памяти, поскольку каждую новую страницу можно выделить из любого места в физической памяти.

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

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

В некоторых системах, механизм страничного сбоя также используется для исполняемой защиты пространства, таких как W ^ X.

Ключи защиты

Механизм ключа защиты памяти (MPK) делит физическую память на блоки определенного размера (например, 4 КиБ), каждый из которых имеет соответствующее числовое значение, называемое ключом защиты. С каждым процессом также связано значение ключа защиты. При доступе к памяти оборудование проверяет, соответствует ли ключ защиты текущего процесса значению, связанному с блоком памяти, к которому осуществляется доступ; в противном случае возникает исключение. Этот механизм был введен в архитектуру System / 360. Он доступен на современных мэйнфреймах System z и активно используется операционными системами System z и их подсистемами.

Описанные выше ключи защиты System / 360 связаны с физическими адресами. Это отличается от механизма ключа защиты, используемого в таких архитектурах, как Hewlett-Packard / Intel IA-64 и Hewlett-Packard PA-RISC, которые связаны с виртуальными адресами и позволяют использовать несколько ключей для каждого процесса.

В архитектурах Itanium и PA-RISC трансляции ( записи TLB ) имеют связанные с ними ключи (Itanium) или идентификаторы доступа (PA-RISC). У запущенного процесса есть несколько регистров ключей защиты (16 для Itanium, 4 для PA-RISC). Трансляция, выбранная виртуальным адресом, имеет свой ключ по сравнению с каждым из регистров ключа защиты. Если какие-либо из них совпадают (плюс другие возможные проверки), доступ разрешен. Если ничего не найдено, генерируется ошибка или исключение. При желании обработчик ошибок программного обеспечения может проверить недостающий ключ по большему списку ключей, поддерживаемых программным обеспечением; таким образом, регистры ключей защиты внутри процессора могут рассматриваться как программно управляемый кэш большего списка ключей, связанных с процессом.

PA-RISC имеет 15–18 битов ключа; Itanium требует не менее 18. Ключи обычно связаны с доменами защиты, такими как библиотеки, модули и т. Д.

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

Защитные кольца

В Multics и производных от него системах каждый сегмент имеет защитное кольцо для чтения, записи и выполнения; попытка процесса с более высоким номером звонка, чем номер звонка для сегмента, вызывает ошибку. Существует механизм безопасного вызова процедур, которые выполняются в нижнем кольце и возвращаются в верхнее кольцо. Существуют механизмы для подпрограммы, работающей с низким номером звонка, для доступа к параметру с большим из собственного звонка и звонка вызывающего абонента.

Имитация сегментации

Моделирование является использование мониторинга программы для интерпретации машинно кода некоторых компьютерных архитектур. Такой имитатор набора команд может обеспечить защиту памяти за счет использования схемы, подобной сегментации, и проверки целевого адреса и длины каждой инструкции в реальном времени перед их фактическим выполнением. Имитатор должен вычислить целевой адрес и длину и сравнить его со списком допустимых диапазонов адресов, которые он содержит в отношении среды потока, например, любые блоки динамической памяти, полученные с момента создания потока, плюс любые допустимые слоты общей статической памяти. Значение слова «действительный» может меняться в течение жизни потока в зависимости от контекста. Иногда может быть разрешено изменить статический блок хранилища, а иногда нет, в зависимости от текущего режима выполнения, который может зависеть или не зависеть от ключа хранилища или состояния супервизора.

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

Адресация на основе возможностей

Основная статья: Адресация на основе возможностей

Адресация на основе возможностей - это метод защиты памяти, который не используется в современных коммерческих компьютерах. В этом методе указатели заменяются защищенными объектами (называемыми возможностями), которые могут быть созданы только с использованием привилегированных инструкций, которые могут выполняться только ядром или каким-либо другим процессом, уполномоченным на это. Это эффективно позволяет ядру контролировать, какие процессы могут обращаться к каким объектам в памяти, без необходимости использовать отдельные адресные пространства или переключатели контекста. Всего лишь несколько коммерческих продуктов, используемых безопасности на основе возможности: Plessey System 250, IBM System / 38, Intel iAPX 432 Архитектура и KeyKOS. Возможности подходов широко используются в исследовательских системах, таких как EROS и браузер Combex DARPA. Они концептуально используются в качестве основы для некоторых виртуальных машин, в первую очередь для Smalltalk и Java. В настоящее время финансируемый DARPA проект CHERI в Кембриджском университете работает над созданием современной машины с функциональными возможностями, которая также поддерживает устаревшее программное обеспечение.

Динамическое окрашивание

Динамическое заражение - это метод защиты программ от несанкционированного доступа к памяти. Когда память выделяется во время выполнения, этот метод заражает как память, так и соответствующий указатель, используя одну и ту же метку заражения. Затем метки заражения надлежащим образом распространяются во время выполнения программы и проверяются каждый раз, когда к адресу памяти m осуществляется доступ через указатель p ; если метки заражения, связанные с m и p, различаются, выполнение останавливается и сообщается о незаконном доступе.

Процессоры SPARC M7 (и выше) реализуют аппаратное динамическое заражение. Oracle продает эту функцию как Silicon Secured Memory (SSM) (ранее называвшуюся Application Data Integrity (ADI)).

Конструкция ЦП lowRISC включает динамическое заражение под названием Tagged Memory.

Меры

Уровень защиты конкретной реализации может быть измерен тем, насколько точно она придерживается принципа минимальных привилегий.

Защита памяти в разных операционных системах

В разных операционных системах используются разные формы защиты или разделения памяти. Хотя защита памяти была обычным явлением для большинства мэйнфреймов и многих миникомпьютерных систем с 1960-х годов, истинное разделение памяти не использовалось в операционных системах домашних компьютеров до тех пор, пока в 1987 году не была выпущена OS / 2 (и в ОС RISC ). В предыдущих системах такое отсутствие защиты даже использовался как форма межпроцессного взаимодействия, отправляя указатель между процессами. Процессы могут получать доступ к системной памяти в операционных системах семейства Windows 9x.

Некоторые операционные системы, которые реализуют защиту памяти, включают:

В Unix-подобных системах mprotect системный вызов используется для управления защитой памяти.

Смотрите также
использованная литература
Примечания
внешние ссылки
Последняя правка сделана 2024-01-02 06:55:52
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте