개요

Datadog 애플리케이션 보안 관리(ASM)에서 예기치 않은 동작이 발생하는 경우, 하단에 언급된 것처럼 조사할 수 있는 일반적인 문제가 있습니다. 문제가 계속되면 Datadog 지원 팀에 문의하여 추가 지원을 받으세요.

ASM 속도 제한

ASM 트레이스는 전송 속도가 초당 100 트레이스로 제한됩니다. 한도 초과 후 전송된 트레이스는 보고되지 않습니다. 한도를 변경해야 하는 경우 Datadog 지원 팀에 문의하세요.

ASM가 보안 트레이스를 감지하지 않음

위협 정보가 ASM 트레이스 및 신호 탐색기에 표시되려면 일련의 단계를 성공적으로 실행해야 합니다. 본 문제를 조사할 때는 각 단계를 점검하는 것이 중요합니다. 특정 언어에 대한 추가 트러블슈팅 단계는 마지막의 언어 탭에서 확인할 수 있습니다.

ASM이 활성화되어 있는지 확인

ASM이 실행 중인 경우 메트릭 datadog.apm.appsec_host 점검을 사용합니다.

  1. Datadog에서 메트릭 > 요약으로 이동합니다.
  2. 메트릭 datadog.apm.appsec_host을 검색합니다. 메트릭이 없으면 ASM을 실행 중인 서비스가 없는 것입니다. 메트릭이 있는 경우 서비스는 메트릭 태그 hostservice와 함께 보고됩니다.
  3. 메트릭을 선택하고, 태그 섹션에서 service를 검색하여 어떤 서비스가 ASM을 실행 중인지 확인합니다.

datadog.apm.appsec_host가 표시되지 않는 경우 앱 내 지침을 확인하여 초기 설정의 모든 단계가 완료되었는지 확인합니다.

ASM 데이터는 애플리케이션 성능 모니터링(APM) 트레이스로 전송됩니다. 애플리케이션 성능 모니터링(APM) 트러블슈팅를 참조하여 애플리케이션 성능 모니터링 설치를 확인하고 연결 오류를 점검하세요.

애플리케이션에 테스트 공격 전송하기

ASM 설정을 테스트하려면 다음 Curl 스크립트가 포함된 파일을 실행하여 감지된 보안 스캐너 규칙을 트리거합니다.

for ((i=1;i<=250;i++));
do
# Target existing service's routes
curl https://your-application-url/existing-route -A Arachni/v1.0;
# Target non existing service's routes
curl https://your-application-url/non-existing-route -A Arachni/v1.0;
done

애플리케이션을 활성화 및 실행하고 몇 분 후 위협 정보가 트레이스 및 신호 탐색기에 표시됩니다.

태그, 메트릭, 제안 단계, 위협과 관련된 공격자 IP 주소를 나타내는 Security Signal 상세 페이지.

필요한 트레이서 통합이 비활성화되어있는지 점검

ASM은 특정 트레이서 통합에 의존합니다. 해당 통합이 비활성화되어 있으면 ASM이 작동하지 않습니다. 해당 통합이 비활성화되어 있는지 확인하려면 시작 로그에서 disabled_integrations을 검색합니다.

필요한 통합은 언어에 따라 다릅니다.

루비(Ruby)의 경우 Rack 통합이 필요합니다. 루비(Ruby) 트레이서 버전 1.0.0 이상도 필요합니다. 0.x에서 1.x로 마이그레이션 지침을 참조하세요.

참고: Rack은 수동으로 추가하거나 Rails 또는 Sinatra 통합으로 자동으로 추가할 수 있습니다. 수동으로 추가하는 경우, 트레이서 미들웨어는 Rack 스택에서 보안 미들웨어보다 먼저 표시되어야 합니다.

Datadog 에이전트 설정 점검

프로세스의 해당 단계 문제를 해결하려면 다음 작업을 수행합니다.

  • 이 주소 http://<agent-machine-name>:<agent-port>/info에서 실행 중인 에이전트의 세부 정보를 확인합니다(보통 http://localhost:8126/info).
  • 트레이서 로그에 스팬(span)과 관련된 에이전트 전송 오류가 없는지 확인합니다.
  • 에이전트가 별도의 머신에 설치된 경우 DD_AGENT_HOST를 확인하고, 옵션으로 DD_TRACE_AGENT_PORT가 설정되거나 DD_TRACE_AGENT_URL가 애플리케이션 추적 라이브러리용으로 설정되었는지 확인합니다.

스팬(span)이 Datadog으로 성공적으로 전송되었는지 확인

ASM 데이터는 스팬(span)을 통해 전송됩니다. 스팬(span)이 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

스팬(span)이 전송되지 않는 경우 트레이서 로그에는 다음과 유사한 로그가 포함됩니다.

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

언어별 트러블슈팅

다음은 특정 언어별 추가 트러블슈팅 단계입니다.

루비(Ruby)의 경우 몇 분이 지난 후에도 트레이스 및 신호 탐색기에 ASM 위협 정보가 표시되지 않으면 디버그 로그 트레이서 진단을 사용 설정합니다. 예:

Datadog.configure do |c|
  c.diagnostics.debug = true  # increase general log level to debug
  c.appsec.waf_debug = true   # also enable WAF-specific log verbosity to highest level
end

디버그 로그는 상세하지만 유용합니다. Datadog 지원으로 티켓을 여는 경우 요청과 함께 해당 로그를 전달해 주세요.

ASM이 올바르게 활성화되어 있나요?

다음과 같이 로그가 표시되면 ASM이 올바르게 활성화된 것입니다.

D, [2021-12-14T11:03:32.167125 #73127] DEBUG -- ddtrace: [ddtrace] (libddwaf/lib/datadog/appsec/waf.rb:296:in `block in logger=') {:level=>:ddwaf_log_info, :func=> "ddwaf_set_log_cb", :file=>"PowerWAFInterface.cpp", :message=>"Sending log messages to binding, min level trace"}
D, [2021-12-14T11:03:32.200491 #73127] DEBUG -- ddtrace: [ddtrace] (libddwaf/lib/datadog/appsec/waf.rb:296:in `block in logger=') {:level=>:ddwaf_log_debug, :func= >"parse", :file=>"parser_v2.cpp", :message=>"Loaded 124 rules out of 124 available in the ruleset"}

로그가 표시되지 않는 경우 다음을 점검하세요.

  • 애플리케이션 프로세스에 올바른 ASM 환경 변수가 설정되어 있습니다.
  • 최신 Gem 버전을 설치했습니다.
  • 트레이서가 올바르게 설정되어 있으며, 애플리케이션 성능 모니터링(APM) 트레이스를 애플리케이션 성능 모니터링(APM) 대시보드로 전송합니다.

각 HTTP 요청에 대해 ASM이 호출되나요?

각 HTTP 요청에 대해 ASM이 호출되는지 확인하려면 테스트 공격을 트리거하고 다음 로그를 찾아봅니다.

D, [2022-01-19T21:25:50.579745 #341792] DEBUG -- ddtrace: [ddtrace] (/home/lloeki/src/github.com/DataDog/dd-trace-rb/lib/datadog/appsec/reactive/operation.rb:14:in `initialize') operation: rack.request initialize
D, [2022-01-19T21:25:50.580300 #341792] DEBUG -- ddtrace: [ddtrace] (/home/lloeki/src/github.com/DataDog/dd-trace-rb/lib/datadog/appsec/contrib/rack/gateway/watcher.rb:25:in `block (2 levels) in watch') root span: 964736568335365930
D, [2022-01-19T21:25:50.580371 #341792] DEBUG -- ddtrace: [ddtrace] (/home/lloeki/src/github.com/DataDog/dd-trace-rb/lib/datadog/appsec/contrib/rack/gateway/watcher.rb:26:in `block (2 levels) in watch') active span: 964736568335365930
D, [2022-01-19T21:25:50.581061 #341792] DEBUG -- ddtrace: [ddtrace] (/home/lloeki/src/github.com/DataDog/dd-trace-rb/lib/datadog/appsec/contrib/rack/reactive/request.rb:34:in `block in subscribe') reacted to ["request.headers", "request.uri.raw", "request.query", "request.cookies", "request.body.raw"]: [{"version"=>"HTTP/1.1", "host"=>"127.0.0.1:9292", "accept"=>"*/*", "user-agent"=>"Nessus SOAP"}, "http://127.0.0.1:9292/", [], {}, ""]

로그가 표시되지 않는 경우 다음 작업을 시도해 보세요.

  • 다른 업스트림 보안 시스템이 테스트 헤더 값에 기반하여 요청을 필터링하지 않아서 해당 요청이 애플리케이션에 도달하지 않는지 점검합니다.
  • Curl 명령의 다른 사용자 에이전트 값을 사용하여 다른 테스트 공격을 보내 위협 정보가 성공적으로 전송되는지 확인합니다.
  • 실행한 정확한 요청에 대한 애플리케이션 로그를 살펴보고, 해당 요청이 애플리케이션에 도달했고 다른 업스트림 시스템에서 응답하지 않았는지 확인합니다.

Rack 통합을 수동으로 설정한 경우, 알려진 문제로 인해 ASM이 작동하지 않는 경우가 종종 있습니다. 예시:

Datadog.configure do |c|
  c.tracing.instrument :rails
  ...
  c.tracing.instrument :rack, web_service_name: "something", request_queuing: true

c.tracing.instrument :rack이 있다면 이를 삭제하여 점검을 통과하는지 확인합니다.

ASM이 HTTP 요청 보안 위협을 탐지하나요?

ASM이 보안 위협을 탐지하는지 확인하려면 테스트 공격을 트리거하고 다음 로그를 찾아봅니다.

D, [2021-12-14T22:39:53.268820 #106051] DEBUG -- ddtrace: [ddtrace] (ddtrace/lib/datadog/appsec/contrib/rack/reactive/request.rb:63:in `block in subscribe') WAF: #<struct Datadog::AppSec::WAF::Result action=:monitor, data=[{"rule"=>{"id"=>"ua0-600-10x", "name"=>"Nessus", "tags"=>{"type"=>"security_scanner", "category"=>"attack_attempt"}}, "rule_matches"=>[{"operator"=>"match_regex", "operator_value"=>"(?i)^Nessus(/|([ :]+SOAP))", "parameters"=>[{"address"=>"server.request.headers.no_cookies", "key_path"=>["user-agent"], "value"=>"Nessus SOAP", "highlight"=>["Nessus SOAP"]}]}]}], perf_data=nil, perf_total_runtime=20519>

로그가 표시되지 않는다면 다른 업스트림 보안 시스템이 요청을 필터링하지 않거나, 테스트 헤더 값을 기반으로 요청을 변경하고 있는지 확인합니다.

트레이서가 보안 데이터와 같이 트레이스를 전송하고 있나요?

ASM 데이터는 애플리케이션 성능 모니터링(APM) 트레이스와 같이 전송됩니다. ASM이 보안 위협을 탐지하고 보안 데이터를 트레이스에 삽입하는지 확인하려면 테스트 공격을 트리거하고 다음 로그를 찾아봅니다.

Tags: [
   runtime-id => 0c3dfc67-9cf3-457c-a980-0229b203d048,
   _dd.runtime_family => ruby,
   appsec.event => true,
   _dd.appsec.json => {"triggers":[{"rule":{"id":"ua0-600-10x","name":"Nessus","tags":{"type":"security_scanner","category":"attack_attempt"}},"rule_matches":[{"operator":"match_regex","operator_value":"(?i)^Nessus(/|([ :]+SOAP))","parameters":[{"address":"server.request.headers.no_cookies","key_path":["user-agent"],"value":"Nessus SOAP","highlight":["Nessus SOAP"]}]}]}]},
   http.request.headers.host => 127.0.0.1:9292,
   http.request.headers.accept => */*,
   http.request.headers.user-agent => Nessus SOAP,
   http.response.headers.content-type => text/plain,
   http.host => 127.0.0.1,
   http.useragent => Nessus SOAP,
   network.client.ip => 127.0.0.1,
   _dd.origin => appsec,
   http.method => GET,
   http.url => /,
   http.base_url => http://127.0.0.1:9292,
   http.status_code => 200,
   http.response.headers.content_type => text/plain]
Metrics: [
   _dd.agent_psr => 1.0,
   system.pid => 155644.0,
   _dd.appsec.enabled => 1.0,
   _dd.measured => 1.0,
   _sampling_priority_v1 => 2.0]]

에이전트가 트레이스를 전달할 때까지 잠시 기다린 다음, 트레이스가 애플리케이션 성능 모니터링(APM) 대시보드에 표시되는지 확인합니다. 트레이스의 보안 정보는 ASM 트레이스 및 신호 탐색기에서 보안 트레이스로 표시되기 전에 Datadog에서 처리하는 데 시간이 추가로 걸릴 수도 있습니다.

소프트웨어 구성 분석으로 탐지된 취약점이 없음

취약점 정보가 소프트웨어 카탈로그 보안 보기 또는 취약점 탐색기에 표시되려면 일련의 단계가 성공적으로 실행되어야 합니다. 이 문제를 조사할 때는 각 단계를 점검하는 것이 중요합니다.

ASM이 활성화되어 있는지 확인

ASM이 실행 중인 경우 메트릭 datadog.apm.appsec_host 점검을 사용합니다.

  1. Datadog에서 메트릭 > 요약으로 이동합니다.
  2. 메트릭 datadog.apm.appsec_host을 검색합니다. 메트릭이 없으면 ASM을 실행 중인 서비스가 없는 것입니다. 메트릭이 있는 경우 서비스는 메트릭 태그 hostservice와 함께 보고됩니다.
  3. 메트릭을 선택하고, 태그 섹션에서 service를 검색하여 어떤 서비스가 ASM을 실행 중인지 확인합니다.

datadog.apm.appsec_host가 표시되지 않는 경우 앱 내 지침을 확인하여 초기 설정의 모든 단계가 완료되었는지 확인합니다.

ASM 데이터는 애플리케이션 성능 모니터링(APM) 트레이스로 전송됩니다. 애플리케이션 성능 모니터링(APM) 트러블슈팅를 참조하여 애플리케이션 성능 모니터링 설치를 확인하고 연결 오류를 점검하세요.

트레이서 버전이 업데이트되었는지 확인

올바른 버전의 트레이서를 사용하고 있는지 확인하려면 애플리케이션 보안 프로덕트 설정 설명서를 참조하세요. 라이브러리 정보가 포함된 텔레메트리 데이터 전송을 시작하려면 해당 최소 버전이 필요합니다.

텔레메트리 데이터 통신 확인

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. 서비스(ASM > 카탈로그 > 서비스)로 이동합니다.
    2. 모니터링 모드에서 위협 관리를 선택합니다.
    3. 위협 관리 패싯에서 모니터링 전용, 데이터 없음, 차단 준비를 활성화합니다.
    4. 서비스를 클릭합니다.
    5. 서비스 세부 정보의 위협 탐지에서 비활성화를 클릭합니다.
원격 설정으로 위협 관리를 활성화한 경우 비활성화 버튼을 사용할 수 있습니다. 로컬 설정으로 위협 관리를 활성화한 경우 비활성화 버튼은 옵션이 아닙니다.
  • 서비스에서 위협 관리를 사용하지 않도록 일괄 설정하려면 다음에 따릅니다.
    1. 서비스로 이동합니다.
    2. 위협 관리 패싯에서 모니터링 전용, 데이터 없음, 차단 준비를 활성화합니다.
    3. 위협 탐지를 사용하지 않도록 설정하려는 서비스의 점검 확인란을 선택합니다.
    4. 일괄 작업에서 서비스(개수)에 대한 위협 탐지 비활성화를 선택합니다.

코드 보안 비활성화

코드 보안을 비활성화하려면 애플리케이션 설정에서 DD_IAST_ENABLED=true 환경 변수를 삭제하거나 falseDD_IAST_ENABLED=false로 설정하고 서비스를 다시 시작합니다.

더 많은 지원이 필요하세요?

ASM에 계속 문제가 있는 경우 다음 정보와 함께 Datadog 지원 팀으로 문의하세요.

참고 자료

PREVIEWING: dgreen15/adding-custom-entities