Heap spraying
Материал из Википедии — свободной encyclopedia
Heap spraying в информационной безопасности — это атака, использующая ошибки в работе с памятью приложения. Атакуя при помощи heap spraying, хакер заставляет приложение выделить память под большое количество объектов, содержащих вредоносный код. При этом повышается вероятность успеха эксплойта, который переносит поток исполнения на некоторую позицию внутри кучи. Важно понимать, что без эксплойта, позволяющего изменять поток исполнения, heap spraying не нанесёт какого-либо вреда. Атака основана на предсказуемости положения кучи в адресном пространстве процесса. Помимо этого, выделение памяти в куче — это детерминированная операция, которая и позволяет с успехом применять эту технику. Heap spraying особенно эффективна в браузерах, где хакер может выделять память, используя несколько строк JavaScript на веб-странице. Важную роль играет сходство выделения памяти в различных операционных системах, что делает эту атаку кроссплатформенной. В результате можно внести определённую последовательность байт (например, машинную инструкцию) в заранее предсказанный адрес в памяти целевого процесса[1].
![Альтернативный текст](http://upload.wikimedia.org/wikipedia/commons/thumb/5/50/Program_memory_layout.pdf/page1-320px-Program_memory_layout.pdf.jpg)
При создании процесса в операционной системе под его нужды выделяется адресное пространство[2][3][4], в котором расположены пользовательские данные, исполняемый код и некоторая системная информация, которая зависит от конкретной операционной системы. Пользовательские данные распределяются между кучей и стеком в зависимости от способа выделения памяти под них[5]. Так, в сегменте стека хранятся переменные с автоматическим классом размещения, а также информация, которая сохраняется при каждом вызове функции, например, адрес возврата. Куча — это область динамической памяти, то есть при динамическом выделении памяти место выделяется в куче. Традиционно куча и стек растут навстречу друг другу[2][3][4].