security-scan について
開発者向けの6層静的セキュリティスキャンスキルです。依存関係の脆弱性、シークレット、コードパターン、認証、CORS、データ保護を検査し、OWASP Top 10:2025 に対応づけて評価します。静的解析の限界も明記します。
主な機能
- 016層の静的セキュリティスキャン
- 02OWASP Top 10:2025 への対応づけ
- 03悪用可能性と影響に基づく評価
- 04状況に応じたレイヤー選択
- 05コード付きの修正案
- 06静的解析の限界を記載したレポート
活用シーン
- 01リリース前の包括的なセキュリティ確認
- 02依存関係更新後のパッケージ脆弱性確認
- 03認証・設定・ログ変更後の対象スキャン
- 04ペネトレーションテスト準備や定期レビュー
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ codewithmukesh/ dotnet-claude-kit --skill security-scanインストール後、Claude Code で/security-scanを入力して読み込まれたか確認します。
同梱ファイルreferences/scan-layers.md
詳細
/security-scan — 6 層セキュリティパイプライン
概要
6 層にわたる多層防御の静的スキャンを実行します。CVE がゼロのプロジェクトでも、ハードコードされたシークレット、SQL インジェクション、認証の欠如が存在する場合があります。各層で異なる種類の脆弱性を検出します。検出結果は OWASP Top 10:2025 の分類に対応し、悪用可能性、影響度、露出度に基づいて Critical/High/Medium/Low に評価されます。たとえば、公開エンドポイントの Critical な SQL インジェクションは、管理者ページの Low な情報漏えいより高く評価されます。
検出パターン、OWASP との対応付け、修正コード、レポートテンプレートは references/scan-layers.md にあります。実行前にお読みください。
誠実さに関するルール: これは静的解析であり、侵入テストではありません。既知のパターンを検出しますが、ビジネスロジックの欠陥、複雑な認可回避、実行時にのみ発生する脆弱性は見逃します。すべてのレポートでこの点を明記してください。
実行タイミング
- リリース前のセキュリティゲート — 本番環境へのリリース前に必ず全層をスキャンします
- 「セキュリティスキャン」「セキュリティ監査」「シークレットの検出」「CVE チェック」「OWASP」
- 依存関係の更新後(Layer 1)、認証の変更後(Layer 4)、設定の変更後(Layer 2)、またはログ記録の変更後(Layer 6)
- 侵入テスト前の準備 — 侵入テストに費用をかける前に静的な問題を修正します
- インシデント対応および四半期ごとのレビュー
実行方法
Step 1: 層を選択する
| シナリオ | 層 |
|---|---|
| リリース前のゲート/侵入テスト準備/インシデント/四半期レビュー | 6 層すべて |
| 依存関係の更新後 | 1 |
| 新しいエンドポイントの追加 | 3, 4, 5 |
| 認証システムの変更 | 4 |
| 設定ファイルの変更 | 2 |
| ログ記録の変更 | 6 |
| パブリック API の公開 | 3, 4, 5 |
| 内部専用サービス | 1, 2, 3 |
Step 2: 各層を実行する
各層の検出パターンについては references/scan-layers.md をお読みください。
認証とシークレットの詳細なレビューは、authentication と configuration のスキルを組み合わせて、security-auditor エージェントに委任してください。
| # | 層 | OWASP 2025 | 方法 |
|---|---|---|---|
| 1 | パッケージの脆弱性 | A03 Supply Chain | dotnet list package --vulnerable --include-transitive |
| 2 | シークレットの検出 | — | .cs/.json/.yml/.xml/.config を対象とするパターンスキャン |
| 3 | OWASP コードパターン | A05 Injection, A08 Integrity, A04 Crypto, A01 Access Control | ソーススキャン:生の SQL、Html.Raw、BinaryFormatter、MD5/SHA1、IDOR |
| 4 | 認証設定 | A07 Authentication, A01 Access Control | get_endpoint_map — 1 回の呼び出しで各ルートの認証状態を確認し、unmarked のエンドポイントを指摘。その後、JWT の検証設定を確認 |
| 5 | CORS ポリシー | A02 Misconfiguration | ワイルドカードオリジン、認証情報との組み合わせ、メソッド/ヘッダーの過度な許可 |
| 6 | データ保護 | A04 Crypto, A09 Logging & Alerting | ログ内の PII、過度に広範なレスポンス、機密データの平文保存 |
Step 3: コンテキストに基づいて評価する
重大度は実際のリスクに合わせてください。過剰な分類はアラート疲れを招き、本当の Critical を埋もれさせます。
- テストフィクスチャの「シークレット」や appsettings.Development.json の値は想定内です。スキップするか INFO とし、HIGH として指摘しないでください
- XML コメントの欠落がセキュリティ上の問題になることはありません
- Critical は、今すぐ悪用可能な問題にのみ使用します。公開エンドポイントのインジェクション、本番環境のシークレットの露出、認証の回避などが該当します
Step 4: レポートを作成する
各検出結果には、[SEVERITY] file:line — title、OWASP カテゴリ、問題の内容、悪用された場合の影響、修正コード(修正前/修正後)を記載します。静的解析に関する免責事項を先頭に付け、参考テンプレートに従って概要表と層ごとのステータス表を作成してください。
例
User: /security-scan before we ship
Claude: Running all 6 layers...
| Layer | Status | Findings |
|-------|--------|----------|
| 1. Packages | PASS | 0 CVEs (142 packages incl. transitive) |
| 2. Secrets | PASS | 0 real secrets (2 dev-only values skipped) |
| 3. OWASP Patterns | FAIL | 1 SQL injection |
| 4. Auth Config | WARN | 2 endpoints missing explicit auth attributes |
| 5. CORS | PASS | Explicit origins from configuration |
| 6. Data Protection | WARN | Customer email logged at Information level |
[HIGH] SearchOrders.cs:34 — SQL Injection (A05:2025)
FromSqlRaw($"...LIKE '%{search}%'") → attacker controls the query.
Fix: db.Orders.Where(o => EF.Functions.Like(o.Name, $"%{search}%"))
[MEDIUM] OrderEndpoints.cs:18,31 — no [Authorize]/[AllowAnonymous]; behavior
depends on ambient global policy. Make intent explicit per endpoint.
[LOW] OrderPlacedHandler.cs:22 — PII in logs (A09:2025). Log CustomerId, not email.
Note: static analysis only — this does not replace a penetration test.
関連項目
references/scan-layers.md— 検出パターン、OWASP 2025 との対応付け、レポートテンプレート/verify— Phase 5 では、変更セットごとにこのスキャンの簡易版を実行します/health-check— Dimension 7(Security Posture)はスポットチェック版ですauthentication/configuration— Layer 4 と Layer 2 の修正パターン