OpenCyber Academy
Tecnólogo · Capítulo 15 · Português
Código do curso: OCA-086Capítulo 15: OCA-086-C015

Capítulo 15 — Perícia digital e análise de malware: laboratório guiado

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

Mapa da aula

Aula 15 publicada. Mapa, exemplo, EX043.

flowchart TD
  N0["15.1 Manifestos"]
  N1["15.2 O hash do manifesto"]
  N2["Laboratório — manifesto da coleta"]
  N3["15.3 Lendo o resultado"]
  N4["15.4 Entrega"]
  N5["15.5 Detectando mudanças"]
  N6["15.6 Lições"]
  N7["15.7 Exibição truncada"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
  N7 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX043"]

Desenho lógico

flowchart LR
  N0["15.1 Manifestos"]
  N1["15.2 O hash do manifesto"]
  N2["Laboratório — manifesto da coleta"]
  N3["15.3 Lendo o resultado"]
  N4["15.4 Entrega"]
  N5["15.5 Detectando mudanças"]
  N6["15.6 Lições"]
  N7["15.7 Exibição truncada"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX043"]
[15.1 Manifestos]
    |
    v
[15.2 O hash do manifesto]
    |
    v
[Laboratório — manifesto da coleta]
    |
    v
[15.3 Lendo o resultado]
    |
    v
[15.4 Entrega]
    |
    v
[15.5 Detectando mudanças]
    |
    v
[15.6 Lições]
    |
    v
[15.7 Exibição truncada]
    |
    v
[Exemplo resolvido] --> [Exercício EX043]

Objetivos de aprendizagem

Você vai (1) construir um manifesto dos arquivos coletados com tamanhos e hashes; (2) tornar o próprio manifesto verificável; (3) usar o manifesto na entrega; (4) detectar mudanças depois da entrega.

15.1 Manifestos

Um manifesto lista cada arquivo coletado com nome, tamanho e hash. Ele permite a quem recebe confirmar que nada foi perdido ou alterado e sustenta o princípio de auditabilidade da ISO/IEC 27037. Neste caso, o manifesto do desktop de mfoster lista 47 arquivos, e Renata verifica cada um ao recebê-los. Sem um manifesto, um arquivo ausente ou alterado em silêncio poderia passar despercebido até que um analista encontrasse uma lacuna. O manifesto também declara o que a coleta contém, o que ajuda os leitores posteriores a entender o que foi e o que não foi reunido.

15.2 O hash do manifesto

Calcular o hash do próprio manifesto, com as chaves ordenadas, dá um único valor que resume a coleta inteira. Registrar esse valor no log de custódia amarra a coleta. Ordenar as chaves antes de calcular o hash importa porque os mesmos dados em outra ordem dariam um hash diferente. Jonah registra o hash do manifesto no log de custódia e o envia a Renata separado do pendrive, para que o valor não possa ser alterado junto com os arquivos. Qualquer pessoa que receba a coleta pode recalculá-lo e comparar.

Laboratório — manifesto da coleta

"""Collect metadata and SHA-256 for a synthetic folder into a manifest."""
import hashlib, os, tempfile, json
with tempfile.TemporaryDirectory() as d:
    for name, body in {"permits.xlsx": b"synthetic-permit-data", "helper.exe": b"MZsynthetic", "readme.txt": b"hello"}.items():
        with open(os.path.join(d, name), "wb") as f: f.write(body)
    manifest = []
    for name in sorted(os.listdir(d)):
        p = os.path.join(d, name)
        with open(p, "rb") as f: digest = hashlib.sha256(f.read()).hexdigest()
        manifest.append({"name": name, "size": os.path.getsize(p), "sha256": digest[:12]})
    for m in manifest: print(m["name"], m["size"], m["sha256"])
    print("manifest sha256:", hashlib.sha256(json.dumps(manifest, sort_keys=True).encode()).hexdigest()[:12])

Execute com python3 lab_triage.py. Saída verificada:

helper.exe 11 3a3bb2549b8e
permits.xlsx 21 80d4c531e684
readme.txt 5 2cf24dba5fb0
manifest sha256: a23393100c9c

15.3 Lendo o resultado

Três arquivos sintéticos são listados com seus tamanhos (11, 21 e 5 bytes) e valores SHA-256 truncados; o hash do próprio manifesto é a23393100c9c (truncado para exibição). Se qualquer arquivo mudar, seu hash muda, e o hash do manifesto também. O laboratório usa conteúdos de arquivo curtos e inventados para que a saída seja fácil de conferir à mão, e lê os arquivos pequenos de uma vez; um coletor real leria os arquivos grandes em blocos. O ponto a reter é a cadeia que vai do arquivo ao hash do arquivo e daí ao hash do manifesto.

15.4 Entrega

Jonah entrega a Renata o pendrive de coleta, o manifesto e o hash do manifesto, registrados no log de custódia. Ela recalcula e confirma. A confirmação de Renata é registrada com o horário e o nome dela ao lado da entrada de entrega de Jonah. Se o valor recalculado por ela tivesse sido diferente, ela recusaria a entrega até que a causa fosse encontrada. Para os 47 arquivos do desktop de mfoster, todos os hashes e o hash do manifesto bateram, e o log de custódia mostra o momento em que a coleta passou de Jonah para ela. O próprio pendrive é então lacrado e guardado.

15.5 Detectando mudanças

Mais tarde, um analista informa um hash diferente para o helper.exe. A comparação com o manifesto mostra que a cópia do analista foi modificada — o antivírus da estação de trabalho dele a tinha posto em quarentena e alterado. O original no repositório de evidências continua conferindo. Sem o manifesto, o analista poderia ter concluído que o helper.exe tinha mudado no repositório de evidências, lançando dúvida sobre a coleta inteira. Com ele, a mudança é localizada com precisão: a cópia do analista, e não o original. Jonah registra o ocorrido no arquivo do caso, porque um revisor vai querer saber por que aparecem dois hashes para um mesmo arquivo nos registros.

15.6 Lições

As cópias para análise devem ser feitas a partir do repositório de evidências a cada vez, em máquinas com exclusões de antivírus para as pastas de evidência. Jonah acrescenta uma linha à nota de entrega enviada com cada arquivo compactado: abrir apenas numa máquina de análise com exclusões de antivírus para a pasta de evidências e verificar cada hash antes de começar. O analista externo concorda em comunicar de imediato qualquer divergência. A lição é barata de aplicar e evita que um resultado enganoso apareça num relatório. Ela também protege a própria máquina do analista contra uma execução acidental.

15.7 Exibição truncada

Os hashes completos são armazenados; o truncamento serve apenas para a exibição. O próprio laboratório guarda os resumos encurtados no manifesto para manter curta a saída impressa, então o hash do seu manifesto é calculado sobre valores de doze caracteres. Um manifesto real guarda o resumo completo de cada arquivo, o que dá um hash de manifesto diferente. O script de produção de Jonah guarda os resumos completos e imprime os encurtados apenas na tela, e as notas do caso dizem em qual forma está cada valor citado. Doze caracteres bastam para distinguir arquivos na tela, mas são poucos demais para provar a integridade numa disputa. Um valor encurtado num relatório deve sempre poder ser rastreado até o valor completo guardado no manifesto.

Formato do manifesto

Jonah guarda os manifestos em JSON, com ordem de campos fixa e codificação UTF-8, além de uma cópia em texto simples para impressão. As duas trazem a mesma lista de hashes, então qualquer uma pode ser conferida.

Exemplo resolvido

O manifesto da coleta do 10.20.4.12 lista 47 arquivos. Renata verifica os 47 ao recebê-los e assina o log de custódia com o hash do manifesto e o horário.

Caso sintético. Os arquivos são criados pelo script do laboratório numa pasta temporária.

Erros e limites

Um manifesto confirma o que foi coletado, não que tudo o que era relevante foi coletado.

Exercícios

Síntese

Os manifestos e seus hashes tornam as coletas verificáveis de ponta a ponta e expõem alterações posteriores.

Continue estudando — capítulo 15 de 30

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

Respostas comentadas

EX043. Ele produz um único valor que representa a coleta inteira, então qualquer mudança em qualquer arquivo ou entrada pode ser detectada.

EX044. O antivírus da estação de trabalho do analista pôs em quarentena e modificou a cópia dele; o original no repositório de evidências continuava conferindo com o manifesto.

EX045. Fazer cada cópia para análise de novo a partir do repositório de evidências, em máquinas nas quais as pastas de evidência estejam excluídas da varredura do antivírus.