
Cobalt Strike Aggressor Scripts(.cna)向けのスタンドアロンなエミュレーションおよびテストハーネス。teamserver なしで構文を検証し、Beacon API をモックし、COFFLoader 経由で BOF を実行します。
CnaEmulator は、Cobalt Strike Aggressor Scripts (.cna) 向けのスタンドアロンで汎用的な開発・エミュレーション・テストハーネスです。セキュリティ研究者、ツール開発者、BOF 作者が、teamserver や GUI クライアントを起動することなく、スクリプト構文の検証、Beacon コンソールエイリアスコマンドのシミュレーション、および COFFLoader64.exe を介したインメモリ Beacon Object Files (BOFs) の直接実行を行えるようにします。
[!WARNING] 免責事項: このコードは Antigravity によって完全に生成されたものであり、まだレビューされていません。
check):
.cna スクリプトをコンパイルします。bof_pack):
datap バイナリ形式に一致するネイティブのリトルエンディアンシリアライゼーションを実装します:
'i': 4 バイト整数's': 2 バイト short'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 無視ルール
├── COFFLoader64.exe # 64 ビットスタンドアロンインメモリ COFF リロケータおよびローダー
├── cna_emulator.bat # 便利な CLI ランチャースクリプト
├── README.md # 包括的なドキュメントと使用ガイド
├── TESTING.md # コンポーネント検証レポート & 品質ゲート
├── TEST_SPEC.md # 48 シナリオ 7 カテゴリのテスト仕様
└── CnaEmulator/ # Java CNA エミュレータコンポーネント
├── .gitignore # CnaEmulator サブフォルダ用の Git 無視ルール
├── CnaEmulator.java # エミュレータソースコードと Sleep エンジンブリッジ
├── CnaEmulator.class # コンパイル済みバイトコード
├── CnaEmulator.jar # パッケージ化されたバイトコード JAR
├── build.bat # CnaEmulator をコンパイルおよびパッケージ化するビルドスクリプト
├── test.bat # スタンドアロンテストランナースクリプト (48 シナリオ)
└── tests/ # テストスイートとフィクスチャ
├── TestCnaEmulator.java # 48 シナリオテストハーネス
└── fixtures/ # ユニバーサルテストフィクスチャ
├── sample_bof.cna # スタンドアロンサンプル Aggressor Script
├── sample_bof.cna.tests # コンパニオンテストスイート
├── multi_alias.cna # マルチエイリアスサンプルスクリプト
└── multi_alias.cna.tests # マルチエイリアスコンパニオンテストスイート
クイック環境セットアップ (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 の検出、クラスパスの設定、およびパス解決を自動的に処理します:
cna_emulator.bat <action> [arguments...]
java -cp "CnaEmulator\CnaEmulator.jar;%SLEEP_JAR%" CnaEmulator <action> [arguments...]
java -cp "CnaEmulator;%SLEEP_JAR%" CnaEmulator <action> [arguments...]
check)コードを実行せずに、Sleep 2.1 を介して Aggressor Script の構文を検証し、AST ツリーをコンパイルします:
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
CnaEmulator の完全な 48 シナリオ仕様準拠テストスイートを実行するには:
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)
[!NOTE] ダミー / スタブ実装: その他すべての Cobalt Strike API — プロセス実行/インジェクション (
bshell,bpowershell,bexecute,bspawn,binject)、トークン操作 (bsteal_token,brev2self,bgetuid)、ファイルシステムナビゲーション (bpwd,bls,bupload,bdownload)、ピボット (socks,rportfwd)、UI プロンプト (prompt_text, )、および GUI フック (, , , ) を含む — は、エラーではない正の値 (, , , ) または no-op ブロックを返すダミースタブとして実装されており、スクリプトが失敗することなくオフラインで実行されます。
| 要件 | 説明 & セットアップ |
|---|
| 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")、ルートフォルダまたは CnaEmulator\ に sleep.jar を配置してください。 |
インメモリローダー (COFFLoader64.exe) | スタンドアロンローダーバイナリ (trustedsec/COFFLoader からコンパイルするなど)。ルートディレクトリに配置するか、COFFLOADER_PATH で上書きしてください。 |
| 関数 / キーワード | 説明 |
|---|
bof_pack | 4 バイトのバッファ長プレフィックス付きでリトルエンディアンバイナリ引数 (i, s, z, Z, b) をパックします。 |
beacon_inline_execute | COFFLoader64.exe go <bof.o> <hex_args> サブプロセスを起動し、ライブ stdout をストリーミングします。 |
script_resource | スクリプトディレクトリ、bin/、../bin/、および相対パスにわたって相対リソースパスを解決します。 |
openf, readb, closef | ローカルの .o BOF ファイルをバイトバッファに読み込むためのネイティブファイルシステム I/O。 |
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"]) を返します。 |
alias, command | コマンドブロックを、インタラクティブまたは CLI ディスパッチ用の実行可能クロージャとしてバインドします。 |
prompt_confirmpopupmenuitemon1"NT AUTHORITY\SYSTEM""C:\Windows\System32"true