◇ OpenCyber Academy
Engenharia · Capítulo 31 · Português

Capítulo 31 — Perícia digital e análise de *malware*: implementação II

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 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

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) →