Información general

Instrumenta tus servicios y rastrea la actividad de los usuarios para detectar y bloquear a los actores malintencionados.

Añade información de un usuario autenticado a las trazas (traces) para identificar y bloquear a los actores malintencionados que se dirijan a tu superficie de ataque autenticada. Para ello, establece la etiqueta (tag) del ID de usuario en la traza de APM en ejecución, proporcionando la instrumentación necesaria para que la ASM bloquee a los atacantes autenticados. Esto permite que la ASM asocie los ataques y los eventos de la lógica empresarial a los usuarios.

Rastrea los inicios de sesión y la actividad de los usuarios para detectar las apropiaciones de cuentas y los abusos de la lógica empresarial con reglas de detección predefinidas y, en última instancia, bloquear a los atacantes.

Detección automatizada de la actividad de los usuarios: Las bibliotecas de rastreo de Datadog intentan detectar e informar de eventos de la actividad del usuario automáticamente. Para obtener más información, consulta Desactivar el rastreo automático de eventos de la actividad del usuario .

Las actividades personalizadas del usuario para las cuales se dispone de reglas de detección predefinidas son las siguientes:

Nombres de eventos integradosMetadatos necesariosNormas relacionadas
activity.sensitive{ "name": "coupon_use", "required_role": "user" }Tasa de actividad limitada desde la IP
Actividad no autorizada detectada
users.login.successEl ID de usuario es obligatorio, se pueden añadir metadatos opcionalesAtaque de relleno de credenciales
Ataque por la fuerza bruta
Relleno de credenciales distribuido
users.login.failureEl ID de usuario y usr.exists son obligatorios, se pueden añadir metadatos opcionalesAtaque de relleno de credenciales
Ataque por la fuerza bruta
Relleno de credenciales distribuido
users.signup{ "usr.id": "12345" }Excesivas creaciones de cuentas desde una IP
users.delete{ "usr.id": "12345" }Excesiva eliminación de cuentas desde una IP
users.password_reset{ "usr.id": "12345", "exists": true }Intentos de restablecimiento de contraseña por la fuerza bruta
payment.failureNingunoExcesivos errores de pago desde una IP

Añadir información de usuarios autenticados a las trazas y habilitar la capacidad de bloqueo de los usuarios

Puedes añadir etiquetas personalizada a tu tramo (span) raíz o utilizar las funciones de instrumentación descritas a continuación.

El paquete de rastreadores de Node ofrece la función detracer.setUser(user), que permite monitorizar solicitudes autenticadas añadiendo la información de usuario a la traza.

En el siguiente ejemplo se muestra cómo añadir etiquetas relevantes de monitorización de usuarios y habilitar la capacidad de bloqueo de estos:

const tracer = require('dd-trace').init()

function handle () {
  tracer.setUser({
    id: '123456789', // *NECESARIO* Identificador único de usuario.

    // Todos los demás campos son opcionales.
    email: 'jane.doe@example.com', // Dirección de correo electrónico del usuario.
    name: 'Jane Doe', // Nombre intuitivo del usuario.
    session_id: '987654321', // ID de la sesión del usuario.
    role: 'admin', // El rol en el cual el usuario está realizando la solicitud.
    scope: 'read:message, write:files', // Ámbitos o autorizaciones otorgadas que el usuario posee actualmente.

    // También se aceptan campos arbitrarios para adjuntar datos personalizados al usuario (RBAC, Oauth, etc...)
    custom_tag: 'custom data'
  })

// Configurar el usuario autenticado actualmente y comprobar si está bloqueado
si (tracer.appsec.isUserBlocked(user)) {  // configurar también el usuario autenticado actualmente
  return tracer.appsec.blockRequest(req, res) // se envía la respuesta de bloqueo
  }

}

Para más información y opciones, consulta la documentación del rastreador de Node.js.

Añadir la información de la lógica empresarial (inicio de sesión correcto, inicio de sesión fallido, cualquier lógica empresarial) a las trazas

Empezando en dd-trace-js v3.13.1, se puede utilizar la API del rastreador de Node.js para rastrear los eventos de los usuarios.

En los siguientes ejemplos se muestra cómo rastrear los eventos de inicio de sesión o eventos personalizados (utilizando el registro como ejemplo).

const tracer = require('dd-trace')

// en un controladorr:
const user = {
  id: 'user-id', // el ID es obligatorio, si no hay ningún ID numérico, servirá cualquier identificador único (nombre de usuario, dirección de correo electrónico...)
  email: 'user@email.com' // otros campos son opcionales
}
const metadata = { custom: 'value' } // metadatos opcionales con campos arbitrarios

// Registrar un evento correcto de autenticación de usuario
tracer.appsec.trackUserLoginSuccessEvent(user, metadata) // los metadatos son opcionales
const tracer = require('dd-trace')

// en un controlador:
const userId = 'user-id' // si no hay ningún ID numérico, servirá cualquier identificador único (nombre de usuario, dirección de correo electrónico...)
const userExists = true // si el inicio de sesión del usuario existe en la base de datos, por ejemplo
const metadata = { custom: 'value' } // metadatos opcionales con campos arbitrarios

// los metadatos son opcionales
tracer.appsec.trackUserLoginFailureEvent(userId, userExists, metadata)
const tracer = require('dd-trace')

// en un controlador:
const eventName = 'users.signup'
const metadata = { 'usr.id': 'user-id' }

tracer.appsec.trackCustomEvent(eventName, metadata)

Rastrear la información de la lógica empresarial sin modificar el código

Si tu servicio tiene la ASM y la Configuración remota habilitadas, puedes crear una regla WAF personalizada para marcar cualquier solicitud que coincida con una etiqueta de lógica empresarial personalizada. No hay que hacer ninguna modificación en la aplicación y se puede hacer completamente desde Datadog.

Para empezar, ve a la Página de la regla WAF personalizada y haz clic en “Crear regla nueva”.

Accede al Menú de las reglas WAF personalizadas desde la página principal de ASM haciendo clic en Protección, luego en WAF en la App y Reglas personalizadas

Se abrirá un menú en el que podrás definir tu regla WAF personalizada. Al seleccionar la categoría “Lógica empresarial”, podrás configurar un tipo de evento (por ejemplo, users.password_reset). A continuación, podrás seleccionar el servicio que desees rastrear y un endpoint específico. También puedes utilizar la condición de la regla para apuntar a un parámetro específico e identificar el flujo de código que desees instrumentar. Cuando la condición coincida, la biblioteca etiquetará la traza y la marcará para reenviarla a ASM. Si no necesitas la condición, puedes configurar una condición amplia para que coincida con todo.

Captura de pantalla de la forma que aparece cuando haces clic en el botón Crear regla nueva

Una vez guardada, la regla se despliega en las instancias del servicio que tienen habilitada la Configuración remota.

Rastreo automático de los eventos de actividad de los usuarios

Cuando la ASM está activada, las bibliotecas de rastreo de Datadog intentan detectar los eventos de actividad del usuario automáticamente.

Los eventos que se pueden detectar automáticamente son los siguientes:

  • users.login.success
  • users.login.failure
  • users.signup

Modos de rastreo automáticos de los eventos de actividad del usuario

El rastreo automático de la actividad del usuario ofrece los siguientes modos:

  • Modo identification (nombre abreviado: ident):
    • Este modo es el predeterminado y siempre recopila el ID de usuario o la mejor posibilidad.
    • El ID de usuario se recopila cuando el inicio de sesión es correcto y cuando es fallido. Cuando es fallido, el ID de usuario se recopila independientemente de si el usuario existe o no.
    • Cuando el marco instrumentado no proporciona claramente un ID de usuario, sino un objeto de usuario estructurado, el ID de usuario se determina sobre la base de la mejor posibilidad basada en los nombres de campo del objeto. Hay que considerar esta lista de nombres de campo, que están ordenados por prioridad:
      • id
      • email
      • username
      • login
      • user
    • Si no hay ID de usuario disponible o este no se encuentra, el evento del usuario no se emite.
  • Modo anonymization (nombre abreviado: anon):
    • Este modo es el mismo que identification, pero anonimiza el ID de usuario.
  • Modo disabled:
    • Las bibliotecas de ASM no recopilan ningún ID de usuario desde sus instrumentaciones automatizadas.
    • Los eventos de inicio de sesión del usuario no se emiten.
Todos los modos solo afectan a la instrumentación automatizada. Los modos no se aplican a la recopilación manual. Esta se configura mediante un SDK, y esos ajustes no se anulan por una instrumentación automatizada.

Las bibliotecas de Datadog permiten configurar la auto-instrumentación utilizando la variable de entorno DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE con el nombre abreviado del modo: ident|anon|disabled.

El modo por defecto es el modo identification (nombre abreviado: ident).

Por ejemplo, DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE=anon.

Modos obsoletos

Los modos anteriores están obsoletos, pero se mantendrá la compatibilidad hasta la próxima versión principal.

Los siguientes modos están obsoletos:

  • Modo safe: La biblioteca de rastreo no incluye ninguna información PII en los metadatos de los eventos. La biblioteca del rastreador intenta recopilar el ID de usuario, y solo si este es un GUID válido.
  • Modo extended: La biblioteca de rastreo intenta recopilar el ID de usuario y el correo electrónico del usuario. En este modo, Datadog no comprueba el tipo para que el ID de usuario sea un GUID. La biblioteca de rastreado reporta cualquier valor que se pueda ser extraer del evento.

Nota: Podrían darse casos en los que la biblioteca de rastreo no sea capaz de extraer ninguna información del evento del usuario. El evento se reportaría con metadatos vacíos. En esos casos, utiliza el SDK para instrumentar manualmente los eventos del usuario.

Desactivar el rastreo automático de los eventos de la actividad del usuario

Si deseas desactivar la detección de estos eventos, debes establecer la variable de entorno DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING_ENABLED en false. Esto debe configurarse en la aplicación que aloja la biblioteca de rastreo de Datadog, y no en el Datadog Agent .

La variable de entorno anterior se denominaba DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING.

Referencias adicionales

PREVIEWING: deforest/fix-security-rule-link