Инструменты мастера Фридрих Бывалый Спецвыпуск Xakep, номер #045, стр. 045-078-1 Обзор софта для создания эксплоитов Какой компилятор выбрать для shell-кода? На чем лучше писать эксплоит? А чем выдирать адреса возврата из сбойных функций? В процессе изучения теории переполнения перед нами встает множество таких и аналогичных вопросов, сходящихся к одному: какими инструментами пользоваться? Выберем вместе. Что требуется? Представим, что мы нашли баг на переполнение в каком-нибудь софте и просто горим желанием его использовать (а впоследствии сообщить о нем производителю), причем не как банальный DoS, а как способ получения доступа к машине с таким софтом. Для этого потребуется написать эксплоит под наш баг, который бы открывал командный shell на каком-нибудь порту. Процесс написания эксплоита я делю на три этапа, связанных с использованием разных инструментов. Первый этап – сбор данных об уязвимости: поиск функции, в которой происходит переполнение, запись адреса возврата этой функции, размера буфера и кучи других необходимых вещей (подробнее о которых ты сможешь прочесть в других материалах этого номера). Для этих действий нам потребуются утилиты двух видов: отладчики и дизассемблеры. С помощью дизассемблеров очень легко ориентироваться в коде уязвимой программы, а отладчик (дебагер) будет ключом к данным, возникающим в ходе работы приложения, – возможность просмотреть стек в момент переполнения меня всегда очень радовала. Второй этап – написание shell-кода, голого куска программы, который бы открывал доступ к компьютеру жертвы. Это самая ответственная и сложная, на мой взгляд, часть процесса. Здесь нам понадобится ассемблер, ведь только с его помощью можно создать работающий, отвечающий всем хитрым требованиям код. Третий этап – собственно написание эксплоита, программы, которая бы реализовала переполнение: засунула бы в буфер shell-код и сразу же им воспользовалась. Тут никак не обойтись без хорошего компилятора Си, на котором проще и удобнее написать вкусный код. Остается только выбрать из ассортимента доступных в сети инструментов те, которые бы лучше всего подходили для достижения нашей цели – приготовления хакерского overflow-рагу. Камон! Отладчики и дизассемблеры Soft-Ice Думаю, не стоит говорить, что на сегодняшний день это лучший из доступных смертному отладчиков. Располагаясь в ring0, он может сделать все, что ты пожелаешь. При работе с ним можно не ограничивать себя отладкой пользовательских приложений, никто не помешает тебе хоть все ядро перелопатить (на уровне которого, кстати, и сидит Soft-Ice). Пользоваться таким отладчиком – одно удовольствие. Взять, например, наш случай – написание эксплоита: подгрузи к Soft-Ice winsock, поставь брекпоинт на функцию recv (командой bpx) и знай себе жди, когда брек сработает. Когда это произойдет, останется только поковыряться в аккуратненьких строчках дизассемблированной программки и посмотреть, нет ли тут чего-нибудь, что можно переполнить. Удобнее, ИМХО, ещё не придумали. Ida Pro Дизассемблер номер один в мире. Никакому другому ещё не удалось переплюнуть его по функциональности. Сам распознает локальные переменные (если есть массив символов, то он так и напишет, а не будет морочить голову) и вызовы API, и сам рисует комментарии к коду. А чего только стоит одна возможность написания к IDA Pro дополнительных модулей! К примеру, уже сейчас существуют модули для дизассемблирования файлов, сжатых UPX’ом. Внутренний язык IDA хорошо документирован, и если ты раньше писал на Си, то у тебя не должно возникнуть трудностей с созданием собственных функций для этого замечательного дизассемблера. |