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

注: dd-test-scanner-log の値は、最新のリリースでサポートされています。

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

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

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

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

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

PHP については、必須のインテグレーションはありません。

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

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

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

PHP の場合、Datadog ASM の拡張機能のトラブルシューティングを開始するには、ASM の拡張機能の .ini ファイルでデバッグログを有効にしてください。

拡張機能の ini ファイルは通常 /etc/php/<version>/xxx/conf.d/98-ddtrace.ini にありますが、インストール先によって場所が異なる可能性があります。もしあれば、phpinfo() の出力の最初を見て、.ini ファイルがスキャンされるディレクトリを特定してください。.ini ファイルで、以下の構成オプションを以下のように設定します。

datadog.appsec.log_level='debug'
datadog.appsec.helper_extra_args='--log_level=debug'
datadog.appsec.helper_log_file='/tmp/helper.log'

この拡張機能は、デフォルトの php_error ログファイルにログを出力します。このファイルにログがない場合は、.ini ファイルに以下を追加してください。

datadog.appsec.log_file='tmp/extension.log'

インストールで PHP が見つからない

インストールスクリプトが正しい PHP のバージョンを見つけられない場合、 --php-bin オプションを使用して PHP のバイナリの場所を設定することができます。例:

$ php datadog-setup.php --php-bin /usr/bin/php7.4 --enable-appsec

ヘルパーへの接続に失敗

ASM の拡張機能がヘルパープロセスと通信できない場合、次のような警告が発生します。

PHP Warning:  Unknown: [ddappsec] Connection to helper failed and we are not going to attempt to launch it: dd_error

警告の後には、以下のエラーメッセージのいずれかが表示される可能性があります。

PHP Warning:  Unknown: [ddappsec] Could not open lock file /tmp/ddappsec.lock: Permission denied in Unknown on line 0
PHP Warning:  Unknown: [ddappsec] Call to bind() failed: Permission denied
PHP Warning:  Unknown: [ddappsec] Failed to unlink /tmp/ddappsec.sock: Operation not permitted

これは、拡張機能が使用するロックファイルやソケットファイルの権限が無効であるか、PHP プロセスを実行するユーザーが tmp ディレクトリへの書き込み権限を持っていないことを示します。

ロックファイルやソケットファイルの権限が無効な場合は、それらを削除して Apache/FPM を再起動するか、user:groupwww-data などの Apache/FPM が使用するものと一致するように調整します。

tmp ディレクトリへの書き込み権限がない場合、拡張機能の .ini ファイルで以下の設定を変更することで、ロックファイルとソケットファイルの場所を変更することができます。

datadog.appsec.helper_runtime_path = /<directory with compatible permissions>/

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 サポートにご連絡ください。

その他の参考資料

PREVIEWING: domalessi/docs-10186
Your Privacy Choices