Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

02 - TH.2 - Estabelecimento de Baselines

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

TH.2 - Estabelecimento de Baselines

Nota do grupo HNT, Preparação para Threat Hunting, derivada do Capítulo 11 do
Framework CTH. O controle TH.2 transforma telemetria agregada em referências
estatísticas de normalidade, matéria-prima das hipóteses de desvio que
sustentam a caça comportamental e a detecção de IOBs.

1. Contexto e Posicionamento no Framework CTH

As baselines comportamentais são o alicerce da caça orientada a anomalias e dos Indicadores de
Comportamento, os IOBs. Sem referência de normalidade, cada hunt é puramente exploratório e o
hunter não tem como distinguir comportamento malicioso de ruído operacional legítimo. Com
baselines documentadas, hipóteses vagas do tipo "algo estranho nos logons" se convertem em
testes objetivos, do tipo "logon de perfil funcional X fora da janela que concentra 99% dos
acessos do grupo".

O Framework CTH exige baselines de rede, endpoint e comportamento de usuário calculadas sobre
períodos estáveis de pelo menos 30 dias e revisadas mensalmente. Esse requisito não é
burocracia: janelas curtas capturam sazonalidade parcial, como ciclos de fechamento financeiro
ou picos de negócio, e produzem falsos desvios. A revisão mensal garante que mudanças legítimas
do ambiente, como um novo aplicativo de alta frequência, não virem fonte permanente de alarmes
irreprodutíveis.

2. Relação com INS.5: Consumir e Estender as Baselines de Ativos

O controle INS.5 define baselines de normalidade no nível de ativos: serviços esperados, portas
abertas, processos típicos por papel de sistema e configuração padrão. TH.2 consome essa camada
como base e a estende em duas direções. Primeiro, amplia o escopo para perfis funcionais de
usuários e segmentos inteiros de rede, dimensões que o inventário de ativos não cobre
isoladamente. Segundo, adiciona a dimensão temporal, transformando listas de estado em séries
estatísticas com mediana, percentis e desvio padrão.

A divisão de trabalho funciona assim: INS.5 responde "o que deveria existir e como deveria
estar configurado", enquanto TH.2 responde "como isso se comporta ao longo do tempo". Um
servidor web cuja lista de processos casa com a baseline do INS.5 ainda pode apresentar desvio
temporal relevante, como um pico de conexões DNS às três da manhã que nenhuma lista estática
capturaria. A caça comportamental precisa das duas camadas juntas, e o catálogo do TH.1 garante
que as fontes usadas por ambas estejam catalogadas e saudáveis.

3. Dimensões a Baselinizar para Hunting

Nem toda telemetria merece baseline no primeiro ciclo, e a ordem de implementação deve seguir o
retorno por esforço. As dimensões a seguir formam a lista inicial recomendada, alinhada às
salvaguardas do controle e às técnicas prioritárias da matriz de visibilidade do TH.1.

Dimensão Métricas típicas Fonte de dados Janela sugerida
Logons por usuário e horário Contagem por hora, dia da semana, origem e dispositivo Eventos 4624 e 4625, logs de MFA 30 a 60 dias
Processos por tipo de host Frequência de execução, pais e linhas de comando Sysmon 1, evento 4688 30 dias
Destinos DNS e HTTP Domínios resolvidos, volume por domínio, taxa NXDOMAIN Logs DNS, Zeek dns e http 30 a 60 dias
Volumes de tráfego por segmento Bytes e conexões por protocolo, top talkers, portas Zeek conn, NetFlow 30 dias
Autenticações entre sistemas Pares de origem e destino, tipos de logon, contas de serviço Eventos 4624, 4648, 4768, 4769 30 a 60 dias

A priorização entre dimensões deve considerar as técnicas prioritárias do programa. Uma
organização com PIRs voltados a exfiltração deriva mais valor de baselines de DNS e de volumes
por segmento. Uma organização exposta a ransomware beneficia-se primeiro de baselines de
processos e de autenticações entre sistemas, onde o comportamento da ameaça aparece antes da
criptografia.

4. Construção Prática: Segmentação, Estatística e Versionamento

A primeira decisão prática é a segmentação, porque agregar demais esconde desvios e segregar
demais produz baselines sem amostra suficiente. Segmentar por perfil funcional de usuário, tipo
de host e segmento de rede costuma equilibrar as duas forças. Uma baseline genérica de
"usuários" é inútil quando o time de desenvolvimento e o financeiro têm padrões opostos, e uma
baseline por indivíduo quebra a cada rotatividade de equipe.

A segunda decisão é a estatística aplicada. Médias simples escondem caudas e induzem limiares
errados, então a prática recomendada usa mediana, percentis tipicamente P95 e P99, e desvio
padrão para definir faixas de normalidade e limiares de alerta. Outliers identificados durante
a construção devem ser investigados e não descartados, porque um outlier pode ser um job
legítimo não documentado, um episódio de teste esquecido ou, eventualmente, um comprometimento
real que a construção da baseline acabou de revelar.

A terceira decisão é o versionamento. Cada baseline deve carregar versão, janela de cálculo,
filtros aplicados e data de geração, permitindo que um hunt executado seis meses depois saiba
exatamente com qual referência comparou. O versionamento também permite regressão: quando um
limiar gera excesso de falso positivo, a comparação entre versões mostra qual mudança de
comportamento legítimo causou o efeito.

Um exemplo concreto ajuda a fixar o formato. O segmento de servidores web apresenta média de
2.500 conexões TCP por hora, com P95 de 3.100, sendo 80% HTTPS e o balanceador de carga como
top talker com 35% do tráfego. Esses números, versionados e armazenados, transformam a pergunta
"o servidor está estranho?" em teste objetivo contra faixas conhecidas.

5. Armazenamento e Acesso para o Hunter

Baseline que não é consultável não é baseline, é arquivo morto. As referências devem ser
materializadas em tabelas agregadas na própria plataforma de análise, em dashboards sobrepostos
às consultas de caça e em exports periódicos para notebooks. O hunter precisa comparar o evento
observado com a referência dentro da mesma ferramenta, sem depender de planilhas manuais que
ficam desatualizadas.

// Construção mensal da baseline de logons por perfil funcional e hora
SigninLogs
| where TimeGenerated > ago(30d)
| extend Hora = hourofday(TimeGenerated)
| extend DiaSemana = dayofweek(TimeGenerated)
| summarize Logons = count(), Origens = dcount(IPAddress)
  by PerfilFuncional, DiaSemana, Hora

A tabela resultante deve ser persistida com nome versionado, por exemplo BaselineLogons_v06, e
atualizada por job mensal. Dashboards exibem o evento observado contra a faixa do P95, e
exports para notebooks permitem análises estatísticas mais profundas quando a caça exige
modelagem adicional.

6. Uso em Hipóteses de Desvio

Baselines existem para gerar e testar hipóteses de desvio, o tipo de hipótese mais
característico da caça comportamental. Uma hipótese bem formulada cita a dimensão, o desvio
esperado e o limiar estatístico que caracteriza o achado. Exemplos válidos: contas de serviço
que se autenticam interativamente fora do padrão registrado, host que inicia sessões RDP para
servidores que nunca receberam RDP do seu papel e volume de DNS por host acima do P99 por três
horas consecutivas.

O exemplo a seguir testa logons do perfil financeiro em janela noturna de fim de semana,
período que a baseline indica como de atividade praticamente nula.

// Desvio: logons do financeiro em janela sem registro na baseline
let b = BaselineLogons_v06
| where PerfilFuncional == "financeiro"
| summarize LogonsMax = max(Logons) by DiaSemana, Hora;
SigninLogs
| where TimeGenerated > ago(24h)
| extend Hora = hourofday(TimeGenerated)
| extend DiaSemana = dayofweek(TimeGenerated)
| where PerfilFuncional == "financeiro"
  and DiaSemana in (time(0d), time(6d))
  and Hora between (0 .. 5)
| join kind=leftanti b on DiaSemana, Hora
| project TimeGenerated, UserPrincipalName, IPAddress

Como a tabela de baseline só contém combinações de dia e hora com atividade observada, o anti
join devolve exatamente os logons que ocorreram em janela nunca registrada. Quando a baseline
registra zero logons na janela, qualquer hit é desvio e vira achado, que deve alimentar o
registro do hunt no formato do TH.4 com evidência, limiar violado e decisão tomada.

7. Ciclo de Atualização e Risco de Baseline Contaminada

Baselines precisam de ciclo de atualização explícito, com recálculo mensal e revisão semestral
dos filtros e da segmentação. O recálculo absorve mudanças legítimas lentas, como crescimento
orgânico de tráfego, e a revisão semestral confronta a estrutura da baseline com mudanças
estruturais, como novo aplicativo, reorganização de segmentos ou migração para nuvem. Sem ciclo
definido, as baselines velhas geram falso positivo em cascata até que a equipe deixe de confiar
nelas.

O risco mais traiçoeiro é a baseline contaminada, calculada sobre um período que já continha
atividade maliciosa. Um beaconing ativo durante os 30 dias de cálculo entra como normalidade, e
a caça passa a buscar desvios do próprio comportamento do adversário. As mitigações práticas
são revisar outliers durante a construção antes de consolidar, confrontar a baseline com
inteligência tática sobre infraestrutura de C2 conhecida, validar o período de cálculo contra
incidentes e alertas do mesmo intervalo e recalcular após qualquer incidente confirmado
relevante.

8. Salvaguardas por Nível

Nível Salvaguarda esperada Evidência típica
Básico Baselines de tráfego por segmento e de processos em endpoints críticos com 30 dias de dados Documento ou tabela versionada com métricas
Básico Revisão mensal das baselines estabelecidas Histórico de versões com data e responsável
Intermediário Baselines de comportamento por perfil funcional com limiares calibrados Tabelas agregadas com P95 e P99 no SIEM
Intermediário Alertas de desvio significativo com elasticidade estatística Regras ativas com taxa de falso positivo medida
Avançado Modelos adaptativos que incorporem tendência, sazonalidade e mudanças de infraestrutura Modelos em produção com métricas de performance

9. Erros Comuns e Pontos de Atenção

  • Construir baseline única e global, sem segmentação, que dissolve o desvio real na média do
    conjunto. A segmentação por perfil funcional, tipo de host e segmento de rede é obrigatória
    desde o primeiro ciclo.
  • Usar média simples e limiares fixos, ignorando caudas de distribuição. Percentis e desvio
    padrão evitam o alarme constante sobre grupos legítimos de comportamento atípico.
  • Descartar outliers sem investigação durante a construção, perdendo a única chance de capturar
    atividade maliciosa que acabou de entrar na amostra.
  • Deixar de versionar janela, filtros e limiares, o que torna os hunts irreprodutíveis e impede
    auditoria de por que um desvio foi classificado como normal naquela época.
  • Aceitar baseline contaminada por atividade maliciosa, principalmente em períodos posteriores
    a incidentes. Validação contra incidentes e recálculo são obrigações, não melhorias
    opcionais.
  • Tratar alerta de desvio como veredito, encerrando a investigação no próprio alarme. O desvio
    abre um hunt, que só se encerra com as regras do TH.4.

10. Integração com Outros Controles do Framework CTH

TH.2 depende do TH.1, pois só é possível baselinizar fontes catalogadas, com retenção e
qualidade conhecidas, e consome o INS.5 como camada base de estado por ativo. As hipóteses de
desvio geradas alimentam a fila do TH.5, que as pontua junto às hipóteses derivadas de
inteligência, e a execução segue o processo do TH.4, com template, cadência e peer review.
Alertas calibrados sobre desvios podem ser convertidos em regras automatizadas pelo grupo
AUT.x, elevando hunts maduros a detecção permanente.

Nas interfaces externas, as baselines apoiam o PRT.x na calibração de regras de detecção que
dependem de normalidade, e fornecem referência objetiva para o IR.x durante a resposta, quando
é preciso decidir rapidamente o que é desvio no host comprometido. As métricas do grupo MET.x
devem acompanhar taxa de falso positivo por baseline, tempo médio entre versões e número de
hipóteses de desvio executadas por ciclo, fechando o laço entre estatística, operação e
governança do programa de hunting.