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 do YARA-L é deixar de usar detecções como apenas consultas de dados para investigações baseadas em eventos. O YARA-L é derivado da linguagem YARA, comumente usada na análise de malware. O L significa registros. A YARA-L permite 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 amostra do Google Security Operations

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

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

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

Exemplos de regras e ajustes

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 avaliadas. O campo de UDM que está sendo avaliado neste evento é metadata.eventype. Portanto, faz sentido chamá-lo apenas de e1. As próximas linhas pesquisa ocorrências específicas de correspondências de expressões regulares no e1. A condição que cria uma detecção nas Operações de segurança do Google é toda vez que o evento $e1 realiza lugar Para fins de ajuste, uma condição not é fornecida para excluir determinados caminhos não maliciosos do argumento da linha de comando. Outras condições not podem ser adicionados 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
}

Especificar 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 abaixo, a regra tem os eventos $e1 e $e2. A condição afirma que 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 "Rules outcome"

Use a seção de resultado para definir variáveis de retenção na detecção de regras e oferecer enriquecimento para o consumo downstream. Por exemplo, é possível adicionar informações de pontuação de gravidade que dependem de dados dos eventos analisados. O a detecção seguinte 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 mecanismo de detecção das Operações de segurança do Google só examina 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 a segurança e não simplesmente retornar uma consulta de dados. A variável de evento é usada para acompanhe quais valores de campos estão sendo usados na seção de condição da regra. Você pode usar um único evento, vários eventos ao longo do tempo, correlacionar fontes para um um valor único (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. Isso pode ser feito especificando exclusões na lógica. Você também pode 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 de alertas para cada detecção. É possível acompanhar as detecções para vários fins e alertar apenas sobre as que você determinar como mais críticas no seu ambiente.