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

Эксплоит для сетевого чата

sba (sba@list.ru)

Спецвыпуск: Хакер, номер #048, стр. 048-034-5


Невидимая загрузка основного кода эксплоита

Управление захвачено. Самое время выполнить в процессе Network Assistant свой код. Можно писать базонезависимый код на Ассемблере, то есть без использования абсолютных адресов, но с каждым следующим килобайтом кода это занятие становится все более скучным и утомительным. Поэтому мы пойдем другим путем. Серверную часть оформим в виде DLL, которая будет загружаться на зараженном хосте в адресное пространство Network Assistant и исполняться в отдельном потоке. Конечно же, наблюдательный пользователь сможет заметить новый поток, но это скорее казуистика, чем реальный сюжет развития событий. В действительности никто не следит за количеством потоков в системе. В крайнем случае, можно просто скрыть присутствие в системе того или иного потока.

Замечательная статья о том, как стать невидимым под Windows NT, находится по адресу www.wasm.ru/article.php?article=hidingnt.

Единственной проблемой может стать наличие одноименной DLL в каталоге назначения. Для преодоления этой трудности основной код эксплоита должен уметь формировать случайные имена файла, записывать на диск DLL с этим названием и собственно загрузить новоиспеченную DLL в память. Как уже было написано, мы поступили следующим образом – сформировали специальный пакет, состоящий из двух частей: код эксплоита и серверная DLL. Данный пакет с успехом проходит через любой фаервол, так как его невозможно отличить от родных пакетов Network Assistant. Далее он попадает в процедуру-парсер программы. Здесь есть маленький нюанс – пакет должен быть адресован каналу, который точно не открыт на целевом хосте, иначе парсер не сможет корректно обработать неправильный пакет и Насси повиснет, вместо того чтобы передать управление нашему коду. Для этого можно формировать случайные названия канала.

Сокрытие обмена информацией между клиентом и сервером

Как осуществлять обмен данными между клиентом и сервером? Сервер может открыть любой незанятый порт и слушать его, аналогично он может отсылать на заранее оговоренный порт данные клиенту. Но это, в лучшем случае, чревато возможностью столкнуться с блокировкой портов на стороне зараженного хоста, а в худшем - опасностью нашего обнаружения. Пораскинув мозгами, приходим к выводу, что для связки клиент-сервер клиенту ничто не мешает посылать пакеты на порт Network Assistant, а серверу перехватывать все пакеты и выделять из них наши. Так как ключевой момент в протоколе Network Assistant есть поле ID (тип пакета, смещение 0x07), пробуем формировать свои пакеты с ID, который не используется (например, 0x08). Кроме того, изучив парсер пакетов Насси, можно уверенно сказать, что пакеты с неиспользуемым ID будут игнорироваться без каких-либо замечаний. То есть Network Assistant их отбросит как неправильные, зато наш снифер с успехом их перехватит и обработает. Для того чтобы сервер не засветил наш IP-адрес, он должен отсылать широковещательные ответы на наши сообщения. Это немного нагрузит сеть, зато избавит нас от лишней гласности :).

Назад на стр. 048-034-4  Содержание  Вперед на стр. 048-034-6