◇ OpenCyber Academy
Engenharia · Capítulo 47 · Português

Capítulo 47 — Ensaio de falha e recuperação

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Capítulo 47 — Ensaio de falha e recuperação

Mapa da aula

Aula 47 publicada. Mapa, exemplo, EX139.

flowchart TD
  N0["47.1 Roteiro"]
  N1["47.2 Medidas"]
  N2["47.3 Ações corretivas"]
  N3["47.2b Correção sem culpa"]
  N4["47.3b Testes de recorrência"]
  N5["47.1b Papéis de observador"]
  N6["Nota de prática"]
  N7["47.4b Escolher a falha a ensaiar"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
  N7 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX139"]

Desenho lógico

flowchart LR
  N0["47.1 Roteiro"]
  N1["47.2 Medidas"]
  N2["47.3 Ações corretivas"]
  N3["47.2b Correção sem culpa"]
  N4["47.3b Testes de recorrência"]
  N5["47.1b Papéis de observador"]
  N6["Nota de prática"]
  N7["47.4b Escolher a falha a ensaiar"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX139"]
[47.1 Roteiro]
    |
    v
[47.2 Medidas]
    |
    v
[47.3 Ações corretivas]
    |
    v
[47.2b Correção sem culpa]
    |
    v
[47.3b Testes de recorrência]
    |
    v
[47.1b Papéis de observador]
    |
    v
[Nota de prática]
    |
    v
[47.4b Escolher a falha a ensaiar]
    |
    v
[Exemplo resolvido] --> [Exercício EX139]

Objetivos de aprendizagem

Você vai (1) conduzir um ensaio de falha roteirizado; (2) medir o tempo de recuperação; (3) registrar ações corretivas.

47.1 Roteiro

Injete: arquivo de política apagado; FindingsDesk derrubado; desvio de relógio; replay de evento duplicado. Observe negações, filas, alertas. As quatro injeções cobrem perda de política, perda de dependência, tempo e replay — as classes de falha que mordem os engajamentos. Observar negações, filas e alertas é o comportamento pontuado. O script de ensaio de Sam as executa numa ordem fixa, para que as medidas continuem comparáveis de um período para outro. Pular uma injeção para economizar tempo reprova o ensaio da mesma forma que uma parada perdida. Injeções de aquecimento são rotuladas à parte, para que nunca substituam as pontuadas.

47.2 Medidas

Tempo até negar tudo após a perda da política; tempo até o alerta; tempo até a restauração; achados perdidos (deveria ser 0 com fila). Tempo até negar tudo, tempo até o alerta, tempo até a restauração e zero achados perdidos são as entradas do SLO. O ensaio que mostrou 45 s contra uma meta de 30 s tornou obrigatória a correção do intervalo de polling. Sam registra cada medida na mesma planilha que o capítulo de confiabilidade usa para a disponibilidade. As linhas da planilha levam o id do ensaio, para que os períodos não se sobrescrevam. As sobrescritas são bloqueadas tornando o id do ensaio parte da chave primária.

47.3 Ações corretivas

Cada falha vira um ticket com dono e prazo — não só um slide de lições aprendidas.

"""Verify integrity of a synthetic evidence package."""
import hashlib, json
files = {
    "roe.pdf": b"SYNTHETIC-ROE-v1",
    "scope.csv": b"host,port\n10.20.1.10,443\n",
    "findings.json": b'[{"id":"SYN-001"}]',
}
expected = {n: hashlib.sha256(b).hexdigest()[:16] for n,b in files.items()}
# Simulate tampering of findings.json
current = dict(expected)
current["findings.json"] = hashlib.sha256(b'[{"id":"SYN-001"},{"id":"TAMPERED"}]').hexdigest()[:16]
print(json.dumps(expected, indent=1))
for n in sorted(expected):
    status = "OK" if expected[n] == current[n] else "MISMATCH"
    print(f"{n:16} {status}")

Saída esperada:

{
 "roe.pdf": "18d74983d403e7db",
 "scope.csv": "01cc4815eddf3de6",
 "findings.json": "7f5f178ab43ef00f"
}
findings.json    MISMATCH
roe.pdf          OK
scope.csv        OK

Caso sintético — Riverstone Transit. O ensaio mostrou 45 s até negar tudo; meta de 30 s — o intervalo de polling foi reduzido.

Slides de lições aprendidas sem tickets não mudam intervalos de polling. Cada falha precisa de um dono e de um prazo. O resultado de 45 s de Sam abriu um ticket que só foi fechado depois de duas execuções de recorrência bem-sucedidas em ≤30 s. Apresentações podem resumir os tickets, mas não podem substituí-los nos critérios de fechamento. Os critérios de fechamento listam ids de tickets, não títulos de slides.

47.4 Erros e limites

Ensaios em engajamentos de produção são proibidos; use faixas sintéticas. Janelas de produção são para avaliação autorizada, não para caos. Faixas sintéticas mantêm os passageiros fora do raio de impacto. O calendário de ensaios de Sam reserva a faixa sintética e recusa o início do script se houver um id de engajamento definido. Um id de engajamento esquecido no ambiente é testado da mesma forma que as proteções de caos. O início do script verifica o ambiente antes que qualquer injeção rode. A mensagem da verificação nomeia a variável, para que os operadores saibam o que remover.

47.2b Correção sem culpa

Ensaios de falha existem para encontrar lacunas do sistema. Escreva tickets corretivos contra componentes e runbooks, não contra pessoas que seguiram um procedimento ruim. A busca por culpados impede que as pessoas relatem a próxima falha. Abrir o ticket contra o runbook ou o componente mantém as pessoas dispostas a relatar a próxima falha. Culpar quem seguiu um passo ruim encerra o aprendizado. O relato de Sam sobre a falha de 45 s nomeou o intervalo de polling, não o engenheiro que iniciou o ensaio. Nomes aparecem apenas na lista de presença, nunca na linha de causa raiz.

47.3b Testes de recorrência

Depois de uma correção, rode de novo a injeção que encontrou a lacuna. Feche o ticket só quando a medida cumprir o SLO duas vezes. Caso contrário, a mesma falha volta no próximo período. Um verde de sorte não é um SLO. Dois cumprimentos sucessivos depois da correção são a regra de fechamento. O ticket do intervalo de polling de Sam ficou aberto durante uma primeira recorrência instável e foi fechado depois da segunda execução limpa em ≤30 s. A primeira execução instável ficou no histórico do ticket, para que os padrões continuem visíveis. Os padrões entre períodos alimentam a revisão do script de ensaio do ano seguinte.

47.1b Papéis de observador

Ensaios de falha incluem um observador que só anota tempos e desvios — não um participante que conserta coisas ao vivo. As correções vêm depois, por meio de tickets. Um participante que conserta ao vivo destrói os dados de tempo e esconde lacunas. Observadores só anotam; as correções passam por tickets depois. A folha do observador de Sam para a injeção de perda de política mostra negar tudo em 45 s e o alerta em 50 s, sem nenhum remendo no meio do ensaio. Remendos no meio do ensaio anulam as medidas e forçam uma nova execução completa. Execuções anuladas ficam no arquivo com um motivo de anulação, para o aprendizado.

Nota de prática

Ensaios de falha publicam um placar curto: injeção, esperado, observado, diferença, ticket. Comemore os tickets registrados — eles são o produto. Um ensaio com zero tickets geralmente pulou injeções difíceis ou ignorou falhas.

Agende a data do próximo ensaio antes de sair da sala, para que os testes de recorrência realmente aconteçam.

Os observadores se revezam, para que ninguém fique permanentemente isento de ser a pessoa sob ensaio.

Fotos do placar vão para o dossiê, na classe de evidência dos ensaios de falha.

Se uma injeção não puder ser executada com segurança nem em faixas sintéticas, reescreva-a — não a pule marcando verde.

47.4b Escolher a falha a ensaiar

O ensaio repete a falha com a pior consequência para os clientes, não a mais fácil de encenar: o TrackScope perdendo seu arquivo de escopo no meio de um engajamento. O script verifica que os métodos param, que o líder é acionado e que os testes só são retomados depois que o arquivo é restaurado e verificado. Perder o arquivo de escopo no meio de um engajamento é a pior consequência para o cliente na lista de ameaças da plataforma, por isso é o ensaio. O script exige parada, acionamento e retomada verificada. Sam rejeita planos de ensaio que só derrubam um pod de dashboard porque são mais fáceis de encenar. Injeções fáceis podem ser usadas para aquecimento, mas nunca como o ensaio pontuado.

Exercícios

Síntese

Quebre de propósito; meça; abra tickets para as lacunas.

Continue estudando — capítulo 47 de 50

← Capítulo 46 (rascunho) · Índice de capítulos do curso · Capítulo 48 (rascunho) →