Criar análises com base no contexto

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

Exemplos:

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

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

Analistas de segurança e engenheiros de detecção geralmente 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 várias detecções para que os analistas façam a triagem. Os analistas tentam combinar o entendimento do que aconteceu para acionar o alerta e da importância da ameaça.

A análise baseada 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ê forneça os seguintes recursos adicionais:

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

Como criar regras para análise 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 Chronicle.

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

  1. Especifique uma fonte usando a udm ou a 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 os dados do evento 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 que você usaria para eventos de UDM, incluindo:

  • Várias regras de evento

  • Comparar contextos de entidade com outros contextos de entidade

  • Comparar contextos de entidade com eventos de 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 UDM, um contexto de entidade não tem um carimbo de data/hora específico. Cada registro de contexto da 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 com um registro de contexto de entidade somente quando o carimbo de data/hora do evento 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 em relação às detecções. O mecanismo de detecção impõe isso implicitamente e não é necessário especificá-lo como uma condição em uma regra.

  • Ao comparar eventos UDM a um contexto de entidade com janelamento, um contexto de entidade representa um valor constante em uma janela especificada.
  • Se houver buckets do dia adjacentes em que o contexto da entidade altera seu valor, o Chronicle tentará fazer a correspondência com 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 pesquisa entidades que também estão vinculadas a privilégios de administrador. Ele procura horários em que alguém com o privilégio 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álida

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

No exemplo a seguir, usamos 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.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 de evento do 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 o contexto da entidade

Para criar uma variável de evento que use um contexto de entidade, é necessário 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 para 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 diferentes qualificadores para o mesmo evento.

Seção de resultados

O mecanismo de detecção é compatível com 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.

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

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

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

Para regras com uma seção de correspondência, lembre que as detecções são agrupadas por variáveis de correspondência. Isso faz com que a detecção 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 janela de tempo, mas com valores diferentes para as variáveis de resultado, a duplicação será eliminada, e você verá apenas uma detecção. Isso pode acontecer quando uma detecção é criada devido a dados de chegada tardia, por exemplo. Veja 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, a duplicação é eliminada, e você verá apenas uma detecção, mesmo que a variável de resultado, Risk_score, seja diferente.

A seguir

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