Regras de detecção padrão

Compatível com:

Linguagem de regras YARA-L

YARA-L é uma linguagem de regras de detecção desenvolvida pelo Google. O objetivo da YARA-L é deixar de usar detecções como apenas consultas de dados e passar a usar investigações reais orientadas por eventos. A YARA-L é derivada da linguagem YARA, comumente usada na análise de malware. O L significa registros. Com a YARA-L, você aproveita todas as informações de várias fontes nas detecções e correlaciona esses eventos em alertas úteis. Para mais informações, consulte a Visão geral da linguagem YARA-L 2.0.

Exemplos de regras de detecção do Google Security Operations

Para ajudar a acelerar a adoção do mecanismo de detecção do Google SecOps, há um repositório do GitHub com regras de amostra. Esse repositório contém várias categorias diferentes de regras de detecção, incluindo:

  • CloudAudit do Google Cloud
  • Google Workspace
  • Avisos informativos
  • Malware
  • MITRE ATT&CK
  • Regras principais do SOC
  • Eventos suspeitos

Cada categoria usa uma abordagem específica para visualizar fontes de dados e especificar quais eventos e instruções de correspondência usar.

Exemplos de regras e ajuste

A regra a seguir cria uma variável de evento $e1, que é usada para rastrear o tipo de evento. A variável de evento pode ser qualquer valor que tenha significado para os dados que estão sendo avaliados. O campo da UDM avaliado neste evento é metadata.eventype, então faz sentido chamá-lo apenas de e1. As próximas linhas procuram ocorrências específicas de correspondências de expressões regulares em e1. A condição que cria uma detecção no Google SecOps é sempre que o evento $e1 ocorre. Para fins de ajuste, uma condição not é fornecida para excluir determinados caminhos não maliciosos para o argumento de linha de comando. Outras not condições podem ser adicionadas a essa regra se você identificar falsos positivos frequentes de outros caminhos de arquivo conhecidos.

rule suspicious_unusual_location_svchost_execution

{
 meta:
   author = "Google Cloud Security"
   description = "Windows 'svchost' executed from an unusual location"
   yara_version = "YL2.0"
   rule_version = "1.0"

 events:
   $e1.metadata.event_type = "PROCESS_LAUNCH"
   re.regex($e1.principal.process.command_line, `\bsvchost(\.exe)?\b`) nocase
   not re.regex($e1.principal.process.command_line, `\\Windows\\System32\\`) nocase

condition:
   $e1
}

Especificar mais de uma variável de evento

Com a YARA-L, é possível ter mais de uma variável de evento em uma regra. No exemplo a seguir, a regra tem eventos $e1 e $e2. A condição declara a condição lógica que aciona a detecção.

rule ExcludeZeroValues {
  meta:
    author = "noone@google.com"

  events:
    $e1.metadata.event_type = "NETWORK_DNS"
    $e1.principal.hostname = $hostname

    // $e1.principal.user.userid may be empty string.
    $e1.principal.user.userid != "Guest"

    $e2.metadata.event_type = "NETWORK_HTTP"
    $e2.principal.hostname = $hostname

    // $e2.target.asset_id cannot be empty string as explicitly specified.
    $e2.target.asset_id != ""

  match:
    // $hostname cannot be empty string.
    $hostname over 1h

  condition:
    $e1 and $e2
}

Seção de resultado das regras

Use a seção de resultado para definir variáveis de retenção na detecção de regras e fornecer enriquecimento para consumo downstream. Por exemplo, é possível adicionar informações de pontuação de gravidade que dependem de dados dos eventos analisados. A detecção a seguir examina dois eventos para atribuir o valor $hostname. Se o valor $hostnames corresponder em um período de 5 minutos, uma pontuação de gravidade será aplicada. Ao usar períodos, o mecanismo de detecção do Google SecOps examina apenas os blocos de tempo discretos especificados.

rule OutcomeRuleMultiEvent {
    meta:
      author = "noone@google.com"
    events:
      $u.udm.principal.hostname = $hostname
      $asset_context.graph.entity.hostname = $hostname

      $severity = $asset_context.graph.entity.asset.vulnerabilities.severity

    match:
      $hostname over 5m

    outcome:
      $risk_score =
        max(
            100
          +   if($hostname = "my-hostname", 100, 50)
          +   if($severity = "HIGH", 10)
          +   if($severity = "MEDIUM", 5)
          +   if($severity = "LOW", 1)
        )

      $asset_id_list =
        array(
          if($u.principal.asset_id = "",
             "Empty asset id",
             $u.principal.asset_id
          )
        )

      $asset_id_distinct_list = array_distinct($u.principal.asset_id)

      $asset_id_count = count($u.principal.asset_id)

      $asset_id_distinct_count = count_distinct($u.principal.asset_id)

    condition:
      $u and $asset_context and $risk_score > 50 and not arrays.contains($asset_id_list, "id_1234")
}

Conclusão

YARA-L é uma linguagem de detecção flexível que permite examinar eventos de segurança e não apenas retornar uma consulta de dados. A variável de evento é usada para rastrear quais valores de campo estão sendo usados na seção de condição da regra. É possível usar um único evento, vários eventos ao longo do tempo, correlacionar fontes para um único valor (como $hostname de diferentes fontes de dados) e até mesmo usar ferramentas como expressões regulares para fornecer correspondências. É essencial ajustar as regras ao seu próprio ambiente, o que pode ser feito especificando exclusões na lógica. Você também pode usar listas de referência para agrupar itens e depois referenciar essa lista na regra. Não se esqueça de que o Google SecOps não precisa de todos os alertas de detecção. Você pode acompanhar as detecções para várias finalidades e gerar alertas apenas sobre aquelas que você considera mais críticas no seu ambiente.

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