Visão geral da análise com reconhecimento de contexto

Compatível com:

O Google SecOps permite que você visualize a telemetria, o contexto da entidade, as relações e as vulnerabilidades como uma única detecção na sua conta do Google SecOps. Ele fornece a contextualização de entidades para que você possa entender os padrões comportamentais na telemetria e o contexto dessas entidades afetadas por esses padrões.

Exemplos:

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

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

Analistas de segurança e engenheiros de detecção geralmente 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 o quão significativa é a ameaça.

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

  • Disponibilizar o contexto relevante para a pontuação de risco contextual guiada por heurística das detecções no momento da execuçã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 de ERS, logs de firewall ou proxy, contexto de CMDB e IAM, resultados de verificação de vulnerabilidade)
  • Permitir 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 (testes de malware em um ambiente de sandbox, vulnerabilidades e atividade anormal em uma rede de desenvolvimento sem dados ou acesso sensíveis e muito mais)

Como escrever regras para análises com base no contexto

Você pode usar as regras do mecanismo de detecção para pesquisar dados de contexto de entidade na sua conta do Google SecOps.

Para pesquisar dados de contexto de entidade, siga estas etapas:

  1. Especifique uma origem usando o udm ou a entidade.

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

  2. Especifique os dados da entidade:

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

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

  3. Especifique os dados de eventos do UDM. As declaraçõ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 entidade, como você faria para eventos do UDM, incluindo:

  • Várias regras de evento

  • Comparar contextos de entidade com outros contextos de entidade

  • Comparação de contextos de entidade com eventos da UDM

  • Campos repetidos em contextos de entidade

  • Janelas deslizantes

  • Como calcular uma pontuação de risco para detecções

Ao contrário de um evento do 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 de entidade é válido. Esse intervalo de tempo pode não ser um limite de um dia e pode ter qualquer duração.

Um evento do UDM só será associado a um registro de contexto de entidade quando o carimbo de data/hora do evento do UDM estiver dentro do intervalo de tempo do registro de contexto da entidade. Se essa condição não for atendida, a UDM e a entidade não serão avaliadas para detecções. O mecanismo de detecção aplica isso implicitamente, e você não precisa especificá-lo como uma condição em uma regra.

  • Ao comparar eventos do 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 do contexto da entidade e retornará todas as correspondências encontradas.

Exemplo de regras

Pesquisar entidades com contexto de administrador

A regra a seguir procura entidades que também estão vinculadas a privilégios de administrador. Ele procura momentos em que alguém com privilégios 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álida

O exemplo de janela deslizante a seguir é inválido. O contexto da entidade não pode ser usado como um pivô 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 resultados

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 lançamento de processo suspeito

O exemplo a seguir avalia os dados do processo de evento da UDM em relação aos dados de contexto do 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
}

Outros qualificadores para o contexto da entidade

Para criar uma variável de evento que use um contexto de entidade, forneça 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 referência a um evento da UDM:

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

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

Seção de resultados

O mecanismo de detecção oferece suporte a uma seção outcome que permite extrair 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.

Confira 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 na seção de resultados.

Seção de resultados e agrupamento / eliminação de duplicação de detecção

Para regras com uma seção de correspondência, lembre-se de que as detecções são "agrupadas por" variáveis de correspondência. Isso faz com que as detecções sejam eliminadas, 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 durante esse processo. 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 eliminadas e você vai ver apenas uma detecção. Isso pode acontecer quando uma detecção é criada devido a dados que chegam atrasados, 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: hostname: test-hostname time window: [t1, t2] risk_score: 10

Detecção 2: hostname: test-hostname time window: [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 eliminadas e você vai encontrar apenas uma detecção, mesmo que a variável de resultado, risk_score, seja diferente.

A seguir

Para saber como o Google SecOps captura dados contextuais e enriquece entidades, consulte Como o Google SecOps enriquece dados de eventos e entidades.