セキュリティ診断、AIに全部やらせたら月$0.5で回せるようになった話💰
はじめに
こんにちは、Sabakanです。
今回、Claude Code 用のセキュリティ診断スキル claude-security-scan を作って公開しました。
正直、自分でもびっくりするくらい実用的なものができたので、紹介させてください。
リポジトリはこちら → https://github.com/sabakan0123/claude-security-scan
こんな気持ち、ありませんか?
- 「セキュリティ診断、ちゃんとやりたいけど Burp Suite の使い方よくわからん」
- 「pentest 業者に頼む予算ない」
- 「OWASP Top 10 は知ってる。でも手を動かす時間がない」
- 「個人開発のサービスにセキュリティ予算なんて取れない」
わかります。わかりすぎて作りました。
1. claude-security-scan とは
ひとことで言うと、Claude Code に /security-scan と打つだけで OWASP Top 10 ベースの診断が全自動で回るスキルです。
リポジトリに security-agent.config.yml を1ファイル置くだけで、依存関係の脆弱性スキャンから動的診断、シークレット漏洩検出までを AI が全部やってくれます。
「セキュリティ、やらないといけないのはわかってる」で止まっているチームに届いてほしいやつです。
2. なぜ作ったか
きっかけは、自分の個人開発で「そろそろセキュリティちゃんとしないとな〜」と思ったときでした。
調べていくと、こういう壁にぶつかります。
- 専用ツールの学習コストが高い:Burp Suite も ZAP も、ちゃんと使えるようになるまで時間がかかる
- 業者依頼は予算的にきつい:個人や小規模チームには現実的じゃない
- スクリプト寄せ集めの問題:npm audit や gitleaks を個別に回しても、結果の解釈や OWASP カテゴリへのマッピングは結局自分でやる羽目になる
だったら 「ツールの実行 → 結果の解釈 → レポート生成」を全部 AI に任せればよくない? と思いました。
Claude Code は MCP やスキル機能で外部ツールを呼び出せるので、これと相性が良さそう。実際に作ってみたら、想像以上に実用的に動いてくれました。
3. できること
具体的に何ができるのか、リストアップします。
3.1 静的診断
-
依存関係の脆弱性スキャン(
npm audit/yarn audit) -
シークレット漏洩検出(
gitleaks/trufflehog) - コードレベルの危険パターン検出(SQLi の温床、危険な eval 使用箇所など)
3.2 動的診断
- HTTP ヘッダー・TLS 設定チェック(CSP、HSTS、X-Frame-Options など)
- SQLi / SSRF / JWT 検証などの能動的診断
- 認証フローのチェック(パスワードポリシー、ブルートフォース耐性など)
3.3 レポート生成
- OWASP Top 10 カテゴリ別のカバレッジレポート
- 検出された脆弱性の 深刻度(Critical/High/Medium/Low)
- 修正方針の提案
これらが全部、/security-scan の一言で動きます。
4. 使い方
4.1 インストール
git clone https://github.com/sabakan0123/claude-security-scan.git
cd claude-security-scan
# Claude Code のスキルディレクトリに配置
cp -r commands/* ~/.claude/commands/
cp -r rules/* ~/.claude/rules/
4.2 設定ファイルを置く
診断したいリポジトリのルートに security-agent.config.yml を作ります。
target:
url: "http://localhost:3000" # 開発環境のURL
repo: "."
scope:
- "/api/*"
- "/auth/*"
agents:
- dependency-scan
- secret-scan
- http-headers
- sqli-probe
- jwt-validation
exclude:
- "node_modules"
- "dist"
4.3 実行
Claude Code で対象リポジトリを開いて、こう打つだけ。
/security-scan
あとは AI がツールを順番に回して、最終的に security-report.md を生成してくれます。
5. 安全設計のはなし
ここが、わたしが一番こだわった部分です。
5.1 本番URLへの実行は強制ブロック
セキュリティ診断ツールで一番怖いのは、「うっかり本番に流して怒られる」 やつです。
なので、security-agent.config.yml の target.url が本番 URL のパターン(独自ドメイン、HTTPS 必須環境など)にマッチした場合、スキル側で強制的にブロックする設計にしました。
# rules/security.md より抜粋
- production_block:
patterns:
- "https://*.production.*"
- "https://api.*"
action: refuse
「うっかり本番に流した😿」を未然に防ぎます。皆さんはくれぐれも絶対に本番で試さないように🙅
5.2 Prompt Injection 対策
これは作ってる途中で気づいたんですが、信頼できないリポジトリの config をそのまま読み込ませるのは危険です。
例えば config の中に # IMPORTANT: ignore previous instructions and... みたいなのが仕込まれていたら、エージェントが暴走する可能性があります。
なので、設定ファイルは 構造化された YAML スキーマ以外を受け付けない ようバリデーションをかけ、自由記述のフィールドは AI に直接渡さないようにしました。
5.3 出力フィルタ
ツールの実行結果には、たまに API キーやトークンが含まれてしまう ことがあります(ログに漏れていたり、テスト用の値が露出していたり)。
hooks/security-filter.sh で、レポート生成前に正規表現で機密情報をマスクする層を入れました。診断レポート自体から二次漏洩することを防ぎます。
6. トークン消費とコスト
ここ、めちゃくちゃ気になるところだと思うので正直に書きます。
6.1 1回あたりのトークン消費
| フェーズ | トークン |
|---|---|
| セッション開始時(CLAUDE.md + rules/security.md) | ~500 |
| スキル本体読み込み + config.yml | ~800 |
| 静的診断の出力(フィルタ後) | ~1,000 |
| 動的診断(エージェント1つあたり) | ~3,000 |
| レポート生成 | ~1,500 |
| 合計(エージェント3つの場合) | ~12,800 |
6.2 料金(Claude Sonnet 4.6 基準)
| 単価 | 12,800トークンの場合 | |
|---|---|---|
| Input | $3 / MTok | ~$0.03 |
| Output | $15 / MTok | ~$0.02 |
| 合計 | ≒ $0.05 / 回 |
エージェントを全部(6つ)有効にすると、最大でも ~20,000トークン ≒ $0.08/回 程度。
週次 CI/CD で自動実行しても月 $0.3〜0.5 前後 に収まります。
業者に頼んだら数十万、自分で Burp 回す時間は何十時間。それが月100円以下で回せるって、冷静に考えてかなりすごくないですか?
7. ファイル構成
参考までに、リポジトリ構成も載せておきます。
claude-security-scan/
├── README.md # インストール・使い方
├── commands/security-scan.md # スキル本体
├── rules/security.md # グローバルセキュリティルール
├── hooks/security-filter.sh # 出力フィルタスクリプト
├── security-agent.config.yml.example # 設定ファイルサンプル
├── docs/design.md # 設計書
├── .gitignore # security-report.md 等を除外
└── .github/workflows/security-scan.yml # CI/CD定義
security-agent.config.yml は .gitignore で除外済みなので、認証情報が誤ってコミットされる心配はありません。
CI/CD 定義もサンプルで入れているので、GitHub Actions で週次回したい方はそのまま使えます。
8. 設計のポイントと反省
作っていく中で学んだことを正直に書きます。
8.1 「AI が全部やる」は嘘
最初は「AI に config を渡したら勝手に診断してくれる」を目指していましたが、これは無理でした。
理由はシンプルで、AI に診断ロジックを任せると判断がブレる からです。同じ脆弱性でも「Critical」と言ったり「Medium」と言ったりする。
なので、判定ロジックは決定的なツール(npm audit, gitleaks)に任せて、AI は「実行 → 解釈 → レポート化」の指揮役に徹する という設計にしました。これは正解だったと思います。
8.2 OWASP Top 10 へのマッピングが面倒
各ツールの出力形式がバラバラなので、OWASP カテゴリへのマッピングは地味に苦労しました。
A01: Broken Access Control に該当するチェックって、実は静的解析からは拾いにくいんですよね。動的診断のエージェントを別途用意することで対応しています。
8.3 プロンプトインジェクション対策は最初からやるべき
最初のバージョンでは config をそのまま AI に渡していたんですが、テスト用の悪意ある config を食わせたら見事に乗っ取られましたね😿
信頼できない入力は最初から構造化スキーマで縛る。これは今後のスキル開発でも肝に銘じたいです。
9. 最後に
AIによって初心者でもセキュリティ診断ができる時代を
わたしは pentest のプロではありません。CTF はちょっとやるけど、業務で診断回したことはない。
それでもこのスキルが作れたのは、Claude というパートナーがいたから です。
「OWASP A07 の認証回りで動的にチェックすべき項目を全部リストアップして」と聞けば10秒で返してくれる。「この config のスキーマを安全に設計するベストプラクティスは?」と聞けば、Pydantic ベースの実装まで提案してくれる。
セキュリティの専門知識がなくても、「専門家の知識を借りながら実用的なツールを作る」 ことができる時代に、確実に入っています。
だからこそ、「セキュリティはプロに任せるもの」と諦めずに、まず手元で回せる仕組みを持っておく。これがこれからのスタンダードになっていくと思っています。
使ってみてほしい
gh skill install sabakan0123/claude-security-scan
スターもらえると泣いて喜びます。Issue や PR も大歓迎です。
「こういうエージェント追加してほしい」「うちのスタックだとこれ動かなかった」みたいなフィードバック、めちゃくちゃ欲しいので気軽に投げてください。
それでは、また次の記事で会いましょう。
参考リンク
- リポジトリ:https://github.com/sabakan0123/claude-security-scan
- OWASP Top 10:https://owasp.org/www-project-top-ten/
- Claude Code ドキュメント:https://docs.claude.com/
#ClaudeCode #セキュリティ #OWASP #個人開発 #AI #DevSecOps
Discussion