Capítulo 48 — Dossiê de evidências
Mapa da aula
Aula 48 publicada. Mapa, exemplo, EX142.
flowchart TD
N0["48.1 Conteúdo"]
N1["48.2 Retenção"]
N2["48.3 Exclusões"]
N3["48.2b Legibilidade para terceiros"]
N4["48.3b Log de redação"]
N5["48.1b Lista de verificação do leitor"]
N6["Nota de prática"]
N7["48.4b Integridade do dossiê"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
N7 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX142"]
Desenho lógico
flowchart LR
N0["48.1 Conteúdo"]
N1["48.2 Retenção"]
N2["48.3 Exclusões"]
N3["48.2b Legibilidade para terceiros"]
N4["48.3b Log de redação"]
N5["48.1b Lista de verificação do leitor"]
N6["Nota de prática"]
N7["48.4b Integridade do dossiê"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX142"]
[48.1 Conteúdo]
|
v
[48.2 Retenção]
|
v
[48.3 Exclusões]
|
v
[48.2b Legibilidade para terceiros]
|
v
[48.3b Log de redação]
|
v
[48.1b Lista de verificação do leitor]
|
v
[Nota de prática]
|
v
[48.4b Integridade do dossiê]
|
v
[Exemplo resolvido] --> [Exercício EX142]
Objetivos de aprendizagem
Você vai (1) montar um dossiê cujos hashes um terceiro consiga recalcular; (2) estruturar classes de retenção; (3) excluir material de uso dual.
48.1 Conteúdo
PDF das ROE, JSON da ScopeVersion, exportações de achados, objetos de evidência, manifesto de hashes, versões das ferramentas, relatórios de laboratório. O leitor consegue verificar sem confiar no seu laptop.
"""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
Um leitor com o manifesto e as versões das ferramentas deve conseguir recalcular os hashes sem ligar para você. ROE, ScopeVersion, achados, evidências, laboratórios e versões são o conjunto mínimo. O modelo de dossiê de Sam reprova numa lista de verificação do pacote se qualquer uma dessas pastas estiver vazia. Pastas vazias reprovam mesmo quando o README alega que os dados estão em outro lugar. "Outro lugar" não é um nome de pasta que a lista de verificação aceite.
48.2 Retenção
Classes: trabalho do engajamento (90 dias), evidência selada (anos acordados), métricas agregadas (mais tempo). Os jobs de exclusão são testados. As classes de trabalho, selada e agregada precisam de relógios diferentes e de exclusão testada. Jobs de exclusão não testados são como cópias em nuvens pessoais viram o verdadeiro arquivo. O exercício trimestral de exclusão de Sam restaura do armazenamento selado depois de um expurgo dos arquivos de trabalho e verifica que o manifesto ainda confere. Exercícios de exclusão que pulam a restauração selada estão incompletos. Exercícios incompletos reabrem automaticamente o ticket de retenção. A reabertura automática impede que a retenção vire uma surpresa anual.
48.3 Exclusões
Sem payloads, sem credenciais reais, sem dados pessoais. Se não pode ser compartilhado com o jurídico com segurança, não pertence ao dossiê. Depois do incidente do findings.json, o dossiê v3 teve os hashes recalculados sem divergências, e a nota de processo explicou a verificação de exclusão que agora roda antes da selagem. A verificação de exclusão é um script, não um item de memória no dia da selagem. Tudo o que o script sinaliza é removido e registrado antes da selagem do dossiê, e a entrada do registro nomeia quem aprovou a remoção.
Caso sintético — Riverstone Transit. O dossiê v3 teve os hashes recalculados sem divergências depois do incidente do findings.json; nota de processo incluída.
48.4 Erros e limites
Dossiês em contas pessoais de nuvem violam a residência e a retenção. Contas pessoais de nuvem quebram a residência e os prazos de retenção que o anfitrião acordou. Armazenamento selado sob a política do anfitrião é obrigatório. O encerramento de Sam procura caminhos de agentes de sincronização no jump host e reprova se qualquer caminho do dossiê estiver numa pasta pessoal. Pastas pessoais descobertas no encerramento abrem um incidente, não uma movimentação discreta. Movimentações discretas ainda acionam alerta, porque a busca roda num temporizador, não na base da honra. O intervalo do temporizador é de uma hora durante a semana de encerramento e diário no restante do tempo.
48.2b Legibilidade para terceiros
Entregue o dossiê a alguém de fora do projeto para um exercício de recálculo de hashes. Se essa pessoa não encontrar o manifesto ou a versão das ROE, o dossiê reprova, por mais arrumado que pareça aos seus autores. Os autores sabem onde esconderam o manifesto; quem é de fora não sabe. O último exercício de Sam falhou quando o PDF das ROE estava aninhado três pastas abaixo sem um ponteiro na página da lista de verificação; o layout mudou antes da selagem. As revisões de layout usam o orçamento de dez minutos como um portão rígido. A pessoa de fora registra quanto tempo a busca levou e onde ela travou.
48.3b Log de redação
Ao redigir trechos, mantenha um log de redação (o quê, por quê, quem) dentro do armazenamento selado. Leitores futuros precisam saber que um espaço em branco foi intencional, não evidência truncada. Um espaço em branco sem log parece truncamento ou adulteração. O log de redação de Sam para uma captura de tela que mostrava o nome de exibição de um funcionário registra os limites em pixels, o motivo de privacidade e o seu id de usuário. Os scripts de selagem tratam um espaço em branco sem log como o equivalente a um hash divergente. O registro é escrito no momento da redação, não reconstruído depois.
48.1b Lista de verificação do leitor
Inclua no topo uma página de "como verificar este dossiê": instalar as versões das ferramentas, rodar sha256sum -c manifest, abrir as ROE, conferir por amostragem um achado. Se os leitores precisam de um guia turístico, o dossiê está incompleto. O avaliador de Sam completou esse caminho em menos de dez minutos no dossiê v3, o que virou o orçamento de tempo das revisões de layout. Layouts que estouram o orçamento são redesenhados antes que o líder assine o manifesto. A página nomeia as versões exatas das ferramentas, para que um leitor meses depois possa instalar as mesmas. Se um passo precisa de uma ferramenta que não está mais disponível, a página diz qual versão foi usada e onde fica uma cópia arquivada.
Nota de prática
Os builds do dossiê são automatizados a partir de tags: um alvo do make produz o zip e o manifesto. Arrastar arquivos manualmente para pastas é como o findings.json acaba editado depois da selagem. A automação faz do caminho feliz o caminho seguro.
Teste a restauração a partir do dossiê numa máquina limpa uma vez por período, como exercício avaliado.
A geração do manifesto reprova o build se algum caminho casar com uma regex de nomes proibidos.
Falhas por nome proibido imprimem o caminho ofensor, para que os autores corrijam rapidamente.
48.4b Integridade do dossiê
Cada arquivo do dossiê de evidências é listado com seu hash SHA-256 num manifesto, e o próprio manifesto é assinado pelo líder. Um leitor consegue confirmar que nada foi acrescentado ou alterado depois da aprovação sem confiar no local de armazenamento. Um manifesto assinado é o que torna o local de armazenamento irrelevante para a integridade. Os leitores confirmam bytes, não confiança numa pasta de fornecedor. A assinatura do líder no manifesto de Sam é verificada na mesma etapa da lista de verificação que os hashes dos arquivos. Uma falha na verificação da assinatura bloqueia a aprovação do avaliador da mesma forma que um hash de arquivo errado.
Exercícios
- EX142 — Manifesto. Esboce um formato de manifesto de hashes (3 linhas). Rubrica: 3 = caminho+algoritmo+digest; 2 = só digests; 1 = vago; 0 = nada.
- EX143 — Classe. Atribua a classe de retenção ao PDF das ROE e às notas de rascunho. Rubrica: 3 = selada vs. trabalho/excluir; 2 = parcial; 1 = iguais para sempre; 0 = nada.
- EX144 — Excluir. O que você faz se um estudante colar uma senha num achado? Rubrica: 3 = limpar, rotacionar, achado de processo; 2 = só limpar; 1 = ignorar; 0 = publicar.
Síntese
Dossiês são verificáveis, classificados e enfadonhamente seguros.
Continue estudando — capítulo 48 de 50
← Capítulo 47 (rascunho) · Índice de capítulos do curso · Capítulo 49 (rascunho) →