Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #45, АВГУСТ 2004 г.

Зоопарк переполняющихся буферов 

Крис Касперски aka мыщъх

Спецвыпуск Xakep, номер #045, стр. 045-008-4


С кучей все обстоит значительно сложнее. Не углубляясь в технические детали реализации менеджера динамической памяти, можно сказать, что с каждым блоком выделенной памяти связано, по меньшей мере, две служебных переменных: указатель (индекс) на следующий блок и флаг занятости блока, расположенные либо перед выделяемым блоком, либо после него, либо вообще в другом месте. При освобождении блока памяти функция free проверяет флаг занятости следующего блока и, если он свободен, сливает оба блока воедино, обновляя "наш" указатель. А где указатель, там практически всегда есть и POKE. То есть, затирая данные за концом выделенного блока строго дозированным образом, мы получаем возможность модифицировать любую ячейку памяти уязвимой программы по своему усмотрению, например, перенаправить какой-нибудь указатель на shell-код.

О технике поиска замолвите слово

Поиск переполняющихся буферов по степени накала страстей можно сравнить разве что с поиском клада. Наличие исходных текстов невероятно упрощает нашу задачу, но не предавайся напрасным иллюзиям: переполняющиеся буфера ищешь не ты одни, все доступные исходники давным-давно зачитаны до дыр, и найти там что-то новое невероятно сложно. Дизассемблирование, конечно, посложнее будет (особенно на первых порах), зато и шансы открыть новую дыру значительно возрастают.

Чем шире распространено уязвимое приложение (операционная система), тем большую власть тебе дадут переполняющиеся буфера. Достаточно вспомнить нашумевшую историю с дырой в DCOM, открытой задолго до ее официального обнародования. Прикинь: миллионы тачек с Windows NT по всему миру, и все – твои. Правда, тут не все гладко. Windows и другие популярные системы находится под пристальным вниманием тысяч специалистов и твоих коллег-хакеров. Короче говоря, здесь душно.

Назад на стр. 045-008-3  Содержание  Вперед на стр. 045-008-5