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.