Visão geral da análise com reconhecimento de contexto
Com o Google SecOps, é possível ver telemetria, contexto de entidade, relacionamentos e vulnerabilidades como uma única detecção na sua conta do Google SecOps. Ela oferece contextualização de entidades para que você entenda os padrões comportamentais na telemetria e o contexto das entidades afetadas por esses padrões.
Exemplos:
- Mostrar as 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 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 inúmeras detecções para que os analistas façam a triagem. Os analistas tentam juntar uma compreensão do que aconteceu para acionar o alerta e da gravidade da ameaça.
A análise baseada no contexto incorpora recursos avançados de enriquecimento no início do fluxo de trabalho de criação e execução de detecção, permitindo que você ofereça os seguintes recursos adicionais:
- Disponibilizar 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 da fase de triagem humana.
- Reduzir o tempo gasto na triagem e na junção manual de informações de sistemas de segurança de TI diferentes (consoles de EDR, registros de firewall ou proxy, CMDB e contexto de IAM, resultados de verificação de vulnerabilidades)
- 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 (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 escrever regras para análise com base no contexto
Você pode usar regras do Detection Engine para pesquisar dados de contexto de entidade na sua conta do Google SecOps.
Para pesquisar dados de contexto de entidade, faça o seguinte:
Especifique uma origem usando udm ou entity.
$eventname.[<source>].field1.field2
Para um contexto de entidade, <source> é "graph". Para um evento da UDM, <source> é "udm". Se omitido, o padrão de <source> será udm.Especifique os dados da entidade:
$e1.graph.entity.hostname = "my-hostname"
$e1.graph.entity.relations.relationship = "OWNS"
Especifique os dados de eventos da 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 que para eventos da UDM, incluindo:
Várias regras de evento
Comparar contextos de entidades com outros contextos
Comparar 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 da 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 não pode ser um limite de dia e pode ter qualquer duração.
Um evento da UDM só será correlacionado com um registro de contexto de entidade quando o carimbo de data/hora do evento estiver dentro do intervalo de tempo do registro. 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 não é necessário especificar como uma condição em uma regra.
- Ao comparar eventos da UDM com um contexto de entidade com janelas, um contexto de entidade representa um valor constante em uma janela especificada.
- Se houver intervalos de dias adjacentes em que o contexto da entidade muda de valor, o Google SecOps tentará encontrar correspondências em todos os valores de 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é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á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 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 de processo de eventos da 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 usa um contexto de entidade, forneça um <source>
depois do 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 da UDM:
$u.udm.principal.asset_id
$u.principal.asset_id
Você pode combinar todos esses qualificadores no texto da regra. Você também pode usar diferentes qualificadores para o mesmo evento.
Seção de resultado
O mecanismo de detecção tem 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 delas 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 resultado e deduplicação / agrupamento de detecções
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 duplicadas, 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 deduplicação. Assim, se houver duas detecções diferentes com os mesmos valores para as variáveis de correspondência e o período, mas com valores diferentes para as variáveis de resultado, elas serão duplicadas e você verá apenas uma detecção. Isso pode acontecer quando uma detecção é criada devido a dados que chegaram 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:
Detection 1: hostname: test-hostname time window: [t1, t2] risk_score: 10
Detection 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 duplicadas, e você verá apenas uma detecção, mesmo que a variável de resultado, "risk_score", seja diferente.
A seguir
Para saber 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.