
クラウド型デッドドロップC2フレームワーク — RSA-4096 + AES-256-GCM、5つのクラウドプロバイダー、Rustのみのエージェント、P2Pメッシュ、永続化エンジン、認証情報窃取
主要なC2が沈黙する。ドメインがブラックリストに登録される。ビーコンが検知フラグを立てられる。EDRがプロセスを終了させる。あなたはもう詰みだ。
必要なのは第二のチャネル — そもそもブロックされるはずのなかったチャネルだ。
もしコマンドアンドコントロールの通信が、従業員がDropboxにファイルを同期している様子と全く同じに見えたらどうだろう?
それがStratumだ。コマンドとレスポンスは、クラウドストレージフォルダ内のごく普通のファイルとしてやり取りされる。エージェントは攻撃者のインフラに一切接続しない。観測可能な通信は、標的のファイアウォールがすでにホワイトリストに登録しているプロバイダへのHTTPSのみ — なぜならDropboxやOneDriveをブロックすることは、それを使うすべての従業員をブロックすることを意味するからだ。
チームサーバーなし。攻撃者が所有するドメインなし。不審なTLS証明書なし。ブロックするものは何もない。
OPERATOR CLOUD PROVIDER TARGET
──────── ───────────── ──────
/Machine1/
WebGUI ──HTTPS──► input.txt 🔒 ◄── poll ── agent
output.txt 🔒 ──► read ──┘
heartbeat.txt (encrypted beacon)
エージェントは設定可能な間隔(+ 対数正規ジッター)で起動し、入力ファイルを読み取り、実行し、応答を暗号化してアップロードし、スリープします。すべてが RSA-4096-OAEP + AES-256-GCM でエンドツーエンドに暗号化されます。オペレーターの IP がターゲット側のネットワークログに現れることは決してありません。
| プロバイダー | 備考 | |
|---|---|---|
| Dropbox | OAuth2 リフレッシュトークン · ビジネスおよび個人アカウント | |
| Microsoft OneDrive | Microsoft Graph API · 個人および M365 アカウント | |
| Google Drive | Google Drive API v3 · OAuth2 サービスフロー | |
| SharePoint Online | Microsoft Graph API · M365 テナントサイト | |
| S3 互換 | AWS S3 · DigitalOcean Spaces · Backblaze B2 · 任意の S3 エンドポイント |
5 つすべてが同じワイヤーフォーマット、同じ RSA キーペア、同じオペレーターセッションを共有します。エージェントに触れることなく、数分でエンゲージメント中にプロバイダーを切り替えられます。 これをそのまま提供している他のオープンソースフレームワークは存在しません。
C2 を阻止したい SOC は、チームサーバーのドメインやフロントされたインフラをブロックします。Stratum を阻止したい SOC は、Dropbox、OneDrive、Google Drive、SharePoint、S3 を同時にブロックしなければなりません。それはファイアウォールルールではなく、どの企業も下さないビジネス上の判断です。デッドドロップアーキテクチャは検知を回避しようとはしません。防御側が恒久的に信頼することをすでに決めているインフラ上で動作します。
| 形式 | プラットフォーム | 依存関係 |
|---|---|---|
.exe / .dll | Windows | なし — Rust コンパイル済み PE(MSVC-ABI)、インタープリタなし、プロセスツリーに PowerShell なし |
.elf | Linux | なし — Rust コンパイル済み musl 静的リンク、任意の x86_64 Linux で動作 |
.bin | Linux / Windows | x64 PIC シェルコード — 任意の外部ローダーやインジェクターに投入可能 |
ウィザードがそれらすべてを生成します。プロンプトに答えるだけで、コンパイル、暗号化、パッケージ化を行います。コンパイラフラグ、環境変数、手動のキー管理は不要です。
| モード | 仕組み | 最適な用途 |
|---|---|---|
| staged-enc | ターゲット上には最小限のスタブ。初回実行時:クラウドからワンタイムブートストラップキーを取得し、メモリ内で完全なエージェントを復号し、クラウドからキーを削除。ペイロードが平文でディスクに触れることはない。 | 標準的なエンゲージメント — 初期アーティファクトが最小、配信時にキーが破棄される |
| stageless-enc | 完全なエージェントを単一の配信ファイルに埋め込み、スタブに焼き込まれたキーで暗号化。配信後のクラウドキー取得は不要。 | エアギャップまたは制限されたネットワーク — 単一の自己完結型ファイル |
| stageless-plain | エージェントは平文。コマンドと応答は転送中も完全に暗号化されたまま。 | ラボおよび制御された環境 |
すべてのモードが同じ実行後の動作を共有します。スタブは HW フィンガープリントされた暗号化ブロブをローカルにキャッシュするため、以降の実行ではクラウドに触れることなくディスクから読み込みます。
レジストリキーや cron エントリに一切触れる前に、/persist probe を実行します。エージェントは現在の権限レベルで利用可能なすべての手法をチェックし、実現可能性レポートを返します。非破壊的 — アーティファクトは一切残しません。
/persist probe
✓ schtask-logon — feasible (SYSTEM)
✓ registry-run — feasible
✗ schtask-boot — requires elevation
✓ startup-folder — feasible
...
動作するものを選び、インストールし、終わったらきれいに削除できます。WebGUI はインストールされたすべての手法をセッションごとに追跡します。/kill は永続化、バイナリ、クラウドアーティファクトなどすべてを 1 つのコマンドで一掃します。
キルデート、メンテナンスウィンドウ、対数正規ジッター、ワンタイムブートストラップキー — これらはすべてウィザードで一度設定され、エージェントに恒久的にコンパイルされます。エンゲージメント中に管理するものはなく、終了時にクリーンアップを忘れることもありません。
Stratum は Cobalt Strike、Sliver、Havoc の代替ではありません。それらの下にあるレイヤーです。
Day 1: deploy Stratum alongside your primary C2
Day 4: primary beacon gets flagged, process killed
Day 4: open Stratum session, assess what happened
Day 4: re-introduce primary C2 via Stratum shell
Day 5: back to full access
プライマリC2はポストエクスプロイテーションを処理します。Stratumは生存性を処理します。これは決して検出されるはずのないチャネルです。なぜなら、隠れようとすらしていなかったからです。ただDropboxのように見えるだけです。
これは、2025年から2026年にかけて記録された脅威アクターが実際に使用しているのと同じパラダイムです。TukTuk(Dropbox + Arweaveデッドドロップ)、NarwhalRAT/APT37(pCloud)、COBALT MIRAGE/Drokbk(GitHub)。Stratumは同じアーキテクチャを、単発のインプラントではなく適切なフレームワークとしてレッドチーム側にもたらします。
git clone https://github.com/daniomass/stratum-c2.git
cd stratum-c2
./install.sh --server
コンパイル済みエージェント(.exe、.elf、.dll、.bin、ネイティブ Rust)は Stratum の中核機能です。ウィザードは利用可能なターゲットを検出して使用し、ビルドできないものだけをスキップします。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
# Windows PE / DLL
rustup target add x86_64-pc-windows-gnu && sudo apt install mingw-w64
# Linux musl-static ELF
rustup target add x86_64-unknown-linux-musl && sudo apt install musl-tools
# Flat x64 shellcode
rustup target add x86_64-unknown-none && sudo apt install lld
python3 stratum-server.py
https://<host>:<port> を開き、ログインして Deploy をクリックします。ウィザードでは、プロバイダーの認証情報、エージェント形式、デプロイモード、永続化 ID、およびガードレール(kill date、window、jitter)を順に設定します。最後に、すぐに実行できる成果物が提供されます。セットアップの詳細は wiki(docs/wiki.html)に記載されています。
# Linux — background, no terminal
chmod +x stub.elf && nohup ./stub.elf &>/dev/null &
# Windows — hidden window (cmd or PowerShell)
start /b stub.exe
最初のビーコンでセッションは自動的にWebGUIに表示されます。
マルチオペレーター、リアルタイム、ブラウザベース。すべてのオペレーターがWebSocket経由で同じセッションをライブで確認できます。