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

КОГДА В МАЛЕНЬКОЕ ПЫТАЮТСЯ ЗАПИХАТЬ БОЛЬШОЕ...

Vint(vint@townnet.ru)

Спецвыпуск Xakep, номер #032, стр. 032-052-1


БУФЕР ЛОПНУЛ, КАК ЭТО ПОЮЗАТЬ?

Хой! Ты наслышан о глюках с буфером? Страшно? Так вот, теперь ты узнаешь, как такие штуки юзают крутенькие пацики!

Все началось не со зла, все началось как игра! (С) Ария

ЧЕРВЯК МОРРИСА И ПРОЧИЕ НАСЕКОМЫЕ

Первая сильная атака, основанная на переполнении буфера, была реализована с помощью известного червя Морриса аж в 1988 году нашей эры. В те времена основной сетевой ОС был Юних, и именно в его демоне (sendmail - отправка почты) была найдена возможность вызвать buffer overflow. А дальше количество таких атак росло, как снежный ком. Исследовались и находились новый дырявые софтины. Сегодня уязвимости и баги, связанные с так называемым переполнением стека или буфера, являются одной из основных проблем сисадминов. В рассылках и на сайтах, посвященных дырам в защите софта, уязвимости такого рода составляют около 2/3 от общего числа. А простое наблюдение за событиями, происходящими сегодня в области сетевых технологий, дает все основания считать, что появилось и очень быстро растет целое поколение программ, называющими себя "buffer-overflow exploits". Таких софтин множество, но все они для прорыва в систему и/или для получения прав рута используют глюки в контроле размеров строк и буферов. Причем проблема давно вышла за рамки UNIX-систем. Сейчас переполнение буфера очень актуально для всех ОС от мелкомягких, даже говорят, что уже найден буфер оверфов в 2003-х серверных Виндах! И самое-то интересное, что эти баги не являются закрываемыми раз и навсегда! Переполнение буфера - это уже некая технология, позволяющая находить дыры там, где их никогда не было :).

ГДЕ ЖЕ ТЫ, ГДЕ, ДЫРОЧКА МАЛАЯ!

Сейчас мы попробуем найти ручками это самое переполнение. Самое примитивное переполнение буфера происходит при работе со строками в текстовых протоколах (HTTP, SMTP, POP, FTP). Вот как можно находить дырочки для входа: такая бага была найдена на FTP-сервере "made in China" под управлением NT'шного мастдая. При подключении к серверу на запрос пассворда передается строка: "pass AAAAAAA..." - больше 1024 (размер буфера) символов. Если в NT'е нет глюка с переполнением, то ты узришь мессаги об ошибке, и сервак продолжит общаться с другими юзерами, а если есть, то произойдет дисконнект, и, возможно, сервант вообще упадет. А дальше твое дело, что делать с такой находкой: сообщить админу или поиметь сервер!

Другой способ поиска переполнений - анализ исходного кода или дизассемблирование программы, что требует наличия исходника или бинарика, умения программировать и дизассемблировать, и поэтому многим не понравится. Однако многие уязвимости можно найти только таким способом, да и то если просидишь несколько ночей над софтиной. Если в руках есть исходник проги, то все не так плохо. А если в наличии только бинарики, то поиск дыр превращается в большой гем, так как без хорошего знания асма и архитектуры проца багу ты не найдешь :(.

КАК ЖЕ СИЕ РАБОТАЕТ?

Как ты, наверное, уже понял, перезапись возвратного адреса, который валяется в регистре EIP проца (Instraction Pointer register - регистр-указатель команд), позволяет нам юзать переполнение буфера в своих темных целях :). Обычно, используя этот прием, ты заставляешь проц выполнить код, который он при нормальной работе выполнять не должен. Ты можешь поместить в EIP адрес, возвращающий проц обратно в буфер, чтобы исполнить те инструкции, которыми буфер переполнили (тот самый шелл-код, который был запихнут в стек как параметр для функции, например, login).

Содержание  Вперед на стр. 032-052-2