本文へ移動
cccskills
無料GitHub で公開

ipa-security-check

IPA「安全なウェブサイトの作り方 改訂第7版」「安全なSQLの呼び出し方」「ウェブ健康診断仕様」「セキュリティ実装チェックリスト」「安全なウェブサイトの運用管理に向けての20ヶ条」に基づき、ソースコードを静的に検査して脆弱性候補を検出する。発見した問題には IPA 原典の出典 (文書名・章・ページ・URL) を必ず付与する。

インストール方法を見る

含まれるファイル(55)

  • SKILL.md11.4 KB
  • agents/01-sql-injection.md3.4 KB
  • agents/02-os-command-injection.md3.5 KB
  • agents/03-directory-traversal.md3.6 KB
  • agents/04-session-management.md3.5 KB
  • agents/05-xss.md3.6 KB
  • agents/06-csrf.md3.6 KB
  • agents/07-http-header-injection.md3.6 KB
  • agents/08-mail-header-injection.md3.6 KB
  • agents/09-clickjacking.md3.4 KB
  • agents/10-buffer-overflow.md3.6 KB
  • agents/11-access-control.md3.6 KB
  • agents/15-false-positive-review.md5.7 KB
  • agents/operation-checklist.md3.8 KB
  • agents/safe-sql-details.md3.7 KB
  • agents/web-health-check.md3.5 KB
  • commands/ipa-security-check.md3.1 KB
  • knowledge/_sources.md7.6 KB
  • knowledge/01_sql_injection.md10.4 KB
  • knowledge/02_os_command_injection.md8.1 KB
  • knowledge/03_directory_traversal.md7.8 KB
  • knowledge/04_session_management.md12.2 KB
  • knowledge/05_xss.md12.1 KB
  • knowledge/06_csrf.md11.4 KB
  • knowledge/07_http_header_injection.md7.9 KB
  • knowledge/08_mail_header_injection.md9.4 KB
  • knowledge/09_clickjacking.md9.5 KB
  • knowledge/10_buffer_overflow.md9.9 KB
  • knowledge/11_access_control.md14.0 KB
  • knowledge/operation_checklist.md31.7 KB
  • knowledge/safe_sql_details.md28.9 KB
  • knowledge/web_health_check.md21.9 KB
  • lib/orchestrator.md13.4 KB
  • lib/output_formatter.md7.1 KB
  • lib/scope_resolver.md3.2 KB
  • lib/shard_planner.md4.2 KB
  • lib/triage_state.md6.6 KB
  • rules/access_control.yaml8.2 KB
  • rules/buffer_overflow.yaml6.3 KB
  • rules/clickjacking.yaml3.9 KB
  • rules/csrf.yaml6.4 KB
  • rules/directory_traversal.yaml8.5 KB
  • rules/http_header_injection.yaml5.3 KB
  • rules/mail_header_injection.yaml5.1 KB
  • rules/operation_checklist.yaml13.6 KB
  • rules/os_command_injection.yaml9.3 KB
  • rules/safe_sql_details.yaml8.1 KB
  • rules/session_management.yaml8.6 KB
  • rules/sql_injection.yaml13.9 KB
  • rules/web_health_check.yaml10.7 KB
  • rules/xss.yaml10.4 KB
  • scripts/render_report.py13.2 KB
  • scripts/snippet_hash.py2.3 KB
  • templates/report.md.tmpl3.7 KB
  • templates/sarif.json.tmpl1.0 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

IPA Security Check Skill

このスキルが行うこと

IPA (情報処理推進機構) が公開する以下 5 資料の指摘事項に基づき、ローカルリポジトリのソースコード・設定ファイルを静的検査し、脆弱性候補を検出する。

略称正式名称主な検査内容
SWS安全なウェブサイトの作り方 改訂第7版11脆弱性 (SQLi/OSコマンド/トラバーサル/セッション/XSS/CSRF/HTTPヘッダ/メールヘッダ/クリックジャッキング/BoF/アクセス制御)
SQL安全なSQLの呼び出し方プレースホルダ使い分け・LIKE述語・識別子検証・文字コード問題
WHCウェブ健康診断仕様13診断項目のうち静的解析でカバー可能な観点
OPS安全なウェブサイトの運用管理に向けての20ヶ条HTTPヘッダ・依存ライブラリ・設定ファイル類
CLセキュリティ実装チェックリスト改訂第7版 p.105-108 のチェックリスト

すべての検出結果に IPA 原典の document / section / page / url を必ず添えて返す。

起動方法

スラッシュコマンド /ipa-security-check で起動する。引数で対象スコープを指定する。

形式動作
/ipa-security-checkカレント WD 全体をスキャン
/ipa-security-check <path>指定パス/glob のみ (例: src/, **/*.php)
/ipa-security-check --diff現ブランチと main の差分ファイルのみ
/ipa-security-check --categories sqli,xss <path>カテゴリ限定
/ipa-security-check --severity highHigh 以上のみ
/ipa-security-check --output report.md,report.sarif出力ファイル指定

自然文 (「IPA のセキュリティチェックをして」など) でも起動する。

実行手順 (Claude が行うこと)

  1. lib/scope_resolver.md を読み、引数を解釈して対象ファイル一覧と言語マッピングを作る
  2. lib/shard_planner.md を読み、カテゴリごとにファイル数を数え、閾値超過時は N 分割する
  3. agents/ 配下 の検査系サブエージェント (14 体) を メインから並列起動 する (公式制約によりサブエージェントから二次サブエージェントは起動できないため、分割はメイン側で行う)
  4. 各サブエージェントは findings[] を含む JSON を返す。メインは findings のみ集約してコード本文は文脈に保持せず、.tmp/ipa-security-check/findings_raw.json に書き出す
  5. Phase 5 (偽陽性レビュー):
    • scripts/snippet_hash.py を Bash で実行して findings_with_hash.json を作る
    • 15-false-positive-review エージェントを 5 件 / shard で並列起動し、返ってきた verdicts[] を結合して verdicts.json に保存
  6. Phase 6 + 出力 (Step 7): scripts/render_report.py を Bash で実行する。スクリプトが内部で以下を行う:
    • verdict を snippet_hash で findings にマージ
    • 既存 Markdown レポートから triage ブロックを抽出 (lib/triage_state.md 準拠) し、snippet_hash 一致で新 findings にステータス引き継ぎ
    • templates/report.md.tmpl を埋めて Markdown を出力、SARIF 2.1.0 も同時生成
  7. デフォルトの保存先は ./security-reports/ipa-security-report-YYYY-MM-DD-NN.md と ./security-reports/ipa-security-report-YYYY-MM-DD-NN.sarif (--output で上書き可)。security-reports/ ディレクトリが存在しない場合は自動作成する。同日に複数回実行した場合は連番 (-01, -02, ...) が自動付与され、既存レポートを上書きしない

中間ファイルの作業ディレクトリは .tmp/ipa-security-check/ (リポジトリルート直下、名前に tmp を含めること)。

詳細な分配ロジックは lib/orchestrator.md に従う。Claude は lib/orchestrator.md を読んでそのとおりに動くこと。

対応言語

言語拡張子
PHP.php
Java.java, .jsp
Ruby.rb, .erb
Python.py
JavaScript / TypeScript.js, .jsx, .ts, .tsx, .vue
C# / .NET.cs, .cshtml, .aspx
Go.go
設定ファイル.conf, nginx.conf, .htaccess, web.xml, *.yaml, *.yml, Dockerfile

トリアージ (ステータス管理)

検出結果には 4 ステータスを管理できる。状態は Markdown レポート内の HTML コメントブロックに保持され、次回スキャン時に snippet_hash で引き継がれる。詳細は lib/triage_state.md。

ステータス意味次回スキャンでの扱い
未対応未着手 (新規 finding のデフォルト)通常表示
対応する修正予定 / 実施中通常表示
問題なし確認の上、本物の脆弱性ではない## トリアージ済み (抑止) セクションへ移動。サマリから除外
保留一旦保留## トリアージ済み (抑止) セクションへ移動。サマリから除外

ユーザーは各 finding 直下の <!-- ipa-triage:begin ... ipa-triage:end --> ブロックの status: と note: を編集する。 snippet_hash は rule_id + file + 正規化された code_snippet の sha256 で計算するため、行番号が変動しても引き継げる。

偽陽性候補

15-false-positive-review エージェントが周辺コード/呼び出し元を再評価して likely_false_positive と判定した finding は ## 偽陽性候補 セクションへ移動 (本文の検出結果からは除外)。 誤判定と思う場合は対応する triage ブロックの status: を 対応する に変更すると次回スキャンで通常レポートに戻る。

誤検知のインライン抑止 (補助)

ソースコードに以下のインラインマーカーを置くと検出段階で finding を生成しない (トリアージとは別軸)。

// ipa-skip: IPA-SWS-1-SQLI-001  reason: 内部固定値を埋め込んでいるため

reason: は必須。

サブエージェント一覧

agents/ 配下に 15 体定義。

検査エージェント (14 体): Phase 1〜4 で並列起動

エージェント担当
01-sql-injectionSQL インジェクション
02-os-command-injectionOS コマンドインジェクション
03-directory-traversalディレクトリトラバーサル
04-session-managementセッション管理の不備
05-xssクロスサイトスクリプティング
06-csrfクロスサイトリクエストフォージェリ
07-http-header-injectionHTTP ヘッダインジェクション
08-mail-header-injectionメールヘッダインジェクション
09-clickjackingクリックジャッキング
10-buffer-overflowバッファオーバーフロー
11-access-controlアクセス制御の不備
safe-sql-details安全な SQL の呼び出し方 深掘り
web-health-checkウェブ健康診断 静的解析項目
operation-checklist運用 20ヶ条 + 実装チェックリスト

レビューエージェント (1 体): Phase 5 で並列起動

エージェント担当
15-false-positive-review検査エージェントの findings に対し周辺コード/呼び出し元を再 Read して偽陽性候補を識別

出力契約 (検査サブエージェント → メイン)

検査系 (01〜11 / safe-sql-details / web-health-check / operation-checklist) は以下の JSON 形式のみ返す。コード本文や中間ログは返さない。

{
  "agent": "sql-injection",
  "files_scanned": 142,
  "findings": [
    {
      "rule_id": "IPA-SWS-1-SQLI-001",
      "severity": "critical",
      "category": "sql_injection",
      "file": "src/users.php",
      "line": 45,
      "column": 12,
      "code_snippet": "$sql = \"SELECT * FROM users WHERE id = \" . $_GET['id'];",
      "message": "...",
      "ipa": {
        "document": "安全なウェブサイトの作り方 改訂第7版",
        "section": "1.1 SQLインジェクション",
        "page": "6-12",
        "url": "https://www.ipa.go.jp/security/vuln/websecurity/about.html"
      },
      "remediation_type": "根本的解決",
      "remediation": "プレースホルダによる SQL 文の組み立て",
      "cwe": "CWE-89",
      "fix_example": "..."
    }
  ],
  "errors": []
}

snippet_hash / fp_verdict / status などのトリアージ系フィールドは orchestrator (Phase 5・Phase 6) が後付けする。検査エージェントは付与しない。

15-false-positive-review の出力契約は agents/15-false-positive-review.md を参照。

ファイル構成

.claude/skills/ipa-security-check/
├── SKILL.md                ← 本ファイル (Claude が最初に読む)
├── commands/
│   └── ipa-security-check.md
├── agents/                 ← 15 体のサブエージェント定義
│   ├── 01〜11, safe-sql-details, web-health-check, operation-checklist (検査 14 体)
│   └── 15-false-positive-review.md (偽陽性レビュー)
├── knowledge/              ← IPA 原文ベースの知識 (Skill 単独配布で完結)
├── rules/                  ← YAML 検出シグネチャ
├── templates/              ← Markdown / SARIF テンプレート
├── scripts/                ← Bash 経由で呼ぶ Python 実装
│   ├── snippet_hash.py     ← snippet_hash 計算 (Phase 5 入力準備)
│   └── render_report.py    ← verdict/triage マージ + Markdown/SARIF 出力 (Step 7)
└── lib/
    ├── orchestrator.md
    ├── scope_resolver.md
    ├── shard_planner.md
    ├── triage_state.md     ← ステータス保持・引き継ぎ仕様
    └── output_formatter.md

実行時の中間ファイルは .tmp/ipa-security-check/ 配下に置く (作業ディレクトリ名は必ず tmp を含める)。

重要な原則

  • IPA 原典への出典明記: すべての finding に ipa.document / section / page / url を必須付与
  • Skill 単独配布: knowledge/ rules/ を Skill 内に同梱。外部の docs/ を参照しない
  • メイン文脈の節約: サブエージェントは findings / verdicts JSON のみ返却
  • ネスト禁止準拠: サブエージェントは二次サブエージェントを起動しない。分割はメイン側で行う
  • 偽陽性レビューの分離: 検出フェーズと FP 判定フェーズは分離する。FP 判定は周辺コードを再 Read して行う
  • トリアージ状態は Markdown 内に保持: 専用状態ファイルは作らず、レポート自体が状態を持つ (Git で履歴管理可)
  • 完全一致抑止: snippet_hash (rule_id + file + 正規化された code_snippet の sha256) で同定する。行番号変動には耐える

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

dev-context

無料日本語概要

This skill should be used when the user asks to "dev-context", "プロジェクトコンテキストを生成", "プロジェクトを分析", "generate project context", "analyze project", "コンテキストを更新". プロジェクトの技術スタック・テストフレームワーク・コーディング規約・アーキテクチャを自動分析し、コンパクトなコンテキストファイルを生成する。

classmethod/tsumiki9732026年8月7日 更新

dev-debug

無料日本語概要

This skill should be used when the user asks to "dev-debug", "テストが失敗する", "ビルドエラーを直して", "デバッグ", "debug failing tests", "fix build error", "エラーを修正", "コンパイルエラー", "環境の問題を解決". テスト失敗、ビルドエラー、環境問題など様々なエラーパターンをカテゴリ別に診断し、最小コンテキストで修正する。

classmethod/tsumiki9732026年8月7日 更新

dev-impl

無料日本語概要

This skill should be used when the user asks to "dev-impl", "タスクを実装", "テストファースト実装", "implement task", "実装を開始", "クイック修正", "quick fix", "dev-impl auth 001". TDDをガードレールとしたテストファースト実装を行う。通常モード(Plan+タスク指定)とクイックモード(直接指示)に対応。

classmethod/tsumiki9732026年8月7日 更新

dev-init

無料日本語概要

This skill should be used when the user asks to "dev-init", "技術スタックを選定", "新規プロジェクト初期化", "initialize tech stack", "プロジェクトをセットアップ", "setup project", "scaffold project", "プロジェクト作成", "tech stackを決める". インタラクティブなヒアリングでプロジェクトの技術スタックを決定し、dev-context互換のコンテキストファイルを生成する。承認制でプロジェクトスキャフォールディングも実行可能。

classmethod/tsumiki9732026年8月7日 更新

dev-navigate

無料日本語概要

This skill should be used when the user asks to "dev-navigate", "どこから始めれば", "何を使えばいい", "スキルを選んで", "ナビ", "navigate", "which skill", "how to start", "開発の進め方", "何から始める". 開発者がやりたいことをヒアリングし、最適なtsumikiスキルとその実行順序をナビゲーションする。

classmethod/tsumiki9732026年8月7日 更新

dev-plan

無料日本語概要

This skill should be used when the user asks to "dev-plan", "実装計画を作成", "要件からタスク分解", "create implementation plan", "plan tasks", "タスクを分割", "設計してタスクにする", "詳細要件定義", "full-spec plan", "EARS要件". ユーザーの要件をインターフェースファースト設計とテスト可能なタスクに分解し、Plan単位でdocs/dev/plans/に保存する。Lightweight(素早い計画)とFull-spec(EARS要件定義付き)の2モードに対応。

classmethod/tsumiki9732026年8月7日 更新

classmethod のスキルをすべて見る

このスキルの問題を報告する