7月22日、MarkTechPostが「Anthropic Releases Claude Security Plugin for Claude Code in Beta: A Multi-Agent Vulnerability Scanner That Runs in Your Terminal」と題した記事を公開した。AnthropicがClaude Code向けにリリースしたClaude Securityプラグインのベータ版は、従来の静的解析(SAST)ツールが苦手とする「誤検知の多さ」に正面から取り組む設計が特徴だ。3者パネルによる独立検証で脆弱性候補を査定し、2/3以上の合意がなければレポートに掲載しない——この厳格なフィルタリングが、AIを使った脆弱性スキャナーとしての信頼性を担保している。
Claude Codeとは何か
Claude Codeは、Anthropicが提供するターミナルネイティブのAIコーディングアシスタントだ。開発者のローカル環境で動作し、コードの読み書き・コマンド実行・Git操作などを自律的に行う。今回のClaude Securityプラグインはこのセッション内で動作し、外部サービスへのコードアップロードを必要とせずにリポジトリ全体または差分をスキャンできる。
従来のSAST(静的アプリケーションセキュリティテスト)ツールはルールベースの解析が主体で、コードのセマンティクスや実行文脈を考慮しにくいため、誤検知率の高さが長年の課題とされてきた。Claude Securityプラグインはマルチエージェントによる文脈理解と多数決制度を組み合わせることで、この課題へのアプローチを試みている。
ターミナルで動くマルチエージェント脆弱性スキャナー
AnthropicがClaude Code向けにClaude Securityプラグインをベータ公開した。既存のClaude Codeセッション内で動作し、リポジトリ全体または差分を対象にマルチエージェントによる脆弱性スキャンを実行する。検出した脆弱性はパッチファイルとして出力され、開発者が自身でレビューして適用するという設計だ。
インストールは2コマンドで完了する。
/plugin install claude-security@claude-plugins-official
/reload-plugins
プラグインのソースコードはclaude-plugins-officialリポジトリで公開されており、現時点のバージョンは0.10.0だ。
「報告書への掲載」は3者パネルの可決が必要
この設計で最も注目すべき点は、脆弱性候補がレポートに載るまでの審査プロセスだ。
各候補は3人の独立した検証者に渡される。それぞれが担当するレンズは以下の3つだ。
- REACHABILITY(到達可能性)
- IMPACT(影響度)
- DEFENSES(防御の有無)
各検証者は TRUE_POSITIVE または FALSE_POSITIVE の構造化された判定を、決定的な ファイル名:行番号 とともに返す。可決には3人中2人の合意が必要で、3人全員が返答しない場合は自動的に却下される。
さらに、パネル結果は報告書の「信頼度」の上限も規定する。全員一致(3/3)なら信頼度はhigh、2/3の合意ではmediumが上限となる。
特に重要なのは、この集計がモデル自身の主張ではなく、Pythonコードでレポートレンダラーが計算するという点だ。リビジョンスタンプの verification.status は、全ての発見事項についてパネルの投票記録が証明できた場合のみ verified となり、それ以外は unverified と理由を添えて明示される。レポートの厳密さを、モデルの言葉ではなく検証可能な形で担保する設計だ。
スキャンの仕組み:6フェーズの検証パイプライン
インストール後に追加されるコマンドは /claude-security のみで、3つのジョブをメニューから選択する。
- Scan codebase — リポジトリ全体または指定したサブセットをスキャン
- Scan changes — ブランチのdiff、プルリクエストのdiff、または単一コミットをスキャン
- Suggest patches — スキャン結果から
.patchファイルを生成
スキャン処理はJavaScriptのオーケストレーションスクリプトによるダイナミックワークフローとして実装されており(※公式ドキュメントの該当URLは現時点で確認が困難なため、詳細は元記事を参照されたい)、6つのフェーズでサブエージェントに処理を分散する。
- Inventory — リポジトリをコンポーネントに分割。全トップレベルディレクトリをスキャン対象またはスキップ対象に分類
- Threat model — コンポーネントごとにエントリポイント、シンク、トラストバウンダリを特定
- Research — コンポーネント×カテゴリのマトリクスで並列調査
- Sweep — マトリクスでカバーできなかったギャップを補完
- Panel — 3つの視点から独立した検証者が脆弱性候補を査定
- Adversarial — maxエフォート時のみ、生き残った候補をレッドチームで再検証
調査カテゴリは injection-and-input、auth-and-access、memory-and-unsafe、crypto-and-secrets の4固定。ただしPythonやTypeScriptなどメモリ安全な言語のみで構成されるコンポーネントでは memory-and-unsafe のレンズが省略され、3レンズで処理される。
エフォートは low / medium / high / max の4段階で、スキャン対象コンポーネント数の上限(low/mediumは12、high/maxは24)や研究者数(low/mediumは1、high/maxは2)、ギャップフィルのスイープ回数(lowは0回、mediumは1回、high/maxは2回)が変化する。
モデルの割り当ても役割ごとに異なる。オーケストレーターはOpus、リポジトリのカートグラファーとコードエクスプローラーはSonnetで動作する。スキャンエージェントは読み取り専用ツールのみに制限される。
パッチは「スクラッチクローン」で生成され、自動適用はしない
修正パッチはワーキングツリーとは切り離されたスクラッチクローン上で生成される。パッチ生成エージェントとは独立した別のエージェントがdiffをレビューし、プロジェクト自身のテストスイートを実行する。
パッチファイルの生成には以下の3条件を全て満たす必要がある。
- その脆弱性のみに対処している
- 新たな脆弱性を導入しない
- 既存の動作を変更しない(受け付ける入力の変化も「動作変更」とみなす)
緩められた認証チェックや無効化されたテストのような「修正と見せかけてセキュリティを弱める変更」は自動的にリジェクトされる。
生成されたパッチは patches/F1.patch のように連番で配置され、適用は手動で行う。
git apply CLAUDE-SECURITY-<timestamp>/patches/F1.patch
スキャン結果の出力ファイル
スキャンのたびにリポジトリ内に CLAUDE-SECURITY-<timestamp>/ ディレクトリが生成され、以下の3ファイルが書き込まれる。
- CLAUDE-SECURITY-RESULTS.md — 人間が読むレポート。各脆弱性にはID(F1など)、深刻度(HIGH/MEDIUM/LOW)、信頼度、CWE ID、シンクの行、影響、攻撃シナリオ、前提条件、推奨対処が含まれる
- CLAUDE-SECURITY-RESULTS.jsonl — 同内容のJSON形式(1行1オブジェクト)
- CLAUDE-SECURITY-REVISION-.json — スキャン対象のコミット、エフォートレベル、深刻度カウント、検証状況のスタンプ
このディレクトリには .gitignore が同梱されており、git add で誤ってコミットに含まれるのを防ぐ。監査用途でレポートをコミットしたい場合は、その .gitignore を削除すれば良い。
注意点:このプラグイン自体に隔離機能はない
利用にはClaude Code v2.1.154以降の有料プランと、Python 3.9.6以上(python3 としてPATHに存在すること)、Gitが必要だ。対応OSはLinux、macOS、Windowsで、スキャンはプランのトークン上限を消費する。
重要な制約として、このプラグイン自体にはサンドボックス機能がない。スキャンはユーザーセッションの権限下で動作するため、.claude/ の設定やhookもそのまま適用される。信頼できないリポジトリをスキャンする場合は sandbox-runtime の使用が推奨されている。
また、スキャン結果は非決定論的であり、従来の静的解析ツールや依存関係スキャン、コードレビューの代替にはならないと公式は明記している。
詳細はAnthropic Releases Claude Security Plugin for Claude Code in Beta: A Multi-Agent Vulnerability Scanner That Runs in Your Terminalを参照していただきたい。