Рандомизация разметки адресного пространства - Address space layout randomization

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

История

Проект Linux PaX впервые ввел термин «ASLR» и опубликовал первый проект и реализацию ASLR в июле 2001 года в качестве патча для ядра Linux . Он рассматривается как законченная реализация, предоставляющая также исправление для рандомизации стека ядра с октября 2002 года.

Первой основной операционной системой, поддерживающей ASLR по умолчанию, была OpenBSD версии 3.4 в 2003 году, за которой последовала Linux в 2005 году.

Преимущества

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

Эффективность

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

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

Могут быть объявлены следующие переменные:

  • (биты энтропии вершины стека)
  • (энтропийные биты mmap()базы)
  • (биты энтропии основной исполняемой базы)
  • (биты энтропии базы кучи)
  • (атакованных бит на попытку энтропии стека)
  • (атакованных бит на попытку mmap()базовой энтропии)
  • (атакованных битов на попытку основной исполняемой энтропии)
  • (атакованных битов за попытку энтропии базы кучи)
  • (сделано попытки)
  • (общая сумма энтропии: )

Чтобы рассчитать вероятность успеха злоумышленника, мы должны предположить, что количество попыток α выполнено без прерывания системой IPS на основе сигнатур, правоохранительными органами или другим фактором; в случае грубой форсировки демон не может быть перезапущен. Мы также должны выяснить, сколько битов является релевантным и сколько битов подвергается атаке при каждой попытке, оставляя столько битов, которые злоумышленник должен победить.

Следующие формулы представляют вероятность успеха для данного набора α попыток на N битах энтропии.

  • (изолированное предположение; адресное пространство повторно рандомизируется после каждой попытки)
  • (систематический брутфорс на копиях программы с одинаковым адресным пространством)

Во многих системах может быть в тысячах или миллионах; В современных 64-битных системах эти цифры обычно достигают по крайней мере миллионов, Гектор Марко-Гисберт и Исмаэль Риполл показали в 2014 году, как обойти ASLR в 64-битных системах менее чем за одну секунду при определенных обстоятельствах. Для 32-битных систем на скоростях компьютеров 2004 года, которые имеют 16 бит для рандомизации адресов, Шахам и его коллеги заявляют, что «... 16 бит рандомизации адресов могут быть уничтожены перебором в течение нескольких минут». Заявление авторов зависит от способности атаковать одно и то же приложение несколько раз без задержки. Правильные реализации ASLR, такие как включенный в grsecurity, предоставляют несколько методов, чтобы сделать такие атаки грубой силы невозможными. Один из методов заключается в предотвращении выполнения исполняемого файла в течение настраиваемого количества времени, если он аварийно завершился определенное количество раз.

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

  • l (количество загруженных библиотек)
  • β (количество библиотек, используемых злоумышленником)

Эти значения имеют тенденцию быть низкими даже для больших значений l , что наиболее важно, поскольку злоумышленники обычно могут использовать только стандартную библиотеку C, и поэтому часто можно предполагать это . Однако даже для небольшого количества библиотек здесь достигается несколько бит энтропии; Таким образом, потенциально интересно объединить рандомизацию порядка загрузки библиотеки с рандомизацией адресов VMA, чтобы получить несколько дополнительных бит энтропии. Обратите внимание, что эти дополнительные биты энтропии не будут применяться к другим сегментам mmap (), только к библиотекам.

Снижение энтропии

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

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

Также можно уменьшить энтропию в стеке или куче. Стек обычно должен быть выровнен по 16 байтам, так что это минимально возможный интервал рандомизации; в то время как куча должна быть выровнена по страницам, обычно 4096 байт. При попытке атаки можно согласовать повторяющиеся атаки с этими интервалами; NOP слайды могут быть использованы с инъекцией шеллкода , и строка « /bin/sh» может быть заменены « ////////bin/sh» для произвольного числа косых черт при попытке вернуться к системе . Число битов , удаленных в точности для п интервалов атакованы.

Такое уменьшение ограничено объемом данных в стеке или куче. Стек, например, обычно ограниченМБ и становится намного меньше; это позволяет не более19 бит , хотя по более консервативной оценке было бы около 8–10 бит, соответствующие 4–16  Кбайт набивки стека. С другой стороны, куча ограничена поведением распределителя памяти; в случае glibc выделения размером более 128 КБ создаются с помощью mmap , ограничивая злоумышленников 5 битами сокращения. Это также ограничивающий фактор при брутфорсе; хотя количество выполняемых атак может быть уменьшено, размер атак увеличивается настолько, что в некоторых обстоятельствах поведение может стать очевидным для систем обнаружения вторжений .

Ограничения

Адреса, защищенные ASLR, могут просочиться по различным побочным каналам, что исключает утилиту смягчения последствий. В недавних атаках использовалась информация, просочившаяся из буфера предиктора целевого перехода ЦП (BTB) или таблиц проходящих страниц блока управления памятью (MMU). Неясно, можно ли смягчить этот класс атаки ASLR. Если они не могут, преимущество ASLR уменьшается или отменяется.

Реализации

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

Android

Android 4.0 Ice Cream Sandwich обеспечивает рандомизацию разметки адресного пространства (ASLR), чтобы помочь защитить системные и сторонние приложения от эксплойтов из-за проблем с управлением памятью. Поддержка исполняемых файлов, не зависящих от позиции, была добавлена ​​в Android 4.1. Android 5.0 отказался от поддержки без PIE и требует, чтобы все динамически связанные двоичные файлы были независимыми от позиции. Рандомизация порядка загрузки библиотек была принята в проект с открытым исходным кодом Android 26 октября 2015 года и включена в выпуск Android 7.0.

DragonFly BSD

DragonFly BSD имеет реализацию ASLR, основанную на модели OpenBSD, добавленной в 2010 году. По умолчанию она отключена, и ее можно включить, установив для sysctl vm.randomize_mmap значение 1.

FreeBSD

Поддержка ASLR появилась во FreeBSD 13.0. По умолчанию он отключен.

iOS (iPhone, iPod touch, iPad)

Apple представила ASLR в iOS 4.3 (выпущена в марте 2011 г.).

KASLR был представлен в iOS 6. Рандомизированная база ядра - 0x01000000 + ((1 + 0xRR) * 0x00200000), где 0xRR - это случайный байт из SHA1 (случайные данные), сгенерированный iBoot (загрузчик iOS 2-го уровня).

Linux

Linux ядро позволило слабую форму ASLR по умолчанию , так как ядро версии 2.6.12, выпущенный в июне 2005 года Pax и Exec Shield поставку пакетов обновлений к Linux Kernel обеспечить более полную реализацию. Патч Exec Shield для Linux предоставляет 19 бит энтропии стека на периоде 16 байт и 8 битов рандомизации базы mmap на периоде 1 страницы размером 4096 байт. При этом основание стека размещается в области шириной 8 МБ, содержащей 524 288 возможных позиций, а база mmap - в области шириной 1 МБ, содержащей 256 возможных позиций.

Позиционно-независимый исполняемый файл (PIE) реализует случайный базовый адрес для основного исполняемого двоичного файла и используется с 2003 года. Он обеспечивает такую ​​же случайность адреса для основного исполняемого файла, что и для разделяемых библиотек. Функция PIE используется только для сетевых демонов - функция PIE не может использоваться вместе с функцией предварительной ссылки для одного и того же исполняемого файла. Инструмент предварительной ссылки реализует рандомизацию во время предварительной ссылки, а не во время выполнения, потому что по замыслу предварительная ссылка нацелена на обработку перемещения библиотек до того, как это потребуется динамическому компоновщику, что позволяет перемещению происходить один раз для многих запусков программы. В результате, рандомизация реального адресного пространства лишит возможности предварительного связывания.

Рандомизацию можно отключить для определенного процесса, изменив его домен выполнения, используя personality(2).

Рандомизация компоновки адресного пространства ядра

Рандомизация структуры адресного пространства ядра (KASLR) обеспечивает рандомизацию адресного пространства для образа ядра Linux путем рандомизации места размещения кода ядра во время загрузки. KASLR был объединен с основной веткой ядра Linux в версии ядра 3.14, выпущенной 30 марта 2014 года. После компиляции его можно отключить во время загрузки, указав nokaslr в качестве одного из параметров загрузки ядра.

В процессорах x86 существует несколько атак по побочным каналам, которые могут привести к утечке адресов ядра. В конце 2017 года была разработана изоляция таблиц страниц ядра (KPTI, также известная как KAISER), чтобы отразить эти атаки. Однако этот метод не может защитить от атак по побочным каналам, использующих коллизии в структурах предикторов переходов .

Майкрософт Виндоус

В Windows Vista от Microsoft (выпущенной в январе 2007 г.) и более поздних версиях ASLR включен только для исполняемых файлов и библиотек динамической компоновки , которые специально связаны с поддержкой ASLR. Для совместимости он по умолчанию не включен для других приложений. Обычно несовместимо только старое программное обеспечение, и ASLR можно полностью включить, отредактировав запись в реестре HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\MoveImagesили установив Microsoft Enhanced Mitigation Experience Toolkit .

Расположение кучи , стека , блока среды процесса и блока среды потока также рандомизируется. В официальном документе по безопасности от Symantec отмечается, что ASLR в 32-битной Windows Vista может быть не таким надежным, как ожидалось, и Microsoft признала слабость в его реализации.

Хост- системы предотвращения вторжений, такие как WehnTrust и Ozone, также предлагают ASLR для операционных систем Windows XP и Windows Server 2003 . WehnTrust имеет открытый исходный код. Полная информация о реализации Озона недоступна.

В феврале 2012 года было отмечено, что эффективность ASLR в 32-битных системах Windows до Windows 8 может быть снижена в ситуациях с нехваткой памяти. Аналогичный эффект был достигнут и в Linux в том же исследовании. Тестовый код вызвал панику ядра в системе Mac OS X 10.7.3 , поэтому оставалось неясным, как работает ASLR в этом сценарии.

NetBSD

Поддержка ASLR в пользовательской среде появилась в NetBSD 5.0 (выпущена в апреле 2009 г.) и была включена по умолчанию в текущей версии NetBSD в апреле 2016 г.

Поддержка ASLR ядра на amd64 была добавлена ​​в NetBSD-current в октябре 2017 года, что сделало NetBSD первой системой BSD, поддерживающей KASLR.

OpenBSD

В 2003 году OpenBSD стала первой основной операционной системой, которая поддерживает сильную форму ASLR и активирует ее по умолчанию. OpenBSD завершила поддержку ASLR в 2008 году, когда добавила поддержку двоичных файлов PIE . Malloc (3) OpenBSD 4.4 был разработан для повышения безопасности за счет использования преимуществ ASLR и функций страниц с пропусками, реализованных как часть mmap системного вызова OpenBSD , а также для обнаружения ошибок использования после освобождения. Выпущенная в 2013 году, OpenBSD 5.3 была первой основной операционной системой, которая по умолчанию включала независимые от позиции исполняемые файлы на нескольких аппаратных платформах , а OpenBSD 5.7 по умолчанию активировала независимые от позиции статические двоичные файлы (Static-PIE).

macOS

В Mac OS X Leopard 10.5 (выпущенной в октябре 2007 г.) Apple представила рандомизацию для системных библиотек.

В Mac OS X Lion 10.7 (выпущенном в июле 2011 г.) Apple расширила свою реализацию, чтобы охватить все приложения, заявив, что «рандомизация разметки адресного пространства (ASLR) была улучшена для всех приложений. Теперь она доступна для 32-разрядных приложений (как и куча). защиты памяти), что делает 64-битные и 32-битные приложения более устойчивыми к атакам ".

Начиная с OS X Mountain Lion 10.8 (выпущенной в июле 2012 г.) и более поздних версий, вся система, включая ядро, а также kexts и зоны, произвольно перемещаются во время загрузки системы.

Солярис

ASLR был введен в Solaris, начиная с версии Solaris 11.1 (выпущенной в октябре 2012 г.). ASLR в Solaris 11.1 можно установить для всей системы, для каждой зоны или для каждого бинарного файла.

Эксплуатация

Было продемонстрировано, что атака по побочному каналу с использованием целевого буфера перехода позволяет обойти защиту ASLR. В 2017 году была продемонстрирована атака под названием «ASLR⊕Cache», которая могла поражать ASLR в веб-браузере с помощью JavaScript.

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

использованная литература

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