Regras de deteção compostas

Suportado em:

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

  • detection.collection_elements.references.event.target.hostname para aceder ao campo target.hostname UDM.

  • detection.time_window.start_time.seconds para 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_id para 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 formato ru_UUID, enquanto as deteções organizadas têm IDs no formato ur_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_name para 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, $e para eventos, $d para 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 match com 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.