Datadog SECL es un lenguaje de dominio específico personalizado que se utiliza para crear expresiones y políticas del Agent dentro de Datadog Workload Protection. SECL permite a los equipos de seguridad definir reglas de detección de amenazas en tiempo real especificando condiciones, operadores y patrones que los agentes de seguridad pueden hacer un seguimiento en servidores, contenedores, aplicaciones e infraestructura en la nube.
Cómo encajan las reglas SECL
Piense en SECL como un filtro local: se ejecuta dentro del Agent en cada servidor, observando los eventos del kernel y del SO. Cuando un evento coincide con su expresión SECL, el Agent genera una detección.
Las reglas de detección de amenazas de Datadog actúan como lógica de backend: combinan una o más reglas del Agent (usando @agent.rule_id), agregan umbrales, suprimen el ruido y deciden cómo se enrutan las alertas.
En resumen, la regla del Agent encuentra el comportamiento sin procesar y la regla de detección lo convierte en historias de ataques de extremo a extremo.
Esta guía describe cómo crear expresiones de reglas manualmente, pero Workload Protection también proporciona el asistente Creador de reglas asistido para guiarlo en la creación de las reglas del Agent y de detección juntas. Consulte Crear las reglas personalizadas del Agent y de detección juntas.
Los operadores SECL se utilizan para combinar atributos de eventos en una expresión completa. Los siguientes operadores están disponibles:
Operador SECL
Definición
Versión del Agent
==
Igual
7.27
!=
No es igual
7.27
>
Mayor que
7.27
>=
Mayor o igual
7.27
<
Menor
7.27
<=
Menor o igual
7.27
! o not
No
7.27
^
NOT binario
7.27
in [elem1, ...]
El elemento está contenido en la lista
7.27
not in [elem1, ...]
El elemento no está contenido en la lista
7.27
=~
Coincidencia de cadena
7.27
!~
Sin coincidencia de cadena
7.27
&
AND binario
7.27
|
OR binario
7.27
&& o and
AND lógico
7.27
|| o or
OR lógico
7.27
in CIDR
El elemento está en el rango IP
7.37
not in CIDR
El elemento no está en el rango IP
7.37
allin CIDR
Todos los elementos están en el rango IP
7.37
in [CIDR1, ...]
El elemento está en los rangos IP
7.37
not in [CIDR1, ...]
El elemento no está en los rangos IP
7.37
allin [CIDR1, ...]
Todos los elementos están en los rangos IP
7.37
Patrones y expresiones regulares
Se pueden usar patrones o expresiones regulares en las expresiones SECL. Se pueden usar con los operadores in, not in, =~ y !~.
Formato
Ejemplo
Campos admitidos
Versión del Agent
~"pattern"
~"httpd.*"
Todo
7.27
r"regexp"
r"rc[0-9]+"
Todo excepto .path
7.27
Los patrones en los campos .path se usan como Glob. * coincide con archivos y carpetas al mismo nivel. **, introducido en 7.34, se puede usar al final de una ruta para coincidir con todos los archivos y subcarpetas.
Duraciones
Puede usar SECL para escribir reglas basadas en duraciones, las cuales se activan ante eventos que ocurren durante un periodo de tiempo específico. Por ejemplo, activar ante un evento donde se accede a un archivo secreto después de que haya transcurrido más de cierta cantidad de tiempo desde que se creó un proceso.
Dicha regla podría escribirse de la siguiente manera:
Las duraciones son números con un sufijo de unidad. Los sufijos admitidos son “s”, “m”, “h”.
Sintaxis específica de la plataforma
Las expresiones SECL admiten varias plataformas. Puede usar la documentación a continuación para ver qué atributos y ayudantes están disponibles para cada una.
Ancle en la ascendencia para reducir el ruido. Utilice process.ancestors.file.name.
Utilice duraciones (por ejemplo, > 5s, 10m, 2h) para apuntar a ventanas de ejecución estrechas.
Utilice la coincidencia exacta (==) siempre que sea posible, ya que resulta en el menor ruido.
La pertenencia a una lista (in [...]) es mejor para listas de permitidos o conjuntos controlados de valores.
Utilice una coincidencia glob (~"/path/*") para familias de rutas, ya que es más segura y rápida que regex.
Utilice regex (=~) solo cuando no se puedan usar globs/listas. Mantenga la expresión regex lo más estrecha posible. Como regla general, comience con == o in [...]. Recurra a regex solo como último recurso.
Utilice la negación (not in [...], !~) para definir excepciones explícitamente (por ejemplo, herramientas confiables).
Utilice operadores CIDR (in CIDR, not in CIDR) para límites de red.
Nombre las reglas según el comportamiento, con un formato que siga Qué + Quién + Contexto.
En los archivos de política del Agent, cada regla incluye un id y un expression. También puede agregar actions opcionales. Consulte Variables y acciones para obtener más información.
Linux
Acceso a archivos confidenciales (lista de permitidos de herramientas seguras)
rules:- id:access_sensitive_filesexpression:>- open.file.path in ["/etc/shadow", "/etc/sudoers"] &&
process.file.path not in ["/usr/sbin/vipw", "/usr/sbin/visudo"]filters:- os == "linux"
Salida a IP no corporativas (lista CIDR de permitidos)
rules:- id:outbound_non_corporate_ipsexpression:>- connect &&
network.destination.ip not in [10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12]filters:- os == "linux"
Windows
Persistencia en el registro a través de una clave de ejecución
rules:- id:registry_run_key_persistenceexpression:>- set_key_value &&
open_key.registry.key_path =~ "*\\Software\\Microsoft\\Windows\\CurrentVersion\\Run*"filters:- os == "windows"