Analisi Malware: Stringhe, Header Embedded e Carving per Riconoscere Payloads Nascosti

L'IA è probabilmente la cosa migliore o la peggiore che sia mai successa all'umanità. — Stephen Hawking.

L’analisi di malware richiede una combinazione di strumenti, tecniche e attenzione ai dettagli. Quando si affronta un campione sospetto, le stringhe, i header embedded e il carving rappresentano elementi chiave per rivelare payload nascosti o configurazioni crittografate. Questo articolo guida attraverso metodi pratici e strumenti consigliati per analizzare questi aspetti in modo sistematico, con esempi concreti e considerazioni operative.

Perché le Stringhe Sono Fondamentali

Le stringhe ASCII o Unicode spesso contengono indizi utili: URL, path di registry, mutex o semplicemente informazioni su comportamenti del malware. Tuttavia, non bisogna farsi trarre in inganno. Molti attaccanti cifrano o compressono le stringhe per evitare rilevamento automatico.

Strumenti e Tecniche

  • strings: Utile per estrarre testo da file binari, ma richiede un’analisi critica. Ad esempio, in un file PE Windows, le stringhe Unicode (UTF-16LE) sono comuni in famiglie come Emotet o TrickBot.
    bash strings -el sample.dll | head
  • FLOSS: Strumenti open source come FireEye permettono di cercare stringhe wide (UTF-16LE), spesso utilizzate da malware Windows.

Casi Pratici

Un esempio concreto: il loader di un malware ransomware potrebbe contenere una stringa cifrata in XOR, che si rivelerebbe solo dopo decodifica. Questo richiede una combinazione di euristiche (chiavi comuni) e analisi manuale.

Binwalk: Riconoscimento di File Embedded

binwalk è uno strumento cruciale per identificare file nascosti all’interno di un eseguibile o firmware. Questi possono includere ZIP, certificati, immagini o PE nested (es. in malware come Mirai).

Esempio Operativo

binwalk sample.exe
binwalk -e sample.exe  # Estrazione in _extracted/

Dopo l’estrazione, è fondamentale ri-hashare ogni file e sottoporlo a YARA per rilevamento di pattern. Questo è particolarmente utile in contesti SOC, dove la velocità di analisi è prioritaria.

Header Analysis: Il Primo Passo

I header (es. MZ per PE o PK per ZIP) forniscono informazioni su formato e struttura del file. Un’analisi rapida con xxd può rivelare pattern significativi, come la presenza di NOP sled (indicativo di shellcode).

Esempio

xxd -l 256 sample.exe | head

Cercare stringhe magiche come MZ o PK è un’azione standard. Tuttavia, i header non sempre sono sufficienti: il payload potrebbe essere compresso o cifrato su più livelli (es. XOR + gzip).

Decodifica XOR: La Strategia per Blob Cifrati

Molti loader utilizzano XOR a byte singolo o chiave ripetuta corta. Il processo richiede un’analisi di entropia e verifica manuale con disassembler.

Passaggi Operativi

  1. Estrai blob ad alta entropia: Utilizza binwalk per identificare segmenti non compressi.
  2. Prova chiavi 1-byte (0x00-0xFF): Valuta output in base a criteri come presenza di caratteri stampabili o stringhe riconoscibili (http, MZ).
  3. Verifica con disassembler: Se il risultato sembra utile, confrontalo con log o comportamenti osservati.

Codice Esempio (Python)

def xor_single_byte(data: bytes, k: int) -> bytes:
    return bytes(b ^ k for b in data)

Questa funzione è parte di un’analisi didattica, ma può essere adatta a scenari reali con modifiche.

Compressione e Layer Multipli

Dopo l’XOR, il payload potrebbe essere compresso (es. gzip o lznt1). Documentare ogni livello di decodifica è essenziale: anche se non si riesce a completare lo unpacking, la conoscenza del flusso aiuta nel riconoscimento di pattern laterali.

Integrazione con Triage JSON

Aggiungi campi come embedded_binwalk_hits o xor_best_score per archiviare informazioni utili durante il triage. Questo facilita l’analisi futura e la correlazione tra eventi.

Esempio di Campo

{
  "embedded_binwalk_hits": ["ZIP", "PE"],
  "xor_best_score": 0.85,
  "interesting_strings": ["http://malware.com", "C:\\Windows\\Temp\\"]
}

Vedi Anche

  • Analisi di Firmware e Carving Embedded
  • Triage Malware: Integrazione con YARA e MITRE ATT&CK

Domande frequenti

Qual è il ruolo delle stringhe Unicode in un malware Windows?

Le stringhe Unicode (UTF-16LE) sono comuni in famiglie come Emotet o TrickBot, dove vengono utilizzate per memorizzare configurazioni o URL. Strumenti come FLOSS aiutano a identificarle.

Come evitare di farsi trarre in inganno da stringhe cifrate?

Usa binwalk e strings per estrarre segmenti, poi prova chiavi XOR comuni (0x00-0xFF). Verifica l’output con disassembler o log osservati.

Perché è importante ri-hashare i file estratti da binwalk?

Per evitare conflitti di hash e garantire la ripetibilità dell’analisi, ogni file dovrebbe essere hashato separatamente prima di essere sottoposto a YARA o altri strumenti.

Quali strumenti sono consigliati per XOR decoding?

Strumenti come FLOSS (FireEye) o script personalizzati in Python (es. xor_single_byte) permettono di testare chiavi XOR su blob estratti.

Come gestire payload compressi dopo l’XOR?

Dopo la decodifica, documenta ogni livello di compressione (es. gzip/lznt1) anche se non si riesce a completare lo unpacking. Questo aiuta nella mappatura dei pattern laterali.

Fonti