Skip to content
← ケーススタディ一覧へ
Tooling SEC-001 May 2026

secscan: 統合された Web セキュリティスキャン

標準的なセキュリティスキャナーをひとつにまとめ、LLM で文脈に即した修正提案を返すオープンソース CLI とダッシュボード

課題

小規模な Web プロジェクトに対してまともなセキュリティ基盤を実現するには、7〜8 個の専門ツールを立ち上げ、検出結果を手作業で重複排除し、汎用的な修正アドバイス(「HSTS ヘッダーを追加してください」)を、自分のスタック(Cloudflare、Vercel、Astro の _headers、nginx)で実際に必要な変更へと翻訳する必要があります。問題はツールそのものではなく、その周りのワークフローです。

取り組み

Click 製の CLI と FastAPI ダッシュボードを構築し、nuclei、nmap、sslyze、subfinder、httpx、OWASP ZAP、semgrep、trivy、gitleaks をラップしました。各スキャナーは BaseScanner を継承し、リスクレベルと必要な外部ツールを宣言、Findings を共通スキーマに書き込みます。リスクゲート判定はランナーに集約されており、CLI、ダッシュボード、同梱の GitHub Action が同じ判定を共有します。レポートはひとつのデータ形状から HTML(Jinja2)、Markdown、JSON にレンダリングされます。2 層構成の修正提案システムが各検出を補強します — 無料で使えるキュレーション済みの静的データベースと、Claude による任意の AI 修正提案。後者はプロジェクトの実際の設定ファイルや検出箇所周辺のコード行を含めます。検出はハッシュでキャッシュされるため、再スキャンしても API は再課金されません。PyPI のパッケージ、自前ホスティング用 Docker イメージ、組み込み可能な GitHub Action として配布。

結果
  • PyPI に secscan-tool として公開、MIT ライセンスでプロジェクト横断の再利用が可能
  • Docker イメージは 7 つの外部スキャナーを同梱 — ひとつのコマンドで localhost:8765 のダッシュボードが立ち上がる
  • GitHub Actions ワークフローは週次と任意実行で動作し、新しい High または Critical の検出があれば自動で Issue を作成
  • AI 修正提案は 1 検出あたり数セント、検出のハッシュでキャッシュされるため再スキャンで再課金されない