FAQ Докучаев Дмитрий aka Forb Спецвыпуск Xakep, номер #045, стр. 045-074-1 (forb@real.xakep.ru) Вопросы хакера Q: Я хочу написать эксплоит, но пока не нашел уязвимость в программе. Как мне ее поскорее отыскать? A: Все зависит от знаний и опыта. Найти бажную функцию – мало, надо уметь грамотно вызвать переполнение и запустить shell-код. Если ты еще не набил в этом руку, используй утилиты для локального поиска переполнений, например, PScan (http://packetstormsecurity.org/UNIX/misc/pscan-1.2.tar.gz). Q: Облазил весь инет, но так и не нашел нужной программы для поиска багов в Linux-бинарниках. Такие программы вообще существуют? A: Существуют. Добрые хакеры подарили прекрасные тулзы для обнаружения переполнений. Одна из них – она особенно меня порадовала – выполнена в виде sh-скрипта и называется initd_.sh (http://packetstormsecurity.org/UNIX/misc/initd_.tar.gz). Подбирая параметр к указанному бинарнику, скрипт настойчиво пытается переполнить в нем буфер. После двадцатиминутных игр с эксплоитом для mod_ssl я нашел в нем переполнение. А вам слабо? :) Q: В каком софте лучше искать переполнения? A: Если ты хочешь потренироваться в поиске уязвимых функций и переменных, советую взять какой-нибудь старенький исходник, например, сырец многострадального wu-ftpd. Пролистай сырец по диагонали, найди уязвимый кусок кода, приложи утилиты для поиска оверлоада и... сравни свой результат с опубликованным в багтраке. Результат совпал? Спешу тебя поздравить: ты настоящий багоискатель. Если же твоя задача – быть первопроходцем и найти уязвимость в популярном софте, бери что-нибудь юзаемое и бажное одновременно, например, исходники Proftpd или Named. Баги есть везде, главное – суметь их найти. Q: Какие методики для поиска переполнений наиболее эффективны? A: Профессионалы рекомендуют анализировать исходник на наличие функций, не проверяющих границы переданного буфера. Это известные strcpy(), strcat(), gets(), sprintf(), scanf() и некоторые другие. Осматривай код на предмет наличия переменных с фиксированным буфером. Их всегда можно эксплуатировать. Также стоит обращать внимание на функции форматированного ввода. С их помощью можно сделать немало всего интересного (подробнее – в материалах этого номера). Q: Я написал shell-код, но меня смущает его размер. Как мне его уменьшить? A: Если shell-код запускает /bin/sh, то не стоит изобретать велосипед. Возьми уже готовый код из списка часто используемых (http://www.securitylab.ru/tools/36713.html). Когда задача сводится лишь к оптимизации размера, рекомендую собственную API-среду для написания удобных shell-кодов. Бери ее по адресу http://www.packetfactory.net/projects/libexploit/LibExploitV01a.tar.gz. Кстати, этой удобной штуковиной и эксплоиты можно писать :). Если же ты не хочешь целиком переписывать своё детище, то тебе стоит воспользоваться сжатием бина каким-нибудь примитивным методом. UPX в shell-коде? Звучит красиво. Q: Реально ли найти переполнение в мобильнике? A: Переполнения буфера в мобильных телефонах еще не обрели особой популярности в мире хакеров, хотя мобильник представляет собой контроллер с прошивкой. Если ты знаешь ассемблер, качай новую версию софта для сотового друга, дизассемблируй его и тренируйся на эмуляторах :). Уже сейчас некоторые аппараты можно вывести из строя SMS с неподдерживаемыми символами. |