AI Code Security — 4つのエージェントがSASTが見逃すAI生成コードを捉えます。GitLab Duo Agent Platform上に構築。
AIコードセキュリティ — SASTが見逃す脆弱性をAI生成コードから検出 GitLab Duo Agent プラットフォーム上に構築
AI生成コードの40〜62%にセキュリティ脆弱性が含まれています。
従来のSASTはCVEを検出します。私たちはSASTが見逃すもの — プロンプトインジェクション、LLM出力実行、安全でないMLデシリアライゼーションを検出します。
AIはコード生成を加速させる一方で、新たなセキュリティのボトルネックを生み出します:
| 課題 | 影響 |
|---|---|
| セキュリティレビューがMRを数時間から数日ブロックする | チームメンバー1人あたり週7時間の損失 |
| AIがコンプライアンス管理を困難にする | チームの70% がこれを報告 |
| デプロイ後に発見されるコンプライアンス問題 | 組織の76% |
| 従来のSASTツールはAI固有のリスクを見逃す | プロンプトインジェクション、LLM出力実行、安全でないMLデシリアライゼーション |
| AI生成コードの40〜62%に脆弱性がある | 既存のツールではAI固有の脅威パターンを検出できない |
出典: GitLab 2025 Global DevSecOps Report
AgentFlow Auditor — 従来のSASTが見逃すAI生成コードのセキュリティリスクをキャッチする4つのAIエージェント。LLMプロンプトインジェクション、出力実行、安全でないデシリアライゼーション、SQLインジェクション、SSRF、パストラバーサルを含む41の検出ルール。スキャン可能なレポートを投稿し、修正パッチを生成し、リスクの変化を追跡します。1つの@mentionですべてをトリガーします。
Developer opens MR │ ▼ @duo-agentflow-auditor review this MR │ ▼ ┌───────────────────────────────────────────────────────┐ │ │ │ ┌─────────────┐ ┌──────────────────┐ │ │ │ Scanner │──────▶│ Reporter │ │ │ │ Agent │ │ Agent │ │ │ │ │ │ │ │ │ │ Read diffs │ │ Grade risk │ │ │ │ Match 34 │ │ Risk heatmap │ │ │ │ rules │ │ Post MR comment │ │ │ │ Score risk │ │ Create issue │ │ │ └─────────────┘ └────────┬─────────┘ │ │ │ │ │ ┌───────┴────────┐ │ │ │ SAFE? │ │ │ │ ├─ Yes ──────────────┐ │ │ │ └─ No ───┐ │ │ │ │ └───────────┘ │ │ │ │ │ │ │ │ │ ┌─────────────┐ ┌────────▼───────┘┐ │ │ │ │ Metrics │◀──────│ Fixer │ │ │ │ │ Agent │ │ Agent │ │ │ │ │ │◀──────────────────────────────┘ │ │ │ Baseline │ │ Confidence-scored│ │ │ │ Cross-MR │ │ patches │ │ │ │ Green │ │ Fix branch + MR │ │ │ │ Posture │ │ │ │ │ └─────────────┘ └─────────────────┘ │ │ │ │ GitLab Duo Agent Platform (ambient) │ │ │ │ ┌───────────────────────────────────────────┐ │ │ │ External SAST Agent (CI/CD container) │ │ │ │ bandit + semgrep + custom rules merge │ │ │ └───────────────────────────────────────────┘ │ └───────────────────────────────────────────────────────┘
### エージェント一覧
| エージェント | 役割 | ツール | 主要機能 |
|:------|:-----|:------|:---------------|
| **Scanner** | MRの差分を分析 | 10ツール | 41ルール (26 regex + 15 Semgrep)、AI特有の脅威検出、脆弱性統合 |
| **Reporter** | 監査レポートを投稿 | 7ツール | 10秒でスキャン可能 (グレード + ヒートマップ + トップ5)、脆弱性リンク、DANGER時に自動Issue作成 |
| **Fixer** | コード修正を生成 | 8ツール | 信頼度スコア付きパッチ (HIGH/MEDIUM/LOW)、自動修正MR作成 |
| **Metrics** | リスクベースラインを追跡 | 6ツール | MR横断学習、チームの姿勢、ベースラインのドリフト、エネルギー/カーボン追跡 |
| **SAST Scanner** | 外部SAST | CI/CD | bandit + semgrepを実行し、Pythonスクリプトでカスタムルールと統合 |
---
## 機能
<table>
<tr>
<td width="50%">
### セキュリティスキャン
- **41の検出ルール** — 26 regex + 15 Semgrepカスタムルール
- **8つのリスクカテゴリ** — 破壊的コマンドからプロンプトインジェクションまで
- **AI特有の検出** — LLMプロンプトインジェクション、output-to-exec、安全でないデシリアライゼーション
- **リスクスコアリング** — 発見ごとに0-100 (深刻度 x コンテキスト x カテゴリ)
- **グレードシステム** — SAFE / WARNING / DANGER
</td>
<td width="50%">
### 自動化
- **ワントリガー起動** — `@mention` またはレビュアー割り当て
- **条件付きルーティング** — SAFEスキャンはFixerをスキップし、トークンを節約
- **構造化MRコメント** — リスクテーブル、修正提案、折りたたみ可能な詳細
- **自動修正生成** — 新しいブランチにコードパッチ
- **Issue作成** — DANGERグレード時に自動
</td>
</tr>
<tr>
<td width="50%">
### ベースライン追跡
- **リスクドリフト検出** — 時間経過に伴うスキャンの比較
- **トレンド分析** — 改善 / 悪化 / 安定
- **修正採用率** — 適用された提案の数を追跡
- **履歴ログ** — スキャンごとにJSONL追記
</td>
<td width="50%">
### グリーンメトリクス
- **トークン追跡** — スキャンごとの使用量
- **エネルギー推定** — スキャンごとのkWh
- **カーボンフットプリント** — 実世界の例えと共にkg CO2
- **最適化提案** — スキャンスコープの削減、ベースラインのキャッシュ
</td>
</tr>
</table>
---
## 検出カテゴリ
### Semgrepカスタムルール
6カテゴリにわたる15の本番グレードのSemgrepルール:
| ルール | カテゴリ | 深刻度 | 検出 |
|:-----|:---------|:---------|:----------|
| `llm-prompt-injection` | AIセキュリティ | WARNING | LLM API呼び出しへのユーザー入力の流れ |
| `llm-output-code-exec` | AIセキュリティ | ERROR | LLM出力がexec/evalに渡される |
| `unsafe-deserialization-ml` | AIセキュリティ | WARNING | 信頼できないモデルでのpickle.load、torch.load |
| `sql-injection` | Webセキュリティ | ERROR | 文字列フォーマットされたSQLクエリ (f-string、.format、concat) |
| `path-traversal` | Webセキュリティ | ERROR | ファイルパス操作でのユーザー入力 (../ トラバーサル) |
| `ssrf-request-forgery` | Webセキュリティ | ERROR | HTTPリクエスト内のユーザー制御URL |
| `open-redirect` | Webセキュリティ | WARNING | リダイレクト関数でのユーザー入力 |
| `missing-input-validation` | Webセキュリティ | WARNING | スキーマ検証なしで使用されるリクエストデータ |
| `dangerous-eval-exec` | Python | WARNING | 動的コンテンツを使用したeval/exec |
| `subprocess-shell-true` | Python | WARNING | shell=True を使用したsubprocess |
| `dangerous-os-system` | Python | WARNING | os.system/popen (非推奨) |
| `insecure-random-python` | 暗号 | WARNING | セキュリティトークンにrandomモジュールを使用 |
| `insecure-random-javascript` | 暗号 | WARNING | セキュリティトークンにMath.random()を使用 |
| `hardcoded-credentials` | シークレット | WARNING | ハードコードされたパスワード、APIキー、トークン |
| `insecure-http` | ネットワーク | INFO | HTTP URL (autofixでHTTPSに修正) |
### 正規表現検出カテゴリ
| カテゴリ | 深刻度 | パターン例 |
|:---------|:---------|:-----------------|
| 破壊的コマンド | 🚨 Danger | `rm -rf /`, `mkfs`, `dd to disk` |
| 認証情報の流出 | 🚨 Danger | `curl` posting secrets to external URLs |
| プロンプトインジェクション (深刻) | 🚨 Danger | "前の指示を無視", ロールオーバーライド |
| 難読化された実行 | 🚨 Danger | `base64 -d \| bash`, リモートパイプからシェル |
| シェル実行 | ⚠️ Warning | `shell=True`, `eval()`, `exec()`, `os.system()` |
| ネットワーク呼び出し | ⚠️ Warning | `curl`/`wget`/`fetch` to external URLs |
| 安全でないトランスポート | ⚠️ Warning | `http://` を使用すべき箇所で `https://` |
| ハードコードされた認証情報 | ⚠️ Warning | ソース内のパスワード、APIキー、トークン |
### リスクスコア計算式```
score = severity_weight + category_weight + executable_context + actionable + risk_modifier
= clamp(0, 100)