LESSON 30分

ストーリー

田中VPoE
SASTはソースコードを見る「ホワイトボックス」テストだった。次はDAST — 実行中のアプリケーションを外部からテストする「ブラックボックス」テストだ
あなた
実際にリクエストを送って脆弱性を見つけるわけですか
田中VPoE
そうだ。DASTは攻撃者の視点でアプリケーションをテストする。SASTが「コードの中に問題がないか」を見るのに対し、DASTは「外から見て問題がないか」を見る。両者は補完関係にある
あなた
SASTだけでは不十分なんですか?
田中VPoE
SASTはコードベースの問題を見つけるが、設定ミスやランタイムの問題は見つけられない。例えば、CORSの設定ミスやHTTPヘッダーの不備はDASTでしか検出できない。逆に、DASTはコードの内部構造は見えないから、すべてのパスを網羅するのは難しい

DASTの仕組み

SASTとDASTの比較

観点SASTDAST
テスト対象ソースコード実行中のアプリケーション
アプローチホワイトボックスブラックボックス
検出対象コードレベルの脆弱性ランタイムの脆弱性、設定ミス
実行タイミングビルド時(PR作成時)デプロイ後(ステージング環境)
誤検知率比較的高い比較的低い(実際に攻撃が成功するか検証)
言語依存あり(言語ごとの解析器)なし(HTTPレベルで解析)
カバレッジコードの網羅性が高いアクセス可能なエンドポイントに限定
速度高速(数分〜数十分)低速(数十分〜数時間)

DASTのスキャンタイプ

DAST のスキャンタイプ:

1. Passive Scan(受動スキャン)
   ├── プロキシとして通常のトラフィックを監視
   ├── レスポンスヘッダーの問題を検出
   ├── Cookie設定の問題を検出
   └── アプリケーションに影響なし(安全)

2. Active Scan(能動スキャン)
   ├── 実際に攻撃ペイロードを送信
   ├── SQLインジェクション、XSS等を検出
   ├── ファジング(ランダムな入力を送信)
   └── アプリケーションに影響する可能性あり

3. API Scan(APIスキャン)
   ├── OpenAPI/Swagger仕様書をベースに解析
   ├── APIエンドポイントの認証テスト
   ├── パラメータの境界値テスト
   └── REST/GraphQL対応

主要なDASTツール

ツールライセンス特徴適用場面
OWASP ZAPOSS業界標準、豊富な機能、APIスキャン対応CI/CD統合、APIテスト
NucleiOSSテンプレートベース、高速、カスタマイズ容易設定ミス検出、CVEスキャン
Burp Suite商用高機能、手動テスト支援ペネトレーションテスト
OWASP Dependency-TrackOSSSBOM管理と脆弱性追跡サプライチェーン管理
StackHawk商用開発者フレンドリー、CI/CD統合DevSecOps
NiktoOSSWebサーバー設定スキャンインフラセキュリティ

OWASP ZAPの自動スキャン例

# ZAP Docker を使った CI/CD 統合
# GitHub Actions の例
name: DAST Scan

on:
  push:
    branches: [main]

jobs:
  dast:
    runs-on: ubuntu-latest
    services:
      app:
        image: myapp:latest
        ports:
          - 8080:8080

    steps:
      - uses: actions/checkout@v4

      # API スキャン(OpenAPI仕様書ベース)
      - name: ZAP API Scan
        uses: zaproxy/action-api-scan@v0.9.0
        with:
          target: 'http://app:8080'
          rules_file_name: 'zap-rules.tsv'
          cmd_options: >
            -f openapi
            -O http://app:8080/api/openapi.json

      # フルスキャン(Active Scan含む)
      - name: ZAP Full Scan
        uses: zaproxy/action-full-scan@v0.10.0
        with:
          target: 'http://app:8080'
          rules_file_name: 'zap-rules.tsv'

ZAPのルール設定ファイル

# zap-rules.tsv
# ルールID	アクション	説明
10010	WARN	Cookie No HttpOnly Flag
10011	FAIL	Cookie Without Secure Flag
10015	FAIL	Incomplete or No Cache-control Header
10017	FAIL	Cross-Domain JavaScript Source File Inclusion
10020	FAIL	X-Frame-Options Header
10021	FAIL	X-Content-Type-Options Header
10036	FAIL	Server Leaks Version Information
10038	FAIL	Content Security Policy (CSP) Header
40003	FAIL	CRLF Injection
40012	FAIL	Cross Site Scripting (Reflected)
40014	FAIL	Cross Site Scripting (Persistent)
40018	FAIL	SQL Injection
90019	FAIL	Server Side Code Injection
90020	FAIL	Remote OS Command Injection

DASTで検出できる主要な脆弱性

脆弱性検出方法OWASP分類
SQLインジェクション特殊文字を含むペイロードを送信し、エラーレスポンスを分析A03
XSS(クロスサイトスクリプティング)scriptタグを含む入力を送信し、レスポンスに反映されるか確認A03
CSRFCSRFトークンの有無とバリデーションを確認A01
セキュリティヘッダーの不備レスポンスヘッダーのCSP、HSTS、X-Frame-Options等を確認A05
CORS設定ミスオリジンを変えてリクエストし、許可状況を確認A05
認証バイパス認証なしでの保護リソースアクセスを試行A07
情報漏洩エラーメッセージ、バージョン情報、デバッグ情報の露出を確認A01
TLS設定不備対応プロトコル、暗号スイート、証明書の有効性を確認A02

レスポンスヘッダーのチェック項目

必須セキュリティヘッダー:

Strict-Transport-Security: max-age=31536000; includeSubDomains
  → HTTPS の強制

Content-Security-Policy: default-src 'self'; script-src 'self'
  → XSS 防止

X-Content-Type-Options: nosniff
  → MIME タイプスニッフィング防止

X-Frame-Options: DENY
  → クリックジャッキング防止

Referrer-Policy: strict-origin-when-cross-origin
  → Referrer 情報の制御

Permissions-Policy: camera=(), microphone=(), geolocation=()
  → ブラウザ機能の制限

DASTの運用上の注意点

テスト環境の考慮事項

考慮事項対策
本番環境への影響ステージング環境でのみActive Scanを実行
データの副作用テスト用データベースを使用、テスト後にリセット
レート制限への対応スキャン速度を調整、テスト環境ではレート制限を緩和
認証が必要なエンドポイントZAPに認証情報を設定、Authenticationスクリプトを使用
API仕様の変更OpenAPI仕様書をCI/CDで自動更新

「DASTは攻撃者の視点でテストする。つまり、テスト環境を壊す可能性がある。本番環境で絶対にActive Scanを実行するな」 — 田中VPoE


まとめ

ポイント内容
DAST実行中のアプリケーションを外部からテストするブラックボックステスト
SASTとの補完関係SASTはコードの問題、DASTはランタイムと設定の問題を検出
スキャンタイプPassive(安全)、Active(攻撃ペイロード送信)、API(仕様書ベース)
運用注意ステージング環境でのみActive Scan、認証設定、速度調整が必要

チェックリスト

  • DASTの動作原理とSASTとの違いを説明できる
  • OWASP ZAPの基本的な使い方を理解した
  • DASTで検出できる脆弱性のカテゴリを把握した
  • テスト環境での注意事項を理解した

次のステップへ

次は「SCAとサプライチェーンセキュリティ」を学びます。依存ライブラリに潜む脆弱性を管理する方法を身につけましょう。


推定読了時間: 30分