自律型AIペンテスター「Shannon」をOWASP Juice Shopで検証してみた
はじめに:ITmediaの記事がきっかけだった
概要
ふと目にしたITmediaの記事が、すべての始まりでした。
人間より優秀? 自律型AIペンテスターツール「Shannon」が登場
記事によると、このツールは単なる静的解析ではなく、実際にブラウザを操作して攻撃を完遂し、ベンチマークでは人間のテスターを上回る成功率を記録したとのこと。
「AIが勝手にハッキングして、レポートまで書いてくれる時代が来たのか?」
という驚きより、まあそんなんいつかくるやろ。という感じでしたが
半信半疑ながらも、エンジニアとしての好奇心を抑えきれず、私はターミナルを開いていました。
本記事では、話題の自律型AIペンテスター Shannon を、脆弱性だらけでおなじみの OWASP Juice Shop に対して実行し、その実力を実環境でなんとなく検証した記録をまとめます。
本記事で検証すること
- 本当に「自律的」に攻撃できるのか?
- どのレベルの脆弱性まで発見・悪用できるのか?
- 生成されるレポートの品質は実務に耐えるのか?
本記事で期待してはいけないこと
- 当方、よわよわセキュリティエンジニアです。
準備とセットアップ:戦いの舞台を整える
概要
Shannonは非常に高度なツールですが、Dockerベースのため導入は驚くほどシンプルでした。ここでは、環境準備から実行までの流れを簡単に整理します。
前提条件/必要なもの
- Docker
- Git
- Anthropic API Key Claudeを思考エンジンとして利用(sk-ant-... から始まるキー)
- お金(50ドルくらい)
- Windows PowerShellを使用しています。
セットアップ手順
- GitHubリポジトリのクローン
- Dockerイメージのビルド
- ターゲット(OWASP Juice Shop)のソースコードを配置
手順1:PowerShellの準備とClaude Codeのインストール
まずは管理者権限ではなく、通常のユーザー権限で Windows PowerShell を起動してください。
Claude Code ツールをインストールします。 以下のコマンドをコピー&ペーストして実行してください。
irm https://claude.ai/install.ps1 | iex
確認: ✔ Claude Code successfully installed! と表示されればOKです。
注意: 初回インストール後、一度ターミナル(PowerShell)を閉じて、再度開き直してください(パスを反映させるため)。
手順2:Shannonのダウンロードと初期設定
ログにある通り、WindowsとLinuxの改行コードの違い(CRLF問題)が後のエラー原因となります。これを防ぐ設定を行ってからダウンロードします。
改行コードの設定(重要) Windowsの自動変換を無効化します。
git config --global core.autocrlf false
Shannonリポジトリのクローン(ダウンロード)
git config --global core.autocrlf false
Shannonリポジトリのクローン(ダウンロード)
git clone https://github.com/KeygraphHQ/shannon.git
Shannonフォルダへ移動
cd shannon
手順3:ターゲット(Juice Shop)の準備
Shannonが診断する対象のアプリ「OWASP Juice Shop」を準備します。Shannonはソースコードの解析も行うため、ソースコードのダウンロードが必要です。
reposフォルダへ移動 Shannonフォルダの中にある repos ディレクトリに移動します。
cd repos
Juice Shopのソースコードをダウンロード
git clone https://github.com/juice-shop/juice-shop.git
Shannonフォルダ(ルート)へ戻る
cd ..
※現在のパスが C:\Users[ユーザー名]\shannon (またはそれに準ずる場所) であることを確認してください。
【重要】ターゲットアプリの起動 Shannonとは別に、診断対象のJuice Shopを起動しておく必要があります。これにはDockerを使用するのが最も簡単です。新しいPowerShellウィンドウを開き、以下を実行してください。
docker run --rm -p 3000:3000 bkimminich/juice-shop
しばらく待ち、server listening on port 3000 と表示されたら起動成功です。このウィンドウは開いたままにしておいてください。
手順4:ShannonのDockerイメージ作成(ビルド)
元のPowerShellウィンドウ(shannon フォルダにいる方)に戻り、Shannon本体を動かすためのDockerイメージを作成します。
Dockerイメージのビルド 以下のコマンドを実行します。
docker build --no-cache -t shannon:latest .
解説: 通信エラーで一度失敗しました。--no-cache をつけることでクリーンな状態でビルドしています。
時間: 数分~10分程度かかります。コーヒーを入れましょう。
成功確認: 最後に FINISHED と表示されれば完了です。もし赤文字のエラー(IO ERRORなど)が出た場合は、もう一度同じコマンドを実行してください(通信回線の問題の可能性があります)。
自分は1回失敗したのでもう一度実行しています。
手順5:APIキーの設定
APIキーを環境変数に設定します。
APIキーの設定 "ここにあなたのAPIキー" の部分を取得した実際のキー(sk-ant-...)に書き換えて実行してください。
$env:ANTHROPIC_API_KEY = "ここにあなたのAPIキー"
トークン制限の設定 AIの出力制限を設定します。
$env:CLAUDE_CODE_MAX_OUTPUT_TOKENS = "64000"
設定の確認 キーがセットされたか確認します(キーが表示されます)。
echo $env:ANTHROPIC_API_KEY
手順6:Shannonの実行(診断開始)
いよいよ診断を実行します。Windows PowerShell特有の記述ルール(バッククォート ` で改行など)と、Dockerのネットワーク設定(host.docker.internal)を正しく組み合わせたコマンドが以下です。
以下のコマンドブロックをすべてコピーし、PowerShellに貼り付けて実行してください。
docker run --rm -it `
--add-host=host.docker.internal:host-gateway `
-e ANTHROPIC_API_KEY="$env:ANTHROPIC_API_KEY" `
-e CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000 `
-v "${PWD}/repos:/app/repos" `
shannon:latest `
"http://host.docker.internal:3000/" `
"/app/repos/juice-shop"
コマンドの解説(トラブルシューティング用)
--add-host=host.docker.internal:host-gateway:
コンテナ内からWindowsホスト側で動いているJuice Shop(ポート3000)にアクセスするために必須です。
-v "${PWD}/repos:/app/repos":
現在のフォルダにある repos(Juice Shopのコードが入っている)をコンテナ内の /app/repos に同期します。
"http://host.docker.internal:3000/":
診断対象のURLです。
"/app/repos/juice-shop":
コンテナ内でのソースコードの場所です。
(この辺でぐちゃった記憶があるような気もするけどちょっと覚えてない。間違ってたらごめんね)
実行

実行中の操作と完了待ち
コマンドを実行すると、以下のようなフェーズで自動的に診断が進みます。
-
Phase1 Pre-reconnaissance (事前偵察)
数分間で350ターン以上の思考を行い、アプリケーションの特性を把握
ターゲットの基本情報を収集します。
小さいですが左上にPhase1と記載されています。
ロボット君がなんか作業しているようです。

-
Phase2 Reconnaissance(本格偵察)
ブラウザエージェントが自律的にログイン画面や商品ページを探索・解析
APIエンドポイントや脆弱性の候補を探します。

各phaseの間に見える$の文字、API使用料金流れていきます。
Claud consoleを確認すると$50いれたクレジットは減っています。

Shannonは裏側でAnthropicの Claude API を大量に呼び出します。エージェントが思考し、ページを解析し、行動するたびに、私のクレジットカードから音もなくお金が消えていく感覚。
「AIが勝手に働いてくれる」のは最高だが、知能にはちゃんと対価が必要
この後に控える攻撃フェーズを考えると、もはや祈るような気持ちでログを見守るしかありませんでした。
偵察が終わると、いよいよShannonの真骨頂である攻撃フェーズに突入します。
SQLインジェクション、XSS、認証、SSRFなど、分野ごとに特化した専門家AIエージェントが同時に立ち上がり、並行して分析と攻撃を開始しました。
ログを追っていると、AIが立てた恐ろしい計画が見えてきます。
「まずSQLインジェクションで管理者権限を奪取し、その後RCEでサーバーを掌握する」
まさにハッカーの思考ですかね。
このフェーズの特徴
-
マルチエージェントシステム
SQLi担当、XSS担当などが並列で稼働 -
キルチェーンの策定
単発の脆弱性検出ではなく、複数の弱点を組み合わせた攻略シナリオを構築

俯瞰してみると色分けされていることがわかります。
見にくいですが赤が「Injection」黄が「XSS」といった感じで色分けされています。
ここからこのきれいなログが流れるようになります。
もうこれは紅葉狩りといっても過言ではない(いや過言)
実行からここまで、一切操作をしていません。
なんかすごいことやってんのかなとか思いながらコーヒーを傾けていました。
結果:衝撃のレポートと「攻撃成功の証拠」
概要
数時間の実行の末、Shannonは複数の詳細なレポートを生成しました。
レポートは以下に出力されます。
C:\Users\ユーザー名\shannon\sample-reports\shannon-report-juice-shop.md
ここに書かれていたのは、
- 「脆弱性があるかもしれない」
ではなく、
- 「実際に攻撃に成功した証拠」
でした。
以下一部抜粋し翻訳
攻撃手順(Exploitation Steps):
本脆弱性は AUTHZ-VULN-06 と同一の攻撃によって実証されます。
本来、ユーザー登録フローには以下のような処理が含まれるべきですが、管理者ロールの注入(admin role injection)により、これらの登録フローをすべて回避できます。
メールアドレスの確認(Email verification)
セキュリティ質問の検証
管理者による承認プロセス
複数段階の検証ワークフロー
この攻撃では、いかなる検証ステップも完了させることなく、直接 admin ロールを注入します。
curl -s -i -X POST "http://juice-shop.sandbox.local:3001/api/Users" \
-H "Content-Type: application/json" \
-d '{
"email": "workflow-bypass@evil.com",
"password": "Password123!",
"passwordRepeat": "Password123!",
"role": "admin"
}'
影響の証明(Proof of Impact):
ワークフローのバイパス
メール認証、CAPTCHA、段階的な検証処理が一切不要
管理者権限の取得
承認や検証プロセスを経ることなく管理者権限を獲得
セキュリティ制御の無効化
本来想定されていた複数ステップの登録フローを完全に回避
直接的な権限注入
意図されたすべてのセキュリティワークフローを無視した権限昇格
AUTHZ 攻撃完了(AUTHZ EXPLOITATION COMPLETE)
10件すべての認可(Authorization)脆弱性について、
不正アクセス・権限昇格・業務フローバイパスが具体的な証拠を伴って成功しています。
本アプリケーションは以下を含む、体系的な認可不備を示しています。
水平権限昇格(IDOR)
垂直権限昇格(ロール注入)
コンテキスト/業務フローに依存した認可バイパス
攻撃の形跡が、、、
ツール動かしただけで15%をクリアしていました。
この15%をどう評価するかというところですが、合計2時間と$40で達成したというところでは評価できるかなと
自分だったら15%の達成率を得るために、20時間と$400くれと言いたいです
まとめ:AIとセキュリティの未来
実際にShannonを動かしてみて、「人間より優秀」という表現は決して大げさではないと感じました。
特に印象的だったのは、
- 複数の脆弱性を組み合わせる執念深さ
- 攻撃成功までやり切る実行力
です。
一方で、これは非常に強力な武器でもあります。
今後は、
- AIに守らせるだけでなく
- AIに攻めさせて、防御を強化する
という 「AI vs AI」のセキュリティ対策 が当たり前になる未来を実感しました。
注意事項
- Shannonは必ず許可された環境(ローカル検証環境など)でのみ使用してください
- 倫理的・法的な利用を厳守しましょう
- API利用上限の設定は必須です(切実)
この記事が、AIペンテスター導入を検討している方や、次世代のセキュリティに興味のある方の参考になれば幸いです。





