Capítulo 31 — Perícia digital e análise de malware: implementação II
Mapa da aula
Aula 31 publicada. Mapa, exemplo, EX091.
flowchart TD
N0["31.1 Entropia"]
N1["31.2 Uso na triagem"]
N2["Laboratório — entropia por bloco"]
N3["31.3 Lendo o resultado"]
N4["31.4 Acrescentando ao EvidenceDesk"]
N5["31.5 Falsos positivos"]
N6["31.6 Tamanho do bloco"]
N7["31.7 Segurança"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
N7 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX091"]
Desenho lógico
flowchart LR
N0["31.1 Entropia"]
N1["31.2 Uso na triagem"]
N2["Laboratório — entropia por bloco"]
N3["31.3 Lendo o resultado"]
N4["31.4 Acrescentando ao EvidenceDesk"]
N5["31.5 Falsos positivos"]
N6["31.6 Tamanho do bloco"]
N7["31.7 Segurança"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX091"]
[31.1 Entropia]
|
v
[31.2 Uso na triagem]
|
v
[Laboratório — entropia por bloco]
|
v
[31.3 Lendo o resultado]
|
v
[31.4 Acrescentando ao EvidenceDesk]
|
v
[31.5 Falsos positivos]
|
v
[31.6 Tamanho do bloco]
|
v
[31.7 Segurança]
|
v
[Exemplo resolvido] --> [Exercício EX091]
Objetivos de aprendizagem
Você vai (1) calcular a entropia de Shannon de blocos de dados; (2) interpretar a entropia na triagem; (3) acrescentar um sinalizador de entropia a um relatório de entrada; (4) evitar interpretar demais a entropia alta.
31.1 Entropia
A entropia de Shannon mede quão imprevisíveis são os bytes, de 0 (todos idênticos) a 8 bits por byte (uniformemente aleatórios). O texto fica no meio; os dados comprimidos e cifrados se aproximam de 8. Para um bloco de bytes, a entropia é H = −Σ p(b) log₂ p(b), somada sobre os 256 valores de byte possíveis, em que p(b) é a fração do bloco igual a b. Se aparece só um valor de byte, H é zero. Se todos os 256 valores aparecem com a mesma frequência, H é oito. O texto em inglês usa um conjunto limitado de caracteres de forma desigual, o que o mantém em torno de quatro a cinco bits por byte.
31.2 Uso na triagem
Entropia alta ao longo de uma região do disco pode indicar criptografia, compressão ou executáveis empacotados. Os analistas de malware observam que as amostras empacotadas costumam mostrar entropia alta em algumas seções, como discutem Sikorski e Honig (2012). Os engenheiros usam a entropia como um sinalizador para os peritos, não como uma conclusão. Num disco, uma grande região contígua de entropia alta dentro de um sistema de arquivos de resto comum pode ser um contêiner cifrado ou um arquivo compactado grande. Num executável, uma região de entropia alta em meio a código e dados de resto normais sugere código empacotado que se desempacota em tempo de execução. Em qualquer dos casos, o sinal diz aos peritos onde olhar em seguida, não o que vão encontrar ali.
Laboratório — entropia por bloco
"""Shannon entropy of synthetic blocks (bits per byte)."""
import math, random
def H(b):
c = [0]*256
for x in b: c[x] += 1
return -sum(n/len(b)*math.log2(n/len(b)) for n in c if n)
random.seed(7)
blocks = {"text": b"the quick brown fox " * 205, "zeros": bytes(4096),
"random": bytes(random.randrange(256) for _ in range(4096))}
for k, v in blocks.items():
print(f"{k:7} {abs(H(v)):.2f}", "HIGH" if H(v) > 7.5 else "")
Execute com python3 lab_entropy.py. Saída verificada:
text 3.82
zeros 0.00
random 7.96 HIGH
31.3 Lendo o resultado
O texto em inglês repetido marca 3,82 bits por byte; um bloco de zeros marca 0,00; os bytes pseudoaleatórios marcam 7,96 e são sinalizados como HIGH acima de 7,5. O sinalizador diz que o bloco é imprevisível — compatível com criptografia ou compressão — e nada mais. O texto repetido marca menos que o inglês normal porque a repetição reduz a variedade. O bloco pseudoaleatório marca um pouco menos de oito porque uma amostra finita de 4 KiB raramente atinge uma distribuição perfeitamente uniforme. O limiar de 7,5 é uma heurística escolhida para separar os dados cifrados e comprimidos da maior parte do restante do conteúdo. Priya o registra como uma configuração, e não como um fato sobre os dados.
31.4 Acrescentando ao EvidenceDesk
Priya acrescenta um resumo opcional: a proporção de blocos acima de 7,5 numa imagem. Uma imagem quase toda de entropia alta sugere criptografia de disco completo, o que leva os peritos a verificar cedo as vias lícitas de acesso. A varredura lê a imagem como bytes brutos e relata apenas a proporção de blocos acima do limiar, o que mantém o EvidenceDesk fora da interpretação do conteúdo. Uma imagem com 98 por cento de blocos de entropia alta é mais compatível com criptografia de disco completo, embora um disco cheio de arquivos compactados ou de vídeo possa parecer semelhante. Sinalizá-la na entrada permite que o responsável pelo caso pergunte pelas chaves de recuperação antes que o tempo do perito seja reservado.
31.5 Falsos positivos
Arquivos JPEG, ZIP e de vídeo têm entropia alta por natureza. O sinalizador precisa ser lido junto com os tipos de arquivo. Uma biblioteca de fotos ou uma pasta de vídeos pode fazer grandes partes de um disco parecerem cifradas. Ler o sinalizador junto com as informações do sistema de arquivos, como quais arquivos ocupam as regiões de entropia alta, separa a compressão esperada das regiões sem explicação. Só vale a pena levar ao perito o espaço de entropia alta que nenhum arquivo conhecido explica. O relatório lista as maiores regiões sem explicação, por deslocamento e tamanho.
31.6 Tamanho do bloco
Blocos pequenos dão estimativas ruidosas; Priya usa 4 KiB. Com blocos muito pequenos, como 256 bytes, a amostra é pequena demais para que as frequências dos bytes se estabilizem, então dados aleatórios podem marcar bem menos que oito e o texto pode parecer mais variado do que é. Blocos grandes suavizam as fronteiras entre tipos diferentes de conteúdo. Um bloco de 4 KiB coincide com os tamanhos de cluster comuns dos sistemas de arquivos, o que mantém cada bloco dentro de uma unidade de alocação. Priya testa 512 bytes, 4 KiB e 64 KiB no conjunto sintético e registra com que frequência cada um classifica mal os blocos de texto.
31.7 Segurança
A varredura de entropia lê bytes; nunca executa conteúdo. Ler bytes para contar seus valores não consegue acionar o código que eles contêm, então a varredura é segura para executar em imagens que contêm malware. A varredura também abre as imagens somente para leitura e grava seu resumo numa pasta de saída separada. Essas propriedades são testadas da mesma forma que a disciplina de somente leitura do verificador, conferindo os metadados da entrada antes e depois de uma execução. Nenhuma pré-visualização ou manipulador de tipo de arquivo é acionado. A saída nunca inclui bytes brutos das evidências.
Visualizando a entropia
Um gráfico simples em faixa da entropia por bloco ao longo de uma imagem mostra as regiões num relance: áreas de sistema de entropia baixa, pastas de mídia de entropia alta, entropia alta uniforme onde há um contêiner. Priya o imprime como faixas de texto no resumo, para que funcione offline, e o rotula como um auxílio de triagem.
Exemplo resolvido
Um resumo de entrada relata 97% dos blocos acima de 7,5. O perito confere e encontra um cabeçalho de criptografia de disco completo, registra o estado de criptografia e solicita a chave de recuperação da organização pela via legal adequada.
Caso sintético. A imagem é inventada.
Erros e limites
A entropia não distingue criptografia de compressão; é preciso examinar a estrutura e os cabeçalhos.
Exercícios
- EX091 — Valores do laboratório. Relate os três valores de entropia e o sinalizador. Rubrica: 3 = 3,82, 0,00, 7,96 HIGH; 2 = dois; 1 = um; 0 = nada.
- EX092 — Significado do sinalizador. O que significa um sinalizador HIGH? Rubrica: 3 = dados imprevisíveis, compatíveis com criptografia/compressão, não uma conclusão; 2 = parcial; 1 = malware; 0 = nada.
- EX093 — Resposta aos 97%. O que o perito fez ao ver 97% de blocos de entropia alta? Rubrica: 3 = conferiu o cabeçalho, registrou a criptografia, buscou a chave de forma lícita; 2 = parcial; 1 = tentou contornar; 0 = nada.
Síntese
A entropia é um sinalizador de triagem barato que orienta os peritos quando lido junto com os tipos de arquivo e a estrutura.
Continue estudando — capítulo 31 de 50
← Capítulo 30 (rascunho) · Índice de capítulos do curso · Capítulo 32 (rascunho) →