Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Методы [ править ]

Сегментация [ править ]

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

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

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

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

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

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

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

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

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

Ключи защиты [ править ]

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

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

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

Кольца защиты [ править ]

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

Имитация сегментации [ править ]

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

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

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

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

Динамическое заражение [ править ]

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

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

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

Меры [ править ]

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

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

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

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

  • Unix-подобные системы (с конца 1970-х), включая Solaris , Linux , BSD , macOS , iOS и GNU Hurd
  • Plan9 и Inferno , созданные в Bell Labs как преемники Unix (1992, 1995)
  • OS / 2 (1987)
  • RISC OS (1987) (Защита памяти ОС не является исчерпывающей.)
  • Microware OS-9 , как дополнительный модуль (с 1992 г.)
  • Семейство Microsoft Windows из Windows NT 3.1 (1993)
  • Atari MultiTOS (с 1991 г.)
  • Фарос [12] (с 2017 г.)

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

См. Также [ править ]

  • Нарушение памяти , за нарушение защиты памяти
  • Разделение защиты и безопасности
  • Управление памятью (операционные системы)

Ссылки [ править ]

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

Заметки [ править ]

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

Внешние ссылки [ править ]

  • Руководства для разработчиков Intel  - подробная информация о защите памяти для архитектур на базе Intel