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

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

История [ править ]

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

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

Преимущества [ править ]

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

Эффективность [ править ]

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

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

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

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

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

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

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

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

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

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

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

Снижение энтропии [ править ]

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

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

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

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

Ограничения [ править ]

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

Реализации [ править ]

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

Android [ править ]

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

DragonFly BSD [ править ]

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

FreeBSD [ править ]

Поддержка ASLR появится в FreeBSD 13.0 (в настоящее время в разработке). [12] По умолчанию отключено.

iOS (iPhone, iPod touch, iPad) [ редактировать ]

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

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

Linux [ править ]

Linux ядро позволило слабую форму ASLR по умолчанию с версии ядра 2.6.12, выпущенная в июне 2005 года [16] 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). [17]

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

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

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

Microsoft Windows [ править ]

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

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

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

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

NetBSD [ править ]

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

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

OpenBSD [ править ]

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

macOS [ править ]

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

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

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

Солярис [ править ]

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

Эксплуатация [ править ]

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

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

  • Переполнение буфера
  • Переполнение буфера стека
  • Защита от разрушения стека
  • Бит NX

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

  1. Брэд Спенглер (октябрь 2003 г.). «PaX: гарантированный конец выполнения произвольного кода» (PDF) . grsecurity.net . Слайды с 22 по 35 . Проверено 20 августа 2015 .
  2. ^ a b Тео Де Раадт (2005). «Методы защиты от эксплойтов (обновлены для включения случайных malloc и mmap) на OpenCON 2005» . Проверено 26 августа 2009 .
  3. ^ "Инновации OpenBSD" . Проект OpenBSD . Проверено 12 сентября 2016 .
  4. Марко-Гисберт, Гектор; Риполл, Исмаэль (20 ноября 2014 г.). «Об эффективности Full-ASLR в 64-битной Linux» (PDF) .
  5. ^ Shacham, H .; Пейдж, М .; Pfaff, B .; Goh, EJ; Modadugu, N .; Бонех, Д. (2004). Об эффективности рандомизации адресного пространства . 11-я конференция ACM по компьютерной и коммуникационной безопасности. С. 298–307.
  6. ^ a b «Реализовать рандомизацию порядка загрузки библиотеки» . Проверено 26 июня 2017 .
  7. ^ a b Транзисторная память, такая как размеры RAM, ROM, флэш-памяти и кеша, а также размеры файлов указываются с использованием двоичных значений для K (1024 1 ), M (1024 2 ), G (1024 3 ), ...
  8. ^ «Безопасность Android» . Разработчики Android . Проверено 7 июля 2012 .
  9. ^ "ОСС-безопасность" . Проверено 4 октября 2015 .
  10. ^ "Вернуть" Повторно включить поддержку для исполняемых файлов, не являющихся PIE " " . Проверено 26 июня 2017 .
  11. ^ mmap - добавление рандомизации смещения mmap , DragonFly Gitweb, 25 ноября 2010 г.
  12. ^ «Внедрить рандомизацию разметки адресного пространства (ASLR)» . Проверено 10 февраля 2019 .
  13. ^ Pwn2Own день 2: iPhone, BlackBerry побеждены; Chrome, незаезд Firefox , Ars Technica , 11 марта 2011 г.
  14. ^ Стефан Эссер (2013-03-07). «Эксплуатация iOS 6 280 дней спустя» . Слайд 19: «iOS 6 представляет KASLR».
  15. ^ Tarjei Mandt. «Атака на ядро ​​iOS: взгляд на 'evasi0n ' » (PDF) .
  16. NX Bit And ASLR , Tom's Hardware , 25 марта 2009 г.
  17. ^ "личность - установить домен выполнения процесса" .
  18. ^ Джейк Эдж (2013-10-09). «Рандомизация компоновки адресного пространства ядра» . LWN.net . Проверено 2 апреля 2014 .
  19. ^ «Ядро Linux 3.14, раздел 1.7. Рандомизация адресного пространства ядра» . kernelnewbies.org . 2014-03-30 . Проверено 2 апреля 2014 .
  20. ^ "kernel / git / torvalds / linux.git: x86, kaslr: Вернуть местоположение из пакета decopress_kernel (дерево исходных текстов ядра Linux)" . kernel.org . 2013-10-13 . Проверено 2 апреля 2014 .
  21. ^ KASLR мертв: Да здравствует KASLR (PDF) . Разработка безопасного программного обеспечения и систем 2017. 24 июня 2017 г.
  22. ^ Чан, Ёнджин; Ли, Санго; Ким, Тэсу (2016). «Нарушение рандомизации адресного пространства ядра с помощью Intel TSX» (PDF) . 2016 ACM SIGSAC конференция по компьютерной и коммуникационной безопасности . CCS '16. Нью-Йорк, Нью-Йорк, США: ACM: 380–392. DOI : 10.1145 / 2976749.2978321 . ISBN  9781450341394. S2CID  6293725 .
  23. ^ Корбет, Джонатан (2017-12-20). «Текущее состояние изоляции таблиц страниц ядра» . LWN.net .
  24. ^ Корбет, Джонатан (2017-11-15). «КАЙЗЕР: сокрытие ядра от пользовательского пространства» . LWN.net .
  25. ^ a b Евтюшкин Дмитрий; Пономарев Дмитрий; Абу-Газале, Наэль (2016). «Перейти через ASLR: атаковать предикторы ветвления для обхода ASLR» (PDF) . 2016 49-й ежегодный международный симпозиум IEEE / ACM по микроархитектуре (MICRO) . С. 1–13. DOI : 10.1109 / MICRO.2016.7783743 . ISBN  978-1-5090-3508-3. S2CID  3801142 .
  26. ^ «Защита программного обеспечения Windows ISV» . Msdn.microsoft.com . Проверено 10 апреля 2012 .
  27. ^ Внутреннее устройство Windows: включая Windows Server 2008 и Windows Vista, пятое издание (PRO-Developer) ISBN 978-0-7356-2530-3 
  28. Олли Уайтхаус (февраль 2007 г.). «Анализ рандомизации адресного пространства в Windows Vista» (PDF) . Архивировано из оригинального (PDF) на 2019-07-15 . Проверено 18 января 2009 .
  29. ^ "WehnTrust" . Codeplex.com . Проверено 10 апреля 2012 .
  30. ^ "Озон архитекторов безопасности" . Архитекторы безопасности . Проверено 10 апреля 2012 .
  31. ^ "Исходный код WehnTrust" . Проверено 15 ноября 2013 .
  32. ^ «Рандомизация адресного пространства для систем Windows» (PDF) . Проверено 10 апреля 2012 .
  33. ^ Олли (2012-03-02). «Исследование, разработка, оценка, консультирование и обучение | Recx: частичный метод против ASLR - множественные O / S» . Recxltd.blogspot.co.uk . Проверено 10 апреля 2012 .
  34. ^ "Анонс NetBSD 5.0" . Проверено 25 апреля 2016 .
  35. ^ Христос Зулас (2016). «Двоичные файлы PIE и ASLR включены в сборке по умолчанию для amd64» . Проверено 25 апреля 2016 .
  36. ^ "Ядро ASLR на amd64" . 2017 . Проверено 16 октября 2017 .
  37. ^ a b Курт Миллер (2008). "Реализация независимого исполняемого файла (PIE) OpenBSD" . Архивировано 12 июня 2011 года . Проверено 22 июля 2011 .
  38. ^ "libc / stdlib / malloc.c" . Перекрестная ссылка BSD, OpenBSD src / lib / .
  39. ^ «Mac OS X - Безопасность - Защищает от вирусов и вредоносных программ» . Яблоко. Архивировано из оригинала на 2011-05-25 . Проверено 10 апреля 2012 .
  40. ^ «Безопасность» . Корпорация Apple Архивировано из оригинала на 2011-06-06 . Проверено 6 июня 2011 .
  41. ^ «Обзор основных технологий OS X Mountain Lion» (PDF) . Июнь 2012 . Проверено 25 июля 2012 .
  42. ^ Управление доступом к машинным ресурсам , Oracle Information Library, 26 октября 2012 г.
  43. ^ AnC VUSec, 2017

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

  • Методы устранения уязвимостей: обновление через 10 лет в OpenBSD
  • Документация PaX по ASLR
  • Сравнение PaX с Exec Shield и W ^ X
  • Рандомизация разметки адресного пространства в Windows Vista - веб-журнал Майкла Ховарда
  • ASLR для Windows 2000 / XP / 2003 (WehnTrust)
  • Обход защиты PaX ASLR
  • Об эффективности рандомизации разметки адресного пространства
  • Тестовые приложения (или библиотеки) на предмет поддержки ASLR и DEP
  • Справочник по ASLR Smack & Laugh