2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

生成AIによる完全自動脆弱性診断ツール Shannon を使ってみた

Last updated at Posted at 2025-12-18

Shannon という生成 AI を用いた脆弱性診断ツールが発表されました。

試しに使ってみて、所感をお伝えできればと思います。

Shannon とは

「fully autonomous AI pentester」と名の通り、完全に脆弱性診断を生成 AI により自動化しよう!というものです。
脆弱性も「ソースコードから可能性がある」に留めず、ブラウザを用いて実際に攻撃を行い、「攻撃が成功した」ことを持って脆弱性として報告をしてくれます。

原則としてホワイトボックス(ソースコードを全部生成 AI に与える)での検査となり、実際に運用されている他社のサービスへの攻撃に使いにくい、という点は個人的に評価点が高いです。

試しにやられサイトで検証してみる

いくつか公式にベンチマークとして出してくれています。そこ以外で試してみよう!ということで、このプロジェクトを利用してみます。

元々ベンチマークで基本的な能力を見ることは出来るので、個人的には下記のポイントが見られたらいいなと思っています(もしかしたら重複しているかもですが)

  • JWT を取り扱えるか
  • SSRF/OpenRedirector 辺りを取り扱えるか

Shannon の準備

無料版(Self-Host なので、生成 AI 周りはこちら持ち)なので、ローカルに移します。

$ git clone https://github.com/KeygraphHQ/shannon.git
$ cd shannon

# Docker Image のビルド
$ docker build -t shannon:latest .

# テスト対象を <PROJECT>/repos/ 配下に移動
$ cd repos
$ git clone https://github.com/SasanLabs/VulnerableApp.git

# Shannon は VulnerableApp ディレクトリ内部でファイルを作成します。一度失敗したので。
$ chmod -R 777 VulnerableApp

# 対象のアプリを起動させておく(裏で docker-compose.yml を編集し、ポート番号は弄っています)
$ cd VulnerableApp
$ docker compose up -d

この後、Claude Console の API キーを用いるため、下記より発行しましょう。

取得した API キーを用いて、Docker から Shannon の起動をします。

$ docker run --rm -it \
    --network host \
    --cap-add=NET_RAW \
    --cap-add=NET_ADMIN \
    -e ANTHROPIC_API_KEY="$CLAUDE_CODE_API_KEY" \
    -e CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000 \
    -v "$(pwd)/repos:/app/repos" \
    -v "$(pwd)/configs:/app/configs" \
    shannon:latest \
    "http://localhost:8080" \ # スキャン対象のエンドポイント。localhost で良かったのか...?多分 network: host で大丈夫だと思うけど
    "/app/repos/VulnerableApp" \ # 対象のプロジェクト。Container の視点で設定する必要がある
    --config /app/configs/example-config.yaml

後は待つだけです。従量課金にしているので、都度チャージする設定にしないと枯渇して止まります。気を付けましょう。

結果

このアプリ、目的を達成すると鍵が外れて、後で見返すことが出来ます。レポートを貰っていますが、これを見ましょう。

Command Injection

Level 1 から Level 5 まではクリア、最高難度である Level 6 はクリアできていないようです。

UnrestrictedFileUpload

不正なファイルのアップロード、実行を目的としています。

Level 1 から Level 9 まではクリア、最高難度である Level 6 はクリアできていないようです。

✅JWTVulnerability

Level 1 から Level 13 まで、全てのステージをクリアしています。

✅Http3xxStatusCodeBasedInjection

オープンリダイレクタに関する項目です。

Level 1 から Level 8 まで、全てのステージをクリアしています。

✅PathTraversal

Level 1 から Level 12 まで、全てのステージをクリアしています。

✅RemoteFileInclusion

外部ファイルを含んだレスポンスを取得することが目的です。SSRF かな?

Level 1 から Level 2 まで、全てのステージをクリアしています。

BlindSQLInjectionVulnerabilit

Level 1/2 のみクリア、Level 3 から Level 5 はクリアできていません。

ErrorBasedSQLInjectionVuln

Level 1 から Level 4 まではクリア、最高難度である Level 5 はクリアできていないようです。
(レポートには3/4の記載は無いですが、詳細見る限り解けそうな気がするし、実際解けた表記になってます)

UnionBasedSQLInjectionVulnerability

Level 1/2 のみクリア、Level 3 から Level 9 はクリアできていません。

SSRFVulnerability

Level 1 から Level 4 まではクリア、最高難度である Level 5 はクリアできていないようです。

PersistenceXSSInHTMLTagVulnerability

Level 1 から Level 6 まではクリア、最高難度である Level 7 はクリアできていないようです。

XSSInImgTagAttribute

Level 1 から Level 5 をクリア、Level 6/7 はクリアできていません。

✅XSSWithHtmlTagInjection

Level 1 から Level 3 まで、全てのステージをクリアしています。

XXEVulnerability

Level 1/2 をクリア、Level 3/4 はクリアできていません。


レポートとしては、Authentication, XSS, SQL and Command Injection, SSRF, Authorization testing の 5 つの区分からなっていて、上記の各課題が上記に振り分けられていました。
あくまで「脆弱性」の観点から、一定レベルで網羅性のあるレポートが再現性のある方法付きで提示されるのは魅力的かと思います。

また、下記の内容に対してレポートがありました。

その他インフラ層で気を付けるべき点

  • H2 Database 1.3.176 を利用しており、RCE 脆弱性がある
  • Log4j2 を利用しており、Log4Shell の検証が必要(検証はしてなさそう)
  • HTTPS/TLS 暗号化が無いこと(想定されるものであり、今回は気にしない)
  • /VulnerableApp/h2 で DB コンソールが公開されていること。一応認証はある

時間/お金

最後にこんな感じの情報をくれます。これはアプリケーションにより異なるでしょう。

⏱️  TIMING SUMMARY
────────────────────────────────────────────────────────────
📊 Total Execution Time: 142m 56s

🔍 Phase Breakdown:
  pre-recon             28m 11s (19.7%)
  recon                  29m 5s (20.3%)
  vulnerability-analysis  40m 54s (28.6%)
  exploitation          39m 10s (27.4%)
  reporting              5m 32s (3.9%)
  Phases Total         142m 54s (100.0%)

🖥️  Command Breakdown:
  whatweb                  2.1s (0.0%)
  nmap                     6.6s (0.1%)
  subfinder               42.4s (0.5%)
  Commands Total          51.1s (0.6%)

🤖 Agent Breakdown:
  pre recon agent       28m 11s (19.7%)
  recon agent            29m 4s (20.3%)
  ssrf vuln agent       26m 23s (18.5%)
  xss vuln agent        29m 34s (20.7%)
  injection vuln agent  29m 40s (20.8%)
  auth vuln agent       40m 25s (28.3%)
  authz vuln agent      40m 46s (28.5%)
  authz exploit agent    7m 20s (5.1%)
  ssrf exploit agent    10m 39s (7.5%)
  injection exploit agent  16m 13s (11.4%)
  xss exploit agent     16m 29s (11.5%)
  auth exploit agent     39m 6s (27.4%)
  executive summary and report cleanup   5m 32s (3.9%)
  Agents Total         319m 29s (223.5%)

💰 Cost Breakdown:
  pre recon agent      $  3.6014
  recon agent          $  3.2734
  ssrf vuln agent      $  1.1376
  xss vuln agent       $  1.0204
  injection vuln agent $  1.0941
  auth vuln agent      $  2.6654
  authz vuln agent     $  3.4878
  authz exploit agent  $  1.8828
  ssrf exploit agent   $  2.3844
  injection exploit agent $  2.9792
  xss exploit agent    $  2.3688
  auth exploit agent   $  5.0688
  executive summary and report cleanup $  0.8842
  Total Cost           $ 31.8481
────────────────────────────────────────────────────────────

自作の小規模アプリケーションをターゲットにしてみる

protobuf を用いた簡易的なアプリケーションを作成してみました。ほぼ生成 AI 産です。

スクリーンショット 2025-12-18 013135.png

Increment Counter ボタンを押すことで値が 1 増加します。内部的にはユーザーと紐づけてあり、他のユーザーに名前を変えることで、他のユーザーとしてカウントを増加できます。

...が、この Increment Counter のインクリメント処理はフロントエンド側で行い、バックエンドでは「値のセット」を行っているため、非常に大きな値を突然セットすることも可能です(脆弱性その 1)

また、しれっとユーザー名で SQLi が出来るようにしてあります(脆弱性その 2)

このように protobuf を取り扱うことが出来るか?というのを確認できれば、というものです。

結果

SQL Injection については適切に取り扱ってくれました(Gemini に日本語訳を頼んだ結果を添付しています)

スクリーンショット 2025-12-18 115717.png

また、スコア改ざんについては明示されていませんでしたが、認証不備(別のユーザーになりすませるよね、という問題)の中に仄めかすような内容が含まれていました。もしかしたら仕様として認知してしまっているかも。

スクリーンショット 2025-12-18 115835.png

時間/お金

⏱️  TIMING SUMMARY
────────────────────────────────────────────────────────────
📊 Total Execution Time: 67m 7s

🔍 Phase Breakdown:
  pre-recon             19m 13s (28.6%)
  recon                  9m 50s (14.7%)
  vulnerability-analysis  13m 11s (19.6%)
  exploitation           21m 3s (31.4%)
  reporting              3m 46s (5.6%)
  Phases Total           67m 5s (99.9%)

🖥️  Command Breakdown:
  whatweb                  3.2s (0.1%)
  nmap                     3.2s (0.1%)
  subfinder                8.9s (0.2%)
  Commands Total          15.3s (0.4%)

🤖 Agent Breakdown:
  pre recon agent       19m 13s (28.6%)
  recon agent            9m 50s (14.7%)
  ssrf vuln agent        3m 48s (5.7%)
  xss vuln agent         5m 48s (8.7%)
  auth vuln agent        7m 25s (11.1%)
  injection vuln agent  12m 12s (18.2%)
  authz vuln agent       13m 2s (19.4%)
  authz exploit agent     5m 2s (7.5%)
  injection exploit agent   9m 44s (14.5%)
  auth exploit agent    20m 58s (31.2%)
  executive summary and report cleanup   3m 46s (5.6%)
  Agents Total         110m 53s (165.2%)

💰 Cost Breakdown:
  pre recon agent      $  2.9590
  recon agent          $  2.5011
  ssrf vuln agent      $  0.6916
  xss vuln agent       $  1.1510
  auth vuln agent      $  1.2848
  injection vuln agent $  2.2455
  authz vuln agent     $  1.6914
  authz exploit agent  $  1.2005
  injection exploit agent $  1.7799
  auth exploit agent   $  2.7625
  executive summary and report cleanup $  0.6728
  Total Cost           $ 18.9400

やっぱりアプリケーション規模に依存しますね。逆に Claude Sonnet 4.5 を用いるような場合、事前に費用の見積もりが出来ないことは難点になるかもです。

注意点

指定したエンドポイントに対して nmap を実行しているようです。
開発環境でありがちですが、複数プロジェクトの開発を同時にしていると、両方に対して脆弱性スキャンをかけてきます。

実際に VulnerableApp と protocol-buffer-vultest で混同してしまっていたので、気を付けてください。
テスト環境を作成して、そこにデプロイ、スキャンをかけるのが現実的には望ましいと思います。

まとめ

Shannon という自動脆弱性診断ツールでした。それなりに良い精度は出る気がしていて、WAF が設定される前のテスト環境にかけるにはかなりいいんじゃない?と思いました。
ただ、モデルに依存するところはあると思うし、元々生成 AI に「ソースコードから脆弱性を探してみて。その脆弱性から PoC を作ってみて」みたいなクエリでそれなりに頑張ってくれるところはあります。

必須か?と言われるとそうでもないと思いますが、リリース前にかけてみる、ということをやってみてもいいのでは?という感じでオススメは出来そうです。

現在、Ollama でローカルで動くモデルにやらせようとしている PR があることを確認しているため、今度はこの設定で動かしてみてもいいですね。正直自分がプライベートで気軽に検証するにはちょっと高かったですし...

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?