Conti Ransomware malware leak WITH LOCKER
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

108 lines
4.3 KiB

АДАПТАЦИЯ ПРОГРАММЫ masscan К АДМИНКЕ СКАНЕРОВ
ТЕХНИЧЕСКОЕ ЗАДАНИЕ
ЦЕЛЬ ПРОЕКТА
Адаптировать софт masscan к использованию с админкой сканеров, для распределенной работы
ОПИСАНИЕ
Исходный код проекта здесь: https://github.com/robertdavidgraham/masscan
Это быстрый порт-сканер, работающий с миллионами пакетов в секунду и миллионами адресов.
Нужно его распилить так, чтобы он:
1) работал на Windows (вроде бы он это умеет)
2) работал без привилегий администратора (тут сомнения)
3) был оформлен как модуль (см. module_HOWTO.txt, оформление кода и сборок.txt)
Конфиги передаются в модуль через вызов Control(). Название конфига - это строка в аргументе Ctl, тело конфига - аргумент CtlArg,
длина конфига - CtlArgLen (см. "module_HOWTO")
Модуль получает единственный конфиг с именем masrv, содержащий список адресов управляющего сервера,
разделенных \r\n или \n, в формате адрес:порт.
Если порт четный, работа идет по HTTP, если нечетный - HTTPS.
Если указан префикс протокола (http/https), префикс имеет приоритет над указанным портом.
Модуль работает с тем управляющим сервером, до которого удалось достучаться первым, по каждому запросу.
СОБЫТИЯ
Модуль должен отправлять следующие события через callback (см. "module_HOWTO"):
- MASS scanner build %date% %time% started
- %d addresses tried, %d open ports detected - периодически раз в полчаса (таймаут задается константой в config.h)
СКАНЕР
Сканер получает диапазоны для сканирования для проверки HTTP-запросом на сервер
GET /<group>/<clientid>/mass/domains HTTP/1.1
Значения group и clientid - это поля struct ParentInfo
CHAR ParentID[256];
CHAR ParentGroup[64];
(см. module_HOWTO)
address range1[\r]\n
port range1[\r]\n
...
(несколько записей)
Здесь нечетная строка содержит диапазон адресов для сканирования (в формате masscan)
Четная строка содержит диапазон портов для сканирования (в формате masscan)
Отправка результатов делается по протоколу DPOST запросом
POST /<group>/<clientid>/mass/81 HTTP/1.1
Собранные данные отправляются в контейнере multipart/form-data с полями source и data.
Значение поля source - "PORT scan"
Значение поля data: простой текст, разделитель строк \r\n
Формат записи:
адрес:порт:протокол\r\n
...
(одна или множество записей)
Например:
195.1.15.68:53:udp\r\n
195.1.15.68:53:tcp\r\n
Частоту отправки намайненных данных можно получить с управляющего сервера HTTP-запросом
GET /<group>/<clientid>/mass/freq HTTP/1.1
В теле ответа мы ожидаем число - это число секунд, не чаще которого следует отправлять данные.
Если это 0 - отправка сразу по готовности нового результата.
Если это положительное число - мы накапливаем записи в буфере и отправляем раз в X секунд,
очищая буфер при успешной отправке.
GET /<group>/<clientid>/mass/over HTTP/1.1
Ответ сервера - такой же, как на запрос /domains - новый список доменов для работы.
При неожиданном ответе (пустой список, код ошибки итд) модуль переходит на холостой ход (сканирование остановлено)
и делает тот же самый запрос раз в 10 минут (время - в константу).
Все необходимые настройки сканер получает запросами:
GET /<group>/<clientid>/mass/имянастройки HTTP/1.1
Следует вынести в админку основные настройки оригинальной программы
TODO Эти настройки будем добавлять по месту - сейчас трудно сказать, какие именно из них понадобятся.
АДМИНКА
Админка требует доработки состоит в определении правила разбиения общего диапазона на куски.
Пользователь вводит диапазоны тем или иным образом (либо в обычные текстовые поля ввода, либо загружает списки в виде текстовых файлов).
Задача админки - разбить эти диапазоны в большее количество меньших по размеру диапазонов, так чтобы сканирование одного суб-диапазона занимало не более часа на самой слабой машине,
и чтобы диапазонов было заведомо больше, чем ботов онлайн (всегда был резерв суб-диапазонов для выдачи).
Общий принцип - чем меньше размер суб-диапазона, тем лучше.
Ввод пользователем диапазонов для сканирования состоит из двух полей:
- диапазон адресов
- диапазон портов
Синтаксис диапазонов обычный для сетевых сканеров:
1. можно указывать отдельные адреса через , 10.0.0.1,10.0.0.2
2. можно указывать подсеть через число значащих бит 10.0.0.0/8
3. можно указывать начало и конец через тире 10.0.0.1-10.0.0.120
4. то же для портов, кроме пункта 2
5. можно задавать множество диапазонов. Тогда они объединяются по ИЛИ
Интерфейс пользователя админки должен разрешать ввод диапазонов с учетом вышесказанного.