Sintaxis de la sección de eventos

Se admite en los siguientes sistemas operativos:

La sección events debe seguir inmediatamente a la sección meta en una regla. Define qué eventos debe examinar la búsqueda y qué atributos específicos deben tener esos eventos para considerarse relevantes para una posible detección.

La sección events es obligatoria para las reglas, pero opcional para la Búsqueda y los paneles.

Usa la sección events para enumerar los predicados y especificar lo siguiente:

  • Declaraciones de variables
  • Filtros de variables de eventos
  • Combinaciones de variables de eventos

Sección Define events

Las reglas y las consultas que se enfocan en un solo tipo de evento pueden incluir una sola variable de evento, como las siguientes:

events:
  $e.metadata.event_type = "USER_LOGIN" // 'e' is the common convention for a single event

Las reglas y las consultas que requieren correlación entre dos o más tipos distintos de eventos (como el acceso de un usuario seguido de la modificación de un archivo) requieren una variable para cada tipo de evento:

events:
  $login.metadata.event_type = "USER_LOGIN" // Event 1: User Login
  $file_op.metadata.event_type = "FILE_MODIFICATION" // Event 2: File Modification

Una vez que se declara una variable de evento, se usa como prefijo para acceder a campos específicos de ese tipo de evento. Por ejemplo, la siguiente sección event filtra los eventos de acceso fallido de Okta:

events:
   $e.metadata.vendor_name = "Okta"
   $e.metadata.event_type = "USER_LOGIN"
   $e.security_result.action = "FAIL"

Declaraciones de variables

Para las declaraciones de variables, usa la siguiente sintaxis:

  • <EVENT_FIELD> = <VAR>
  • <VAR> = <EVENT_FIELD>

Ambos son equivalentes, como se muestra en los siguientes ejemplos:

  • $e.source.hostname = $hostname
  • $userid = $e.principal.user.userid

Esta declaración indica que esta variable representa el campo especificado para la variable del evento. Cuando el campo del evento es un campo repetido, la variable match puede representar cualquier valor del array. También puedes asignar varios campos de eventos a una sola variable de coincidencia o de marcador de posición. Esto se denomina condición de unión transitiva.

Por ejemplo:

  • $e1.source.ip = $ip
  • $e2.target.ip = $ip

Son equivalentes a lo siguiente:

  • $e1.source.ip = $ip
  • $e1.source.ip = $e2.target.ip

Cuando se usa una variable, esta se debe declarar a través de la declaración de variables. Si se usa una variable sin ninguna declaración, se activa un error de compilación.

Para obtener más información sobre las variables, consulta Expresiones, operadores y otras construcciones.

Filtros de variables de eventos

Una expresión booleana que actúa sobre una sola variable de evento se considera un filtro.

Combinaciones de variables de eventos

Todas las variables de evento que se usan en una regla deben unirse con todas las demás variables de evento de una de las siguientes maneras:

  • Directamente a través de una comparación de igualdad entre los campos de eventos de las dos variables de eventos unidas, por ejemplo: $e1.field = $e2.field. La expresión no debe incluir operaciones aritméticas (como $\text{+, -, *, /}$).

  • Indirectamente, a través de una unión transitiva que solo involucra un campo de evento (consulta la declaración de variables para obtener una definición de "unión transitiva"). La expresión no debe incluir aritmética.

Por ejemplo, si se supone que $e1, $e2 y $e3 se usan en la regla, las siguientes secciones de events son válidas:

events:
  $e1.principal.hostname = $e2.src.hostname // $e1 joins with $e2
  $e2.principal.ip = $e3.src.ip // $e2 joins with $e3
events:
  // $e1 joins with $e2 using function to event comparison
  re.capture($e1.src.hostname, ".*") = $e2.target.hostname
events:
  // $e1 joins with $e2 using an `or` expression
  $e1.principal.hostname = $e2.src.hostname
  or $e1.principal.hostname = $e2.target.hostname
  or $e1.principal.hostname = $e2.principal.hostname
events:
  // all of $e1, $e2 and $e3 are transitively joined using the placeholder variable $ip
  $e1.src.ip = $ip
  $e2.target.ip = $ip
  $e3.about.ip = $ip
events:
  // $e1 and $e2 are transitively joined using function to event comparison
  re.capture($e2.principal.application, ".*") = $app
  $e1.principal.hostname = $app

Sin embargo, en los siguientes ejemplos, se muestran secciones events no válidas.

events:
  // Event to arithmetic comparison is an invalid join condition for $e1 and $e2.
  $e1.principal.port = $e2.src.port + 1
events:
  $e1.src.ip = $ip
  $e2.target.ip = $ip
  $e3.about.ip = "192.1.2.0" //$e3 is not joined with $e1 or $e2.
events:
  $e1.src.port = $port

  // Arithmetic to placeholder comparison is an invalid transitive join condition.
  $e2.principal.port + 800 = $port

¿Qué sigue?

Información adicional

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.