DAST: 動的安全性試験とは何ですか
DAST (動的アプリケーションセキュリティテスト) をテストする分析手法 アプリケーションを実行し、外部からの実際の攻撃をシミュレートします。 SASTとは異なり、 ソース コードを分析し、DAST は HTTP 経由でアプリケーションと対話します。 攻撃者は、XSS、SQL インジェクション、CSRF、構成ミス、および 認証が壊れています。
DAST はアプローチです ブラックボックス: ソース コードにアクセスできないため、 悪意のあるユーザーが見るアプリケーションとまったく同じです。これは SAST を補完します 構成の問題など、実行時にのみ現れる脆弱性を検出するため、 HTTP ヘッダーが欠落しており、認証フローが安全ではありません。
この記事では、OWASP ZAP と Burp Suite、パイプラインへの統合について説明します。 リリース サイクルを遅らせることなく自動化された DAST を実装するための CI/CD と戦略。
何を学ぶか
- DAST の仕組みとパイプラインでいつ使用するか
- 自動スキャン用に OWASP ZAP を構成する
- DAST を使用した API セキュリティ テスト
- ファジングと高度なテスト技術
- CI/CD パイプラインへの DAST の統合
- 結果のトリアージと優先順位付け
DAST の仕組み
DAST ツールは、構造化されたプロセスに従って Web アプリケーションを分析します。
- スパイダー/クロール: ツールはアプリケーションをナビゲートし、すべてのページ、フォーム、API エンドポイントを検出します。
- パッシブスキャン: HTTP 応答を分析して、機密情報、欠落しているヘッダー、安全でない Cookie を探します。
- アクティブスキャン: 悪意のあるペイロード (SQL インジェクション、XSS ペイロード、パス トラバーサル) を送信し、応答を分析して脆弱性を特定します。
- 報告: 見つかった脆弱性を重大度別に分類し、修復手順を含むレポートを生成します。
パイプラインで DAST を使用する場合
DAST には実行中のアプリケーションが必要なため、通常は段階的に配置されます。 パイプラインの次は次のとおりです。
- ステージング環境: ステージングでのデプロイ後、実稼働への昇格前
- プルリクエスト: 各 PR の一時的な環境 (プレビュー展開)
- 毎晩のスキャン: ステージング環境で毎晩スケジュールされたフル スキャン
- 導入後: 各運用展開後のライト スキャン (パッシブ スキャンのみ)
DAST: 利点と制限事項
利点: 誤検知率が低く、実際の実行時の脆弱性を検出します。 ソース コードにアクセスする必要はなく、インフラストラクチャ構成をテストします。 制限事項: SAST よりも遅く、実行中のアプリケーションが必要です。 すべてのコードをカバーしているわけではないため、複雑なビジネス ロジックの脆弱性が見つからない可能性があります。
OWASP ZAP: オープンソース標準
OWASP ZAP (Zed 攻撃プロキシ) 世界で最も使用されているオープンソース DAST ツール、 OWASP財団によって維持されています。無料で拡張可能で、手動使用の両方をサポートしています (CI/CD パイプラインの) 自動化よりも (インターセプト プロキシとして)。
Docker での ZAP ベースライン スキャン
自動 DAST スキャンを実行してコンテナーを使用する最も簡単な方法 公式 ZAP 港湾労働者:
# Baseline scan: scan veloce, solo passive checks
docker run --rm -t ghcr.io/zaproxy/zaproxy:stable \
zap-baseline.py \
-t https://staging.myapp.com \
-r zap-report.html \
-J zap-report.json \
-c zap-baseline.conf
# Full scan: scan completo con active scanning
docker run --rm -t ghcr.io/zaproxy/zaproxy:stable \
zap-full-scan.py \
-t https://staging.myapp.com \
-r zap-full-report.html \
-J zap-full-report.json
# API scan: specifico per API REST/GraphQL
docker run --rm -t ghcr.io/zaproxy/zaproxy:stable \
zap-api-scan.py \
-t https://staging.myapp.com/api/openapi.json \
-f openapi \
-r zap-api-report.html
CI/CD の ZAP 構成
ZAP の動作をカスタマイズするには、次の構成ファイルを使用します。 アクティブ化するルール、重大度のしきい値、および除外を定義します。
# zap-baseline.conf
# Formato: ID_regola WARN|IGNORE|FAIL
# Regole passive scan
10010 WARN # Cookie No HttpOnly Flag
10011 WARN # Cookie Without Secure Flag
10015 FAIL # Incomplete or No Cache-control
10017 WARN # Cross-Domain JavaScript Source
10020 FAIL # X-Frame-Options Header
10021 FAIL # X-Content-Type-Options Header
10038 FAIL # Content Security Policy Header
10098 WARN # Cross-Domain Misconfiguration
10202 WARN # Absence of Anti-CSRF Tokens
90033 WARN # Loosely Scoped Cookie
GitHub アクションへの統合
# .github/workflows/dast.yml
name: DAST Security Scan
on:
deployment_status:
jobs:
dast:
if: github.event.deployment_status.state == 'success'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: OWASP ZAP Baseline Scan
uses: zaproxy/action-baseline@v0.12.0
with:
target: ${{ github.event.deployment_status.target_url }}
rules_file_name: "zap-baseline.conf"
cmd_options: "-a -j"
fail_action: true
- name: Upload ZAP Report
if: always()
uses: actions/upload-artifact@v4
with:
name: zap-report
path: report_html.html
APIセキュリティテスト
最新の API (REST、GraphQL、gRPC) には、特定の DAST アプローチが必要です。脆弱性 API で最も一般的なものは次のとおりです。
- 壊れたオブジェクトレベル認証 (BOLA): IDを変更して他のユーザーのリソースにアクセスします
- 認証の失敗: 弱い JWT トークン、レート制限なし、無効化されていないセッション
- 過剰なデータ漏洩: 必要以上のデータを返す API
- 一括割り当て: リクエストの本文による予期しないフィールドの変更
- 注射: SQLインジェクション、NoSQLインジェクション、APIパラメータによるコマンドインジェクション
OpenAPI を使用した ZAP API スキャン
ZAP は、各エンドポイントのテストを自動的に生成する OpenAPI 仕様をサポートしています。
# .github/workflows/api-dast.yml
name: API DAST Scan
on:
workflow_dispatch:
schedule:
- cron: "0 2 * * 1-5" # Ogni notte lavorativa alle 2:00
jobs:
api-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: ZAP API Scan
uses: zaproxy/action-api-scan@v0.7.0
with:
target: "https://staging-api.myapp.com/openapi.json"
format: openapi
fail_action: true
cmd_options: >
-z "-config replacer.full_list(0).description=AuthHeader
-config replacer.full_list(0).enabled=true
-config replacer.full_list(0).matchtype=REQ_HEADER
-config replacer.full_list(0).matchstr=Authorization
-config replacer.full_list(0).replacement=Bearer TEST_TOKEN"
ファジング: ランダム入力によるテスト
Il 毛羽立ち ランダムまたは半ランダムの入力をアプリケーションに送信する技術 クラッシュ、メモリ リーク、予期しない動作を検出します。 DAST コンテキストでは、ファジング 以下を見つけるのに特に効果的です。
- 無効な長さのフィールドでのバッファ オーバーフロー
- 不正な入力による解析エラー (破損した JSON/XML/YAML)
- 競合するリクエストによる競合状態
- 大きなペイロードによるサービス妨害
ファジングの種類
- 突然変異ベース: 有効な入力を変更します (文字の変更、ペイロードの追加)
- 世代ベース: スキーマに基づいて入力を最初から生成します
- 取材ガイド付き: カバレッジフィードバックを使用して、より効果的なインプットを生成します。
Burp Suite: プロフェッショナル ツール
げっぷスイート PortSwigger と、侵入で最もよく使用される商用 DAST ツールによる プロのテスター。コミュニティ バージョンは無料ですが制限があります。プロフェッショナルバージョン 自動スキャナー、高度な侵入者、チームコラボレーションを提供します。
Burp Suite は、テスターが傍受できる手動および半自動分析に優れています。 リクエストを変更し、カスタマイズされたペイロードで再起動します。 CI/CD 統合の場合、 Burp Suite Enterprise は、スケジュールされたスキャンを開始するための REST API を提供します。
DAST 結果の管理
DAST の結果には、誤検知を回避するための構造化されたトリアージ プロセスが必要です そして修正に優先順位を付けます。
DAST トリアージ プロセス
| 重大度 | ALSの治療 | アクション |
|---|---|---|
| 致命的 | 24~48時間 | 導入を停止し、即時修正する |
| 高い | 7日間 | デプロイをブロックし、現在のスプリントで修正をスケジュールする |
| 中くらい | 30日 | チケットを作成し、次のスプリントを計画する |
| 低/情報 | 90日 | バックログ、定期評価 |
シングル ページ アプリケーション (SPA) 用の DAST
シングル ページ アプリケーション (Angular、React、Vue) には、DAST 特有の課題があります。 コンテンツは JavaScript 経由で動的に生成されるため、従来のクローラーは すべてのページを探索しないでください。
- AJAX スパイダー by ZAP: ヘッドレス ブラウザを使用して SPA を参照し、動的コンテンツを検出します
- 認証: JWT ベースのログインまたは SPA セッションを処理するように ZAP を構成します。
- プレシード: アプリケーションのビルドから抽出されたテスト対象の URL のリストを ZAP に提供します。
DAST のベスト プラクティス
- 専用環境: DAST を本番環境で直接実行するのではなく、分離されたステージング環境で実行します。
- 現実的なテストデータ: 環境に現実的なデータを入力して、カバレッジを最大化します。
- 認証が設定されました- 認証された領域を参照するためのテスト資格情報を構成します。
- インクリメンタルスキャン: PR のベースライン スキャン、フルナイト スキャン
- SASTとの相関: DAST の結果と SAST の結果を関連付けて、重複を減らします。
- 素早いフィードバック: 重要な発見がある場合は、Slack/Teams 経由で開発者にすぐに通知します
結論
DAST は、DevSecOps 戦略において SAST を補完する重要な機能です。 SAST が検出する間、 ソース コードに脆弱性がある場合、DAST は実行中のアプリケーションが 効果的にセキュリティを確保し、構成、ヘッダー、認証、ビジネス フローをテストします。
次の記事では、詳しく見ていきます SCA(ソフトウェア構成分析)、 オープンソースの依存関係を分析し、その依存関係の既知の脆弱性を発見する技術 プロジェクトで使用されるライブラリ。







