Автономный стенд для эмуляции и тестирования Aggressor Scripts (.cna) Cobalt Strike, который проверяет синтаксис, эмулирует Beacon API и выполняет BOF через COFFLoader без teamserver.
CnaEmulator — это автономный универсальный стенд для разработки, эмуляции и тестирования Aggressor Scripts (.cna) для Cobalt Strike. Он позволяет исследователям в области безопасности, разработчикам инструментов и авторам BOF проверять синтаксис скриптов, имитировать псевдонимы команд консоли Beacon и выполнять Beacon Object Files (BOF) в памяти напрямую через COFFLoader64.exe без запуска teamserver или GUI-клиента.
[!WARNING] Отказ от ответственности: Этот код был полностью сгенерирован с помощью Antigravity и ещё не прошёл проверку.
check):
.cna с использованием базового движка Sleep 2.1.bof_pack):
datap в Cobalt Strike:
'i': 4-байтовое целое's': 2-байтовое короткое целое'z': строка с префиксом длины и нулевым терминатором (префикс strlen + 1)'Z': широкая строка UTF-16LE с префиксом длины'b': бинарный буфер с префиксом длиныbeacon_inline_execute):
beacon_inline_execute($bid, $bof_data, "go", $packed_args).COFFLoader64.exe go <bof_path> <hex_args> как дочерний подпроцесс.test):
<script>.cna.tests или <script>.tests.console):
beacon> ) с поддержкой зарегистрированных псевдонимов, аргументов, справки и живого выполнения..
├── .gitignore # Git ignore rules for compiled binaries & bytecode
├── COFFLoader64.exe # 64-bit Standalone in-memory COFF relocator and loader
├── cna_emulator.bat # Convenient CLI launcher script
├── README.md # Comprehensive documentation and usage guide
├── TESTING.md # Component verification report & quality gates
├── TEST_SPEC.md # 48-scenario 7-category test specification
└── CnaEmulator/ # Java CNA Emulator component
├── .gitignore # Git ignore rules for CnaEmulator subfolder
├── CnaEmulator.java # Emulator source code and Sleep engine bridge
├── CnaEmulator.class # Compiled bytecode
├── CnaEmulator.jar # Packaged bytecode JAR
├── build.bat # Build script to compile and package CnaEmulator
├── test.bat # Standalone test runner script (48 scenarios)
└── tests/ # Test suite and fixtures
├── TestCnaEmulator.java # 48-scenario test harness
└── fixtures/ # Universal test fixtures
├── sample_bof.cna # Standalone sample Aggressor Script
├── sample_bof.cna.tests # Companion test suite
├── multi_alias.cna # Multi-alias sample script
└── multi_alias.cna.tests # Multi-alias companion test suite
| Требование | Описание и настройка |
|---|---|
| Java JDK (17+) | Бинарные файлы java и javac. Установите JAVA_HOME в путь к вашему JDK и убедитесь, что %JAVA_HOME%\bin присутствует в PATH. |
Sleep 2.1 (sleep.jar) | Движок скриптов для Aggressor Scripts. Скачайте с Sleep 2.1 или скопируйте из Cobalt Strike. Задайте SLEEP_JAR (например, set "SLEEP_JAR=C:\path\to\sleep.jar") или поместите sleep.jar в корневую папку либо в CnaEmulator\. |
Загрузчик в памяти (COFFLoader64.exe) | Автономный бинарный загрузчик (например, скомпилированный из trustedsec/COFFLoader). Размещается в корневом каталоге или переопределяется через COFFLOADER_PATH. |
Быстрая настройка окружения (cmd.exe):
set "JAVA_HOME=C:\path\to\jdk-17"
set "PATH=%JAVA_HOME%\bin;%PATH%"
set "SLEEP_JAR=C:\path\to\sleep.jar"
Перед запуском скомпилированных классов или JAR скомпилируйте CnaEmulator.java:
Использование скрипта сборки:
CnaEmulator\build.bat
Или ручная компиляция и упаковка:
:: Compile source to bytecode
javac -cp "%SLEEP_JAR%" -d CnaEmulator CnaEmulator\CnaEmulator.java
:: Package into executable bytecode JAR
cd CnaEmulator
jar cfe CnaEmulator.jar CnaEmulator *.class
cd ..
Вы можете запустить CnaEmulator любым из следующих способов из корневого каталога проекта:
Скрипт-лаунчер автоматически выполняет поиск JDK, настройку classpath и разрешение путей:
cna_emulator.bat <action> [arguments...]
java -cp "CnaEmulator\CnaEmulator.jar;%SLEEP_JAR%" CnaEmulator <action> [arguments...]
java -cp "CnaEmulator;%SLEEP_JAR%" CnaEmulator <action> [arguments...]
check)Проверяет синтаксис Aggressor Script и компилирует AST-деревья через Sleep 2.1 без выполнения кода:
cna_emulator.bat check <path\to\script.cna>
Пример со встроенным фикстуром:
cna_emulator.bat check CnaEmulator\tests\fixtures\sample_bof.cna
Пример вывода:
[*] Checking syntax of: CnaEmulator\tests\fixtures\sample_bof.cna
[+] sample_bof.cna syntax OK
run)Выполняет объявленный псевдоним Aggressor, упаковывает аргументы в бинарный формат (bof_pack), разрешает путь к объектному файлу (script_resource) и вызывает COFFLoader64.exe для выполнения BOF в памяти вызывающего процесса:
cna_emulator.bat run <path\to\script.cna> <alias_name> [arguments...]
Пример со встроенным фикстуром:
cna_emulator.bat run CnaEmulator\tests\fixtures\sample_bof.cna sample_bof run test_target
Пример вывода:
[*] Invoking: sample_bof 1 run test_target
[*] Tasked beacon: Executing sample_bof with action: run
[+] [COFFLoader Bridge] Executing: COFFLoader64.exe go sample_bof.o
| Got contents of COFF file
| Running/Parsing the COFF file
| Ran/parsed the coff
| Outdata Below:
| ...
[+] [COFFLoader Bridge] Completed with exit code: 0
test)CnaEmulator test обеспечивает автоматизированное выполнение тестов:
cna_emulator.bat test <path\to\script.cna> [alias] [arguments...]
Режимы выполнения:
<alias> и [arguments...] указаны в командной строке, выполняется только этот конкретный сценарий.CnaEmulator проверяет наличие сопутствующего файла тестов рядом со скриптом:
<script_dir>\<script_name>.cna.tests<script_dir>\<script_name>.tests
Если файл найден, все строки сценариев из сопутствующего файла выполняются последовательно.CnaEmulator проверяет все зарегистрированные псевдонимы команд и выполняет тест защитного условия, чтобы убедиться, что неверное количество аргументов выводит ошибку использования без выброса необработанных исключений.Примеры:
:: Run automated tests on the bundled sample script (executes sample_bof.cna.tests)
cna_emulator.bat test CnaEmulator\tests\fixtures\sample_bof.cna
:: Run automated tests on the bundled multi-alias script (executes multi_alias.cna.tests)
cna_emulator.bat test CnaEmulator\tests\fixtures\multi_alias.cna
:: Run a targeted scenario directly via CLI
cna_emulator.bat test CnaEmulator\tests\fixtures\sample_bof.cna sample_bof query
Создание сопутствующих файлов тестов (<script>.cna.tests):
Создайте текстовый файл рядом с вашим скриптом .cna. Каждая непустая строка, не являющаяся комментарием, задаёт псевдоним и его параметры:
# Sample BOF Companion Test Suite
# Format: <alias> [arguments...]
sample_bof run test_target
sample_bof query
console)Запускает интерактивную командную строку beacon> с поддержкой зарегистрированных псевдонимов, истории команд и имитации выполнения:
cna_emulator.bat console <path\to\script.cna>
Пример интерактивной сессии:
====================================================================
CnaEmulator Interactive Beacon Console
Loaded Script: sample_bof.cna
====================================================================
Type 'help' to see registered commands, or 'exit' to quit.
beacon> help
Registered Beacon Commands:
- sample_bof : Sample BOF execution command
beacon> sample_bof run local_target
[*] Tasked beacon: Executing sample_bof with action: run
[+] [COFFLoader Bridge] Executing: COFFLoader64.exe go sample_bof.o
...
beacon> exit
CnaEmulator полностью универсален и может тестировать Aggressor Scripts и бинарные файлы BOF, расположенные в любом каталоге или внешнем репозитории в вашей файловой системе:
:: Validate any external script syntax
cna_emulator.bat check C:\Projects\CustomBof\my_bof.cna
:: Execute external BOF alias commands with live arguments
cna_emulator.bat run C:\Projects\CustomBof\my_bof.cna my_command target_argument
:: Run companion test suites for external scripts
cna_emulator.bat test C:\Projects\CustomBof\my_bof.cna
:: Open interactive console with external script
cna_emulator.bat console C:\Projects\CustomBof\my_bof.cna
Чтобы запустить полный набор тестов на соответствие спецификации из 48 сценариев для CnaEmulator:
CnaEmulator\test.bat
Ожидаемый результат:
====================================================================
Execution Summary
====================================================================
Total Scenarios : 48
Passed : 48
Failed : 0
Assertions : 172
Elapsed Time : ~2800 ms
====================================================================
[+] ALL 48 TEST SCENARIOS PASSED CLEANLY (100% SPECIFICATION CONFORMANCE)
| Функция / Ключевое слово | Описание |
|---|---|
bof_pack | Упаковывает бинарные аргументы Little-Endian (i, s, z, Z, b) с 4-байтовым префиксом длины буфера. |
beacon_inline_execute | Запускает подпроцесс COFFLoader64.exe go <bof.o> <hex_args> и передаёт stdout в реальном времени. |
script_resource | Разрешает относительные пути к ресурсам в каталоге скрипта, bin/, ../bin/ и относительных путях. |
openf, readb, closef | Нативный файловый ввод-вывод для чтения локальных .o файлов BOF в байтовые буферы. |
btask, berror, blog, blog2 | Форматирует и выводит сообщения о задачах, статусе и ошибках в stdout/stderr. |
beacon_command_register | Регистрирует псевдонимы, краткие описания и справку в живом каталоге команд. |
beacon_commands, beacon_command_detail | Запрашивает списки зарегистрированных команд и текст справки для интерактивного/консольного использования. |
barch | Возвращает "x64". |
bdata, beacon_info | Возвращает фиктивный хеш метаданных Beacon (id: 1, pid: 13020, user: SYSTEM, arch: x64). |
beacons, beacon_ids | Возвращает массив активных имитируемых beacon (["1"]). |
| , |
[!NOTE] Фиктивные / заглушечные реализации: Все остальные API Cobalt Strike — включая выполнение/инъекцию процессов (
bshell,bpowershell,bexecute,bspawn,binject), манипуляцию токенами (bsteal_token,brev2self,bgetuid), навигацию по файловой системе (bpwd,bls,bupload,bdownload), пивотинг (socks,rportfwd), UI-запросы (prompt_text,prompt_confirm) и GUI-хуки (popup,menu,item,on) — реализованы как фиктивные заглушки, возвращающие положительные (не ошибочные) значения (1,"NT AUTHORITY\SYSTEM","C:\Windows\System32",true) или пустые блоки, чтобы скрипты выполнялись в автономном режиме без сбоев.
aliascommand| Привязывает блоки команд как исполняемые замыкания для интерактивной отправки или отправки через CLI. |