Application Security Management のトラブルシューティング

概要

Datadog Application Security Management (ASM) で予期せぬ動作が発生した場合、以下に挙げるような一般的な問題を調査することができます。問題が解決しない場合は、Datadog サポートにお問い合わせください。

ASM レート制限

ASM のトレースは、1 秒間に 100 個のトレースにレート制限されています。制限後に送信されたトレースは報告されません。制限を変更する必要がある場合は、Datadog サポートに連絡してください。

ASM でセキュリティトレースが検出されない

ASM のトレースとシグナルエクスプローラーに脅威情報が表示されるには、一連の手順が正常に実行される必要があります。この問題を調査する際には、各ステップを確認することが重要です。特定の言語に関する追加のトラブルシューティング手順は、末尾の言語タブに記載されています。

ASM が有効であることを確認する

メトリクス datadog.apm.appsec_host を使って、ASM が動作しているかどうかを確認することができます。

  1. Datadog の Metrics > Summary に移動します。
  2. メトリクス datadog.apm.appsec_host を検索します。このメトリクスが存在しない場合、ASM を実行しているサービスは存在しません。メトリクスが存在する場合、サービスはメトリクスタグ hostservice で報告されます。
  3. メトリクスを選択し、** Tags** セクションで、service を検索すると、どのサービスが ASM を実行しているかを確認できます。

datadog.apm.appsec_host が表示されない場合は、アプリ内の説明を確認し、初期設定の手順がすべて完了したことを確認してください。

ASM のデータは、APM トレースと一緒に送信されます。APM のトラブルシューティングを参照して、APM の設定を確認し、接続エラーを調べてください。

アプリケーションにテストアタックを送信する

ASM の設定をテストするには、次の curl スクリプトを含むファイルを実行して、Security Scanner Detected ルールをトリガーします。

for ((i=1;i<=250;i++));
do
# 既存サービスのルートが対象
curl https://your-application-url/existing-route -A dd-test-scanner-log;
# 既存サービス以外のルートが対象
curl https://your-application-url/non-existing-route -A dd-test-scanner-log;
done

アプリケーションを有効にして実行し、成功すると、数分後にトレースとシグナルエクスプローラーに脅威情報が表示されます。

Security Signal 詳細ページでは、タグ、メトリクス、次のステップの提案、脅威と関連する攻撃者の IP アドレスが表示されます。

必要なトレーサーのインテグレーションが無効になっていないか確認する

ASM は、特定のトレーサーのインテグレーションに依存しています。それらが無効になっている場合、ASM は動作しません。無効化されたインテグレーションがあるかどうかを確認するには、スタートアップログ にある disabled_integrations を見てください。

必要なインテグレーションは言語によって異なります。

Python の場合、WSGI インテグレーションと、Django や Flask のような使用中のフレームワークのインテグレーションが必要です。

Datadog Agent の構成を確認する

この手順のトラブルシューティングを行うには、次のようにします。

  • このアドレス http://<agent-machine-name>:<agent-port>/info、通常は http://localhost:8126/info で実行中の Agent の詳細を確認します。
  • トレーサーログにスパンに関連する Agent 送信エラーがないことを確認します。
  • Agent が別のマシンにインストールされている場合、DD_AGENT_HOST と、オプションで DD_TRACE_AGENT_PORT が設定されているか、アプリケーショントレースライブラリの DD_TRACE_AGENT_URL が設定されているかを確認してください。

スパンが Datadog に正常に送信されたかどうかを確認する

ASM のデータは、スパンを介して送信されます。スパンが Datadog に正常に送信されていることを確認するために、トレーサーログに次のようなログが含まれていることを確認します。

2021-11-29 21:19:58 CET | TRACE | INFO | (pkg/trace/info/stats.go:111 in LogStats) | [lang:.NET lang_version:5.0.10 interpreter:.NET tracer_version:1.30.1.0 endpoint_version:v0.4] -> traces received: 2, traces filtered: 0, traces amount: 1230 bytes, events extracted: 0, events sampled: 0

スパンが送信されていない場合、トレーサーログにはこのようなログが含まれます。

2021-11-29 21:18:48 CET | TRACE | INFO | (pkg/trace/info/stats.go:104 in LogStats) | No data received

言語別トラブルシューティング

以下は、特定の言語に対するトラブルシューティングの追加手順です。

Python アプリケーションのトレースとシグナルエクスプローラーに ASM の脅威情報が表示されない場合は、ASM が実行されているか、トレーサーが動作しているかを確認してください。

  1. アプリケーションのログレベルを DEBUG に設定し、ASM が動作していることを確認します。

    import logging
    logging.basicConfig(level=logging.DEBUG)
    

    次に、アプリケーションに対して任意の HTTP コールを実行します。以下のようなログが表示されるはずです。

    DEBUG:ddtrace.appsec.processor:[DDAS-001-00] Executing AppSec In-App WAF with parameters:
    

    このログがない場合は、ASM が起動していないことになります。

  2. トレーサーは動作していますか?APM ダッシュボードで関連するトレースを見ることができますか?

    ASM はトレーサーに依存しています。もしトレースが表示されない場合は、トレーサーが機能していない可能性があります。APM トラブルシューティングを参照してください。

Software Composition Analysis で脆弱性が検出されない

脆弱性情報が Service Catalog Security View または Vulnerability Explorer に表示されるには、一連のステップを正常に実行する必要があります。この問題を調査する際には、各ステップを確認することが重要です。

ASM が有効であることを確認する

メトリクス datadog.apm.appsec_host を使って、ASM が動作しているかどうかを確認することができます。

  1. Datadog の Metrics > Summary に移動します。
  2. メトリクス datadog.apm.appsec_host を検索します。このメトリクスが存在しない場合、ASM を実行しているサービスは存在しません。メトリクスが存在する場合、サービスはメトリクスタグ hostservice で報告されます。
  3. メトリクスを選択し、** Tags** セクションで、service を検索すると、どのサービスが ASM を実行しているかを確認できます。

datadog.apm.appsec_host が表示されない場合は、アプリ内の説明を確認し、初期設定の手順がすべて完了したことを確認してください。

ASM のデータは、APM トレースと一緒に送信されます。APM のトラブルシューティングを参照して、APM の設定を確認し、接続エラーを調べてください。

トレーサーのバージョンが更新されていることを確認する

トレーサーの正しいバージョンを使用していることを確認するために、Application Security 製品設定ドキュメントを参照してください。ライブラリ情報を含むテレメトリーデータの送信を開始するには、これらの最小バージョンが必要です。

テレメトリーデータの通信を確保する

環境変数 DD_INSTRUMENTATION_TELEMETRY_ENABLED (Node.js の場合は DD_TRACE_TELEMETRY_ENABLED) が true に設定されているか、または使用する言語の対応システムプロパティが有効になっていることを確認します。例えば、Java の場合: -Ddd.instrumentation.telemetry.enabled=true

脅威管理と保護を無効にする

脅威管理を無効にするには、アプリケーション構成から DD_APPSEC_ENABLED=true 環境変数を削除して、サービスを再起動します。

サービスで DD_APPSEC_ENABLED=true 環境変数が設定されていない場合は、以下のいずれかを行います。

  • PHP サービスの場合は、環境変数を明示的に DD_APPSEC_ENABLED=false に設定し、サービス を再起動します。
  • 脅威管理がリモート構成を使用して有効化された場合は、以下を実行します。
    1. Services に移動します (ASM > Catalog > Services)。
    2. Threat Management in Monitoring Mode を選択します。
    3. Threat Management ファセットで、Monitoring OnlyNo dataReady to block を有効にします。
    4. サービスをクリックします。
    5. サービスの詳細で、Threat DetectionDeactivate をクリックします。
脅威管理がリモート構成を使用して有効化された場合は、Deactivate ボタンを使用できます。脅威管理がローカル構成を使用して有効化された場合は、Deactivate ボタンは使用できません。
  • 複数のサービスで脅威管理を一括で無効にするには、以下を実行します。
    1. Services に移動します。
    2. Threat Management ファセットで、Monitoring OnlyNo dataReady to block を有効にします。
    3. 脅威の検出を無効にしたいサービスのチェック ボックスを選択します。
    4. Bulk ActionsDeactivate Threat detection on (number of) services を選択します。

Software Composition Analysis を無効にする

SCA は、UI または 環境変数を使用した手動の 2 つの方法で有効化できます。SCA を無効化する際は、有効化したときと同じ方法で行う必要があります。たとえば、SCA を手動で有効化した場合、UI からは無効化できず、手動で無効化しなければなりません。

一般的には、SCA は UI を使用してサービス単位で有効化・無効化されます。

SCA (Software Composition Analysis) を UI で無効化する方法:

  • Services に移動し、Software Composition Analysis (SCA) を選択して対象のサービスをクリックし、詳細を開きます。次に、Vulnerability DetectionDeactivate をクリックします。
  • 複数のサービスで Software Composition Analysis を一括で無効にするには、リストヘッダーのチェックボックスをクリックし、Bulk ActionsDeactivate Software Composition Analysis (SCA) on (number of) services を選択します。

SCA を手動で無効化する方法:

  • 環境変数 DD_APPSEC_SCA_ENABLED を使用して Software Composition Analysis を無効にするには、アプリケーションの構成から環境変数 DD_APPSEC_SCA_ENABLED=true を削除し、サービスを再起動します。これは PHP アプリには適用されません。

コードセキュリティの無効化

Code Security を無効化するには、アプリケーションの構成から DD_IAST_ENABLED=true という環境変数を削除するか、DD_IAST_ENABLED=false と設定してサービスを再起動します。

すべてまたは一部のコードレベルの脆弱性が検出されない

Code Security が有効化されていることを確認してください

DD_IAST_ENABLED 環境変数が true に設定されているか、使用言語に対応するシステムプロパティが有効になっていることを確認します。

Python+Flask の場合は、エントリーポイントパッチ関数を呼び出します。

Flask アプリケーションを実行している場合は、ddtrace_iast_flask_patch() 関数をモジュールのトップレベルで、app.run() を呼び出す前に呼び出していることを確認してください。詳細は Flask インテグレーションのドキュメントを参照してください。

さらにサポートが必要ですか?

ASM で問題が解決しない場合は、以下の情報を添えて Datadog サポートにご連絡ください。

その他の参考資料