◇ OpenCyber Academy
Pesquisa doutoral · Capítulo 4 · Português

Capítulo 4 — Replicação da linha de base e piloto

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 4 — Replicação da linha de base e piloto

Mapa da aula

Aula 04 publicada. Mapa, exemplo, EX021.

flowchart TD
  N0["4.1 Por que replicar primeiro"]
  N1["Laboratório — piloto de carving"]
  N2["4.2 Lendo o resultado"]
  N3["4.3 Pontuação por hash"]
  N4["4.4 Diagnóstico"]
  N5["4.5 Decisão de viabilidade"]
  N6["4.6 Documentação da linha de base"]
  N7["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
  N7 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX021"]

Desenho lógico

flowchart LR
  N0["4.1 Por que replicar primeiro"]
  N1["Laboratório — piloto de carving"]
  N2["4.2 Lendo o resultado"]
  N3["4.3 Pontuação por hash"]
  N4["4.4 Diagnóstico"]
  N5["4.5 Decisão de viabilidade"]
  N6["4.6 Documentação da linha de base"]
  N7["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX021"]
[4.1 Por que replicar primeiro]
    |
    v
[Laboratório — piloto de carving]
    |
    v
[4.2 Lendo o resultado]
    |
    v
[4.3 Pontuação por hash]
    |
    v
[4.4 Diagnóstico]
    |
    v
[4.5 Decisão de viabilidade]
    |
    v
[4.6 Documentação da linha de base]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX021]

Objetivos de aprendizagem

Você vai (1) replicar um método de carving de linha de base numa pequena imagem sintética; (2) pontuar os resultados contra a verdade de referência por hash; (3) diagnosticar por que as recuperações falham; (4) decidir se o piloto justifica o estudo principal.

4.1 Por que replicar primeiro

Uma linha de base implementada de forma errada torna sem sentido todas as comparações posteriores. Ines primeiro implementa o carving simples por cabeçalho e rodapé e o executa numa imagem cuja verdade ela controla. A imagem do piloto é pequena de propósito. Com quatro arquivos de layout conhecido, Ines consegue prever à mão o que uma linha de base correta deve recuperar antes de executá-la. Se a saída diferisse da previsão, o carver ou o pontuador estaria errado, e ela corrigiria isso antes de gerar centenas de imagens maiores para o estudo principal.

Laboratório — piloto de carving

"""Lab (ch 04): header/footer carving on a synthetic byte image, scored against ground truth (no real media)."""
import hashlib, random
random.seed(7)
H, F = b"\xff\xd8\xff", b"\xff\xd9"
def body(n): return bytes(random.randrange(0, 255) for _ in range(n)).replace(b"\xff", b"\x00")
truth = {name: H + body(n) + F for name, n in (("a", 300), ("b", 500), ("c", 200), ("d", 400))}
c1, c2 = truth["c"][:100], truth["c"][100:]
image = body(64) + truth["a"] + body(32) + truth["b"] + c1 + body(50) + c2 + body(20) + truth["d"][:250] + body(40)
carved, pos = [], 0
while (s := image.find(H, pos)) != -1:
    e = image.find(F, s)
    nxt = image.find(H, s + 1)
    if e == -1 or (nxt != -1 and nxt < e):
        carved.append(image[s:nxt if nxt != -1 else len(image)]); pos = s + 1; continue
    carved.append(image[s:e + 2]); pos = e + 2
th = {hashlib.sha256(v).hexdigest(): k for k, v in truth.items()}
intact = [th[hashlib.sha256(c).hexdigest()] for c in carved if hashlib.sha256(c).hexdigest() in th]
print("carved:", len(carved), "intact matches:", sorted(intact))
print("recall:", f"{len(intact)}/{len(truth)}", "precision:", f"{len(intact)}/{len(carved)}")

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

carved: 4 intact matches: ['a', 'b']
recall: 2/4 precision: 2/4

4.2 Lendo o resultado

Quatro arquivos candidatos foram recuperados. Dois — a e b, ambos contíguos — correspondem exatamente aos hashes SHA-256 da verdade de referência. O arquivo c foi dividido em dois fragmentos com 50 bytes de dados alheios entre eles; o carver foi do cabeçalho ao rodapé de c e capturou os bytes intrusos, por isso o hash não confere. O arquivo d foi truncado: falta seu rodapé, então o carver seguiu até o fim da imagem. Revocação e precisão são ambas 2/4. Essas duas falhas são as que se espera do carving por cabeçalho e rodapé, de modo que o piloto confirma que tanto o gerador quanto o pontuador se comportam como projetado. O valor 2/4 não é um resultado do estudo; mostra apenas que a pontuação conta cada caso corretamente.

4.3 Pontuação por hash

A igualdade de hash é estrita: um byte errado faz falhar. Isso é apropriado para "recuperação intacta". Uma medida secundária — a sobreposição de bytes com a verdade — pode dar crédito à recuperação parcial, e a tese deve relatar ambas. Para o arquivo c do piloto, a sobreposição de bytes mostraria que a maior parte do arquivo foi capturada, com 50 bytes intrusos, enquanto a igualdade de hash o marca como perdido. Relatar as duas impede que os leitores confundam uma recuperação danificada com uma perda completa. O pontuador imprime as duas medidas para cada arquivo, para que os leitores vejam quais falhas de hash ainda recuperaram a maior parte dos bytes e quais não recuperaram quase nada.

4.4 Diagnóstico

Cada falha é explicada pelo manifesto: fragmentação (c) e truncamento (d). Ser capaz de explicar cada perda é evidência de que a pontuação funciona. Ines escreve o diagnóstico ao lado de cada falha em seu registro de análise, citando a entrada do manifesto com os limites dos fragmentos de c e o rodapé ausente de d. Uma perda que o manifesto não conseguisse explicar indicaria um defeito no gerador, no carver ou no pontuador, e ela pararia para encontrá-lo. As perdas do estudo principal são classificadas da mesma forma, a partir dos manifestos.

4.5 Decisão de viabilidade

O piloto é aprovado: o gerador e o pontuador se comportam como projetado, e as falhas correspondem a causas conhecidas. O estudo principal pode escalar para muitas imagens e condições. Ines também usa o piloto para conferir o esforço: gerar e pontuar uma imagem pequena leva pouco tempo, de modo que ela pode estimar quanto tempo as imagens do estudo principal vão levar antes de se comprometer com o cronograma. O Prof. Achebe aprova o piloto por escrito, e a aprovação é colocada no arquivo de reprodutibilidade junto com o registro do piloto. Se qualquer das falhas não tivesse causa conhecida, o estudo principal teria esperado.

4.6 Documentação da linha de base

O código, a semente e as saídas da linha de base são arquivados para que melhorias posteriores sejam comparadas exatamente com esta versão. Ines marca esta versão com uma tag em seu repositório e se refere à tag em cada tabela de resultados posterior. Se mais tarde ela corrigir um defeito na linha de base, a versão corrigida recebe uma nova tag, e qualquer valor produzido por ela é rotulado com essa tag, para que nenhum leitor confunda resultados de versões diferentes do carver. Executar de novo a linha de base marcada sobre a imagem do piloto deve dar novamente 2/4.

Exemplo resolvido

O primeiro pontuador de Ines comparava tamanhos de arquivo em vez de hashes e relatava c como recuperado porque seu comprimento recuperado era próximo. A troca para hashes expôs o erro. Ela registra a mudança no registro de análise.

Caso sintético. A imagem é material didático inventado.

Erros e limites

Um piloto de quatro arquivos prova a mecânica, não o desempenho.

Exercícios

Síntese

Replique a linha de base, pontue estritamente por hash, explique cada perda e use o piloto para decidir a viabilidade, não o desempenho.

Continue estudando — capítulo 04 de 08

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