Criar análises com base no contexto

Compatível com:

O Google SecOps permite visualizar telemetria, contexto de entidade, relações e vulnerabilidades como uma única detecção na sua conta do Google SecOps. Ele fornece contextualização de entidades para que você entenda os padrões de comportamento na telemetria e o contexto das entidades afetadas por esses padrões.

Exemplos:

  • Exibição das permissões de uma conta em que uma tentativa de login por força bruta está sendo feita.
  • Importância dos dados hospedados por um recurso que também é a origem da atividade de rede de saída.

Os clientes podem usar essa contextualização para filtragem de detecção, priorização de alertas heurísticos , triagem e investigação.

Os analistas de segurança e os engenheiros de detecção normalmente trabalham para criar uma detecção em um padrão básico de telemetria de eventos (uma conexão de rede de saída), criando várias detecções para que os analistas façam a triagem. Os analistas tentam entender o que aconteceu para acionar o alerta e a importância da ameaça.

A análise com base no contexto incorpora recursos avançados de enriquecimento no fluxo de trabalho de criação e execução de detecção, permitindo que você forneça os seguintes recursos adicionais:

  • Disponibilização de contexto relevante para a pontuação de risco contextual orientada por heurística de detecções no momento da execução da detecção, em vez de na fase de triagem humana
  • Redução do tempo gasto na triagem e na combinação manual de informações de sistemas de segurança de TI diferentes (consoles EDR, registros de firewall ou proxy, contexto de CMDB e IAM, resultados de verificação de vulnerabilidades)
  • Permissão para que analistas e engenheiros de detecção filtrem clusters inteiros de ameaças que podem ser esperadas ou representar pouco ou nenhum perigo para a empresa (teste de malware em um ambiente de sandbox, vulnerabilidades e atividades anômalas em uma rede de desenvolvimento sem dados ou acesso sensíveis e muito mais)

Como gravar regras para análises com base no contexto

É possível usar regras do Detection Engine para pesquisar dados de contexto de entidades na sua conta do Google SecOps.

Para pesquisar dados de contexto de entidades, faça o seguinte:

  1. Especifique uma origem usando udm ou entity.

    $eventname.[<source>].field1.field2 Para um contexto de entidade, <source> é 'graph'. Para um evento de UDM, <source> é 'udm'. Se omitido, o <source> será udm por padrão.

  2. Especifique os dados da entidade:

    $e1.graph.entity.hostname = "my-hostname"

    $e1.graph.entity.relations.relationship = "OWNS"

  3. Especifique os dados de eventos de UDM. As instruções a seguir são equivalentes.

    $e1.udm.principal.asset_id = "my_asset_id"

    $e1.principal.asset_id = "my_asset_id"

É possível criar muitos dos mesmos tipos de regras para contextos de entidades que para eventos de UDM, incluindo o seguinte:

  • Várias regras de eventos

  • Comparação de contextos de entidades com outros contextos de entidades

  • Comparação de contextos de entidades com eventos de UDM

  • Campos repetidos em contextos de entidades

  • Janelas deslizantes

  • Cálculo de uma pontuação de risco para detecções

Ao contrário de um evento de UDM, um contexto de entidade não tem um carimbo de data/hora específico. Cada registro de contexto de entidade tem um intervalo de tempo, entity.metadata.interval, em que o contexto da entidade é válido. Esse intervalo de tempo pode não ser um limite de dia e pode ter qualquer duração.

Um evento de UDM será correlacionado com um registro de contexto de entidade somente quando o carimbo de data/hora do evento de UDM estiver dentro do intervalo de tempo do registro de contexto da entidade. Se essa condição não for atendida, o UDM e a entidade não serão avaliados para detecções. O mecanismo de detecção aplica isso implicitamente, e não é necessário especificar como uma condição em uma regra.

  • Ao comparar eventos de UDM com um contexto de entidade com janelas, um contexto de entidade representa um valor constante em uma janela especificada.
  • Se houver buckets de dias adjacentes em que o contexto da entidade muda de valor, o Google SecOps tentará fazer a correspondência em todos os valores de contexto da entidade e retornará todas as correspondências encontradas.

Exemplo de regras

Pesquisa de entidades com contexto de administrador

A regra a seguir pesquisa entidades que também estão vinculadas a privilégios de administrador privilégios. Ela procura momentos em que alguém com privilégio de administrador tentou fazer login ou sair do sistema.

rule LoginLogout {
  meta:
  events:
    ($log_inout.metadata.event_type = "USER_LOGIN" or  $log_inout.metadata.event_type = "USER_LOGOUT")
    $log_inout.principal.user.user_display_name = $user

    $context.graph.entity.user.user_display_name = $user
    $context.graph.entity.resource.attribute.roles.type = "ADMINISTRATOR"

  match:
    $user over 2m

  condition:
    $log_inout and $context
}

Exemplo de janela deslizante

O exemplo de janela deslizante a seguir é válido.

rule Detection {
  meta:
  events:
    $e1.graph.entity.hostname = $host
    $e2.udm.principal.hostname = $host

  match:
    // Using e2 (a UDM event) as a pivot.
    $host over 3h after $e2

  condition:
    $e1 and $e2
}

Exemplo de janela deslizante inválido

O exemplo de janela deslizante a seguir é inválido. O contexto da entidade não pode ser usado como um ponto de apoio para uma janela deslizante.

rule Detection {
  meta:
  events:
    $e1.graph.entity.hostname = $host
    $e2.udm.principal.hostname = $host

  match:
    // Attempting to use $e1 (an entity context) as a pivot. Invalid.
    $host over 3h after $e1

  condition:
    $e1 and $e2
}

Exemplo de login usando a seção de resultado

O exemplo a seguir usa a seção outcome para calcular uma pontuação de risco para a detecção.

rule Detection {
  meta:
  events:
    $auth.metadata.event_type = "USER_LOGIN"
    $auth.metadata.vendor_name = "Acme"
    $auth.metadata.product_name = "Acme SSO"
    $auth.target.user.userid = $user
    $auth.metadata.event_timestamp.seconds >
       $context.graph.entity.user.termination_date.seconds

    $context.graph.metadata.vendor_name = "Microsoft"
    $context.graph.metadata.product_name = "Azure Active Directory"
    $context.graph.metadata.entity_type = "USER"
    $context.graph.entity.user.userid = $user
    $context.graph.entity.user.termination_date.seconds > 0

  match:
    $user over 15m

  outcome:
    $risk_score = max(
        if ( $auth.metadata.event_type = "USER_LOGIN", 50) +
        if (
            $context.graph.entity.user.title = "Remote" nocase or
            $context.graph.entity.user.title = "Temp" nocase or
            $context.graph.entity.user.title = "Vendor" nocase, 40) +
        if ( $context.graph.entity.user.title = "Legal" nocase, 10)
    )

  condition:
    $auth and $context
}

Exemplo de inicialização de processo suspeita

O exemplo a seguir avalia os dados do processo de eventos de UDM em relação aos dados de contexto de IOC armazenados como um contexto de entidade.

rule ProcessLaunch {
  meta:
  events:
    $ioc.graph.metadata.vendor_name = "ACME"
    $ioc.graph.metadata.product_name = "IOCs"
    $ioc.graph.metadata.entity_type = "FILE"
    $ioc.graph.entity.file.sha256 = $hash

    $process.metadata.event_type = "PROCESS_LAUNCH"
    $process.principal.hostname = $hostname
    (
        not $process.target.process.file.sha256 = "" and
        $process.target.process.file.sha256 = $hash
    )

  match:
    $hash over 15m

  condition:
    $ioc and $process
}

Qualificadores adicionais para contexto de entidade

Para criar uma variável de evento que use um contexto de entidade, você precisa fornecer um <source> após o nome do evento. O <source> precisa ser graph.

O padrão a seguir se refere a um contexto de entidade:

  • $e.graph.entity.hostname

Há dois métodos equivalentes de se referir a um evento de UDM:

  • $u.udm.principal.asset_id
  • $u.principal.asset_id

É possível combinar todos esses qualificadores no texto da regra. Também é possível usar qualificadores diferentes para o mesmo evento.

Seção de resultado

O mecanismo de detecção oferece suporte a uma seção outcome que permite derivar mais informações de uma regra. A lógica definida na seção outcome é avaliada em relação a cada detecção. Se uma regra gerar N detecções, cada uma das N detecções poderá resultar em um conjunto diferente de resultados.

Você pode encontrar um exemplo de regra que usa a seção outcome em Regra com seleção de resultado.

O uso e a sintaxe detalhados de uma seção outcome podem ser encontrados em a seção de resultado.

Seção de resultado e remoção de duplicação de detecção / agrupamento de detecção

Para regras com uma seção de correspondência, lembre-se de que as detecções são "agrupadas por" as variáveis de correspondência. Isso faz com que as detecções sejam removidas, de modo que uma linha seja retornada para cada conjunto exclusivo de variáveis de correspondência e janela de tempo.

As variáveis de resultado são ignoradas ao fazer essa remoção de duplicação. Portanto, se houver duas detecções diferentes com os mesmos valores para as variáveis de correspondência e a janela de tempo, mas com valores diferentes para as variáveis de resultado, elas serão removidas e você verá apenas uma detecção. Isso pode acontecer quando uma detecção foi criada devido a dados recebidos tarde, por exemplo. Confira um exemplo que ilustra esse caso.

rule ExampleOutcomeRule {
  ...
  match:
    $hostname over <some window>
  outcome:
    $risk_score = <some logic here>
  ...
}

Essa regra resulta nas seguintes correspondências:

Detecção 1: nome do host: test-hostname janela de tempo: [t1, t2] risk_score: 10

Detecção 2: nome do host: test-hostname janela de tempo: [t1, t2] risk_score: 73

Como as variáveis de correspondência e a janela de tempo são as mesmas para a detecção 1 e a detecção 2, elas são removidas e você verá apenas uma detecção, mesmo que a variável de resultado, risk_score, seja diferente.

A seguir

Para informações sobre como o Google SecOps ingere dados contextuais e enriquece entidades, consulte Como o Google SecOps enriquece dados de eventos e entidades

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.