Sintaxe da secção de eventos
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?
- Sintaxe da secção de correspondência
- Sintaxe da secção de resultados
- Sintaxe da secção de condições
- Sintaxe da secção de opções
Informações adicionais
- Expressões, operadores e construções usados no YARA-L 2.0
- Funções no YARA-L 2.0
- Crie regras de deteção compostas
- Exemplos: consultas YARA-L 2.0
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.