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

Инструменты мастера

Фридрих Бывалый

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


Обзор софта для создания эксплоитов

Какой компилятор выбрать для shell-кода? На чем лучше писать эксплоит? А чем выдирать адреса возврата из сбойных функций? В процессе изучения теории переполнения перед нами встает множество таких и аналогичных вопросов, сходящихся к одному: какими инструментами пользоваться? Выберем вместе.

Что требуется?

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

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

Второй этап – написание shell-кода, голого куска программы, который бы открывал доступ к компьютеру жертвы. Это самая ответственная и сложная, на мой взгляд, часть процесса. Здесь нам понадобится ассемблер, ведь только с его помощью можно создать работающий, отвечающий всем хитрым требованиям код.

Третий этап – собственно написание эксплоита, программы, которая бы реализовала переполнение: засунула бы в буфер shell-код и сразу же им воспользовалась. Тут никак не обойтись без хорошего компилятора Си, на котором проще и удобнее написать вкусный код.

Остается только выбрать из ассортимента доступных в сети инструментов те, которые бы лучше всего подходили для достижения нашей цели – приготовления хакерского overflow-рагу. Камон!

Отладчики и дизассемблеры

Soft-Ice

http://www.numega.com

Думаю, не стоит говорить, что на сегодняшний день это лучший из доступных смертному отладчиков. Располагаясь в ring0, он может сделать все, что ты пожелаешь. При работе с ним можно не ограничивать себя отладкой пользовательских приложений, никто не помешает тебе хоть все ядро перелопатить (на уровне которого, кстати, и сидит Soft-Ice). Пользоваться таким отладчиком – одно удовольствие. Взять, например, наш случай – написание эксплоита: подгрузи к Soft-Ice winsock, поставь брекпоинт на функцию recv (командой bpx) и знай себе жди, когда брек сработает. Когда это произойдет, останется только поковыряться в аккуратненьких строчках дизассемблированной программки и посмотреть, нет ли тут чего-нибудь, что можно переполнить. Удобнее, ИМХО, ещё не придумали.

Ida Pro

http://www.idapro.com

Дизассемблер номер один в мире. Никакому другому ещё не удалось переплюнуть его по функциональности. Сам распознает локальные переменные (если есть массив символов, то он так и напишет, а не будет морочить голову) и вызовы API, и сам рисует комментарии к коду. А чего только стоит одна возможность написания к IDA Pro дополнительных модулей! К примеру, уже сейчас существуют модули для дизассемблирования файлов, сжатых UPX’ом. Внутренний язык IDA хорошо документирован, и если ты раньше писал на Си, то у тебя не должно возникнуть трудностей с созданием собственных функций для этого замечательного дизассемблера.

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