Capítulo 29 — Segurança ofensiva autorizada e red team: medição
Mapa da aula
Aula 29 publicada. Mapa, exemplo, EX085.
flowchart TD
N0["29.1 Cobertura precisa de um plano"]
N1["29.2 Atividade vs. resultado"]
N2["29.3 Erro de um lado só"]
N3["29.2b Amostrar sem mentir"]
N4["29.3b Painéis como argumentos"]
N5["29.1b Comparações entre coortes"]
N6["Nota de prática"]
N7["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
N7 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX085"]
Desenho lógico
flowchart LR
N0["29.1 Cobertura precisa de um plano"]
N1["29.2 Atividade vs. resultado"]
N2["29.3 Erro de um lado só"]
N3["29.2b Amostrar sem mentir"]
N4["29.3b Painéis como argumentos"]
N5["29.1b Comparações entre coortes"]
N6["Nota de prática"]
N7["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX085"]
[29.1 Cobertura precisa de um plano]
|
v
[29.2 Atividade vs. resultado]
|
v
[29.3 Erro de um lado só]
|
v
[29.2b Amostrar sem mentir]
|
v
[29.3b Painéis como argumentos]
|
v
[29.1b Comparações entre coortes]
|
v
[Nota de prática]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX085]
Objetivos de aprendizagem
Você vai (1) definir cobertura com um denominador; (2) separar métricas de atividade de métricas de resultado; (3) publicar uma medição que só possa errar numa direção.
29.1 Cobertura precisa de um plano
A cobertura ATT&CK é observado ∩ planejado / |planejado|, não observado / |todo o ATT&CK|. Sem um plano, "cobertura" é vaidade. O PulseMap exige um conjunto planejado por engajamento.
"""ATT&CK-style coverage matrix over synthetic authorized techniques (names only)."""
# Synthetic engagement log: technique_id -> observed (True/False)
PLAN = ["T1046", "T1595", "T1082", "T1083", "T1059", "T1078", "T1021"]
OBSERVED = {"T1046", "T1595", "T1082", "T1083", "T1078"}
LABELS = {
"T1046": "Network Service Discovery",
"T1595": "Active Scanning",
"T1082": "System Information Discovery",
"T1083": "File and Directory Discovery",
"T1059": "Command and Scripting Interpreter",
"T1078": "Valid Accounts",
"T1021": "Remote Services",
}
covered = 0
for tid in PLAN:
hit = tid in OBSERVED
covered += hit
print(f"{tid} {LABELS[tid]:34} {'COVERED' if hit else 'PLANNED-NOT-SEEN'}")
print(f"coverage={covered}/{len(PLAN)} ({100*covered/len(PLAN):.0f}%)")
Saída esperada:
T1046 Network Service Discovery COVERED
T1595 Active Scanning COVERED
T1082 System Information Discovery COVERED
T1083 File and Directory Discovery COVERED
T1059 Command and Scripting Interpreter PLANNED-NOT-SEEN
T1078 Valid Accounts COVERED
T1021 Remote Services PLANNED-NOT-SEEN
coverage=5/7 (71%)
Conjuntos planejados fazem do denominador uma promessa, não uma caça ao tesouro por todo o ATT&CK. Porcentagens de vaidade que dividem pela matriz inteira escondem técnicas puladas. O PulseMap se recusa a renderizar a cobertura até que o conjunto planejado seja salvo com o id do engajamento. Sam revisa o conjunto planejado com o contato do cliente, para que os dois lados concordem sobre o que significa incompleto.
29.2 Atividade vs. resultado
Atividade: ferramentas iniciadas, pacotes enviados. Resultado: remediações verificadas, violações de SLA encerradas, sondagens fora de escopo. Conduza pelos resultados; use a atividade só para o planejamento de capacidade. Pacotes e ferramentas iniciadas enchem gráficos de capacidade; não provam que os passageiros estão mais seguros. Sam mantém as métricas de atividade num painel separado, rotulado como só capacidade, para que ninguém confunda estar ocupado com progredir. Quando a liderança da Riverstone pergunta o quanto a equipe trabalhou no mês passado, Sam mostra as horas de ferramenta no painel de capacidade e as remediações verificadas no painel de resultados, nunca um único gráfico que misture os dois.
29.3 Erro de um lado só
Prefira métricas que, se erradas, subestimem o sucesso (por exemplo, contar uma correção só depois do novo teste). Superestimar a segurança é o modo de falha que Albrecht e Jensen atacam. Contar uma correção só depois do novo teste puxa para a subestimação, que é a mentira mais segura se for preciso haver uma mentira. Na Riverstone, um achado passa a fechado no PulseMap só depois que o novo teste de Sam mostra que ele sumiu do mesmo host sintético, então as duas técnicas planejadas e não vistas continuaram abertas em vez de contadas como seguras. A redação do relatório sintético, cobertura planejada incompleta, é o modelo do hábito que Sam quer em toda exportação do PulseMap.
Caso sintético — Riverstone Transit. Cobertura de 5/7 (71%) com duas técnicas planejadas e não vistas — o relatório disse "cobertura planejada incompleta", não "71% seguro".
29.4 Erros e limites
Denominadores tomados de outro engajamento invalidam a métrica. Pegar emprestado o denominador do trimestre passado inventa cobertura em silêncio. Cada engajamento carrega seu próprio arquivo de conjunto planejado, com hash no dossiê. A CI de Sam reprova a construção de um painel que referencie um conjunto planejado de outro id de engajamento, e os revisores tratam um id de engajamento ausente num widget como um defeito igual a uma fórmula errada. Um notebook que junta os conjuntos planejados de março e setembro para um artigo precisa dizer isso no cabeçalho e não pode alimentar o caminho do PulseMap ao vivo que os operadores usam durante uma janela.
29.2b Amostrar sem mentir
Se você amostrar 50 de 500 hosts, diga isso e não escale a contagem de achados como se tivesse visitado os 500. Estratifique pela exposição quando possível (inventário do Capítulo 11). Uma amostra honesta com uma nota de confiança vence um falso censo. Escalar achados amostrados para o parque inteiro é como laboratórios pequenos viram falsos censos. Estratificar pela exposição impede que hosts raros de alto impacto sumam nas médias. Uma nota de confiança ao lado do tamanho da amostra é obrigatória no modelo de relatório de Sam antes que a contagem de achados apareça.
29.3b Painéis como argumentos
Todo widget de painel é uma afirmação. Ponha nos widgets uma legenda com a fórmula e o id do engajamento. Um widget sem fórmula é decoração e deve ser removido na revisão. Fórmulas e ids de engajamento transformam widgets em afirmações verificáveis. Decoração sem fórmula desperdiça tempo de revisão e sugere uma precisão que não tem. Sam apaga widgets sem legenda no mesmo pull request que os teria acrescentado, e liga cada legenda restante à célula do notebook que a calcula. Quando um designer propôs um selo verde de "saúde da cobertura" sem conjunto planejado, Sam o recusou no mesmo pull request e deixou a nota de recusa no changelog para a próxima revisão.
29.1b Comparações entre coortes
Comparar a cobertura entre engajamentos exige as mesmas regras de planejamento. Publique o guia de planejamento ao lado do PulseMap, para que "71%" em março signifique o mesmo tipo de denominador que "71%" em setembro. As mesmas regras de planejamento tornam comparáveis as porcentagens de março e setembro. Um guia de planejamento publicado ao lado do PulseMap é o contrato dessa igualdade. Sam versiona o guia e registra qual versão cada engajamento usou, para que uma mudança de regra não reescreva a história por acidente quando alguém recarregar um painel antigo. A lista de verificação do kickoff exige a fixação de um guia publicado; uma fixação em branco ou apontando para um branch de rascunho bloqueia o botão de início, da mesma forma que um hash de ROE ausente.
Nota de prática
Quando a liderança pedir uma linha de tendência, dê a mesma fórmula entre engajamentos e marque as mudanças de metodologia com linhas verticais no gráfico. Uma curva de cobertura suave e ascendente que esconde uma mudança de denominador é uma falha de relato. As exportações do PulseMap incluem um campo methodology_id, para que junções desonestas entre planos incompatíveis sejam mais difíceis de automatizar.
Exercícios
- EX085 — Fórmula. Escreva a fórmula de cobertura do PulseMap e substitua os números do laboratório. Rubrica: 3 = 5/7; 2 = só a fórmula; 1 = 5/todo o ATT&CK; 0 = nada.
- EX086 — Escolha de métrica. Escolha uma métrica de resultado para a qualidade da remediação. Rubrica: 3 = por exemplo, % de críticos corrigidos dentro do SLA com novo teste; 2 = métrica de atividade; 1 = vago; 0 = nada.
- EX087 — Subestimar. Dê um desenho que subestime o sucesso. Rubrica: 3 = exigir novo teste antes de fechar; 2 = parcial; 1 = vago; 0 = nada.
Síntese
Planeje o denominador; meça resultados; prefira subestimar.
Continue estudando — capítulo 29 de 50
← Capítulo 28 (rascunho) · Índice de capítulos do curso · Capítulo 30 (rascunho) →