нападения переполнения "кучи"

Вы можете сделать это следующим образом:

double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
19
задан Michael 3 April 2009 в 14:57
поделиться

1 ответ

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

Предполагают, что у меня есть наивная реализация "кучи", блоки управления которой похожи на это:

struct HeapBlockHeader
{
    HeapBlockHeader* next;
    HeapBlockHeader* prev;
    int size;

    // Actual heap buffer follows this structure.
};

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

Эта статья имеет хороший обзор нападений переполнения "кучи": http://www.h-online.com/security/features/A-Heap-of-Risk-747161.html

Эта статья описывает часть укрепления, которое вошло в диспетчер "кучи" Vista для предотвращения этого вида нападения: http://www.blackhat.com/presentations/bh-usa-06/BH-US-06-Marinescu.pdf

РЕДАКТИРОВАНИЕ: На возможности выполнить код от "кучи", да это возможно. Много платформ теперь делают неисполняемый файл памяти "кучи" по умолчанию, который повышает барьер для того, чтобы заставлять произвольный код работать. Однако можно все еще сделать "переход к libc" нападение стиля - Перезапись обратный адрес к известной функции, которая будет исполняемым файлом.

32
ответ дан 30 November 2019 в 03:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: