Защита памяти - Memory protection

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

Методы

Сегментация

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

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

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

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

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

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

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

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

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

Ключи защиты

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

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

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

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

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

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

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

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

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

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

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

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

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

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

SPARC M7 процессоры (и выше) реализуют динамическое заражение оборудования. Oracle продает эту функцию как Защищенная кремнием память (SSM) (ранее назывался Application Data Integrity (ADI)).[8]

В lowRISC Дизайн процессора включает динамическое заражение под названием Tagged Memory.[9]

Меры

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

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

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

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

На Unix-подобный системы, mprotect системный вызов используется для управления защитой памяти.[13]

Смотрите также

Рекомендации

  1. ^ а б Intel (июль 2008 г.). Руководства разработчика программного обеспечения для архитектур Intel 64 и IA-32: Том 3A: Руководство по системному программированию, часть 1 (PDF). Intel. Получено 2008-08-21.
  2. ^ Ключи защиты памяти, Джонатан Корбет, 13 мая 2015 г., LWN.net
  3. ^ «Ключи в Itanium» (PDF). Архивировано из оригинал (PDF) на 2007-11-28.
  4. ^ «Защита памяти в HP PA-RISC» (PDF). Февраль 1994. Архивировано с оригинал (PDF) на 2015-09-05. Получено 2018-10-29.
  5. ^ «Руководство разработчика программного обеспечения Intel» (PDF). Март 2012. Архивировано с оригинал (PDF) на 2012-06-01. Получено 2018-10-29.
  6. ^ Clause, Джеймс; Доудалис, Иоаннис; Орсо, Алессандро; Првулович, Милош (2007). Эффективная защита памяти с помощью динамического заражения (PDF). Труды двадцать второй Международной конференции IEEE / ACM по автоматизированной разработке программного обеспечения. п. 284. Дои:10.1145/1321631.1321673. ISBN  9781595938824. S2CID  6334541.
  7. ^ Доудалис, Иоаннис; Clause, Джеймс; Венкатарамани, Гуру; Првулович, Милош; Орсо, Алессандро (2012). «Эффективная и действенная защита памяти с помощью динамического заражения» (PDF). Транзакции IEEE на компьютерах. 61 (1): 87–100. Дои:10.1109 / TC.2010.215. ISSN  0018-9340. S2CID  15913190.
  8. ^ Дженкинс, Мишель. «Oracle объявляет о революционном проектировании процессоров и систем с помощью SPARC M7». www.oracle.com. Получено 2016-11-18.
  9. ^ "Поддержка памяти с тегами". www.lowrisc.org. Получено 2018-05-24.
  10. ^ Кук, Д.Дж. Измерение защиты памяти, принята на 3-ю Международную конференцию по разработке программного обеспечения, Атланта, Джорджия, май 1978 г.
  11. ^ «Windows 9x не имеет настоящей защиты памяти». Все 2. 2000-06-24. Получено 2009-04-29.
  12. ^ https://sourceforge.net/projects/rtospharos/
  13. ^ "mprotect". Базовые спецификации Open Group, выпуск 6. Открытая группа.

Примечания

  1. ^ В зависимости от архитектуры, это может включать, например, нераспределенные страницы и сегменты, страницы в другом домене защиты, страницы, требующие более высокого уровня привилегий.
  2. ^ Некоторые системы, например, z / OS, поддерживают более одного размера страницы.
  3. ^ В некоторых системах есть привилегированные инструкции для доступа к хранилищу по реальному адресу.

внешняя ссылка