Skip to content
Permalink
667b44f64e
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
106 lines (90 sloc) 6.02 KB
Генерация доменых имен
----------------------
Все боты условно делятся на несколько доменных групп (например на 4). Номер доменной группы определяется
ботом на основе Machine ID и не меняется. Для генерации имени домена используется номер доменной группы и
текущая дата (например, текущий месяц).
Для получения слов, используемых для создания читаемых имен, требуется текстовый файл. Это должен быть файл,
который легко найти в сети и он не должен изменяться со временем. (например: http://constitution.org/usdeclar.txt)
Из файла выбираются отдельные слова, не меньше определенной длинны (чтобы исключить предлоги), и
группируются в псевдо-случаные, читаемые имена. Таким образом, для каждой доменной группы ботов, раз в
заданный период (например месяц) изменяются имена доменов.
Кол-во генерируемых имен, период смены имён, кол-во групп и список зон, для которых генерируются имена
задаются при сборе бота.
Есть специальная утилита dname.exe для генерации имен по заданной доменной группе и дате.
Для управления ботом достаточно зарегистрировать хотя бы одно имя из, сгенерированного dname, списка для
каждой группы.
Взаимодействие бот-сервер
--------------------------
Бот запрашивает у сервера два типа файлов:
- конфиг-файл. Сформированый конфигуратором файл особого формата, содержащий описания инжектов.
- файл команд. Текстовый файл, содержащий команды для бота.
Все получаемые ботом фалы зашифрованы посредством Serpent(или RC6) и подписаны RSA.
Serpent-ключ генерится автоматически в момент подписи файла и хранится внутри цифровой подписи. Таким образом,
получить Serpent-ключ взможно только расшифровав цифровую подпись.
Открытй RSA-ключ, используемый для проверки (расшифровки) цифровой подписи хранится внутри бота.
Секретный RSA-ключ, используемый для подписи файлов хранится у оператора сети.
Файлы подписываются перед загрузкой их на сервер.
Бот проверяет подписи всех получаемых файлов и игнорирует неподписанные.
Такая схема гарантирует, что задать конфиг и команды боту сможет только оператор сети, имеющий закрытый ключ.
Бот отправляет на сервер файлы следующего типа и формата (тип данных задаётся параметром type в POST-запросе):
SEND_ID_UNKNOWN 0 - неизвестно, используется только для тестирования
SEND_ID_FORM 1 - данные HTML-форм. ASCII-заголовок + форма бинарном виде, как есть
SEND_ID_FILE 2 - любой файл, так шлются найденные по маске файлы
SEND_ID_AUTH 3 - данные IE Basic Authentication, ASCII-заголовок + бинарные данные
SEND_ID_CERTS 4 - сертификаты. Файлы PFX упакованые в CAB или ZIP.
SEND_ID_COOKIES 5 - куки и SOL-файлы. Шлются со структурой каталогов. Упакованы в CAB или ZIP
SEND_ID_SYSINFO 6 - информация о системе. UTF8(16)-файл, упакованый в CAB или ZIP
SEND_ID_SCRSHOT 7 - скриншот. GIF-файл.
SEND_ID_LOG 8 - внутренний лог бота. TXT-файл.
SEND_ID_FTP 9 - инфа с грабера FTP. TXT-файл.
SEND_ID_IM 10 - инфа с грабера IM. TXT-файл.
SEND_ID_KEYLOG 11 - лог клавиатуры. TXT-файл.
SEND_ID_PAGE_REP 12 - нотификация о полной подмене страницы TXT-файл.
SEND_ID_GRAB 13 - сграбленый фрагмент контента. ASCII заголовок + контент, как он есть
SEND_ID_MAIL 14 - отчёт мэйлграббера. CAB или ZIP содержащий текст в UTF8(16)
SEND_ID_FORM1 15 - контейнер. Архив, содержащий файлы других форматов.
SEND_ID_PLUGIN 16 - нотификация плагина (старт\стоп)
SEND_ID_VIDEO 17 - видео с экрана. CAB или ZIP, содержащий анимационный файл GIF или AVI
SEND_ID_DEVICE 18 - нотификация о добавлении устройства. ASCII текст.
Тип 15 (контейнер) содержит внутри различные файлы, тип которых можно определить по имени:
Если имя файла состоит из 18 знаков (16-ричное число), то последние два знака обозначают
тип файла. Например:
01CFD40EE4E4E2B001 - тип 01
904F38BB782009330D - тип 13
Передаваемые файлы могут быть зашифрованы алгоритмом Serpent(RC6) с использованием ключа обфускаци.
При обработке полученных данных нужно учитывать, что в случае, если сервер вернёт статус отличный
от 200(OK), то софт будет слать этот же набор данных снова.
Для получения файлов используюся PHP-запросы следующего формата:
GET config.php?version=212400&user=123456&server=11&id=1000&crc=0
GET task.php?version=212400&user=123456&server=11&id=1000&crc=0
Для отсылки файлов используются PHP-запросы следующего формата:
POST data.php?version=212400&user=123456&server=11&id=1000&type=2&name=anyfile
где:
config.php, task.php - имена скриптов, соответствующих конфигу и командам;
version - номер версии софта (XYYZZZ, где: X.YY - версия, ZZZ - сборка)
user - уникальный ID пользователя (клиента)
server - уникальный ID сервера
id - номер группы бота
type - тип отсылаемых данных (один из, указанных выше, SEND_ID_ХХХ кодов)
name - имя файла\данных
crc - хэш CRC32. Используется только в запросах конфига. Содержит хэш предыдущего конфиг-файла
полученного клиентом. Сервер возвращает пустую страницу если файл не изменился.
Это сделано в целях снижения нагрузки на сервер.
Бот поддерживает следующий механизм обфускации запросов:
- формируется исходная строка с параметрами запроса;
(например: user=123456&server=11&id=1000&crc=0)
- к строке добавляется случайный параметр;
(например: aaa=111&user=123456&server=11&id=1000&crc=0)
- строка запроса шифруется посредством Serpent(RC6) в режиме CBC(ECB), при этом она выравнивается на длинну
блока при помощи добавления нулей в конец.
- шифрованая строка запроса конвертируется в BASE64
(например: V2CLMeH2AeKub5G8GX9XhdiJGxvhcSmocxDZ+gpTRAKaN5tVMqj0/SZd9zo91Z+6)
- создается случайное имя php-скрипта для запроса, имя может быть любой длинны, важно, чтобы первая буква
имени соответствовала первой букве исходного скрипта.
(например: config.php -> clsdhfrrse.php, task.php -> tmjh.php, data.php -> dfhyenfk.php)
- создается случайное имя параметра для скрипта.
(например: ajsyu)
- формируется конечная строка с параметрами:
(clsdhfrrse.php?ajsyu=V2CLMeH2AeKub5G8GX9XhdiJGxvhcSmocxDZ+gpTRAKaN5tVMqj0/SZd9zo91Z+6)
Для указанных примеров использовался RC6-ключ: "0123456789ABCDEF"
Ключ задается при сборке бота и должен совпадать с настройками сервера.