Опрыскивание кучи
В компьютерной безопасности распыление кучи — это метод, используемый в эксплойтах для облегчения выполнения произвольного кода . Часть исходного кода эксплойта, реализующего эту технику, называется heapspray . [1] В общем, код, распыляющий кучу, пытается поместить определенную последовательность байтов в заранее определенное место в памяти целевого процесса, процесса заставляя его выделять (большие) блоки в куче и заполнять байты в этих блоках правильными значениями. .
Операция
[ редактировать ]Heap Spray на самом деле не использует какие-либо проблемы безопасности, но его можно использовать для облегчения использования уязвимостей. Heap Spray сам по себе не может использоваться для нарушения каких-либо границ безопасности: необходима отдельная проблема безопасности.
Эксплуатация проблем безопасности зачастую затруднена, поскольку на этот процесс могут влиять различные факторы. Случайные совпадения памяти и времени привносят много случайности (с точки зрения злоумышленника). Heap Spray можно использовать для введения большого количества порядка, чтобы компенсировать это и увеличить шансы на успешную эксплуатацию. Распыление кучи использует тот факт, что в большинстве архитектур и операционных систем начальное местоположение больших выделений кучи предсказуемо, а последовательные выделения являются примерно последовательными. Это означает, что распыляемая куча будет находиться примерно в одном и том же месте каждый раз, когда выполняется распыление кучи.
Эксплойты часто используют определенные байты для распыления кучи, поскольку данные, хранящиеся в куче, выполняют несколько ролей. Во время эксплуатации проблемы безопасности код приложения часто можно заставить прочитать адрес из произвольного места в памяти. Этот адрес затем используется кодом как адрес функции для выполнения. Если эксплойт может заставить приложение прочитать этот адрес из распыленной кучи, он может контролировать поток выполнения, когда код использует этот адрес в качестве указателя на функцию и перенаправляет его в распыленную кучу. Если эксплойту удастся перенаправить поток управления в распыленную кучу, байты там будут выполнены, что позволит эксплойту выполнять любые действия, которые захочет злоумышленник. Следовательно, байты в куче ограничены так, чтобы они представляли действительные адреса внутри самого распыления кучи, содержащие действительные инструкции для целевой архитектуры, поэтому приложение не выйдет из строя. Поэтому принято распылять один байт, который преобразуется как в действительный адрес, так и в NOP или NOP-подобная инструкция для целевой архитектуры. Это позволяет Heap Spray функционировать как очень большой салазок NOP (например, 0x0c0c0c0c часто используется как неканонический NOP). [2] )
История
[ редактировать ]Распыление кучи время от времени использовалось в эксплойтах, по крайней мере, с 2001 года. [3] [4] но эта техника начала широко использоваться в эксплойтах для веб-браузеров летом 2005 года после выпуска нескольких таких эксплойтов, которые использовали эту технику против широкого спектра ошибок в Internet Explorer . [5] [6] [7] [8] [9] Heap Spray, использованный во всех этих эксплойтах, был очень похож, что показало универсальность метода и простоту его использования без необходимости серьезных модификаций между эксплойтами. Он оказался достаточно простым для понимания и использования, что позволило начинающим хакерам быстро писать надежные эксплойты для многих типов уязвимостей в веб-браузерах и плагинах веб-браузера . Многие эксплойты веб-браузера, использующие распыление динамической памяти, состоят только из распыления динамической памяти, скопированного из предыдущего эксплойта, в сочетании с небольшим фрагментом сценария или HTML , который запускает уязвимость.
Выполнение
[ редактировать ]JavaScript
[ редактировать ]Распыление кучи для веб-браузеров обычно реализуется в JavaScript и распыляет кучу путем создания больших строк . Наиболее распространенный метод — начать со строки, состоящей из одного символа, и затем снова и снова объединять ее саму с собой. Таким образом, длина строки может расти экспоненциально до максимальной длины, разрешенной механизмом сценариев . В зависимости от того, как браузер реализует строки, ASCII или Unicode в строке могут использоваться символы . Код распыления кучи создает копии длинной строки с шелл-кодом и сохраняет их в массиве до тех пор, пока не будет выделено достаточно памяти для обеспечения работы эксплойта.
VBScript
[ редактировать ]Иногда VBScript используется в Internet Explorer для создания строк с помощью функции String .
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: Техника использования Heap Spray» . Живое сообщество Palo Alto Networks . Проверено 14 ноября 2018 г. с официального канала YouTube Palo Alto Networks Live Community был назван «Техника использования Heap Spray Exploit».
- ^ corelanc0d3r (31 декабря 2011 г.). «Учебное пособие по написанию эксплойтов, часть 11: Распыление кучи» . Команда Корелана. Архивировано из оригинала 25 апреля 2015 года . Проверено 15 января 2014 г.
{{cite web}}
: CS1 maint: числовые имена: список авторов ( ссылка ) - ^ "cami": код эксплойта telnetd
- ^ Цифровая безопасность eEye - Исследования
- ^ InternetExploiter 1: эксплойт MSIE IFRAME src&name параметра BoF
- ^ InternetExploiter 3: эксплойт заголовка BoF файла MSIE .ANI "anih"
- ^ InternetExploiter 2: Эксплойт состояния гонки при обработке объектов MSIE DHTML
- ^ «FrSIRT — уязвимость/эксплойт COM-объекта javaprxy.dll Microsoft Internet Explorer (рекомендации по безопасности)» . Архивировано из оригинала 27 марта 2008 г. Проверено 25 марта 2008 г.
- ^ «FrSIRT — Microsoft Internet Explorer «Msdds.dll» Удаленное выполнение кода/эксплойт (рекомендации по безопасности)» . Архивировано из оригинала 19 декабря 2007 г. Проверено 25 марта 2008 г.
- ^ Рои Хэй: Использование CVE-2009-1869.
- ^ «Лаборатория анализа вредоносных программ FireEye: распыление кучи с помощью Actionscript» . Архивировано из оригинала 1 мая 2014 г. Проверено 22 апреля 2014 г.
- ↑ Майкл Саттон и Грег Макманус, Панк-ода — скрытие шелл-кода на виду , Black Hat, 2006 г.
- ^ HTML5 Heap Spray. EUSecWest 2012
- ^ Проект сопла от Microsoft Research направлен на обнаружение и предотвращение кучного распыления.
- ^ BuBBle: меры противодействия на уровне движка Javascript против атак с распылением кучи