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
- Estrai blob ad alta entropia: Utilizza
binwalkper identificare segmenti non compressi. - Prova chiavi 1-byte (0x00-0xFF): Valuta output in base a criteri come presenza di caratteri stampabili o stringhe riconoscibili (
http,MZ). - 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.