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

03 - Medição de Cobertura e Gaps em Tempo Real

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

Medição de Cobertura e Gaps em Tempo Real

Nota da pasta 03 - Validação Contínua de Controles, no Capítulo 19 (Purple Teaming Contínuo).
Trata do painel de cobertura em tempo real: testes executados, detecções acionadas e gaps abertos, com pipeline de dados de resultados e camadas do ATT&CK Navigator geradas automaticamente.
Dialoga com o BAS contínuo e o cyber range da mesma pasta, com as ferramentas de emulação da pasta 02 e com o SIM.5 e o MAP do Capítulo 15.

1. Contexto e Posicionamento na Biblioteca

Rodadas de emulação e simulações de BAS só viram programa quando os resultados se acumulam em uma fonte única, atualizada sem trabalho manual e legível por todos os públicos. Essa fonte é o painel de cobertura em tempo real, e esta nota desenha seu funcionamento interno: como os resultados das ferramentas da pasta 02 chegam a um índice estruturado, como os percentuais e os gaps são calculados, como as camadas do ATT&CK Navigator são geradas automaticamente a partir do índice e como o SLA de correção dá consequência operacional aos gaps abertos.

A nota é a régua do capítulo. O BAS contínuo define a cadência das rodadas e o cyber range fornece o palco, mas é o painel que transforma execuções em decisão: qual técnica atacar primeiro no backlog, qual log source consertar, qual regressão abrir tarefa. O SIM.5 do Capítulo 15 define a métrica de cobertura de detecção como controle; aqui está o mecanismo de engenharia que produz essa métrica continuamente. A palavra tempo real é deliberada: o painel que só atualiza no relatório mensal perde a propriedade mais valiosa do regime contínuo, a detecção de mudança em dias.

2. O Painel de Cobertura em Tempo Real

Um painel de cobertura útil responde três perguntas em um relance. O que foi testado recentemente, expresso pela quantidade e frescor de testes executados por técnica e por tática. O que a defesa viu, expresso pelos testes cujas detecções acionaram alerta. O que está aberto, expresso pelos gaps, que combinam testes sem alerta e técnicas que nenhum teste cobre. Cada pergunta tem sua visualização natural: heatmaps por tática para a visão geral, tabelas de top gaps para a ação e cartões de tendência para a direção do programa.

O público do painel é estratificado, e o desenho atende os três níveis sem clonar telas. O analista usa a visão detalhada para escolher o próximo trabalho, com drill down até o teste individual e a evidência do alerta. O gestor usa a visão de tendência para acompanhar a cobertura agregada e o envelhecimento dos gaps. A liderança recebe os dois cartões de resumo, cobertura por tática e gaps críticos em atraso, que se conectam diretamente aos KPIs do programa descritos no Capítulo 15.

A tabela a seguir define os cartões canônicos do painel e a consulta que sustenta cada um.

Cartão do painel Pergunta respondida Fonte de dados
Testes executados nos últimos 7 dias O programa está rodando Índice de resultados por timestamp
Taxa de detecção por tática Onde a defesa responde Agregação de resultados por técnica
Gaps abertos por prioridade O que precisa ser consertado Testes com só telemetria e não detectado
Gaps em atraso de SLA O que está estourando prazo Diferença entre data de abertura e hoje
Regressões da última rodada O que quebrou agora Diff entre rodadas consecutivas
Cobertura do atacante prioritário Como estamos contra quem nos ataca Filtro por ator nos resultados

3. Pipeline de Dados de Resultados

O pipeline de dados é a engenharia por trás do painel, e o desenho canônico tem quatro estágios. No primeiro, as ferramentas executam e produzem saídas estruturadas: o relatório de results do Caldera, a saída do atomic-operator, os registros do Temperance e os resultados das plataformas comerciais de BAS. No segundo, um coletor normaliza essas saídas para um esquema único de registro de resultado. No terceiro, o coletor cruza cada teste com a janela de telemetria do SIEM, classificando o resultado de detecção. No quarto, o índice de resultados alimenta o painel, o gerador de camadas do Navigator e as consultas de regressão.

A normalização é o estágio que mais determina a longevidade do programa. O esquema mínimo do registro de resultado inclui identificador da rodada, timestamp, executor, técnica ATT&CK, nome do teste, host alvo, status de execução e resultado de detecção com evidência. Ferramentas mudam de versão e de formato de saída, mas o esquema único permanece estável, e o painel sobrevive a trocas de plataforma porque consome apenas o esquema. O bloco a seguir exemplifica o coletor em Python que extrai resultados da API do Caldera e publica no índice.

import requests, json, time

CALDERA = "http://10.20.0.5:8888"
KEY = {"KEY": open("/opt/secrets/caldera.key").read().strip()}

def coletar_operacoes():
    ops = requests.get(f"{CALDERA}/api/v2/operations", headers=KEY, timeout=30).json()
    for op in ops:
        relatorio = requests.get(
            f"{CALDERA}/api/v2/operations/{op['id']}/report", headers=KEY, timeout=30
        ).json()
        for link in relatorio.get("chain", []):
            registro = {
                "rodada": relatorio["name"],
                "timestamp": link.get("finish"),
                "executor": "caldera",
                "tecnica": link.get("technique"),
                "teste": link.get("ability"),
                "host": link.get("host"),
                "status_execucao": link.get("status"),
            }
            publicar_no_siem(registro)
            time.sleep(0.1)

def publicar_no_siem(registro):
    # envio ao endpoint de ingestão do SIEM em JSON
    print(json.dumps(registro, ensure_ascii=False))

if __name__ == "__main__":
    coletar_operacoes()

O estágio de classificação cruza cada registro com as detecções. Para cada teste, a consulta busca alerta cujo identificador de regra corresponde à técnica do teste e cujo timestamp caia na janela entre o início e o fim do passo, com margem para ingestão. O resultado da classificação, detectado, só telemetria, não detectado ou erro de execução, é escrito de volta no índice, e é esse campo classificado que os cartões do painel agregam. Automatizar a classificação é o que permite escala; contá-la à mão em planilha é o que mantém programas pequenos e frágeis.

4. Camadas do ATT&CK Navigator Geradas Automaticamente

O ATT&CK Navigator é a ferramenta de visualização da matriz que a biblioteca já usa nos controles de mapeamento, e o painel de cobertura ganha força quando gera suas camadas automaticamente a partir do índice de resultados. A camada canônica pinta cada técnica com o estado mais recente: verde para detectado, amarelo para só telemetria, vermelho para não detectado e cinza para técnica sem teste. Um job diário lê o índice, calcula o estado por técnica e escreve o JSON da camada em repositório ou serviço de arquivos, e o Navigator exibe o resultado sem intervenção.

O esqueleto do JSON de camada é simples e estável, e vale conhecer para auditar o gerador.

{
  "name": "cobertura-purple-2025-41",
  "versions": {"attack": "16", "navigator": "5.1.0", "layer": "4.5"},
  "domain": "enterprise-attack",
  "techniques": [
    {"techniqueID": "T1059.001", "score": 3, "color": "#5cb85c", "comment": "detectado na rodada 41"},
    {"techniqueID": "T1053.005", "score": 1, "color": "#f0ad4e", "comment": "so telemetria"},
    {"techniqueID": "T1003.001", "score": 0, "color": "#d9534f", "comment": "nao detectado"}
  ],
  "gradient": {"colors": ["#d9534f", "#f0ad4e", "#5cb85c"], "minValue": 0, "maxValue": 3}
}

O valor do gerador automático está na exclusão do trabalho manual e na eliminação do drift. Camadas feitas à mão envelhecem na primeira rodada, e o heatmap do painel vira fonte de verdade que o MAP.2 do Capítulo 15 consome. Além da camada de estado atual, o mesmo job pode gerar uma camada de frequência de teste, pintando por quantas rodadas cada técnica foi exercitada, o que revela áreas da matriz que o calendário do BAS nunca alcança.

5. SLA de Correção de Gaps

Gap aberto sem prazo é backlog decorativo, e o SLA dá consequência ao painel. A política recomendada define prazos por severidade do gap, com a severidade derivada da prioridade do adversário que usa a técnica e do estado do gap. A tabela propõe uma política inicial ajustável ao contexto da organização.

Severidade do gap Critério Prazo de correção Escalonamento
Crítica Técnica de ator prioritário com não detectado 7 dias Líder de detecção imediatamente
Alta Técnica de ator prioritário com só telemetria 15 dias Reunião semanal do programa
Média Técnica secundária com só telemetria 30 dias Backlog normal
Baixa Técnica sem teste, mas sem ator prioritário associado 60 dias Revisão trimestral
Estrutural Gap de coleta com log source ausente 15 dias Time de plataforma

A medição do SLA é automática porque o gap tem data de abertura no índice: o cartão de gaps em atraso compara a data de abertura com a política e destaca o que estourou. O tratamento do gap encerra o ciclo: quando a correção é implementada, o teste correspondente roda imediatamente na rodada sob demanda, o resultado novo substitui o estado do gap e o histórico registra o tempo total de correção, que é a métrica que a liderança acompanha.

É importante registrar também os gaps que se fecham por decisão, e não por correção. Alguns gaps de coleta chegam com custo desproporcional, e a decisão consciente de aceitar o risco, documentada, é um desfecho legítimo que o painel deve refletir como aceito, com data e responsável. O que o painel não tolera é o gap sem dono e sem decisão.

6. Exemplo de Dashboard com Tabela

A tabela a seguir mostra um recorte semanal do painel de um programa em maturidade, com números plausíveis de referência para calibrar expectativas.

Tática Testes na semana Detectados Só telemetria Não detectados Cobertura Gaps abertos
Reconhecimento 12 9 2 1 75,0% 3
Execução 18 15 3 0 83,3% 3
Persistência 14 11 2 1 78,6% 3
Escalada de privilégio 10 6 3 1 60,0% 4
Credencial 16 12 2 2 75,0% 4
Comando e controle 20 14 4 2 70,0% 6
Impacto 8 7 1 0 87,5% 1

A leitura do recorte ilustra o uso do painel na reunião semanal. A tática de escalada de privilégio tem a menor cobertura e recebe a maior fatia do backlog da semana. Os dois não detectados em credencial são gaps críticos por pertencerem à cadeia do ator prioritário, e abrem tarefas de 7 dias. Os quatro só telemetria em comando e controle viram requisitos de regra, e o fato de terem telemetria indica que a coleta está saudável na área. Em quinze minutos de reunião, a tabela distribui o trabalho da semana com prioridade objetiva.

A consulta KQL a seguir é a que gera exatamente esse recorte a partir do índice, e pode ser publicada como workbook ou painel nativo do SIEM.

// Recorte semanal de cobertura por tática
let semana = BASResults | where TimeGenerated > ago(7d);
semana
| extend Tatica = tostring(split(Tecnica, ".")[0])
| summarize Testes = count(), Detectados = countif(Resultado == "detectado"),
    SoTelemetria = countif(Resultado == "so-telemetria"),
    NaoDetectados = countif(Resultado == "nao-detectado"),
    Gaps = countif(Resultado in ("so-telemetria", "nao-detectado"))
  by Tatica
| extend Cobertura = round(100.0 * Detectados / Testes, 1)
| order by Cobertura asc

7. Erros Comuns e Pontos de Atenção

  • Construir o painel sobre planilhas manuais, que envelhecem na primeira rodada e não suportam regressão nem SLA; índice estruturado é requisito, não refinamento.
  • Publicar percentuais sem frescor, exibindo cobertura de testes executados há meses; o cartão precisa mostrar a idade do dado ou recortar por janela recente.
  • Contar como cobertura a execução de teste sem verificar o alerta no SIEM; execução mede o ofensivo, e a cobertura que importa é a da resposta defensiva.
  • Esconder os gaps não detectados em telas secundárias por pressão de imagem; o painel existe para expor o risco, e a transparência é o seu produto.
  • Deixar gaps sem dono acumulando semanas, corroendo a credibilidade do programa; sem dono e sem prazo, gap é ruído.
  • Trocar o esquema de resultados a cada ferramenta nova, quebrando a série histórica; o esquema é contrato e a adaptação de formato acontece no coletor.

8. Integração com o Restante da Biblioteca

O painel consome os resultados de todas as ferramentas da pasta 02 e das rotinas do BAS contínuo, e seus produtos alimentam o SIM.5 e o heatmap do MAP.2 do Capítulo 15, além dos KPIs de detecção do grupo MET. As regressões disparam o fluxo de engenharia de detecção e os gaps estruturais acionam o grupo DAT, fechando o ciclo entre validação e construção de capacidade. O gate de detecção em CI/CD da pasta 04 usa o mesmo índice para registrar a validação obrigatória das regras novas.

Para o relatório executivo, os cartões de cobertura e de gaps em atraso são o idioma em que o programa de purple teaming se comunica com a liderança, conectando investimento em telemetria e regras ao risco residual das ameaças prioritárias. O painel é, no final, a prova de que o ciclo do capítulo gira: testes rodam, detecções respondem, gaps fecham e a régua mostra a evolução semana após semana.