🤑

セキュリティ診断、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.ymltarget.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 も大歓迎です。

「こういうエージェント追加してほしい」「うちのスタックだとこれ動かなかった」みたいなフィードバック、めちゃくちゃ欲しいので気軽に投げてください。

それでは、また次の記事で会いましょう。


参考リンク

#ClaudeCode #セキュリティ #OWASP #個人開発 #AI #DevSecOps

Discussion