Solución de problemas de protección de aplicaciones y API
Este producto no es compatible con el
sitio Datadog seleccionado. (
).
Descripción general
Si experimenta un comportamiento inesperado con Datadog App and API Protection (AAP), hay problemas comunes que puede investigar, como se menciona a continuación. Si continúa teniendo problemas, comuníquese con el soporte de Datadog para obtener más ayuda.
Límites de tasa de AAP
Las trazas de AAP tienen un límite de tasa de 100 trazas por segundo. Las trazas enviadas después del límite no se reportan. Comuníquese con el soporte de Datadog si necesita cambiar el límite.
No se detectaron trazas de seguridad por AAP
Hay una serie de pasos que deben ejecutarse correctamente para que la información de amenazas aparezca en el Explorador de trazas y señales de AAP. Es importante verificar cada paso al investigar este problema. Pasos adicionales de solución de problemas para lenguajes específicos se encuentran en la pestaña de lenguaje al final.
Confirme que AAP esté habilitado
Puede usar la métrica datadog.apm.appsec_host para verificar si AAP se está ejecutando.
- Vaya a Metrics > Summary en Datadog.
- Busque la métrica
datadog.apm.appsec_host. Si la métrica no existe, entonces no hay servicios ejecutando AAP. Si la métrica existe, los servicios se reportan con las etiquetas de métrica host y service. - Seleccione la métrica y, en la sección Tags, busque
service para ver qué servicios están ejecutando AAP.
Si no ve datadog.apm.appsec_host, consulte las instrucciones en la aplicación para confirmar que todos los pasos de la configuración inicial estén completos.
Los datos de AAP se envían con trazas de APM. Consulte solución de problemas de APM para confirmar la configuración de APM y verificar si hay errores de conexión.
Envíe un ataque de prueba a su aplicación
Para probar su configuración de AAP, active la regla Security Scanner Detected ejecutando un archivo que contenga el siguiente script de curl:
for ((i=1;i<=250;i++));
do
# Target existing service's routes
curl https://your-application-url/existing-route -A dd-test-scanner-log;
# Target non existing service's routes
curl https://your-application-url/non-existing-route -A dd-test-scanner-log;
done
Nota: El valor dd-test-scanner-log es compatible en las versiones más recientes.
for ((i=1;i<=250;i++));
do
# Target existing service's routes
curl https://your-application-url/existing-route -A dd-test-scanner-log;
# Target non existing service's routes
curl https://your-application-url/non-existing-route -A dd-test-scanner-log;
done
Nota: El valor dd-test-scanner-log es compatible en las versiones más recientes.
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
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
for ((i=1;i<=250;i++));
do
# Target existing service's routes
curl https://your-application-url/existing-route -A dd-test-scanner-log;
# Target non existing service's routes
curl https://your-application-url/non-existing-route -A dd-test-scanner-log;
done
Nota: El valor dd-test-scanner-log es compatible en las versiones más recientes.
for ((i=1;i<=250;i++));
do
# Target existing service's routes
curl https://your-application-url/existing-route -A dd-test-scanner-log;
# Target non existing service's routes
curl https://your-application-url/non-existing-route -A dd-test-scanner-log;
done
Nota: El valor dd-test-scanner-log es compatible en las versiones más recientes.
for ((i=1;i<=250;i++));
do
# Target existing service's routes
curl https://your-application-url/existing-route -A dd-test-scanner-log;
# Target non existing service's routes
curl https://your-application-url/non-existing-route -A dd-test-scanner-log;
done
Unos minutos después de habilitar su aplicación y probarla, y si tiene éxito, la información sobre amenazas aparece en el Explorador de trazas y señales.
Verifique si las integraciones de tracer requeridas están desactivadas
AAP depende de ciertas integraciones de tracer. Si están desactivadas, AAP no funcionará. Para ver si hay integraciones desactivadas, busque disabled_integrations en sus registros de inicio.
Las integraciones requeridas varían según el lenguaje.
Para Java, si utiliza alguna de las siguientes tecnologías, se requiere la integración respectiva:
- grizzly
- grizzly-filterchain
- jersey
- jetty
- ratpack
- ratpack-request-body (también requiere ratpack)
- resteasy
- servlet
- servlet-2
- servlet-3
- servlet-request-body (también requiere servlet)
- spring-web
- tomcat
Para .NET, se requiere la integración de ASP.NET.
Nota: Si ASP.NET Core está deshabilitado, AAP debería seguir funcionando con este framework.
No hay integraciones requeridas para PHP.
Los siguientes frameworks de Go deben ser instrumentados utilizando las integraciones de APM listas para usar.
Note: This documentation uses v2 of the Go tracer, which Datadog recommends for all users. If you are using v1, see the migration guide to upgrade to v2.
Por favor, asegúrese de consultar la documentación adecuada para su versión (v1.x o v2.x) del Go Tracer. Si su framework no es compatible, cree una nueva incidencia en el repositorio de Go.
Para Node.js, se requiere la integración HTTP.
Para Ruby, se requiere la integración Rack. También se requiere la versión 1.0.0 o superior del tracer de Ruby. Consulte la información sobre la migración de 0.x a 1.x.
Nota: Rack puede agregarse manualmente o automáticamente con la integración de Rails o Sinatra. Si se agrega manualmente, el middleware del rastreador debe aparecer antes del middleware de seguridad en la pila de Rack.
Para Python, se requiere la integración de WSGI junto con la integración para el
marco de trabajo que esté utilizando, como la integración de Django o Flask.
Verifique la configuración del Datadog Agent
Para solucionar problemas en este paso del proceso, haga lo siguiente:
- Verifique los detalles del Agent en ejecución en esta dirección
http://<agent-machine-name>:<agent-port>/info, generalmente http://localhost:8126/info. - Asegúrese de que no haya errores de transmisión del Agente relacionados con los spans en sus registros del tracer.
- Si el Agente está instalado en una máquina separada, verifique que
DD_AGENT_HOST y, opcionalmente, DD_TRACE_AGENT_PORT estén configurados, o que DD_TRACE_AGENT_URL esté configurado para el SDK de la aplicación.
Verifique si los spans se transmiten correctamente a Datadog
Los datos de AAP se envían a través de spans. Para confirmar que los spans se transmiten correctamente a Datadog, verifique que sus registros del tracer contengan registros similares a este:
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
Si los spans no se están transmitiendo, entonces los registros del tracer contendrán registros similares a este:
2021-11-29 21:18:48 CET | TRACE | INFO | (pkg/trace/info/stats.go:104 in LogStats) | No data received
Solución de problemas por lenguaje
A continuación se presentan pasos adicionales de solución de problemas para lenguajes específicos.
La biblioteca de Java utiliza SLF4J para el registro. Agregue las siguientes banderas de tiempo de ejecución para que el SDK registre en un archivo:
-Ddatadog.slf4j.simpleLogger.defaultLogLevel=info
-Ddatadog.slf4j.simpleLogger.logFile=dd.log
Después de que el servicio se inicia, el SDK registra en el archivo especificado. Datadog recomienda usar INFO para el nivel de registro porque los registros DEBUG son detallados.
La biblioteca .NET registra en un archivo y no puede registrar en stdout/stderr. El nivel de registro predeterminado es INFO. Para habilitar los registros DEBUG, establezca DD_TRACE_DEBUG=true.
Los archivos de registro están disponibles en los siguientes directorios:
| Plataforma | Directorio de registros |
|---|
| Docker | El directorio del contenedor /var/log/datadog/dotnet/. Una opción recomendada es montar la carpeta de registros en la máquina servidor usando volumes. |
| Linux | /var/log/datadog/dotnet/ |
| Windows | C:\ProgramData\Datadog .NET Tracer\logs |
Para PHP, para comenzar a solucionar problemas con la extensión AAP de Datadog, habilite los registros de depuración en el archivo .ini de la extensión AAP.
El archivo ini de la extensión generalmente se encuentra en /etc/php/<version>/xxx/conf.d/98-ddtrace.ini, pero la ubicación puede variar según su instalación. Revise el principio de la salida de phpinfo() para identificar el directorio que se analiza en busca de archivos .ini, si los hay. En el archivo .ini, establezca las siguientes opciones de configuración con lo siguiente:
datadog.appsec.log_level='debug'
datadog.appsec.helper_extra_args='--log_level=debug'
datadog.appsec.helper_log_file='/tmp/helper.log'
La extensión envía los registros al archivo de registro php_error predeterminado. Si no hay registros en el archivo, agregue lo siguiente al archivo .ini:
datadog.appsec.log_file='tmp/extension.log'
La instalación no encuentra PHP
Si el script de instalación no puede encontrar la versión correcta de PHP, puede establecer --php-bin en la ubicación del binario de PHP, por ejemplo:
$ php datadog-setup.php --php-bin /usr/bin/php7.4 --enable-appsec
Error en la conexión con el asistente
Si la extensión AAP no puede comunicarse con el proceso del asistente, aparece la siguiente advertencia:
PHP Warning: Unknown: [ddappsec] Connection to helper failed and we are not going to attempt to launch it: dd_error
La advertencia podría ir seguida de uno de estos mensajes de 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
Esto indica que el archivo de bloqueo o el archivo de socket utilizado por la extensión tiene permisos no válidos, o que el usuario que ejecuta el proceso PHP no tiene acceso de escritura al directorio tmp.
Si el archivo de bloqueo o el archivo de socket tiene permisos no válidos, puede eliminarlos y reiniciar Apache/FPM o ajustar user:group para que coincida con el utilizado por Apache/FPM, por ejemplo, www-data.
Si el usuario no tiene acceso de escritura al directorio tmp, puede cambiar la ubicación del archivo de bloqueo y del archivo de socket modificando los siguientes ajustes en el archivo .ini de la extensión:
datadog.appsec.helper_runtime_path = /<directory with compatible permissions>/
Confirme que AAP esté habilitado en la aplicación en ejecución
Los registros de inicio del SDK muestran la configuración del SDK y si AAP está habilitado o no. Si appsec es true, entonces AAP está habilitado y en ejecución.
Por ejemplo, el siguiente registro de inicio muestra que AAP está deshabilitado:
2022/02/17 14:49:00 Datadog Tracer v1.36.0 INFO: DATADOG TRACER CONFIGURATION {"date":"2022-02-17T14:49:00+01:00","os_name":"Linux (Unknown Distribution)","os_version":"5.13.0","version":"v1.36.0","lang":"Go","lang_version":"go1.17.1","env":"prod","service":"grpcserver","agent_url":"http://localhost:8126/v0.4/traces","debug":false,"analytics_enabled":false,"sample_rate":"NaN","sampling_rules":null,"sampling_rules_error":"","service_mappings":null,"tags":{"runtime-id":"69d99219-b68f-4718-9419-fa173a79351e"},"runtime_metrics_enabled":false,"health_metrics_enabled":false,"profiler_code_hotspots_enabled":false,"profiler_endpoints_enabled":false,"dd_version":"","architecture":"amd64","global_service":"","lambda_mode":"false","appsec":false,"agent_features":{"DropP0s":false,"Stats":false,"StatsdPort":0}}
Habilite registros de depuración
Habilite los registros de depuración con la variable de entorno DD_TRACE_DEBUG=1. La biblioteca AAP registrará en la salida de error estándar.
Nota: AAP solo genera registros cuando está habilitado. Use la variable de entorno DD_APPSEC_ENABLED=1 para habilitar AAP.
Utilice esta guía de migración para evaluar cualquier cambio importante si actualizó su biblioteca de Node.js de la versión 1.x a la 2.x.
Si no ve información de amenazas de AAP en el Explorador de traza y señales para su aplicación de Node.js, siga estos pasos para solucionar el problema:
- Confirme que la versión más reciente de AAP se está ejecutando verificando que
appsec_enabled sea true en los registros de inicio.- Si no ve registros de inicio después de haber enviado una solicitud, agregue la variable de entorno
DD_TRACE_STARTUP_LOGS=true para habilitar los registros de inicio. Verifique en los registros de inicio que appsec_enabled sea true. - Si
appsec_enabled es false, entonces AAP no se habilitó correctamente. Consulte las instrucciones de instalación. - Si
appsec_enabled no aparece en los registros de inicio, es necesario instalar la versión más reciente de AAP. Consulte las instrucciones de instalación.
- Confirme que el SDK funciona buscando trazas relevantes en el panel de control de APM.
AAP depende del SDK, por lo que si no ve trazas, es posible que el SDK no esté funcionando. Consulte APM Troubleshooting. - En el directorio de su aplicación, ejecute el comando
npm explore @datadog/native-appsec -- npm run install y reinicie su aplicación.- Si
@datadog/native-appsec no se encuentra, entonces la instalación es incorrecta. - Si
@datadog/native-appsec se encuentra al iniciar su aplicación, agregue el comando a su script de inicio de tiempo de ejecución. - Si el SDK aún no funciona, es posible que esté ejecutando un tiempo de ejecución no compatible.
- Para habilitar los registros, agregue las siguientes variables de entorno:
DD_TRACE_DEBUG=1
DD_TRACE_LOG_LEVEL=info
Si no ve información de amenazas de AAP en el Explorador de Trazas y Señales para su aplicación de Python, verifique que AAP se esté ejecutando y que su trazador esté funcionando.
Establezca el nivel de registro de su aplicación en DEBUG para confirmar que AAP se está ejecutando:
import logging
logging.basicConfig(level=logging.DEBUG)
Luego, ejecute cualquier llamada HTTP a la aplicación. Debería ver el siguiente registro:
DEBUG:ddtrace.appsec.processor:[DDAS-001-00] Executing AppSec In-App WAF with parameters:
Si este registro no aparece, AAP no se está ejecutando.
¿Está funcionando el SDK? ¿Puede ver trazas relevantes en el panel de APM?
AAP depende del SDK. Si no ve trazas, es posible que el SDK no esté funcionando. Consulte APM Troubleshooting.
Para Ruby, si no ve información de amenazas de AAP en el Trace and Signals Explorer después de unos minutos, habilite los diagnósticos del trazador para debug logs. Por ejemplo:
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
Los registros de depuración son detallados pero útiles. Si abre un ticket con Datadog support, envíe los registros con su solicitud.
¿Está AAP habilitado correctamente?
AAP se ha habilitado correctamente si ve registros como:
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"}
Si no ve esos registros, verifique lo siguiente:
- Si las variables de entorno de AAP correctas están configuradas para su proceso de aplicación.
- La última versión de la gema está instalada.
- El SDK está configurado correctamente y enviando trazas de APM a su panel de APM.
¿Se llama a AAP para cada solicitud HTTP?
Para confirmar que se llama a AAP para cada solicitud HTTP, active un ataque de prueba y busque estos registros:
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/", [], {}, ""]
Si no ve esos registros, intente lo siguiente:
- Verifique que otro sistema de seguridad ascendente no esté filtrando las solicitudes según el valor del encabezado de prueba, lo que impediría que la solicitud llegue a la aplicación.
- Envíe otro ataque de prueba usando otro valor de agente de usuario en el comando curl para ver si la información de la amenaza se envía correctamente.
- Busque en los registros de la aplicación la solicitud exacta que ejecutó para confirmar que la solicitud llegó a la aplicación y que no fue respondida por otro sistema ascendente.
Si la integración de Rack se configuró manualmente, a veces un problema conocido impide que AAP funcione. Por ejemplo:
Datadog.configure do |c|
c.tracing.instrument :rails
...
c.tracing.instrument :rack, web_service_name: "something", request_queuing: true
Si c.tracing.instrument :rack está presente, elimínelo para ver si la verificación pasa.
¿Está AAP detectando amenazas de seguridad en las solicitudes HTTP?
Para confirmar que AAP está detectando amenazas de seguridad, active un ataque de prueba y busque estos registros:
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>
Si no ve esos registros, verifique que otro sistema de seguridad ascendente no esté filtrando las solicitudes o alterándolas según el valor del encabezado de prueba.
¿Está el SDK enviando trazas con datos de seguridad?
Los datos de AAP se envían con trazas de APM. Para confirmar que AAP detecta e inserta correctamente los datos de seguridad en las trazas, active un ataque de prueba y busque estos registros del trazador:
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]]
Espere un minuto a que el agente reenvíe las trazas, luego verifique que las trazas aparezcan en el panel de APM. La información de seguridad en las trazas puede tardar más tiempo en ser procesada por Datadog antes de aparecer como trazas de seguridad en el Explorador de trazas y señales de AAP.
Confirme que las versiones del trazador estén actualizadas
Consulte la documentación de configuración del producto de Protección de aplicaciones y API para validar que está utilizando la versión correcta del SDK. Estas versiones mínimas son necesarias para comenzar a enviar datos de telemetría que incluyan información de la biblioteca.
Asegure la comunicación de los datos de telemetría
Asegúrese de que la variable de entorno DD_INSTRUMENTATION_TELEMETRY_ENABLED (DD_TRACE_TELEMETRY_ENABLED para Node.js) esté establecida en true, o que la propiedad del sistema correspondiente para su lenguaje esté habilitada. Por ejemplo, en Java: -Ddd.instrumentation.telemetry.enabled=true
Deshabilitar AAP
Para deshabilitar AAP, utilice uno de los siguientes métodos.
Si habilitó AAP utilizando la variable de entorno DD_APPSEC_ENABLED=true, utilice la sección DD_APPSEC_ENABLED a continuación.
Si habilitó AAP utilizando Remote Configuration, utilice el método de Remote Configuration a continuación.
DD_APPSEC_ENABLED
Si la variable de entorno DD_APPSEC_ENABLED=true está configurada para su servicio, elimine la variable de entorno DD_APPSEC_ENABLED=true de la configuración de su aplicación y reinicie su servicio.
Si su servicio es un servicio PHP, establezca explícitamente la variable de entorno en DD_APPSEC_ENABLED=false y, si corresponde, comente la marca datadog.appsec.enabled = On de su archivo de configuración php.ini. Luego, reinicie su servicio.
Remote Configuration
Si AAP se activó mediante Remote Configuration, haga lo siguiente:
- Vaya a Services.
- Seleccione App & API Protection in Monitoring Mode.
- En la faceta App & API Protection, habilite Monitoring Only, No data y Ready to block.
- Haga clic en un servicio.
- En los detalles del servicio, en App & API Protection, haga clic en Deactivate.
Si AAP se activó mediante
Remote Configuration, puede usar un botón de
Desactivar. Si AAP se activó mediante la configuración local, el botón
Desactivar no es una opción.
Deshabilitar en bloque
Para deshabilitar AAP en sus servicios de forma masiva, haga lo siguiente:
- Vaya a Services.
- En la faceta App & API Protection, habilite Monitoring Only, No data y Ready to block.
- Seleccione las casillas de verificación de los servicios en los que desea deshabilitar la detección de amenazas.
- En Bulk Actions, seleccione Deactivate Threat detection on (number of) services.
¿Necesita más ayuda?
Si sigue teniendo problemas con AAP, comuníquese con soporte de Datadog con la siguiente información:
Lecturas adicionales
Documentación, enlaces y artículos útiles adicionales: