
レッドチーム演習中に行われた運用上の変更を追跡するAggressorスクリプト。何が変更され、何をまだクリーンアップする必要があるかの完全な監査証跡を提供します。
Ledger は、エンゲージメント中に行われたすべての運用変更を追跡する Cobalt Strike の Aggressor スクリプトです。有効化したサービス、開放したファイアウォールルール、作成したアカウント、変更したレジストリキーはすべて、リスクスコア、オペレーターの帰属、クリーンアップ状況とともに記録されます。エンゲージメントの終了時には、何が変更され、何をまだクリーンアップする必要があるのかがわかる完全な監査証跡が得られます。
レッドチームのエンゲージメントはアーティファクトを残します。サービスが有効化され、アカウントが作成され、ファイアウォールルールが開放され、レジストリキーが変更されます。構造化されたログがなければ、これらは忘れられがちです — 特に長期にわたるエンゲージメントや、複数のオペレーターが同時に作業している場合はなおさらです。
Ledger が提供するジャーナルには、以下の機能があります:
ledger.cna を Cobalt Strike の scripts ディレクトリにコピーします。ledger.cna を選択します。dirty エイリアスが使用できるようになります。すべてのコマンドは、Beacon コンソールで dirty エイリアスを使用して実行します。
dirty <CATEGORY> <command> [comment] [score]
comment と score は省略可能です。省略した場合、カテゴリに基づいた適切なデフォルト値が使用されます。
dirty RPC "sql-enablerpc lon-db-1 lon-db-2"
dirty DEFENDER "add-exclusion C:\windows\temp" "Payload staging" 8
dirty GROUP "net group 'Domain Admins' svc_backup /add /domain"
dirty USER "net user backdoor P@ssw0rd! /add"
dirty SCHEDULED_TASK "schtasks /create /tn updater /tr C:\temp\beacon.exe /sc onlogon"
dirty exec <CATEGORY> <command> [comment] [score]
変更を記録し、すぐに beacon 上でコマンドを実行します — 2 つの手順を 1 つにまとめます。
dirty exec RPC "sql-enablerpc lon-db-1 lon-db-2"
dirty exec USER "net user backdoor P@ssw0rd! /add"
dirty exec DEFENDER "sc config WinDefend start= disabled"
dirty exec FIREWALL "netsh advfirewall set allprofiles state off"
dirty exec の制限
dirty exec は内部で brun を使用しており、cmd.exe /c ラッパーなしでバイナリを直接実行します。つまり:
net、sc、reg、nltest、whoami、ipconfig など)では動作します。sleep、cd、ls、pwd、download、upload、execute-assembly、inject など)では動作しません。これらの場合は、Beacon コマンドを通常どおり実行し、dirty <CATEGORY> <command> を別途使用して記録してください。dirty show
dirty show DEFENDER
dirty show DESKTOP-ABC123
記録されたすべてのエントリを表示します。オプションのフィルターは、コマンド、コメント、カテゴリ、ホスト名、ユーザー名に対して一致判定を行います。
dirty score
ホストごとのリスクサマリーを、合計スコア、未クリーンアップ数、視覚的なバーとともに表示します。ホストはスコアの高い順に並べられます。
dirty clean <id>
dirty clean all
dirty clean host <hostname>
ホスト名の一致は大文字と小文字を区別せず、部分一致にも対応します — DESKTOP は DESKTOP-FGN4LPG に一致します。
dirty export text
dirty export json
dirty export text DEFENDER
dirty export json DESKTOP-ABC
エクスポートは ledger.cna が置かれているディレクトリに書き込まれ、先頭にホストスコアサマリー、その後に完全な変更ログが含まれます。Ledger メニューバーのボタンは、フィルターなしのエクスポートを直接実行します。
dirty help
リストにないカテゴリも受け付けられ、デフォルトスコアは 3 になります。
エントリごと
| ラベル | スコア |
|---|---|
| LOW | < 5 |
| MEDIUM | 5 – 7 |
| HIGH | 8+ |
合計(ホストごと)
| ラベル | スコア |
|---|---|
| LOW | < 5 |
| MEDIUM | 5 – 9 |
| HIGH | 10 – 14 |
| CRITICAL | 15+ |
未クリーンアップの ledger エントリが残っている状態で beacon がデッドになると、Ledger は Cobalt Strike イベントログに赤い警告を送信します。これは接続中のすべてのオペレーターに表示されます:
警告は beacon ごとに 1 回送信され、beacon が復旧して再度チェックインすると自動的にリセットされます。リンクされた(子)beacon と、オペレーターによって明示的に kill された beacon は除外されます。警告のタイミングは beacon の sleep 設定に応じて変化します — sleep 60 秒では約 2 分後、sleep 5 分では約 10 分後に発火します。
LEDGER EXPORT -- 2026-05-21 19:50:34
HOST SCORE SUMMARY
================================================================================
Host Risk Score Pending Bar
--------------------------------------------------------------------------------
DESKTOP-RLP4KBJ (sally *) CRITICAL +21 2 pend [##########]
DESKTOP-FGN4LPG (Admin) CRITICAL +18 0 pend [#########]
================================================================================
CHANGE LOG
================================================================================
[000002] 2026-05-21 19:22:56 | neo | GROUP | MEDIUM +6 | CLEANED
Host : DESKTOP-FGN4LPG
User : Admin
Process : HTTP Listener_x64.exe (PID 4716)
Command : net group 'Domain Admins' svc_backup /add /domain
Comment : Added svc_backup to Domain Admins for lateral movement
{
"exported": "2026-05-21 19:53:19",
"host_summary": [
{
"host": "DESKTOP-FGN4LPG (Admin)",
"risk": "CRITICAL",
"score": 18,
"pending": 0
},
{
"host": "DESKTOP-RLP4KBJ (sally *)",
"risk": "CRITICAL",
"score": 21,
"pending": 2
}
],
"entries": [
{
"id": "000004",
"timestamp": "2026-05-21 19:31:36",
"operator": "neo",
"beacon_id": "1607712302",
"computer": "DESKTOP-RLP4KBJ",
"beacon_user": "sally *",
"beacon_process": "HTTP Listener_x64.exe (PID 11540)",
"functionality": "USER",
"command": "net user svc_backup P@ssw0rd123! /add /domain",
"comment": "Created service account for persistence",
"score": 7,
"risk": "MEDIUM",
"cleaned": false
}
記録およびクリーンアップされたすべてのエントリは elog を介して Cobalt Strike イベントログにブロードキャストされるため、接続中のすべてのオペレーターが互いの変更をリアルタイムで確認できます。ジャーナルはセッションの間、teamserver のメモリ上に保持されます。
ledger.cna が置かれているディレクトリに書き込まれます。dirty USER "net user ..." "my comment" 9 — 最後の引数で明示的なスコアを設定します。cmd.exe を必要とするシェル組み込みコマンド(dir、echo、set、type、パイプ(|)、リダイレクト(>)など)では動作しません。これらは dirty CATEGORY "shell <command>" を使用して手動で記録してください。.cna ファイルから読み込んだカスタム BOF エイリアスは、dirty exec 経由では正しくディスパッチされません。| カテゴリ | デフォルトスコア | デフォルトコメント |
|---|
| REGISTRY | 2 | レジストリが変更されました |
| FIREWALL | 3 | ファイアウォールルールが変更されました |
| SERVICE | 3 | サービス構成が変更されました |
| RPC | 4 | RPC に変更が加えられました |
| WINRM | 4 | WinRM が有効化されました |
| SMB | 4 | SMB 署名が変更されました |
| DCOM | 4 | DCOM が有効化されました |
| RDP | 5 | RDP が有効化されました |
| SCHEDULED_TASK | 5 | スケジュールタスクが作成されました |
| DEFENDER | 6 | Defender の構成が変更されました |
| GROUP | 6 | グループメンバーシップが変更されました |
| USER | 7 | ユーザーアカウントが変更されました |
| ACL | 8 | ACL が変更されました |
| SPN | 8 | SPN が変更されました |
| DOMAIN_ADMIN | 9 | ドメイン管理者グループが変更されました |
| TRUST | 9 | 信頼関係が変更されました |