![]() |
ZeroAccess plugin P2P или спецификация сетевого протокола как руководство для разработки
Общее Представляет из себя простой P2P загрузчик. Реализован в ZeroAccess виде плагина. P2P сеть строится следующим образом. Каждый бот имеет свой список пар других ботов. И периодически обменивается с другими ботами своими актуальными IP. Кроме списка IP бот может получать сначала информацию о файле имеющуюся у другого бота, а потом сам файл. Все общение между ботами производится по UDP протоколу, лишь запрос информации и скачивание файлов TCP Протокол При старте бот начинает слушать порты UDP, TCP 16464 Введу некоторое обозначение: Код:
typedef unsigned char uint8;Код:
struct CFG_NODE{Код:
struct HEAD{Код:
getL - запросить список нодКод:
void encrypt(uint8 *data, int len_data){Бот считывает ноды из файла и с периодом в 1с рассылает сообщение вида: Код:
struct HEAD{Код:
struct HEAD{Команда retL Отправляет в ответ на getL Код:
struct HEAD{Определяется дельта для от текущей даты: Код:
BLOCK_NODE.time_delta=now()-CFG_NODE.timeКод:
CFG_NODE.time =now()-BLOCK_NODE.time_deltaЕсли во входящем пакете hop=1, то бот считает себя нодой с внешним IP (супернодой), и выполняет отправку пакета newL 16 нодам из своего конфига CFG_NODE Команда newL Формируется в ответ на retL с hop=1 или newL Код:
struct HEAD{При получении ботами newL сообщения, извлекается HEAD.data (ip ноды), и проверяется наличие этого ip с имеющимся списком. Если такого ip не оказалось, то производится его добавление. И повторная рассылка 16и нодам с HEAD.hop - 1, так продолжается пока HEAD.hop не станет равным нулю или ip не будет известен всем нодам. Загрузка файлов В пакетах retL имеется количество count_sign и BLOCK_SIGN. Это информация о файлах которая имеется у бота. При получении такого пакета бот проверяет цифровую подпись BLOCK_SIGN.sign, затем смотрит есть ли у него имя файла BLOCK_SIGN.name_file, если такое имя имеется то выполняется проверка времени. При выполнении всех этих условий выполняется tcp соединение, и отправляется пакет: Код:
struct BLOCK_FILE{Дополнительная литература Старая версия протокола p2p модуля, и самого ZeroAccess hxxp://www.kindsight.net/sites/default/files/Kindsight_Malware_Analysis-ZeroAcess-Botnet-final.pdf p.s Хочу заметить что этот протокол рассчитан лишь на загрузку файлов на машины юзеров. Но его можно немного модифицировать, добавить код который сможет туннелировать трафик. В качестве одного из файлов раздавать список IP на которые будут стучаться боты. А те боты на которые происходит обращение будут переправлять траф на наш CC. В результате между ботами и СС, будет прокладка в виде тех же ботов. |
| Время: 23:40 |