LESSON 30分

ストーリー

田中VPoE
シフトレフトの考え方はわかったな。では、具体的なセキュリティスキャンの種類と統合方法を見ていこう
あなた
SAST、DAST、SCA — 名前は聞いたことがありますが、組織全体で統合するとなると、どう使い分けるんですか?
田中VPoE
それぞれ検出できる脆弱性の種類が違う。一つだけでは不十分で、組み合わせて使うことで網羅的なセキュリティカバレッジを実現する。ただし、全部入れるとパイプラインが遅くなる。ここでもトレードオフの判断が必要だ

3つのスキャン手法の比較

項目SASTDASTSCA
正式名称Static Application Security TestingDynamic Application Security TestingSoftware Composition Analysis
対象ソースコード実行中のアプリケーション依存ライブラリ
実行タイミングビルド前/ビルド時デプロイ後ビルド時
検出対象SQLインジェクション、XSS、バッファオーバーフロー等認証バイパス、CSRF、設定ミス等既知の脆弱性(CVE)、ライセンス違反
長所高速、早期検出実際の攻撃をシミュレート既知脆弱性の網羅的検出
短所偽陽性が多い実行環境が必要、時間がかかるゼロデイには対応できない

検出範囲のカバレッジ

         SAST         SCA          DAST
       ┌──────┐    ┌──────┐    ┌──────┐
       │自作  │    │OSS   │    │実行時│
       │コード │    │依存  │    │の挙動│
       │の脆弱│    │ライブ │    │   │
       │性    │    │ラリの │    │   │
       │      │    │脆弱性 │    │   │
       └──────┘    └──────┘    └──────┘

       3つを組み合わせることでカバレッジを最大化

SAST: 静的アプリケーションセキュリティテスト

組織標準ツールの選定

ツール対応言語特徴ライセンス
Semgrep多言語カスタムルール作成が容易OSS + 商用
CodeQL多言語GitHub統合が強力GitHub利用者は無料
SonarQube多言語品質ゲートとの統合OSS + 商用

パイプラインへの統合

# GitHub Actions: SAST統合
security-sast:
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v4

    - name: Run Semgrep
      uses: semgrep/semgrep-action@v1
      with:
        config: "p/owasp-top-ten"
        generateSarif: true

    - name: Upload SARIF
      uses: github/codeql-action/upload-sarif@v3
      with:
        sarif_file: semgrep.sarif

偽陽性の管理

SASTの最大の課題は偽陽性です。組織レベルでの管理戦略が必要です。

戦略説明
ルールのチューニング組織のコーディングパターンに合わせてルールを調整
ベースラインの設定既存の検出結果をベースラインとし、新規のみアラート
抑制リスト検証済みの偽陽性をリスト管理
定期レビュー月次でルールと抑制リストをレビュー

SCA: ソフトウェアコンポジション分析

組織標準ツールの選定

ツール特徴自動修正
Snyk幅広い言語対応、修正PR自動作成あり
DependabotGitHub統合、無料あり
Trivyコンテナスキャン対応、OSSなし

脆弱性の優先順位付け

すべてのCVEに即座に対応するのは現実的ではありません。優先順位をつけます。

重要度CVSS対応期限アクション
Critical9.0-10.024時間以内パイプラインをブロック、即時修正
High7.0-8.97日以内パイプラインをブロック
Medium4.0-6.930日以内警告表示
Low0.1-3.990日以内ログ記録のみ

DAST: 動的アプリケーションセキュリティテスト

実行タイミングと戦略

DASTはアプリケーションを実際に実行してテストするため、実行環境が必要です。

実行環境テスト範囲頻度
ステージングフルスキャンリリース前
エフェメラル環境APIスキャンPR単位(重要エンドポイントのみ)
本番パッシブスキャン常時
# GitHub Actions: DAST統合(ステージングデプロイ後)
security-dast:
  needs: deploy-staging
  runs-on: ubuntu-latest
  steps:
    - name: OWASP ZAP Scan
      uses: zaproxy/action-full-scan@v0.11.0
      with:
        target: "https://staging.example.com"
        rules_file_name: "zap-rules.tsv"

統合戦略:パイプラインへの配置

3つのスキャンをパイプラインのどこに配置するかを定義します。

PR作成時:
  ├── SAST(Semgrep / CodeQL)     ← 必須、ブロック
  ├── SCA(Snyk / Dependabot)     ← 必須、Critical/Highはブロック
  └── シークレットスキャン           ← 必須、ブロック

ビルド後:
  └── コンテナイメージスキャン(Trivy) ← 必須、Critical はブロック

ステージングデプロイ後:
  └── DAST(OWASP ZAP)            ← 必須、Highはブロック

本番:
  └── ランタイムモニタリング         ← 継続的

まとめ

ポイント内容
SASTソースコードの脆弱性をビルド前に検出、偽陽性管理が重要
SCA依存ライブラリの既知脆弱性を検出、CVSS重要度で優先順位付け
DAST実行中のアプリの脆弱性を検出、ステージング環境で実施
統合3手法を組み合わせてカバレッジを最大化

チェックリスト

  • SAST、DAST、SCAの違いと使い分けを理解した
  • 偽陽性管理の重要性を理解した
  • CVSS重要度に基づく優先順位付けを理解した
  • パイプラインへの配置戦略を理解した

次のステップへ

次は「コンプライアンスゲートの設計」です。セキュリティスキャンの結果を、組織のコンプライアンス要件に沿ってゲートとして機能させる方法を学びましょう。


推定読了時間: 30分