Sintaxe da seção "Eventos"
A seção events precisa vir imediatamente após a seção meta em uma regra. Ela define quais eventos a consulta deve examinar e quais atributos específicos esses eventos precisam ter para serem considerados relevantes para uma possível detecção.
A seção events é obrigatória para regras, mas opcional para pesquisa e dashboards.
Use a seção events para listar os predicados que especificam o seguinte:
- Declarações de variáveis
- Filtros de variáveis de evento
- Junções de variáveis de evento
Definir seção de eventos
Regras e consultas focadas em apenas um 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
Regras e consultas que exigem correlação entre dois ou mais tipos distintos de eventos (como um login do usuário seguido de uma modificação de arquivo) precisam de 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 que uma variável de evento é declarada, ela é usada como um prefixo para acessar campos específicos desse tipo de evento. Por exemplo, a seção event a seguir filtra eventos de login com falha 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, conforme mostrado nos exemplos a seguir:
$e.source.hostname = $hostname$userid = $e.principal.user.userid
Essa declaração indica que a variável representa o campo especificado para a variável de evento. Quando o campo de evento é repetido, a variável match pode representar qualquer valor na matriz. Também é possível atribuir vários campos de evento a uma única correspondência ou variável de marcador de posição. Isso é chamado de condição de junção transitiva.
Por exemplo, os seguintes URLs:
$e1.source.ip = $ip$e2.target.ip = $ip
São equivalentes a:
$e1.source.ip = $ip$e1.source.ip = $e2.target.ip
Quando uma variável é usada, ela precisa ser declarada. Se uma variável for usada sem declaração, isso vai acionar um erro de compilação.
Para mais informações sobre variáveis, consulte Expressões, operadores e outras construções.
Filtros de variáveis de evento
Uma expressão booleana que atua em uma única variável de evento é considerada um filtro.
Junções de variáveis de evento
Todas as variáveis de evento usadas em uma regra precisam ser unidas a todas as outras variáveis de evento de uma das seguintes maneiras:
Diretamente por uma comparação de igualdade entre campos de evento das duas variáveis de evento unidas, por exemplo:
$e1.field = $e2.field. A expressão não pode incluir operações aritméticas (como $\text{+, -, *, /}$).Indiretamente, por uma junção transitiva que envolve apenas um campo de evento. Consulte a declaração de variável para uma definição de "junção transitiva". A expressão não pode incluir aritmética.
Por exemplo, supondo que $e1, $e2 e $e3 sejam usados na regra, as seguintes seçõ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 a seguir mostram seçõ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
A seguir
- Sintaxe da seção de correspondência
- Sintaxe da seção de resultados
- Sintaxe da seção de condição
- Sintaxe da seção "Opções"
Informações adicionais
- Expressões, operadores e construções usados na YARA-L 2.0
- Funções na YARA-L 2.0
- Criar regras de detecção compostas
- Exemplos: consultas da YARA-L 2.0
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.