Regras de detecção padrão
Linguagem de regras YARA-L
A 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. 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 a adoção do mecanismo de detecção de operações de segurança do Google, 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 as seguintes:
- Google Cloud CloudAudit
- Google Workspace
- Avisos informativos
- Malware
- MITRE ATT&CK
- Regras principais do SOC
- Eventos suspeitos
Cada categoria tem uma abordagem específica para visualizar as fontes de dados e especificar quais eventos e instruções de correspondência usar.
Exemplos de regras e ajustes
A regra a seguir 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 sendo avaliados. O campo UDM que está sendo avaliado neste evento é
metadata.eventype
. Portanto, faz sentido chamá-lo de e1
. As linhas seguintes
procuram ocorrências específicas de correspondências de expressões regulares em e1
. A condição que cria uma detecção no Google Security Operations é sempre que o evento $e1
ocorre. 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 de not
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
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 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 resultados 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. 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 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
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. Você pode 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é 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.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.