mcpField
D
dynamic-application-security-testing

dynamic-application-security-testing

github.com/seb1nセキュリティ232119 回インストール11 週間前に更新
リポジトリ

dynamic-application-security-testing について

実行中のWebアプリやAPIを対象に、エージェントが動的セキュリティテストを行うためのスキルです。セキュリティ担当者や開発チーム向けに、スキャン設定、検出結果の検証、修正レポート作成を扱い、許可された範囲と影響の抑制を重視します。

主な機能

  1. 01スキャン範囲と方針の設定
  2. 02ログインとAPI認証の設定
  3. 03WebアプリとAPIのスキャン
  4. 04検出結果の分類と検証
  5. 05修正案付きレポートの作成
  6. 06スキャンの定期実行と結果比較

活用シーン

  1. 01ステージング環境のWebアプリの脆弱性確認
  2. 02認証が必要なAPIエンドポイントのテスト
  3. 03デプロイ後のスキャン結果の比較

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/seb1n/awesome-ai-agent-skills --skill dynamic-application-security-testing

インストール後、Claude Code で/dynamic-application-security-testingを入力して読み込まれたか確認します。

詳細

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

このスキルを使用すると、エージェントは稼働中の Web アプリケーションや API に対して動的アプリケーションセキュリティテスト(DAST)を実行できます。静的解析とは異なり、DAST は実行時にアプリケーションとやり取りします。細工した HTTP リクエストの送信、入力パラメーターのファジング、レスポンスの分析を行い、SQL インジェクション、クロスサイトスクリプティング、サーバーの設定ミス、認証の不備、安全でない API エンドポイントなどの脆弱性を検出します。エージェントはスキャンプロファイルを設定し、認証済みスキャンを処理して、結果を解釈し、実行可能な修正レポートを作成します。

ワークフロー

  1. 対象範囲とスキャンポリシーを定義する — 対象 URL、アプリケーションの種類(従来型の Web アプリ、SPA、REST API、GraphQL)、スキャン範囲を指定します。意図しない対象をスキャンしないよう、対象に含めるパスとドメインを定義します。スキャンポリシーとして、リスクの低い偵察向けのパッシブのみ、脆弱性を全面的に検査するアクティブ、またはエンドポイントのファジング向けの API 固有のポリシーを選択します。

  2. 認証を設定する — ログインが必要なアプリケーションでは、有効な認証情報またはセッショントークンをスキャナーに設定します。ログイン URL、ユーザー名/パスワードのフィールド、ログイン済みであることを示す文字列を指定して、フォームベース認証を設定します。API のテストでは、スキャナーが認証済みのエンドポイントにアクセスできるよう、Bearer トークン、API キー、または OAuth フローを設定します。

  3. DAST スキャンを実行する — 選択したツール(OWASP ZAP、Burp Suite、または Nuclei)を使用してスキャンを開始します。スキャナーはまずアプリケーションをクロールしてエンドポイントを検出し、次に各エンドポイントを攻撃ペイロードでアクティブに検査します。対象環境に過度な負荷をかけないよう、スキャンの進捗とリソース消費を監視します。

  4. 検出結果を分析して分類する — スキャン結果を確認し、各検出結果を脆弱性の種類、重大度(CVSS を使用)、信頼度、影響を受ける URL に基づいて分類します。報告されたレスポンスが実際に脆弱性を示していることを検証し、情報のみのノイズや誤検知を除外します。

  5. 修正レポートを作成する — 脆弱な URL、HTTP リクエスト/レスポンスの証拠、重大度評価、CWE 識別子、OWASP カテゴリーとの対応付け、具体的な修正方法を各検出結果に含めた、構造化レポートを作成します。課題トラッカーとの連携用に、HTML、JSON、または SARIF 形式でエクスポートします。

  6. 定期スキャンをスケジュールする — 定期的なスケジュール(例:ステージング環境に対して毎晩)でスキャンを実行するよう設定するか、QA 環境へのデプロイ時に実行します。スキャン実行ごとの結果を比較して、修正の進捗を追跡し、新たに持ち込まれた脆弱性を検出します。

対応技術

  • DAST ツール:OWASP ZAP、Burp Suite Professional/Enterprise、Nuclei、Nikto、Arachni
  • 対象の種類:従来型の Web アプリ、シングルページアプリケーション(React、Angular、Vue)、REST API、GraphQL API、WebSocket エンドポイント
  • 認証:フォームベースログイン、HTTP Basic/Digest、Bearer トークン、API キー、OAuth 2.0 フロー
  • 出力形式:HTML レポート、JSON、XML、SARIF、Markdown
  • CI/CD 連携:GitHub Actions、GitLab CI、Jenkins、Azure Pipelines

使用方法

対象 URL、必要に応じて認証情報、希望するスキャンの深さをエージェントに伝えます。エージェントはスキャナーを設定してテストを実行し、優先順位付けされた検出結果レポートを提供します。

プロンプトの例:

Run a DAST scan against our staging application at https://staging.example.com. Use OWASP ZAP with the login form at /login (username: testuser, password: Test@1234). Scan all API endpoints under /api/v2 and generate an HTML report.

例

例 1:Web アプリケーションに対する OWASP ZAP スキャン

認証付きの ZAP Docker コマンド:

docker run --rm -v $(pwd)/report:/zap/wrk owasp/zap2docker-stable zap-full-scan.py \
  -t https://staging.example.com \
  -r zap-report.html \
  -J zap-report.json \
  -c zap-config.conf \
  --hook=zap-auth-hook.py \
  -z "-config formhandler.fields.field(0).fieldId=username \
      -config formhandler.fields.field(0).value=testuser \
      -config formhandler.fields.field(1).fieldId=password \
      -config formhandler.fields.field(1).value=Test@1234"

検出結果レポート(抜粋):

#リスクアラートURLCWEOWASP信頼度
1高SQL インジェクションPOST /api/v2/searchCWE-89A03:2021高
2高クロスサイトスクリプティング(反射型)GET /search?q=<script>CWE-79A03:2021高
3中Anti-CSRF トークンの欠落POST /api/v2/profile/updateCWE-352A01:2021中
4中Secure フラグのない CookieSet-Cookie: session=...CWE-614A05:2021高
5低X-Content-Type-Options ヘッダーの欠落すべてのレスポンスCWE-693A05:2021高
6低サーバーのバージョン情報漏えいServer: Apache/2.4.49CWE-200A05:2021高

検出結果 #1 — SQL インジェクションの証拠:

Request:
  POST /api/v2/search HTTP/1.1
  Content-Type: application/json
  {"query": "test' OR '1'='1' --"}

Response:
  HTTP/1.1 200 OK
  [returned all 4,892 records instead of matching records]

Remediation: Use parameterized queries or ORM methods. Validate and sanitize
all user input before including it in database queries.
例 2:公開されたデバッグエンドポイントを検出するカスタム Nuclei テンプレート

カスタムテンプレート(exposed-debug-endpoints.yaml):

id: exposed-debug-endpoints
info:
  name: Exposed Debug/Admin Endpoints
  author: security-team
  severity: high
  description: Detects debug and admin endpoints that should not be publicly accessible.
  tags: misconfiguration,exposure
  classification:
    cwe-id: CWE-489
    cvss-score: 7.5

http:
  - method: GET
    path:
      - "{{BaseURL}}/debug"
      - "{{BaseURL}}/actuator"
      - "{{BaseURL}}/actuator/env"
      - "{{BaseURL}}/graphql/playground"
      - "{{BaseURL}}/_profiler"
      - "{{BaseURL}}/elmah.axd"
      - "{{BaseURL}}/phpinfo.php"
    stop-at-first-match: false
    matchers-condition: and
    matchers:
      - type: status
        status:
          - 200
      - type: word
        words:
          - "debug"
          - "actuator"
          - "environment"
          - "playground"
        condition: or

スキャンの実行:

nuclei -u https://staging.example.com -t exposed-debug-endpoints.yaml -t cves/ -severity high,critical -json -o nuclei-results.json

出力例:

[exposed-debug-endpoints] [http] [high] https://staging.example.com/actuator/env
[exposed-debug-endpoints] [http] [high] https://staging.example.com/graphql/playground
[CVE-2021-44228] [http] [critical] https://staging.example.com/api/v2/log

ベストプラクティス

  • 本番環境ではなく、ステージング環境をスキャンする — DAST は攻撃ペイロードを積極的に送信するため、データの破損やアラートの発生、サービス停止を引き起こす可能性があります。本番環境を模したステージング環境または QA 環境を必ず対象にしてください。
  • パッシブスキャンとアクティブスキャンを組み合わせる — まず、攻撃ペイロードを送信せずにアプリケーションをマッピングするパッシブスパイダーを実行し、その後、検出したエンドポイントに対してアクティブスキャンを実行して、網羅的に調査します。
  • 認証を正しく設定する — 未認証の DAST スキャンでは、ログインページと公開エンドポイントしかテストできません。実際の脆弱性の多くは認証が必要なフローの先にあるため、有効なセッション認証情報を必ず設定してください。
  • スキャン範囲の境界を設定する — 対象範囲に含めるドメインとパスを明示的に定義してください。境界を設定しないと、スキャナーがサードパーティーのサイト、CDN、または決済プロバイダーへのリンクをたどり、意図しない結果を招く可能性があります。
  • スキャンのベースラインを時系列で比較する — スキャン結果を保存し、新しい実行結果を前回のベースラインと比較してください。これにより、新たに持ち込まれた脆弱性を発見し、以前に報告された問題が修正されたことを確認できます。
  • DAST と SAST を組み合わせる — DAST は SAST が見逃す実行時の問題(設定ミス、デプロイエラー)を検出し、SAST は DAST では到達できないコードレベルの欠陥を検出します。包括的にカバーするため、両方を使用してください。

安全上の境界

  • ユーザーが所有するシステム、または評価の明示的な許可を得たシステムのみを対象とし、テスト前に承認された範囲を記録してください。
  • パッシブまたは読み取り専用の調査から始めてください。アクティブスキャン、悪用、負荷の生成、またはサービスを妨げる修復を行う前に、明示的な承認を得てください。
  • シークレットを漏えいさせたり、無関係なデータを抽出したり、本番環境の制御を弱めたり、承認された対象範囲を超えたりしないでください。
  • 証拠を保全し、影響を最小限に抑え、不安定な状態になったら停止し、重要な変更には必ずロールバックまたは封じ込めの手順を提示してください。

エッジケース

  • クライアントサイドルーティングを使用するシングルページアプリケーション — 従来のスパイダーでは、React、Angular、Vue のアプリ内のルートを検出できません。リンクが JavaScript によって描画されるためです。SPA のエンドポイントを適切に検出するには、ZAP の AJAX Spider またはヘッドレスブラウザーベースのクローラーを使用してください。
  • UI のない API 専用アプリケーション — スパイダーでクロールする Web UI がない場合は、OpenAPI/Swagger 仕様または Postman コレクションをスキャナーに直接インポートして、すべてのエンドポイント、パラメーター、想定されるリクエスト形式を定義してください。
  • レート制限または WAF で保護されたターゲット — 積極的なスキャンはレート制限や WAF によるブロックを引き起こし、偽陰性につながる場合があります。スキャン速度を抑える、スキャナーの IP アドレスを WAF の許可リストに追加する、または正確な結果を得るためにオリジンサーバーを直接テストしてください。
  • WebSocket とリアルタイムのエンドポイント — ほとんどの DAST ツールは HTTP のリクエスト/レスポンスパターンに重点を置いています。WebSocket 接続のリアルタイムなメッセージフローにおけるインジェクションや認可の問題を調べるには、専用ツールまたは手動テストが必要です。
  • 状態を持つ複数ステップのワークフロー — チェックアウト、パスワードリセット、MFA 登録などのフローにおける脆弱性を検出するには、スキャナーが特定の手順に従う必要があります。スキャンシーケンスを定義するか、記録したマクロを使用して、これらのワークフローを最初から最後までテストしてください。

コメント