Regras de deteção predefinidas

Compatível com:

Linguagem de regras YARA-L

O YARA-L é uma linguagem de regras de deteção desenvolvida pela Google. O objetivo da YARA-L é afastar-se das deteções como simples consultas de dados para investigações reais baseadas em eventos. O YARA-L deriva da linguagem YARA usada frequentemente na análise de software malicioso. O L significa registos. O YARA-L permite-lhe tirar partido de todas as informações de várias origens nas deteções e correlacionar esses eventos em alertas acionáveis. Para mais informações, consulte a vista geral da linguagem YARA-L 2.0.

Regras de deteção de amostras do Google Security Operations

Para ajudar a acelerar a sua adoção do motor de deteção do Google SecOps, existe um repositório do GitHub com regras de exemplo. Este repositório contém várias categorias diferentes de regras de deteção, incluindo as seguintes:

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

Cada categoria adota uma abordagem específica relativamente à forma como vê as origens de dados e especifica que eventos e declarações de correspondência usar.

Exemplos de regras e otimização

A regra seguinte cria uma variável de evento $e1 que é usada para acompanhar o tipo de evento. A variável de evento pode ser qualquer valor que tenha significado para os dados que estão a ser avaliados. O campo UDM que está a ser avaliado neste evento é metadata.eventype, por isso, faz sentido chamá-lo apenas e1. As linhas seguintes pesquisam ocorrências específicas de correspondências de expressões regulares em e1. A condição que cria uma deteção no Google SecOps é sempre que o evento $e1 ocorre. Para fins de otimização, é fornecida uma condição not para excluir determinados caminhos não maliciosos para o argumento da linha de comandos. Podem ser adicionadas mais notcondições a esta regra se identificar falsos positivos frequentes provenientes de outros caminhos de ficheiros 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 do que uma variável de evento

O YARA-L permite-lhe ter mais do que uma variável de evento numa regra. No exemplo seguinte, a regra tem os eventos $e1 e $e2. A condição indica a condição lógica que aciona a deteçã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
}

Secção de resultados das regras

Use a secção de resultados para definir variáveis de retenção na deteção de regras para fornecer o enriquecimento para o consumo a jusante. Por exemplo, pode adicionar informações de classificação de gravidade que dependem de dados dos eventos que estão a ser analisados. A deteção seguinte examina dois eventos para atribuir o valor $hostname. Se o valor $hostnames corresponder durante um período de 5 minutos, é aplicada uma pontuação de gravidade. Quando usa períodos, o motor de deteção do Google SecOps só examina os blocos de tempo discretos que especificar.

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

O YARA-L é uma linguagem de deteção flexível que lhe permite examinar eventos de segurança e não apenas devolver uma consulta de dados. A variável de evento é usada para monitorizar que valores de campos estão a ser usados na secção de condições da regra. Pode usar um único evento, vários eventos ao longo do tempo, correlacionar origens para um único valor (como $hostname de diferentes origens de dados) e até usar ferramentas como expressões regulares para fornecer correspondências. É essencial ajustar as regras ao seu próprio ambiente, e isto pode ser feito especificando exclusões na lógica. 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 o Google SecOps não precisa de receber alertas sobre todas as deteções. Pode acompanhar as deteções para vários fins e apenas enviar alertas sobre as que determinar serem mais críticas no seu ambiente.

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