Crie análises com base no contexto

O Chronicle permite que você acesse a telemetria, o contexto de entidades, os relacionamentos e as vulnerabilidades como uma detecção única na sua conta do Chronicle. Ela fornece contextualização de entidades para permitir que você entenda os padrões comportamentais na telemetria e o contexto das entidades afetadas desses padrões.

Exemplos:

  • Exibição das permissões para uma conta em que um login de força bruta está sendo tentado.
  • A 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 filtrar detecção, priorização heurística de alertas, triagem e investigação.

Os analistas de segurança e os engenheiros de detecção normalmente trabalham para criar uma detecção com base em um padrão básico de telemetria de eventos (uma conexão de rede de saída), criando diversas detecções para os analistas fazerem a triagem. Os analistas tentam reunir uma compreensão do que aconteceu para acionar o alerta e da importância da ameaça.

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

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

Como escrever regras para análises com reconhecimento de contexto

É possível usar as regras do mecanismo de detecção para pesquisar dados de contexto de entidade na sua conta do Chronicle.

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

  1. Especifique uma fonte usando udm ou entidade.

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

  2. Especifique os dados da entidade:

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

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

  3. Especificar dados de eventos do 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 entidade, como para eventos do UDM, incluindo o seguinte:

  • Várias regras de eventos

  • Como comparar contextos de entidade com outros contextos de entidades

  • Como comparar contextos de entidade com eventos do UDM

  • Campos repetidos em contextos de entidades

  • Janelas deslizantes

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

Ao contrário de um evento UDM, o contexto de uma 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 UDM será correlacionado a um registro de contexto de entidade somente 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, o UDM e a entidade não serão avaliados 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 os eventos de UDM a um contexto de entidade com o janelamento, 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 Chronicle vai tentar fazer a correspondência em todos os valores de contexto e retornar todas as correspondências encontradas.

Exemplo de regras

Como pesquisar entidades com contexto de administrador

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

rule LoginLogout {
  meta:
  events:
    $log_in.metadata.event_type = "USER_LOGIN"
    $log_in.principal.user.user_display_name = $user

    $log_out.metadata.event_type = "USER_LOGOUT"
    $log_out.principal.user.user_display_name = $user

    $log_in.metadata.event_timestamp.seconds <=
     $log_out.metadata.event_timestamp.seconds

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

  match:
    $user over 2m

  condition:
    $log_in and $log_out 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 uma tabela dinâmica 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

No exemplo a seguir, a seção outcome é usada 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.target.user.termination_date.seconds > 0

    $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 suspeito

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

Para criar uma variável de evento que usa 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 se referir a um evento do UDM:

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

É possível misturar e combinar todos esses qualificadores no texto da regra. Também é possível 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 derivar mais informações de uma regra. A lógica definida na seção outcome é avaliada em cada detecção. Se uma regra gerar N detecções, cada uma das N detecções pode resultar em um conjunto diferente de resultados.

Veja um exemplo de regra que usa a seção outcome aqui.

O uso e a sintaxe detalhadas de uma seção outcome podem ser encontrados nesta seção.

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

Para regras com uma seção de correspondência, lembre-se de que as detecções são "agrupadas pelas" variáveis de correspondência. Isso faz com que a duplicação das detecções seja eliminada, 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 eliminação de duplicação. Assim, 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, a duplicação será eliminada e você vai ter apenas uma detecção. Isso pode acontecer quando uma detecção foi criada devido à chegada tardia de dados, por exemplo. Aqui está um exemplo que ilustra esse caso.

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

Esta regra resulta nas seguintes correspondências:

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

Detecção 2: nome do host: teste-nome do host janela de tempo: [t1, t2] risco_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, a duplicação será eliminada e você verá apenas uma detecção, mesmo que a variável de resultado, column_score, seja diferente.

A seguir

Para saber mais sobre como o Chronicle ingere dados contextuais e enriquece entidades, consulte Como o Chronicle aprimora dados de eventos e entidades.