Кучное опрыскивание - Heap spraying
В компьютерная безопасность, кучное опрыскивание это техника, используемая в подвиги облегчить выполнение произвольного кода. Часть исходный код эксплойта, реализующего эту технику, называется кучный спрей.[1] В общем, код, который распыляет кучу пытается поместить определенную последовательность байтов в заранее определенное место в объем памяти цели процесс размещая (большие) блоки в процессах куча и заполните байты в этих блоках правильными значениями.
Операция
Спрей кучи на самом деле не использует никаких проблем безопасности, но его можно использовать, чтобы упростить эксплуатацию уязвимости. Сам по себе кучу спрея нельзя использовать для нарушения каких-либо границ безопасности: требуется отдельная проблема безопасности.
Использовать проблемы безопасности часто сложно, потому что на этот процесс могут влиять различные факторы. Случайное выравнивание памяти и времени вносит много случайности (с точки зрения атакующего). Кучный спрей может быть использован для введения большого количества заказов, чтобы компенсировать это и увеличить шансы на успешную эксплуатацию. Распыление кучи использует тот факт, что в большинстве архитектур и операционных систем начальное расположение больших распределений кучи предсказуемо, а последовательные выделения являются примерно последовательными. Это означает, что распыляемая куча будет примерно в одном и том же месте каждый раз при запуске кучи.
Эксплойты часто используют определенные байты для распыления кучи, поскольку данные, хранящиеся в куче, служат нескольким ролям. Во время эксплуатации проблемы безопасности код приложения часто можно заставить читать адрес из произвольного места в памяти. Затем этот адрес используется кодом как адрес выполняемой функции. Если эксплойт может заставить приложение считать этот адрес из распыленной кучи, оно может управлять потоком выполнения, когда код использует этот адрес в качестве указателя функции и перенаправляет его в обработанную кучу. Если эксплойту удается перенаправить поток управления в обработанную кучу, байты там будут выполнены, позволяя эксплойту выполнять любые действия, которые хочет атакующий. Следовательно, байты в куче ограничены для представления действительных адресов внутри самой кучи, содержащих действительные инструкции для целевой архитектуры, поэтому приложение не выйдет из строя. Поэтому обычно используется один байт, который переводится как в действительный адрес, так и в NOP или NOP-подобная инструкция для целевой архитектуры. Это позволяет кучному опрыскивателю работать как очень большой Сани NOP (например, 0x0c0c0c0c часто используется как неканонический NOP[2])
История
Распыление кучи время от времени использовалось в эксплойтах как минимум с 2001 года,[3][4] но эта техника начала широко использоваться в эксплойтах для веб-браузеры летом 2005 г., после выпуска нескольких таких эксплойтов, которые использовали эту технику для устранения широкого спектра ошибок в Internet Explorer.[5][6][7][8][9] Спреи кучи, используемые во всех этих эксплойтах, были очень похожи, что показывало универсальность техники и простоту ее использования без необходимости внесения серьезных изменений между эксплойтами. Это оказалось достаточно простым для понимания и использования, чтобы позволить новичку хакеры быстро написать надежные эксплойты для многих типов уязвимости в веб-браузерах и веб-браузере плагины. Многие эксплойты веб-браузеров, которые используют кучное распыление, состоят только из кучного распыления, которое скопировано из предыдущего эксплойта в сочетании с небольшим фрагментом скрипта или HTML что вызывает уязвимость.
Выполнение
JavaScript
Распыление кучи для веб-браузеров обычно реализовано в JavaScript и опрыскайте кучу, создав большие струны. Наиболее распространенный метод - начать со строки из одного символа и соединять это с собой снова и снова. Таким образом, длина строки может расти экспоненциально до максимальной длины, разрешенной скриптовый движок. В зависимости от того, как браузер реализует строки, либо ASCII или же Unicode в строке можно использовать символы. Код распыления кучи делает копии длинной строки с шеллкод и сохраняет их в массиве до тех пор, пока не будет выделено достаточно памяти для работы эксплойта.
VBScript
Изредка, VBScript используется в Internet Explorer для создания строк с помощью Нить функция.
ActionScript
В июле 2009 года было обнаружено, что эксплойты используют ActionScript опрыскать кучу Adobe Flash.[10][11]
Изображений
Хотя было доказано, что распыление кучи может быть выполнено другими способами, например, путем загрузки файлов изображений в процесс,[12] это не нашло широкого распространения (по состоянию на август 2008 г.).
HTML5
В сентябре 2012 года на EuSecWest 2012 была представлена новая техника.[13] Два исследователя CORE, Федерико Муттис и Анибал Сакко, показали, что кучу можно распылять с очень высокой степенью детализации распределения за счет использования технологий, представленных с HTML5. В частности, они использовали низкоуровневый интерфейс растрового изображения, предлагаемый Canvas API, и веб-работники сделать это быстрее.
Обнаружение и предотвращение
- Проект Nozzle от Microsoft Research направлен на обнаружение и предотвращение кучного распыления.[14]
- BuBBle - еще одна контрмера, которую можно рассмотреть для обнаружения и предотвращения атаки, инициированной после распыления кучи.[15]
Смотрите также
- Слайд NOP или салазки NOP, метод, который дополняет кучное опрыскивание
- Куча фэн-шуй, метод управления компоновкой кучи
- JIT распыление
Рекомендации
- ^ Джон Хейс, инженер по обучению безопасности (2 сентября 2016 г.). "Название на YouTube: Техника эксплойта кучного распыления". Живое сообщество Palo Alto Networks. Получено 14 ноября, 2018. с официального YouTube-канала "Palo Alto Networks Live Community" был назван "Техника использования Heap Spray".
- ^ corelanc0d3r (31 декабря 2011 г.). «Учебное пособие по написанию эксплойтов, часть 11: раскрытие тайны кучного распыления». Команда Corelan. Архивировано из оригинал 25 апреля 2015 г.. Получено 15 января 2014.
- ^ "cami": код эксплойта telnetd
- ^ eEye Digital Security - Исследования
- ^ InternetExploiter 1: MSIE IFRAME src и параметр имени BoF exploit
- ^ InternetExploiter 3: MSIE .ANI файл "anih" заголовок BoF эксплойт
- ^ InternetExploiter 2: эксплойт состояния гонки объектов MSIE DHTML
- ^ "FrSIRT - уязвимость / эксплойт COM-объекта javaprxy.dll в Microsoft Internet Explorer (рекомендации по безопасности)". Архивировано из оригинал на 2008-03-27. Получено 2008-03-25.
- ^ "FrSIRT - Microsoft Internet Explorer" Msdds.dll "Удаленное выполнение кода / эксплойт (рекомендации по безопасности)". Архивировано из оригинал на 2007-12-19. Получено 2008-03-25.
- ^ Рои Хэй: Использование CVE-2009-1869
- ^ «Лаборатория FireEye Malware Intelligence: кучное распыление с помощью ActionScript». Архивировано из оригинал на 2014-05-01. Получено 2014-04-22.
- ^ Майкл Саттон и Грег Макманус, Панк-ода - сокрытие шелл-кода на виду, Черная шляпа 2006
- ^ HTML5 Heap Spray. EUSecWest 2012
- ^ Проект сопла от Microsoft Research направлен на обнаружение и предотвращение кучного распыления.
- ^ BuBBle: противодействие на уровне движка Javascript против атак с использованием кучи