Regras de deteção compostas
A deteção composta no Google SecOps envolve a ligação de várias regras YARA-L. Este documento explica como criar uma regra composta. Para mais informações, consulte o artigo Vista geral das deteções compostas.
Compreenda a estrutura das regras
As regras de deteção compostas são sempre regras de vários eventos e seguem a mesma estrutura e sintaxe que uma regra de evento único.
Uma regra composta tem os seguintes componentes essenciais:
Secção
events: define as suas entradas, as deteções ou os eventos específicos que a regra analisa.Secção
match: especifica como as entradas devem ser associadas durante um período definido.Secção
condition: contém a lógica final que determina se os eventos unidos cumprem os critérios para acionar um alerta.
Defina as entradas na secção events
O primeiro passo na criação de uma regra de deteção composta é definir as entradas da regra na secção events. As entradas para regras compostas provêm de coleções, que armazenam as deteções geradas por outras consultas.
O Google SecOps oferece os dois métodos seguintes para aceder aos dados
das recolhas.
Referencie conteúdo de deteção com variáveis ou metarótulos
Para aceder a dados de uma deteção sem fazer referência aos eventos UDM originais,
pode usar outcome variáveis, match variáveis ou meta etiquetas. Recomendamos esta abordagem porque oferece maior flexibilidade e melhor compatibilidade em diferentes tipos de regras.
Por exemplo, várias regras podem armazenar uma string (como um URL, um nome de ficheiro ou uma chave de registo) numa variável outcome comum se estiver à procura dessa string em diferentes contextos. Para aceder a esta string a partir de uma regra composta, comece
com detection e localize as informações relevantes através de elementos do
recurso de recolha.
Exemplo: suponhamos que uma regra de deteção produz as seguintes informações:
Variável de resultado:
dest_domain = "cymbal.com"Campo UDM:
target.hostname = "cymbal.com"
Na regra composta, pode aceder a estes dados através dos seguintes caminhos:
detection.detection.outcomes["dest_domain"]para aceder à variável de resultadodest_domain.detection.collection_elements.references.event.target.hostnamepara aceder ao campotarget.hostnameUDM.detection.time_window.start_time.secondspara aceder à data/hora de início da deteção.
A API Collection e a API SecurityResult oferecem acesso a ambas:
- Metadados de deteção e valores de resultados (
detection.detection) - Eventos UDM subjacentes das regras referenciadas (
collection_elements)
Conteúdo de deteção de referências com o ID ou o nome da regra
Pode fazer referência a uma regra pelo nome ou ID. Recomendamos esta abordagem quando a sua lógica de deteção depende de regras específicas e quer reduzir os dados analisados apenas aos resultados dessas regras. Fazer referência a regras relevantes
por nome ou ID melhora o desempenho e evita os limites de tempo, reduzindo os dados
analisados. Por exemplo, pode consultar diretamente campos como target.url ou
principal.ip a partir de uma deteção anterior conhecida.
Referencie uma regra pelo ID da regra (recomendado): use o campo
detection.detection.rule_idpara referenciar uma regra pelo ID. Pode encontrar o ID da regra no URL da regra no Google SecOps. As regras geradas pelo utilizador têm IDs no formatoru_UUID, enquanto as deteções organizadas têm IDs no formatour_UUID. Por exemplo:detection.detection.rule_id = "ru_e0d3f371-6832-4d20-b0ad-1f4e234acb2b"Fazer referência a uma regra pelo nome da regra: use o campo
detection.detection.rule_namepara fazer referência a uma regra pelo nome. Pode especificar o nome exato da regra ou usar uma expressão regular para a fazer corresponder. Por exemplo:detection.detection.rule_name = "My Rule Name"detection.detection.rule_name = "/PartOfName/"
Junte entradas na secção match
Para associar deteções, eventos ou entidades relacionados numa regra composta, defina a secção match com variáveis definidas na secção events. Estas variáveis podem incluir etiquetas de regras, variáveis de resultados, variáveis de correspondência, campos de deteção ou elementos de recolha.
Para obter informações sobre a sintaxe, consulte o artigo Sintaxe da secção de correspondência.
Defina a secção condition
Defina a secção condition para avaliar os resultados da secção match.
Se a condição for true, é gerado um alerta. Para obter informações sobre a sintaxe, consulte o artigo Sintaxe da secção de condições.
Aplique técnicas avançadas a regras compostas
Esta secção explica como aplicar técnicas avançadas ao criar regras compostas.
Combine eventos e deteções
As regras compostas podem combinar várias origens de dados, incluindo eventos da GDU, dados do gráfico de entidades e campos de deteção. Aplicam-se as seguintes diretrizes:
Usar variáveis distintas por origem: atribua variáveis de eventos únicas a cada origem de dados (por exemplo,
$epara eventos,$dpara deteções), em que a origem de dados inclui eventos, entidades e deteções.Junte origens no contexto partilhado: associe origens de dados através de valores comuns, como IDs de utilizadores, endereços IP ou nomes de domínios nas condições da sua regra.
Defina um período de correspondência: inclua sempre uma cláusula
matchcom um período não superior a 48 horas.
Exemplo: combinar eventos e deteções
rule CheckCuratedDetection_with_EDR_and_EG {
meta:
author = "noone@cymbal.com"
events:
$d.detection.detection.rule_name = /SCC: Custom Modules: Configurable Bad Domain/
$d.detection.collection_elements.references.event.network.dns.questions.name = $domain
$d.detection.collection_elements.references.event.principal.asset.hostname = $hostname
$e.metadata.log_type = "LIMACHARLIE_EDR"
$e.metadata.product_event_type = "NETWORK_CONNECTIONS"
$domain = re.capture($e.principal.process.command_line, "\\s([a-zA-Z0-9.-]+\\.[a-zA-Z0-9.-]+)$")
$hostname = re.capture($e.principal.hostname, "([^.]*)")
$prevalence.graph.metadata.entity_type = "DOMAIN_NAME"
$prevalence.graph.metadata.source_type = "DERIVED_CONTEXT"
$prevalence.graph.entity.hostname = $domain
$prevalence.graph.entity.domain.prevalence.day_count = 10
$prevalence.graph.entity.domain.prevalence.rolling_max <= 5
$prevalence.graph.entity.domain.prevalence.rolling_max > 0
match:
$hostname over 1h
outcome:
$risk_score = 80
$CL_target = array($domain)
condition:
$e and $d and $prevalence
}
Crie deteções compostas sequenciais
As deteções compostas sequenciais identificam padrões de eventos relacionados em que a sequência de deteções é importante, como uma deteção de tentativa de início de sessão por força bruta, seguida de um início de sessão bem-sucedido. Estes padrões podem combinar várias deteções base, eventos UDM não processados ou ambos.
Para criar uma deteção composta sequencial, tem de aplicar essa ordem na sua regra. Para aplicar a sequência esperada, use um dos seguintes métodos:
Janelas deslizantes: defina a sequência de deteções através de janelas deslizantes nas suas condições
match.Comparações de datas/horas: compare as datas/horas das deteções na lógica da regra para verificar se ocorrem na ordem selecionada.
Exemplo: deteções compostas sequenciais
events:
$d1.detection.detection.rule_name = "fileEvent_rule"
$userid = $d1.detection.detection.outcomes["user"]
$hostname = $d1.detection.detection.outcomes["hostname"]
$d2.detection.detection.rule_name = "processExecution_rule"
$userid = $d2.detection.detection.outcomes["user"]
$hostname = $d2.detection.detection.outcomes["hostname"]
$d3.detection.detection.rule_name = "networkEvent_rule"
$userid = $d3.detection.detection.outcomes["user"]
$hostname = $d3.detection.detection.outcomes["hostname"]
$d3.detection.collection_elements.references.event.metadata.event_timestamp.seconds > $d2.detection.collection_elements.references.event.metadata.event_timestamp.seconds
match:
$userid over 24h after $d1
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.