ビルドパイプラインのセキュリティリスクを実証するためのCI/CDレッドチームフレームワーク
CI/CD レッドチームフレームワーク
Metasploit のようなものだが、CI/CD パイプライン向け。
BoostSecurity Labs の poutine Build Pipeline SAST スキャナーの開発者による。

警告: このツールは許可されたセキュリティテストのみに使用してください。
SmokedMeat は、CI/CD パイプラインの脅威が深刻に過小評価されているために存在します。従来のセキュリティトレーニングではサプライチェーン攻撃をほとんどカバーしておらず、攻撃者が実際に悪用する手法に対する防御側の準備が不十分です。
私たちは、セキュリティチームが現実的なレッドチーム演習を通じて、高度な CI/CD 攻撃手法に対する防御を学び、実践し、検証できるようにするためにこれを構築しました。
所有しているシステム、または明示的な書面による許可を得たシステムに対してのみ使用してください。
SmokedMeat は CI/CD パイプライン向けのポストエクスプロイテーションフレームワークです。GitHub 組織を指定し、脆弱なワークフローを見つけ、侵害されたランナーにインプラントを展開し、クラウドプロバイダーを介してピボットし、シークレットを抽出し、ブラスト半径をマッピングします – すべてターミナル UI から。
機能:
哲学: 大胆で騒がしい。これは EDR 回避ツールではありません。CI/CD 侵害がアラートをトリガーする前にどこまで深く進むかを示すデモンストレーションフレームワークです。
対象者:
SmokedMeat を初めて試すには、Docker と make をインストールしてください。Go は不要です。
git clone https://github.com/boostsecurityio/smokedmeat.git
cd smokedmeat
make quickstart
make quickstart が推奨される初回実行です。安定版リリースのクイックスタートスタックをローカルで起動し、オペレーター TUI (Counter) をローカルの C2 チームサーバー (Kitchen) に対して起動します。
推奨される初回実行:
whoolipublic_repo スコープのクラシック PAT⚠ クラシック PAT を推奨します。細粒度 PAT は制限が強すぎる場合があり、whooli を含む他の組織の公開ターゲットのテストをブロックする可能性があります。
whooli は SmokedMeat の意図的に脆弱な CI/CD 攻撃プレイグラウンドです。公開パスでの初回ターゲットとして推奨されます。
セットアップウィザードでは以下の手順を実行します:
repo スコープが必要です。whooli または独自の組織/リポジトリを入力完全なチャレンジフローについては、whooli ガイド を参照するか、whooli GitHub 組織 に直接アクセスしてください。
終了したら:
make quickstart-down # コンテナを停止
make quickstart-purge # 停止して全データを削除
代わりにソースから作業する場合は、開発 を参照してください。
ソースツリーに貢献またはローカルで反復する場合は、Go 1.26+ をインストールし、開発用クイックスタートを使用してください:
make dev-quickstart
make dev-quickstart はローカルの smokedmeat-cloud-shell イメージをビルドし、cloudflared、nats、C2 チームサーバー (Kitchen) を起動し、ソースからオペレーター TUI を起動します。
インフラを先に起動し、オペレーター TUI は後で起動したい場合:
make dev-quickstart-up
make dev-quickstart-counter
終了したら:
make dev-quickstart-down # コンテナを停止
make dev-quickstart-purge # 停止して全データを削除
その他のデプロイモードとローカル開発の詳細については、docs/deployment.md を参照してください。
Counter は起動時に新しい SmokedMeat リリースをチェックします。SMOKEDMEAT_DISABLE_VERSION_CHECK 環境変数を設定することで無効にできます。
| 標準用語 | SmokedMeat 名 | 説明 |
|---|---|---|
| オペレーター TUI | Counter | 分析、ペイロード配信、ポストエクスプロイトワークフローのためのターミナルインターフェース。 |
| C2 チームサーバー | Kitchen | オペレーターセッション、ステージャー、コールバック、グラフ状態のための API および WebSocket サーバー。 |
| インプラント | Brisket | 侵害された CI ランナーに配信されるエージェント。ビーコン、コマンド実行、ピボットに使用。 |
| ブラウザグラフビュー | Browser View | C2 チームサーバーが /graph で提供するライブアタックグラフ。 |
| モード | 使用タイミング | エントリポイント |
|---|---|---|
| クイックスタート | 固定リリースでの最速の初回実行 | make quickstart |
| 開発クイックスタート | ローカルでソースツリーを操作 | make dev-quickstart |
| ホステッドチームサーバー | 安定したドメインでの実際のエンゲージメント実行 | docs/deployment.md |
ホステッドチームサーバーは、C2 チームサーバーを専用ホストで実行し、オペレーター TUI を各オペレーターワークステーションでネイティブに実行します。
高レベルでは、オペレーター TUI (Counter) が C2 チームサーバー (Kitchen) と通信し、Kitchen が侵害された CI ランナー上で動作するインプラント (Brisket) を管理し、ライブアタックグラフを提供します。
┌──────────────┐
│ SSH AGENT │
│ (Auth) │
└──────┬───────┘
│
▼
┌──────────────┐ ┌──────────────┐
│ THE COUNTER │ ───────────────▶│ THE KITCHEN │
│ (Operator) │ WebSocket │ (Teamserver) │
│ Bubbletea │◀─────────────── │ │
│ TUI │ Events/Graph │ ┌──────────┐ │
└──────────────┘ │ │ Database │ │
│ └──────────┘ │
┌──────────────┐ │ │
│ BROWSER │ ───────────────▶│ │
│ Graph View │ WebSocket │ │
│ Visualizer │◀─────────────── │ │
└──────────────┘ Live Updates └──────────────┘
│ ▲
│ │
Creates PR │ │ Stager fetches implant binary
│ │ Implant HTTP Beacon/Commands
▼ │
┌────────────────────────────────────────────┴──────────────────────────────────┐
│ GITHUB.COM │
│ │
│ ┌─────────────────────┐ ┌─────────────────────────────────────────┐ │
│ │ Malicious PR │ triggers │ GitHub Actions Runner │ │
│ │ (Vulnerable │─────────▶│ │ │
│ │ Workflow) │ │ ┌────────────┐ ┌────────────────┐ │ │
│ └─────────────────────┘ │ │ Stager │─────▶│ THE BRISKET │ │ │
│ │ │ │ │ (Implant) │ │ │
│ │ └────────────┘ └────────────────┘ │ │
│ └─────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────────────────┘
詳細は docs/FEATURES.md を参照してください。
| カテゴリ | 機能 |
|---|---|
| 偵察 | 6つのCIプラットフォーム(GitHub Actions、GitLab CI、Azure DevOps、CircleCI、Jenkins、Bitbucket)を自動検出。シークレットの分類、OIDC利用可能性のプローブ、ランナーメタデータの収集。 |
| シークレット抽出 | /proc 経由で Runner.Worker プロセスメモリをスキャンし、GitHubがログから隠す masking されていない secrets.*、vars.*、GITHUB_TOKEN 権限マップを復元。 |
| 脆弱性分析 | 組み込み poutine SAST によるインジェクション脆弱性、危険なトリガー、ワークフロー if: ゲート分類。Gitleaks ディープスキャンによる git 履歴内の秘密鍵とPATの検出。 |
| 配信 | 5つの自動化手法: PR、Issue、コメント、LOTP、ワークフローdispatch – さらにコピーのみと手動。下書きPRサポート、コールバック時の自動クローズ、サーバー側dispatch事前チェック。 |
| インジェクションペイロード | 8つのインジェクションベクター(ブランチ名、PRタイトル/本文、コミットメッセージ、Issueタイトル/本文、github-script、bash run)向けのコンテキスト認識ペイロード生成。制約認識技術を使用。 |
| LOTP | Living Off The Pipeline カタログ: 15のビルドツール(npm、pip、cargo、make、docker、gradle、mavenなど)と、インストール/ビルド/テスト中のコード実行のための設定ファイルペイロード。 |
| キャッシュポイズニング | 書き手/被害者分類、正確なキャッシュキー予測、Actions Cache API 経由のアーカイブステージング。ウィザード駆動フローとインプラントアーミング。 |
| トークン列挙 | GitHub トークンを API エンドポイントに対してプローブし、10の権限スコープを列挙、トークンタイプを識別、アクセス可能なリポジトリと組織をリスト化。 |
| クラウドピボット | OIDC トークン交換: AWS (sts:AssumeRoleWithWebIdentity)、GCP (Workload Identity Federation)、Azure (AAD)、Kubernetes。ピボット後のリソース列挙。 |
| クラウドシェル | cloud shell(事前設定済み gcloud/aws/az)、cloud export、プロバイダークイックチェックによる永続的なローカルセッション。 |
| SSH ピボッティング | リポジトリ内のSSHデプロイキーアクセス(読み取り/書き込み)のプローブ、ssh shell による一時エージェント、確認されたアクセスをグラフに永続化。 |
| GitHub ピボッティング | pivot github によるリポジトリ発見、pivot app によるGitHub App PEMからインストールトークン交換。発見されたリポジトリは自動的に分析キューへ。 |
| アタックグラフ | 組織/リポジトリ/ワークフロー/ジョブ/脆弱性/トークン/クラウドのノードを持つ永続的有向グラフ(BBolt)。/graph でのライブ Cytoscape.js ブラウザ可視化。 |
| オペレーターTUI | フェーズ認識ワークフロー、7ステップセットアップウィザード、アタックツリーナビゲーション、エクスプロイトウィザード、戦利品ストレージ、オムニボックス検索、タブ補完、OSC 8 ハイパーリンク。 |
| レイヤー | 技術 |
|---|---|
| 言語 | Go 1.26+ |
| TUI フレームワーク | Bubbletea v2 + Lipgloss v2 |
| TUI レイアウト | Ultraviolet レイアウト + ANSIセーフスクリーン合成 |
| メッセージバス | NATS JetStream |
| アタックグラフ | hmdsefi/gograph |
| グラフ可視化 | Cytoscape.js |
| データベース | BBolt |
| CI/CD スキャナー | poutine (組み込み) |
| シークレットスキャナー | gitleaks (組み込み、カスタムルール) |
| ランナーシークレット抽出 | gump (組み込み、/proc メモリスキャン) |
| クラウド SDK | AWS SDK v2、Google Cloud、Azure SDK for Go |
| リバースプロキシ | Caddy (自動TLS) |
make test # 単体テスト
make lint # リンター
make e2e-smoke # 高速な公開エクスプロイトスモークパス
make e2e-goat # クラウドフラグまでの完全なヤギチェーン
SmokedMeat は以下の研究に基づいています:
GNU Affero General Public License v3.0 – 詳細は LICENSE を参照してください。
攻撃者の手法を理解したい防御者のために構築されました。
| チームサーバー | SSH またはトークン認証、NATS JetStream メッセージバス、GitHub API プロキシ(トークンはサーバー側に保持)、Caddy による自動TLS、操作履歴。 |