脆弱性スキャナー
攻撃者のように考え、専門家のように防御する。2025年の脅威ランドスケープへの意識。
🔧 ランタイムスクリプト
自動検証のために実行:
| スクリプト | 目的 | 使用方法 |
|---|
scripts/security_scan.py | 適用されたセキュリティ原則を検証する | python scripts/security_scan.py <project_path> |
📋 参照ファイル
1. セキュリティ専門家のマインドセット
中核原則
| 原則 | 適用 |
|---|
| 侵害を前提とする | 攻撃者がすでに内部にいるかのように設計する |
| ゼロトラスト | 決して信頼せず、常に検証する |
| 多層防御 | 複数の層で守り、単一障害点を作らない |
| 最小権限 | 必要最小限のアクセスのみ |
| フェイルセキュア | エラー時はアクセスを拒否する |
脅威モデリングの問い
スキャンの前に、次を問いかけます:
- 何を保護するのか?(資産)
- 誰が攻撃するのか?(脅威アクター)
- どのように攻撃するのか?(攻撃ベクトル)
- 影響は何か?(ビジネスリスク)
2. OWASP Top 10:2025
リスクカテゴリ
| 順位 | カテゴリ | 考えるべきこと |
|---|
| A01 | アクセス制御の不備 | 誰が何にアクセスできるか? IDOR、SSRF |
| A02 | セキュリティの設定ミス | デフォルト設定、ヘッダー、公開されたサービス |
| A03 | ソフトウェアサプライチェーン 🆕 | 依存関係、CI/CD、ビルドの整合性 |
| A04 | 暗号化の失敗 | 脆弱な暗号、露出したシークレット |
| A05 | インジェクション | ユーザー入力 → システムコマンド |
| A06 | 安全でない設計 | 欠陥のあるアーキテクチャ |
| A07 | 認証の失敗 | セッション、資格情報の管理 |
| A08 | 整合性の失敗 | 署名されていない更新、改ざんされたデータ |
| A09 | ログ記録とアラート | 死角、監視の欠如 |
| A10 | 例外条件 🆕 | エラー処理、フェイルオープン状態 |
2025年の主な変更点
2021 → 2025 Shifts:
├── SSRF merged into A01 (Access Control)
├── A02 elevated (Cloud/Container configs)
├── A03 NEW: Supply Chain (major focus)
├── A10 NEW: Exceptional Conditions
└── Focus shift: Root causes > Symptoms
3. サプライチェーンセキュリティ(A03)
攻撃対象領域
| ベクトル | リスク | 問いかけるべきこと |
|---|
| 依存関係 | 悪意のあるパッケージ | 新しい依存関係を監査しているか? |
| ロックファイル | 整合性攻撃 | コミットされているか? |
| ビルドパイプライン | CI/CD の侵害 | 誰が変更できるか? |
| レジストリ | タイポスクワッティング | 検証済みのソースか? |
防御の原則
- パッケージの整合性を検証する(チェックサム)
- バージョンを固定し、更新を監査する
- 重要な依存関係にはプライベートレジストリを使用する
- 成果物に署名し、検証する
4. 攻撃対象領域のマッピング
マッピングすべきもの
| カテゴリ | 要素 |
|---|
| エントリポイント | API、フォーム、ファイルアップロード |
| データフロー | 入力 → 処理 → 出力 |
| 信頼境界 | 認証・認可がチェックされる場所 |
| 資産 | シークレット、PII、ビジネスデータ |
優先順位付けマトリクス
Risk = Likelihood × Impact
High Impact + High Likelihood → CRITICAL
High Impact + Low Likelihood → HIGH
Low Impact + High Likelihood → MEDIUM
Low Impact + Low Likelihood → LOW
5. リスクの優先順位付け
CVSS + コンテキスト
| 要素 | 重み | 問い |
|---|
| CVSS スコア | 基本深刻度 | その脆弱性はどの程度深刻か? |
| EPSS スコア | 悪用の可能性 | 悪用されているか? |
| 資産価値 | ビジネスコンテキスト | 何がリスクにさらされているか? |
| 露出 | 攻撃対象領域 | インターネットに公開されているか? |
優先順位付けの決定木
Is it actively exploited (EPSS >0.5)?
├── YES → CRITICAL: Immediate action
└── NO → Check CVSS
├── CVSS ≥9.0 → HIGH
├── CVSS 7.0-8.9 → Consider asset value
└── CVSS <7.0 → Schedule for later
6. 例外条件(A10 - 新規)
フェイルオープン vs フェイルクローズド
| シナリオ | フェイルオープン(悪い) | フェイルクローズド(良い) |
|---|
| 認証エラー | アクセスを許可する | アクセスを拒否する |
| パースの失敗 | 入力を受理する | 入力を拒否する |
| タイムアウト | 永遠に再試行する | 制限して中止する |
チェックすべきこと
- すべてをキャッチして無視する例外ハンドラー
- セキュリティ操作におけるエラー処理の欠如
- 認証・認可における競合状態
- リソース枯渇のシナリオ
7. スキャン手法
フェーズベースのアプローチ
1. RECONNAISSANCE
└── Understand the target
├── Technology stack
├── Entry points
└── Data flows
2. DISCOVERY
└── Identify potential issues
├── Configuration review
├── Dependency analysis
└── Code pattern search
3. ANALYSIS
└── Validate and prioritize
├── False positive elimination
├── Risk scoring
└── Attack chain mapping
4. REPORTING
└── Actionable findings
├── Clear reproduction steps
├── Business impact
└── Remediation guidance
8. コードパターン分析
高リスクパターン
| パターン | リスク | 確認すべき内容 |
|---|
| クエリでの文字列連結 | インジェクション | "SELECT * FROM " + user_input |
| 動的コード実行 | RCE | eval(), exec(), Function() |
| 安全でないデシリアライゼーション | RCE | pickle.loads(), unserialize() |
| パス操作 | トラバーサル | ファイルパスにユーザー入力が含まれる |
| セキュリティの無効化 | 各種 | verify=False, --insecure |
シークレットのパターン
| 種類 | 兆候 |
|---|
| APIキー | api_key, apikey, 高エントロピー |
| トークン | token, bearer, jwt |
| 認証情報 | password, secret, key |
| クラウド | AWS_, AZURE_, GCP_ で始まるプレフィックス |
9. クラウドセキュリティの考慮事項
責任共有モデル
| レイヤー | お客様の責任 | プロバイダーの責任 |
|---|
| データ | ✅ | ❌ |
| アプリケーション | ✅ | ❌ |
| OS/ランタイム | 状況による | 状況による |
| インフラストラクチャ | ❌ | ✅ |
クラウド固有のチェック項目
- IAM: 最小権限の原則が適用されているか?
- ストレージ: パブリックバケットが存在しないか?
- ネットワーク: セキュリティグループが適切に絞り込まれているか?
- シークレット: シークレットマネージャーを使用しているか?
10. アンチパターン
| ❌ 避けるべき行為 | ✅ 推奨される行為 |
|---|
| 理解せずにスキャンする | まず攻撃対象領域を把握する |
| すべてのCVEでアラートを出す | 悪用可能性と資産に基づいて優先順位を付ける |
| 誤検知を無視する | 検証済みのベースラインを維持する |
| 症状だけを修正する | 根本原因に対処する |
| デプロイ前に一度だけスキャンする | 継続的にスキャンする |
| サードパーティ製の依存関係を無条件に信頼する | 整合性を検証し、コードを監査する |
11. レポーティングの原則
検出結果の構成
各検出結果では、以下の点に答えられるようにしてください。
- 何が? - 脆弱性の明確な説明
- どこで? - 正確な場所(ファイル、行、エンドポイント)
- なぜ? - 根本原因の説明
- 影響は? - ビジネス上の結果
- どう修正するか? - 具体的な是正策
深刻度の分類
| 深刻度 | 基準 |
|---|
| 重大 | RCE、認証バイパス、大規模なデータ露出 |
| 高 | データ露出、権限昇格 |
| 中 | 影響範囲が限定的、特定の条件が必要 |
| 低 | 情報提供目的、ベストプラクティス |
覚えておくこと: 脆弱性スキャンは問題を発見します。熟練した判断によって、何が重要かを優先順位付けします。常に「攻撃者はこれをどう悪用するか?」と自問してください。