Capítulo 7 — Perícia digital e análise de malware: controles e verificação
Mapa da aula
Aula 07 publicada. Mapa, exemplo, EX031.
flowchart TD
N0["7.1 Verificação de integridade"]
N1["Laboratório — conferência do manifesto"]
N2["7.2 Lendo o resultado"]
N3["7.3 Verificando a contenção"]
N4["7.4 Revisão dos controles"]
N5["7.5 Mudanças nos controles"]
N6["7.6 Registro"]
N7["Quem verifica"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
N7 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX031"]
Desenho lógico
flowchart LR
N0["7.1 Verificação de integridade"]
N1["Laboratório — conferência do manifesto"]
N2["7.2 Lendo o resultado"]
N3["7.3 Verificando a contenção"]
N4["7.4 Revisão dos controles"]
N5["7.5 Mudanças nos controles"]
N6["7.6 Registro"]
N7["Quem verifica"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX031"]
[7.1 Verificação de integridade]
|
v
[Laboratório — conferência do manifesto]
|
v
[7.2 Lendo o resultado]
|
v
[7.3 Verificando a contenção]
|
v
[7.4 Revisão dos controles]
|
v
[7.5 Mudanças nos controles]
|
v
[7.6 Registro]
|
v
[Quem verifica]
|
v
[Exemplo resolvido] --> [Exercício EX031]
Objetivos de aprendizagem
Você vai (1) verificar a integridade da evidência com um manifesto; (2) verificar se a contenção funcionou; (3) conferir os controles que deveriam ter barrado o ataque; (4) registrar os resultados da verificação.
7.1 Verificação de integridade
Antes da análise e da entrega, cada cópia de trabalho recebe hash de novo e é comparada com o manifesto feito na coleta. No caso da Marlow, o manifesto foi feito no download, quando cada exportação recebeu hash SHA-256. Refazer o hash antes da análise confirma que Lena está trabalhando com o que coletou, e refazê-lo antes da entrega dá a Dev ou a um colega a mesma garantia. O laboratório abaixo usa três pequenos arquivos sintéticos e simula uma edição acidental do message_trace.csv, exatamente o tipo de mudança que a verificação deve detectar.
Laboratório — conferência do manifesto
"""Build and check a SHA-256 manifest for synthetic exported evidence."""
import hashlib
files = {"signin.csv": b"time,user,ip,result\n", "rules.json": b"[]\n", "message_trace.csv": b"time,from,to,subject\n"}
manifest = {n: hashlib.sha256(d).hexdigest() for n, d in files.items()}
files["message_trace.csv"] += b"edited\n" # simulate an accidental change to the working copy
for n, d in files.items():
ok = hashlib.sha256(d).hexdigest() == manifest[n]
print(f"{n:18} {manifest[n][:12]} {'OK' if ok else 'MISMATCH'}")
Execute com python3 lab_manifest.py. Saída verificada:
signin.csv 73e095a99de8 OK
rules.json 37517e5f3dc6 OK
message_trace.csv 6d8fe704b35e MISMATCH
7.2 Lendo o resultado
O signin.csv e o rules.json dão OK. O message_trace.csv dá MISMATCH: a cópia de trabalho foi editada. Lena tinha acrescentado uma coluna de notas numa planilha e salvado por cima do arquivo. Ela descarta a cópia de trabalho, faz uma nova a partir do original somente leitura, verifica que dá OK e, daí em diante, guarda as notas num arquivo separado. A divergência não é evidência de adulteração por outra pessoa; o log do caso a registra como erro da própria Lena, com horário, causa e correção. O original somente leitura nunca mudou, e é por isso que foi fácil se recuperar do problema.
7.3 Verificando a contenção
A contenção é verificada, e não presumida: o log de entradas não mostra mais nenhum sucesso a partir de 203.0.113.50 depois das 10:05; a lista de regras de Joy já não contém a "fwd"; o log do proxy mostra uma tentativa bloqueada de acesso ao domínio imitado a partir de um PC de teste. Cada verificação usa o mesmo tipo de registro que mostrou o ataque: o log de entradas para o acesso, a lista de regras para o encaminhamento e o log do proxy para o domínio. A tentativa do PC de teste prova que o bloqueio funciona de dentro da rede da Marlow, e não apenas que uma configuração foi salva. Lena registra cada verificação com horário e nome na tabela de verificação.
7.4 Revisão dos controles
Quais controles deveriam ter ajudado? A autenticação multifator não era obrigatória para Joy (ela estava num grupo de exceção criado anos antes); o filtro de e-mail não sinalizou o domínio imitado, registrado dois dias antes; o encaminhamento externo era permitido por padrão. Nada disso foi uma surpresa técnica; cada item era uma configuração conhecida que ninguém tinha revisado. O grupo de exceção fez com que a senha capturada bastasse sozinha, a idade do domínio deu ao filtro uma pista que ele não usou, e o encaminhamento padrão deixou a 'fwd' enviar onze mensagens para fora antes que alguém percebesse.
7.5 Mudanças nos controles
Remover o grupo de exceção; bloquear por padrão o encaminhamento externo automático; acrescentar ao filtro de e-mail avisos para domínios novos. Cada mudança recebe um chamado e um teste. Os testes são concretos: uma regra de teste que encaminhe para fora da empresa deve ser rejeitada, uma entrada de um antigo membro do grupo de exceção deve pedir um segundo fator, e uma mensagem de um domínio recém-registrado deve trazer um aviso. O teste do encaminhamento foi rejeitado às 16:20 de 3 de março, como registra a linha de verificação. Remover o grupo de exceção também exige conferir se nenhum outro funcionário ainda depende dele.
7.6 Registro
Uma tabela de verificação registra o que foi conferido, como, quando e por quem. A tabela tem uma linha por verificação: o que foi conferido, o registro ou teste usado, o resultado, o horário e a pessoa. Por exemplo, a ausência da regra de encaminhamento foi confirmada às 14:02, e o bloqueio no proxy às 14:05. Cada linha também diz o que a verificação não consegue mostrar; um log de entradas vazio para 203.0.113.50 não descarta acessos a partir de outro endereço. Dev lê a tabela no ponto de controle das conclusões, e ela depois vai para o apêndice do relatório.
Quem verifica
O ideal é que outra pessoa, e não quem coletou, verifique os hashes, o que impede que o erro de uma só pessoa passe despercebido.
Exemplo resolvido
Linha de verificação: "Contenção — entradas a partir de 203.0.113.50 depois das 10:05: nenhuma (conferido às 14:00, L. Hart). Regra de encaminhamento ausente (14:02). Bloqueio no proxy confirmado (14:05). Encaminhamento externo agora bloqueado: regra de teste rejeitada (16:20)."
Caso sintético. Os resultados vêm do script do laboratório e de registros inventados.
Erros e limites
Uma verificação limpa hoje não prova que o atacante não tem outro acesso; revise de novo depois de alguns dias.
Exercícios
- EX031 — Causa da divergência. Por que o message_trace.csv divergiu, e o que resolveu? Rubrica: 3 = notas salvas na cópia de trabalho; cópia nova a partir do original, verificada, notas guardadas à parte; 2 = parcial; 1 = ignorou; 0 = nada.
- EX032 — Prova da contenção. Dê três verificações de que a contenção funcionou. Rubrica: 3 = nenhuma entrada do IP depois das 10:05; regra ausente; bloqueio no proxy confirmado; 2 = duas; 1 = uma; 0 = nada.
- EX033 — Controles que falharam. Quais três controles falharam ou faltavam? Rubrica: 3 = exceção de MFA; filtro não pegou o domínio novo; encaminhamento externo permitido; 2 = dois; 1 = um; 0 = nada.
- EX034 — Testando uma mudança. Como o bloqueio do encaminhamento foi testado? Rubrica: 3 = regra de teste rejeitada; 2 = parcial; 1 = presumido; 0 = nada.
- EX035 — Revisão posterior. Por que revisar de novo depois de alguns dias? Rubrica: 3 = o atacante pode ter outro acesso ainda não visível; 2 = parcial; 1 = desnecessário; 0 = nada.
Síntese
Verifique a evidência, a contenção e os controles com verificações registradas, e não com suposições.
Continue estudando — capítulo 07 de 12
← Capítulo 06 (rascunho) · Índice de capítulos do curso · Capítulo 08 (rascunho) →