Sintaxe da secção de eventos

Suportado em:

A secção events tem de seguir imediatamente a secção meta numa regra. Define os eventos que a consulta deve examinar e os atributos específicos que esses eventos têm de possuir para serem considerados relevantes para uma potencial deteção.

A secção events é obrigatória para as regras, mas opcional para a pesquisa e os painéis de controlo.

Use a secção events para listar os predicados que especificam o seguinte:

  • Declarações de variáveis
  • Filtros de variáveis de eventos
  • Junções de variáveis de eventos

Secção Defina eventos

As regras e as consultas focadas apenas num tipo de evento podem incluir uma única variável de evento, como:

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

As regras e as consultas que requerem correlação entre dois ou mais tipos distintos de eventos (como um início de sessão do utilizador seguido de uma modificação de ficheiro) requerem uma variável 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

Depois de declarar uma variável de evento, usa-a como prefixo para aceder a campos específicos desse tipo de evento. Por exemplo, a seguinte secção event filtra eventos de início de sessão falhados do Okta:

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

Declarações de variáveis

Para declarações de variáveis, use a seguinte sintaxe:

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

Ambos são equivalentes, como mostrado nos exemplos seguintes:

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

Esta declaração indica que esta variável representa o campo especificado para a variável de evento. Quando o campo de evento é um campo repetido, a variável match pode representar qualquer valor na matriz. Também pode atribuir vários campos de eventos a uma única variável de correspondência ou marcador de posição. Esta condição é denominada condição de junção transitiva.

Por exemplo, o seguinte:

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

São equivalentes a:

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

Quando é usada uma variável, esta tem de ser declarada através da declaração de variáveis. Se uma variável for usada sem qualquer declaração, aciona um erro de compilação.

Para mais informações sobre as variáveis, consulte o artigo Expressões, operadores e outras construções.

Filtros de variáveis de eventos

Uma expressão booleana que atua numa única variável de evento é considerada um filtro.

Junções de variáveis de eventos

Todas as variáveis de eventos usadas numa regra têm de ser unidas a todas as outras variáveis de eventos de uma das seguintes formas:

  • Diretamente através de uma comparação de igualdade entre os campos de eventos das duas variáveis de eventos unidas, por exemplo: $e1.field = $e2.field. A expressão não pode incluir operações aritméticas (como $\text{+, -, *, /}$).

  • Indiretamente através de uma junção transitiva que envolva apenas um campo de evento (consulte a declaração de variáveis para uma definição de "junção transitiva"). A expressão não pode incluir aritmética.

Por exemplo, partindo do princípio de que $e1, $e2 e $e3 são usados na regra, as seguintes secções events são 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

No entanto, os exemplos seguintes mostram secções events invá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

O que se segue?

Informações adicionais

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.