stringtranslate.com

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

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

Методы

Сегментация

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

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

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

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

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

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

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

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

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

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

Ключи защиты

Механизм ключа защиты памяти (MPK) [3] делит физическую память на блоки определенного размера (например, 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] 4 для PA-RISC [5] ). Трансляция, выбранная виртуальным адресом, имеет свой ключ по сравнению с каждым из регистров ключа защиты. Если какой-либо из них совпадает (плюс другие возможные проверки), доступ разрешен. Если ни один из них не соответствует, генерируется ошибка или исключение. Обработчик ошибок программного обеспечения может, при желании, сравнить отсутствующий ключ с большим списком ключей, поддерживаемым программным обеспечением; таким образом, регистры ключей защиты внутри процессора можно рассматривать как программно-управляемый кэш большего списка ключей, связанных с процессом.

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

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

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

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

Имитированная сегментация

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

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

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

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

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

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

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

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

Меры

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

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

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

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

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

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

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

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

Примечания

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

Внешние ссылки