03 - Medição de Cobertura e Gaps em Tempo Real
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.