МОДУЛЬ РАСПРОСТРАНЕНИЯ ТЕХНИЧЕСКОЕ ЗАДАНИЕ ЦЕЛЬ Доработать имеющийся модуль распространения по сети: * Добавить универсальный интерфейс для добавления новых эксплойтов * Определить используемый тип эксплойта и оформить его для работы через интерфейс * Добавить эксплойт BlueKeep в модуль. ОПИСАНИЕ МОДУЛЯ Модуль сканирует локальную сеть и применяет на найденных машинах некий эксплойт - тип пока неизвестен. Известно, что шелл-код скачивает нагрузку по адресу http://galamatics.com/jomangi1.png и http://galamatics.com/jomangi2.png (вероятней всего через DownloadFromUrlA) и запускает ее. Организация шелл-кода неизвестна: если он специфичный для эксплойта, там может быть ROP. Если нет, то возможно там производится поиск нужных функций в таблице импорта и работа через них. Сканирование производится по трем типам сетевого окружения: - обычная рабочая группа Windows - домен Windows - LDAP Модуль оформлен в соответствии с документом module_HOWTO. ДОРАБОТКА Все доработки должны проводиться в рамках документа module_HOWTO. Код сканирования сети не требует доработки. Доработки требует следующее: 1) Интерфейс работы с эксплойтами: - у эксплойта должен быть основной метод Exploit(const char* hostname) (здесь может быть адрес машины или ее имя) - код сканирования сети должен быть изолирован от кода эксплуатации - модуль должен собираться как конструктор, из нужной комбинации сканера сети и варианта эксплойта, условной компиляцией. Цель - переиспользовать код сканирования, для создания на его основе разных модулей. Комбинация "каждый с каждым" не нужна (каждый эксплойт с каждым вариантом сканирования) - нету цели достичь полной вариативности. Реализовать такой конструктор следует так: - макросами в файле config.h выбирается, какой именно модуль мы собираем. Этими же макросами отключаем неиспользуемый в данной сборке код. Например, если используем эксплойт FOO, делаем config.h: #define FOO #undef BAR foo.cpp: #include "config.h" #ifdef FOO ... code here ... #endif - Название выходного файла должно быть разным для разных вариаций - Лучше всего использовать профили компиляции в Visual Studio для разных вариантов В таком случае можно макросы препроцессора задавать непосредственно в настройках сборки для конкретного профиля проекта. На каждый вариант создать свой профиль сборки. 2) В модуль следует добавить эксплойт BlueKeep в соответствии с интерфейсом работы с эксплойтами. Информация по BlueKeep: https://github.com/umarfarook882/CVE-2019-0708 https://github.com/n1xbyte/CVE-2019-0708 https://github.com/adalenv/CVE-2019-0708-Tool https://github.com/gobysec/CVE-2019-0708 https://github.com/Ekultek/BlueKeep https://github.com/robertdavidgraham/rdpscan https://github.com/zerosum0x0/CVE-2019-0708 https://github.com/dothanthitiendiettiende/BlueKeep https://github.com/Ekultek/BlueKeep/blob/master/bluekeep_poc.py 3) Дооформление модуля - обфусцировать строки библиотекой Andrivet Advanced Obfuscator, применить шифрование из MetaString4.h - обфусцировать системные вызовы через GetApi - добавить следующие события: + Module wormDll build %date% %time% started - при старте модуля + Trying %sploit% on %hostname% (%addr%) - при применении эксплойта к хосту - сделать логирование в файл в текущем каталоге. Имя лога такое же, как у запускаемого модуля, но с расширением .log Использовать приложенную библиотеку логирования. - логирование должно происходить только в профилях сборки Debug, Release_logged. В профиле Release_nologs логирование должно отключаться (отключением макросов LOG_TO_FILE, LOG_TO_CONSOLE)