CustomC2ChannelTemplate — Cobalt Strike向けカスタムC2チャンネルテンプレート
概要
このリポジトリは、Cobalt StrikeのカスタムC2チャネルを作るためのシンプルなPoC(Proof of Concept)兼テンプレートです。特徴は、リフレクティブローダーでロードしたエージェントのインポートアドレステーブル(IAT)をフックして、既存のAPI呼び出しをカスタム通信経路へ差し替える点にあります。公式のExternalC2インターフェースが抱える「ステージングが必須」「アーキテクチャや既存ビーコンとの連携の制約」といった運用上の煩雑さを軽減し、より柔軟な実験や実装の出発点を提供します。
リポジトリの統計情報
- スター数: 18
- フォーク数: 4
- ウォッチャー数: 18
- コミット数: 8
- ファイル数: 7
- メインの言語: C
主な特徴
- IATフックを用いたCobalt StrikeエージェントのAPI差し替え(フック実装のPoC)。
- リフレクティブローダーと組み合わせ、ディスクに痕跡を残さずメモリ上での差し替えを実現。
- ExternalC2のステージング要件やアーキテクチャ依存の制約を回避する設計思想。
- ブローカー(Python)と連携することでホスト側の通信仲介を容易にするテンプレート構成。
技術的なポイント
本プロジェクトの中核は「IAT(Import Address Table)フック」と「リフレクティブローダー」の組み合わせにあります。IATフックは、PEファイルが参照する外部APIの関数ポインタを実行時に書き換え、特定のAPI呼び出しをカスタム実装へ誘導する技術です。これにより、既存のエージェントコードを書き換えずに通信経路や動作を差し替えられます。リフレクティブローダーはPEをメモリ上で展開・初期化する手法で、ディスクにファイルを置かずに実行可能なため侵入痕跡を減らす利点があります。
リポジトリのソースを概観すると、hook.cにフック処理の実装(IAT書き換えロジックやフック先のスタブ)があり、hash.hに関数名やAPI解決のためのハッシュ/定義が含まれている想定です。broker.pyはホスト側での仲介や外部とエージェントを接続するための小さなコントローラで、テストやPoC用の通信を担当します。こうした構成により、ExternalC2で必要だった「SMBビーコンのステージング」や「エージェントを最初に外部チャネル上で初期化する」手順を省略し、既存のビーコンと直接やり取りするような実験的な構成が可能になります。
注意点としては、IATフックは関数解決の方法やOSバージョン、セキュリティ製品との相性によって不安定になりやすく、スレッド安全性や例外処理、戻し処理(アンフック)を適切に実装する必要があります。また、攻撃的な用途と見なされる可能性が高いため、利用は明確な許可の下で研究・教育・防御検証の範囲に限定すべきです。
プロジェクトの構成
主要なファイルとディレクトリ:
- .gitignore: file
- README.md: file
- broker.py: file
- hash.h: file
- hook.c: file
…他 2 ファイル
まとめ
IATフック+リフレクティブローダーでCobalt Strikeの通信経路を柔軟に試作するための実験用テンプレート。
リポジトリ情報:
- 名前: CustomC2ChannelTemplate
- 説明: template for developing custom C2 channels for Cobalt Strike using IAT hooks applied by a reflective loader.
- スター数: 18
- 言語: C
- URL: https://github.com/CodeXTF2/CustomC2ChannelTemplate
- オーナー: CodeXTF2
- アバター: https://avatars.githubusercontent.com/u/29991665?v=4
READMEの抜粋:
IAT Hooking for custom C2 channels
This is a simple PoC and template for developing custom C2 channels for Cobalt Strike using IAT hooks applied by a reflective loader.
Why did I make this?
The official ExternalC2 interface is a pain to use - it requires staging of an SMB beacon OVER the externalc2 channel, and (until 4.10) did not support communicating with a premade SMB beacon without staging through the externalc2 agent first. Even in its current state, it is still tied to the architec…