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 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.