Regras de detecção padrão

Linguagem de regras YARA-L

YARA-L é uma linguagem de regras de detecção desenvolvida pelo Google. O objetivo da YARA-L é deixar de lado as detecções como apenas consultas de dados e passar a fazer investigações reais com base em eventos. A YARA-L é derivada da linguagem YARA comumente usada em análises de malware. O L significa registros. Com a YARA-L, é possível aproveitar todas as informações de várias fontes nas detecções e correlacionar esses eventos em alertas acionáveis. Para mais informações, consulte a Visão geral da linguagem YARA-L 2.0.

Regras de detecção de amostras das Operações de segurança do Google

Para ajudar a acelerar a adoção do Google Security Operations Detection Engine, há um repositório do GitHub com exemplos de regras. Esse repositório contém várias categorias diferentes de regras de detecção, incluindo as seguintes:

  • Auditoria do Google Cloud
  • Google Workspace
  • Avisos informativos
  • Malware
  • MITRE ATT&CK
  • As principais regras do SOC
  • Eventos suspeitos

Cada categoria adota uma abordagem específica na maneira como visualiza as fontes de dados e especifica quais eventos e instruções correspondentes usar.

Exemplo 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 de UDM que está sendo avaliado nesse evento é metadata.eventype. Portanto, 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 nas Operações de segurança do Google é qualquer momento em que o evento $e1 ocorre. Para fins de ajuste, uma condição not é fornecida para excluir determinados caminhos não maliciosos do argumento de linha de comando. Outras condições not podem ser adicionadas a essa regra se você identificar falsos positivos frequentes provenientes 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
}

Especifique mais de uma variável de evento

A YARA-L permite que você tenha mais de uma variável de evento em uma regra. No exemplo a seguir, a regra tem os eventos $e1 e $e2. A condição indica 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 resultados das regras

Use a seção de resultado para definir variáveis de retenção na detecção de regras e fornecer enriquecimento para o consumo downstream. Por exemplo, é possível adicionar informações de pontuação de gravidade que dependem dos dados dos eventos que estão sendo analisados. A detecção a seguir examina dois eventos para atribuir o valor $hostname. Se o valor $hostnames corresponder a um período de cinco minutos, uma pontuação de gravidade será aplicada. Ao usar períodos, o Google Security Operations Detection Engine examina apenas os blocos discretos de tempo 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 simplesmente retornar uma consulta de dados. A variável do evento é usada para rastrear quais valores de campos 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, e isso pode ser feito especificando exclusões na lógica. Também é possível usar listas de referência para agrupar itens e, em seguida, fazer referência a essa lista na regra. Não se esqueça de que as Operações de segurança do Google não precisam que todas as detecções sejam alertadas. É possível acompanhar detecções para vários propósitos e alertar apenas sobre aquelas que você determinar que são mais importantes no seu ambiente.