Entropia, magic bytes e file mascherati
Un file non ha volontà, ma ha un carattere: la distribuzione dei suoi byte. Testo, immagini, eseguibili e dati cifrati hanno statistiche diverse e riconoscibili. L'entropia misura quel carattere in un solo numero — e come tutti i numeri singoli, dice qualcosa di vero e invita a concludere troppo.
Che cosa misura l'entropia
L'entropia di Shannon risponde a una domanda precisa: quanta sorpresa c'è, in media, in ogni byte?
Se un file contiene solo la lettera A, il byte successivo è prevedibile con certezza: sorpresa zero, entropia zero. Se ogni byte è estratto a caso fra i 256 possibili, ogni byte è massimamente imprevedibile: l'entropia vale 8 bit per byte, il massimo possibile.
Fra questi due estremi vive tutto il resto. Un testo italiano sta intorno a 4-4,5 bit per byte: le vocali abbondano, le lettere accentate scarseggiano, gli spazi ricorrono. Un eseguibile ha strutture ripetitive. Un JPEG, essendo già compresso, è quasi indistinguibile dal rumore.
Il numero singolo mente per omissione
Un file da 100 MB di testo, con dentro un blocco cifrato da 200 KB, ha un'entropia complessiva bassa: l'anomalia è annegata nella media.
Per questo Probatio non calcola un solo numero, ma anche 64 valori, uno per ciascuna fetta del file. È la sparkline di entropia, e serve a rispondere alla domanda giusta: non «questo file è casuale?», ma «dove, dentro questo file, i byte diventano casuali?»
Il file dice di essere una cosa, i byte ne dicono un'altra
L'estensione di un file è una convenzione sociale: si cambia rinominando. Ma quasi tutti i formati cominciano con una sequenza di byte caratteristica, il magic number: %PDF per i PDF, PK per gli ZIP, ÿØÿ per i JPEG.
Probatio legge quei byte, deduce il formato reale, e lo confronta con l'estensione dichiarata. Un fattura.jpg che comincia con PK è uno ZIP travestito. Non è necessariamente malevolo — è necessariamente da spiegare.
I polyglot
Più sottile: un file può essere valido in due formati contemporaneamente. Un PDF che è anche uno ZIP, un'immagine GIF che è anche uno script. Funziona perché molti formati ignorano i byte in eccesso: il PDF cerca la sua struttura, lo ZIP cerca il proprio indice in coda al file, e i due non si pestano i piedi.
Probatio cerca firme di altri formati a offset maggiori di zero — ZIP, PDF, ELF, PNG, JPEG, GIF, GZIP, RAR, 7Z — e le segnala. Un archivio ZIP che comincia a metà di un'immagine è, quantomeno, una scelta insolita.
Se è un eseguibile
Per PE (Windows), ELF (Linux) e Mach-O (macOS), Probatio scende più a fondo: architettura, numero di bit, entry point, elenco delle sezioni, librerie importate.
- Firma Authenticode — se il PE è firmato, la presenza della firma è rilevata (è cosa diversa dal verificarla).
- imphash — l'MD5 della tabella degli import normalizzata. Due binari compilati dallo stesso sorgente con nomi diversi conservano lo stesso imphash: serve a raggruppare famiglie. Solo per i PE: per ELF e Mach-O non viene calcolato.
- Packer — dai nomi delle sezioni si riconoscono UPX, ASPack, Themida, VMProtect, MPRESS, PECompact, Enigma e altri.
Un eseguibile impacchettato con UPX ha entropia altissima e sezioni riconoscibili. Questo lo rende sospetto, non malevolo: il packing riduce le dimensioni, e software legittimo lo usa da trent'anni.
YARA: cercare pattern, non anomalie
Dove l'entropia dice «qui i byte sono strani», YARA dice «qui c'è esattamente questo». È un linguaggio di regole che descrive stringhe e sequenze binarie da cercare dentro i file.
Probatio esegue le regole tramite yara-x, l'implementazione pure-Rust, e scarica il set di regole da un endpoint online. Non usa la libreria nativa libyara.
Le due tecniche sono complementari: YARA trova ciò che qualcuno ha già descritto; l'entropia segnala ciò che nessuno ha ancora descritto.
Come si mettono insieme gli indizi
- Entropia complessiva — inquadra il file. Alta? Probabilmente compresso o cifrato. Ma senza allarmarsi.
- Sparkline — cerca la discontinuità. Un picco isolato in un file ordinato è la cosa più interessante di tutta l'analisi.
- Magic bytes — il file è quello che dice di essere?
- Polyglot — c'è qualcos'altro, più in là?
- Se è un eseguibile — packer, imphash, firma, sezioni.
- YARA — corrisponde a qualcosa di noto?
- Apri l'hex viewer all'offset sospetto. Nessuno dei sei punti precedenti sostituisce il guardare.
La frase da non scrivere mai
«Il file presenta entropia 7,9, indicativa di contenuto cifrato o malevolo.»
Entropia 7,9 è indicativa di contenuto ad alta densità informativa. Ogni JPEG del tuo telefono è a 7,9. Ogni ZIP, ogni MP4, ogni PDF con immagini dentro. La frase corretta stabilisce un contrasto: «il file, dichiarato come documento di testo, presenta entropia 7,9 — valore incompatibile con quel formato e tipico di dati compressi o cifrati».
La differenza fra le due frasi non è di stile. La prima è falsa. La seconda è un'osservazione che regge, e che indica il passo successivo: aprire il file e vedere.