W ^ X

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

функция безопасности памяти операционной системы

W ^ X («написать xor выполнить», произносится W xor X) - это функция безопасности в операционных системах и виртуальных машинах. Это политика защиты памяти , согласно которой каждая страница в процессе или адресном пространстве ядра может быть либо записываемым, либо исполняемым, но не тем и другим одновременно. Без такой защиты программа может записывать (как данные "W") инструкции ЦП в область памяти, предназначенную для данных, а затем запускать (как исполняемый "X"; или читать-выполнять "RX") эти инструкции. Это может быть опасно, если автор памяти злонамерен. W ^ X - это Unix-подобная терминология для строгого использования общей концепции защиты исполняемого пространства, управляемой с помощью системного вызова mprotect.

W ^ X относительно прост на процессорах, которые поддерживают детализированные разрешения страниц, такие как Sun SPARC и SPARC64, AMD AMD64, Hewlett-Packard PA-RISC, HP (первоначально Digital Equipment Corporation ' s) Alpha и ARM.

W ^ X также были применены к разрешениям на запись / выполнение файловой системы, чтобы уменьшить уязвимости записи файлов (как в памяти) и настойчивость злоумышленника. Установление ограничений на права доступа к файлам также может закрыть пробелы в применении W ^ X, вызванные файлами с отображением памяти. Полное запрещение использования произвольного нативного кода также может уменьшить уязвимости ядра и ЦП, не обнаруженные через существующий код на компьютере.

Содержание
  • 1 Совместимость
  • 2 История
  • 3 См. Также
  • 4 Ссылки
  • 5 Внешние ссылки
Совместимость

В некоторых ранних процессорах Intel 64 отсутствовал бит NX, необходимый для W ^ X, но он появился в более поздних чипах. На более ограниченных процессорах, таких как Intel i386, W ^ X требует использования ограничения сегмента кода CS в виде строки «на песке ", точка в адресном пространстве, выше которой выполнение запрещено и данные расположены, а ниже которой разрешено и размещаются исполняемые страницы. Эта схема использовалась в Exec Shield.

Linker, изменения обычно требуются для отделения данных от кода (например, trampolines, которые необходимы для компоновщика и библиотеки функции среды выполнения ). Переключатель, разрешающий микширование, обычно называется execstackв Unix-подобных системах

W ^ X также может представлять незначительную проблему для своевременной компиляции, которая включает интерпретатор, генерирующий машинный код на лету, а затем запускающий их. Простое решение, используемое большинством, включая Firefox, заключается в том, чтобы просто сделать страницу исполняемой после того, как интерпретатор закончит писать машинный код, используя VirtualProtectв Windows или mprotectв Unix-лайки. Другое решение включает отображение одной и той же области памяти на двух страницах, одна с RW, а другая с RX. Нет простого консенсуса относительно того, какое решение является более безопасным: сторонники последнего подхода считают, что некоторые критики считают, что разрешение на выполнение страницы, которая когда-либо была доступна для записи, лишает смысла W ^ X (существует SELinux политика для управления такими операциями, называемая allow_execmod), и эта рандомизация разметки адресного пространства сделает безопасным размещение обеих страниц в одном процессе. Сторонники первого подхода считают, что второй подход безопасен только тогда, когда две страницы переданы двум отдельным процессам, и межпроцессное взаимодействие будет дороже, чем вызов mprotect.

History

W ^ X впервые был реализован в OpenBSD 3.3, выпущенном в мае 2003 года. В 2004 году Microsoft представила аналогичную функцию под названием DEP (Data Execution Prevention ) в Windows. XP. Подобные функции доступны и для других операционных систем, включая патчи PaX и Exec Shield для Linux, а также реализацию PaX в NetBSD.. В Red Hat Enterprise Linux (и автоматически CentOS ) версии 5 или в ядре Linux 2.6.18-8 SELinux получил allow_execmem, allow_execheapи allow_execmod, которые предоставляют W ^ X при отключении.

Хотя W ^ X (или DEP) на протяжении большей части своего существования защищал только пользовательские программы, в 2012 году Microsoft расширила его до ядра Windows на архитектурах x86 и ARM. В конце 2014 - начале 2015 года W ^ X был добавлен в ядро ​​OpenBSD на архитектуре AMD64. В начале 2016 года W ^ X был полностью реализован в ядре NetBSD AMD64 и частично в ядре i386.

Начиная с Firefox 46 в 2016 году, виртуальная машина Firefox для JavaScript также реализует политику W ^ X.

См. Также
Ссылки
  1. ^«Применять ограничения execve () для API>28».
  2. ^«Новости ядра Зака».
  3. ^«SARA - новый составной LSM».
  4. ^«Усиление защиты ядра Linux (серия 2.0.x)».
  5. ^«i386 W ^ X». 17 апреля 2003 г. Получено 19 июня 2014 г.
  6. ^execstack (8) Linux Системное администрирование Руководство
  7. ^ «W ^ X JIT-код включен в Firefox». Проверено 29 апреля 2016 г.
  8. ^«Улучшения защиты от эксплойтов в Win8».
  9. ^«Защита W ^ X для ядра AMD64».
Внешние ссылки
Последняя правка сделана 2021-06-20 05:57:53
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте