| name | security-audit |
| description | プロジェクト全体のセキュリティ監査を実行。Use when: セキュリティレビュー、OWASP チェック、脆弱性スキャン、秘密情報チェック |
security-audit — セキュリティ監査 Skill
目的
プロジェクト全体のセキュリティリスクを攻撃者の視点で包括的に評価する。
本 Skill は security-reviewer Agent の知見を活用し、以下の 5 領域を横断的に監査する:
- OWASP Top 10: Web アプリケーションの主要脆弱性の検出
- 依存関係の脆弱性: 既知の CVE を持つライブラリの検出
- 秘密情報管理: ハードコードされた秘密情報の検出
- 認証・認可: アクセス制御の適切性
- セキュアコーディング: コーディング規約との照合
セキュリティに関する指摘は全ての品質指標に優先する。
前提条件
- プロジェクトの全ソースコード(Java ファイル、設定ファイル)にアクセス可能であること
- pom.xml にアクセス可能であること
mvn dependency:tree が実行可能であること(execute ツール使用)
- application.properties / application.yml にアクセス可能であること
手順
以下の手順で体系的にセキュリティ監査を実施する:
Phase 1: 攻撃面の分析
- プロジェクト構造の把握: パッケージ構成、コントローラー数、エンドポイント数を把握する
- 攻撃面(Attack Surface)の列挙: 外部からアクセス可能な入力ポイント(API エンドポイント、ファイルアップロード等)を全て列挙する
- 信頼境界の特定: インターネット ↔ アプリ、アプリ ↔ DB、アプリ ↔ 外部 AI サービス等の信頼境界を特定する
Phase 2: OWASP Top 10 チェック
- OWASP Top 10 の全 10 項目について体系的にチェックする。OWASP Top 10 チェックリスト の各項目を順番に確認する
Phase 3: 依存関係の脆弱性チェック
- 依存関係の脆弱性スキャン: dependency-check スクリプト を実行し、既知の CVE を検出する
- 推移的依存関係の確認:
mvn dependency:tree で推移的依存のライセンス・脆弱性も確認する
- SNAPSHOT バージョンの検出: 本番ブランチに SNAPSHOT バージョンが含まれていないか確認する
Phase 4: コードレベルのセキュリティチェック
- 秘密情報のハードコードチェック: ソースコード内で以下のパターンを検索する
password = "...", apiKey = "...", token = "...", secret = "..."
jdbc:...password=...
-----BEGIN PRIVATE KEY-----
- 設定ファイルの秘密情報チェック:
application.properties / application.yml に秘密情報が平文で記述されていないか確認する
- 入力検証チェック: 全コントローラーメソッドに
@Valid / @Validated が適用されているか確認する
- 認証・認可チェック: 全エンドポイントに認可アノテーション(
@PreAuthorize 等)が設定されているか確認する
- セキュアコーディングガイドとの照合: セキュアコーディングガイド の各項目について準拠状況を確認する
Phase 5: セキュリティ設定の検証
- Spring Boot Actuator の公開範囲:
management.endpoints.web.exposure.include が最小限に設定されているか確認する
- エラーレスポンスの安全性: スタックトレースや内部情報がクライアントに返されないか確認する
- CORS 設定: ワイルドカード(
*)が使用されていないか確認する
- HTTP セキュリティヘッダー: CSP, HSTS, X-Content-Type-Options, X-Frame-Options が設定されているか確認する
Phase 6: AI サービス固有のセキュリティチェック(Spring AI 2.0)
- プロンプトインジェクション: ユーザー入力がプロンプトに直接含まれるパターンを検出する
- 個人情報の外部送信: AI サービスへの個人情報送信の有無を確認する
- AI API キーの管理: AI サービスの API キーが適切に外部化されているか確認する
Phase 7: レポート生成
- 全チェック結果を統合し、セキュリティ監査レポートを生成する
出力フォーマット
## セキュリティ監査レポート
### サマリー
- 判定: ✅ Pass / ⚠️ Warning / ❌ Fail
- 指摘件数: Critical: X, High: X, Medium: X, Low: X
- 攻撃面: エンドポイント数 X, 外部連携数 X
- レビュー日時: YYYY-MM-DD
### OWASP Top 10 適合状況
| # | OWASP | 判定 | 指摘数 | 備考 |
|---|-------|------|--------|------|
| 1 | A01: アクセス制御 | ✅/⚠️/❌ | X | ... |
| 2 | A02: 暗号化 | ✅/⚠️/❌ | X | ... |
| ... | ... | ... | ... | ... |
| 10 | A10: SSRF | ✅/⚠️/❌ | X | ... |
### 秘密情報検出結果
| # | ファイル | 行番号 | 種別 | 内容(マスク済) |
|---|---------|--------|------|-----------------|
| 1 | ... | ... | API キー / パスワード / トークン | ... |
### 依存関係脆弱性
| # | ライブラリ | CVE | CVSS | 修正バージョン | 依存種別 |
|---|-----------|-----|------|-------------|---------|
| 1 | ... | CVE-XXXX-XXXX | 9.1 | X.Y.Z | 直接/推移的 |
### 指摘事項
| # | 重要度 | OWASP | 対象ファイル | 行番号 | 脅威シナリオ | 指摘内容 | 是正方法 |
|---|--------|-------|-------------|--------|------------|----------|---------|
| 1 | Critical | A03 | ... | ... | ... | ... | ... |
### 推奨事項
- ...
重要度分類
| 重要度 | 基準 |
|---|
| Critical | 攻撃者がリモートから即座に悪用可能。即座の是正が必須 |
| High | 悪用に条件が必要だが影響大。Gate 通過前の是正が必須 |
| Medium | 直接的な攻撃ベクトルとなりにくいが改善推奨 |
| Low | 推奨レベルのセキュリティ強化 |
参照ドキュメント
スクリプト