Vista geral do YARA-L 2.0

Suportado em:

O YARA-L 2.0 é uma linguagem especializada no Google Security Operations que opera em dados de registo empresariais para permitir que os profissionais de segurança explorem esses dados, investiguem ameaças e criem regras de deteção.

Este documento explica a linguagem YARA-L e a respetiva sintaxe, mostrando como pode usá-la para expressar tudo, desde uma consulta de filtro básica a uma regra que procura padrões complexos. Use as secções numa consulta YARA-L para suportar funções agregadas, lógica de condições e adicionar contexto através de junções, correspondência de padrões e muito mais.

Vista geral da sintaxe do YARA-L 2.0

Para criar uma regra ou uma consulta YARA-L, recomendamos que se familiarize e compreenda a estrutura e a sintaxe para especificar declarações, definições e utilização de variáveis.

Estrutura das regras

As regras YARA-L contêm as seguintes secções e têm de ser especificadas pela seguinte ordem:

Encomenda Secção Regras Pesquisa/Painéis de controlo Descrição
1 meta Obrigatória N/A Descreve a regra e pode incluir valores como autor, gravidade, descrição e prioridade. Consulte a sintaxe da secção Meta.
2 eventos Obrigatória Obrigatória Define como filtrar e juntar eventos. Consulte a sintaxe da secção de eventos.
3 correspondência Opcional Opcional Especifica os campos pelos quais agrupar quando agregar resultados. Consulte a sintaxe da secção de correspondência.

Nota: se excluir uma secção match, a regra pode corresponder a um único evento.
4 resultado Opcional Opcional Define os dados a gerar quando uma regra é executada ou quando uma regra é acionada. Consulte a sintaxe da secção de resultados.
5 condição Obrigatória Opcional Contém lógica que determina se uma regra é acionada. Consulte a sintaxe da secção de condições.
6 de configuração Opcional Opcional Permite ativar ou desativar o comportamento de regras específicas. Consulte a sintaxe da secção de opções.

O exemplo seguinte ilustra a estrutura genérica de uma regra:

rule <rule name>
{
    meta:
    // Stores arbitrary key-value pairs of the rule details, such as who wrote
    // it, what it detects on, version control, etc.

  events:
    // Defines which events to filter and the relationship between events.

  match:
    // Values to return when matches are found.

  outcome:
    // Define the output of each rule and security alert.

  condition:
    // Condition to check events and the variables used to find matches.

  options:
    // Options to turn on or off while executing this rule. The `options` syntax is only valid for rules.
}

À medida que cria regras, o Google SecOps realiza a verificação de tipos em relação à sintaxe YARA-L e apresenta os erros para ajudar a rever a regra de modo a que funcione corretamente. Os exemplos seguintes mostram os erros apresentados quando é usada uma sintaxe inválida:

// $e.target.port is of type integer which cannot be compared to a string.
$e.target.port = "80"

// "LOGIN" is not a valid event_type enum value.
$e.metadata.event_type = "LOGIN"

Esta regra de exemplo encontra 5 inícios de sessão falhados consecutivos por utilizador em intervalos de 10 minutos.

rule failed_logins
{
  meta:
   author = "Security Team"
   description = "Detects multiple failed user logins within 10-minute windows."
   severity = "HIGH"

  events:
   $e.metadata.event_type = "USER_LOGIN"
   $e.security_result.action = "FAIL"
   $user = $e.target.user.userid

  match:
   $user over 10m

  outcome:
   $failed_login_count = count($e.metadata.id)
   $first_fail_time = min($e.metadata.event_timestamp.seconds)

  condition:
    #e >= 5
}

A regra é definida da seguinte forma:

  • A secção meta define o autor da regra (equipa de segurança), a descrição (deteta vários inícios de sessão de utilizadores falhados em janelas de 10 minutos) e a gravidade (alta).

Deteta vários inícios de sessão de utilizadores falhados em intervalos de 10 minutos

  • A secção events define os eventos que têm de ser acompanhados: inícios de sessão de utilizadores, inícios de sessão de utilizadores falhados (variáveis de eventos) e links para a variável de correspondência user (variáveis de marcadores de posição).

  • A secção outcome define os cálculos a realizar no evento e nas variáveis de marcador de posição: contabilizar as tentativas de início de sessão falhadas e a hora em que ocorreu a primeira falha.

  • A secção match define a variável pela qual agrupar os eventos ($user) e o período (10m) durante o qual esses eventos têm de ocorrer para serem considerados uma correspondência.

  • A secção condition especifica que apenas devem ser devolvidos utilizadores com mais de cinco ou mais inícios de sessão falhados.

O que se segue?

Informações adicionais

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