Estrazione di testo da un file binario

di Maurizio Anconelli

Quattro tazze di tè, la discografia completa dei Van Halen, l’hard disk a temperatura di fusione ed è saltato fuori solo questo eseguibile dal nome insipido.
Il fatto che sia evocato nella chiave Run del registry è però un buon segno. I sensi di ragno tornano a vibrare…. Sistemiamo per bene gli strumenti ed iniziamo a sezionare il “binario” sospetto, con calma, cercando subito ciò che può rivelarci molto in poco tempo: le stringhe di testo.

L’analisi di un file binario sconosciuto è frequente nelle procedure di Incident Response e Computer Forensics. Possiamo imbatterci in eseguibili di varia natura e dalle innumerevoli e possibili funzionalità (backdoors, logger, rootkits, covert channels ecc… ) a noi oscure, in quanto difficilmente accompagnati dalla guida in linea, dalla pagina “man” relativa e dal codice sorgente.

Uno dei primi passi utili alla rivelazione dello scopo per il quale è stato concepito il file è l’estrazione delle istanze di caratteri dal blocco binario.

Dalle occorrenze trovate possiamo ricavare una moltitudine di dati, tra i quali:

· Informazioni sul programmatore

· Nome del programma

· Librerie utilizzate

· Piattaforma e linguaggio di sviluppo

· Provenienza del software

· Indirizzi IP di destinazione

· Riferimenti di rete

· Messaggi interattivi

· Messaggi di errore e debug

· Richiamo di funzioni

· Impostazioni d’ambiente

· Chiavi di registro



Vediamo un esempio con un ipotetico file sk.exe del quale non sappiamo assolutamente nulla.

Tralasciando le prime procedure (hashing, MAC ecc..) ci dedichiamo direttamente all’estrazione delle parti di testo contenute nel file binario.

Tra i vari programmi dedicati utilizzeremo strings su piattaforma Linux. La versione attuale del programma lavora ottimamente sia con i caratteri ASCII che Unicode, anche se quest’ultima caratteristica è poco conosciuta. Pur esistendo alcuni programmi su piattaforma Microsoft che svolgono altrettanto egregiamente il lavoro ( BinText,WinHex, TextScan), la mia preferenza a strings è motivata dalla maggior flessibilità e dalle possibilità di concatenazione immediata, proprie dei programmi di shell Unix e Linux in particolare.

I risultati ottenuti col passaggio diretto dell’output a grep per un’elaborazione ragionata ed immediata con uno o più parametri di ricerca non è ottenibile con nessun tool per Windows.

Il programma strings estrae le sequenze di caratteri stampabili (di default almeno 4 consecutivi) dalla sezione inizializzata e caricata di un file oggetto, mentre per gli altri file estrae le occorrenze dal file intero.

Col comando seguente estraiamo innanzi tutto i caratteri ASCII:

[mauri@hyena forensics]$ strings –a –t d sk.exe

77 !This program cannot be run in dos mode.

168 Rich

440 .text

479 .data

520 .rsrc

576 MSVBVM60.DLL

.

L’output (183 occorrenze) è tagliato per evidenti problemi di spazio. Con l’opzione –a abbiamo detto a strings di cercare nell’intero file mentre col parametro –t d abbiamo aggiunto l’offset dall’inizio del file in forma decimale. L’offset è ottenibile anche in forma ottale ( o – di default) ed esadecimale ( x ).

[mauri@hyena forensics]$ strings –a –t d -e l sk.exe

8654 @*AD:hackstallIOnssklogsklog.vbp

9848 windir

9868 systemist2.exe

9908 HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun

10044 Version Information

....

Questa volta abbiamo estratto le stringhe Unicode attraverso l’opzione –e l (-e encoding).

Già dalle prime righe delle 250 totali possiamo ricavare una mole di informazioni non indifferente.

Il file è effettivamente per l’OS Windows, il riferimento alla chiave Run del registry manifesta il probabile avvio in automatico, sono già presenti il richiamo ad una dll (MSVBVM60.DLL) ed il nome di un eseguibile (ist2.exe) per il quale possiamo eseguire ulteriori ricerche in internet.

Il metodo migliore per proseguire l’analisi è concatenare in un file, che analizzeremo in vari modi, i due output (ASCII e Unicode) :



[mauri@hyena forensics]$ strings –a –t d sk.exe > sk_text.txt

[mauri@hyena forensics]$ strings –a –t d -e l sk.exe >> sk_text.txt

[mauri@hyena forensics]$ sort –n sk_text.txt > sk_text_sort.txt



Vediamo qualche dll:



[mauri@hyena forensics]$ grep –I dll sk_text_sort.txt



576 MSVBVM60.DLL

10100 advapi32.dll

12452 VBA6.DLL

30024 MSVBVM60.DLL

30500 DllFunctionCall



…. Qualche eseguibile



[mauri@hyena forensics]$ grep –I exe sk_text_sort.txt



9868 systemist2.exe

10652 .exe

37568 klow.exe



….. Qualche chiave



[mauri@hyena forensics]$ grep –I hkey sk_text_sort.txt



9908 HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun

13000 HKEY_

13112 HKEY_CLASSES_ROOT

13152 HKEY_CURRENT_USER

13192 HKEY_LOCAL_MACHINE

13236 HKEY_USERS

13264 HKEY_PERFORMANCE_DATA

13312 HKEY_CURRENT_CONFIG

13356 HKEY_DYN_DATA



Nel continuare l’esplorazione dell’elaborato I riferimenti ai tasti:

11240

11256

11280

11364

11416

11464

11668

11684

11704

11724

11744

11760

11912

11928

....

12116

e le seguenti righe:

10848 CreateTextFile

10972 Logging Has Started At:

11024 write

11040 Logging Has Ended At:

suggeriscono come l’eseguibile abbia probabilmente la funzione di keylogger.

Altre ricerche in internet sugli eseguibili e sulle stringhe chiave permettono di arrivare al nome ed allo scopo del programma e confermando i nostri sospetti: sk.exe non è altro che il keylogger skl0g.

In realtà la semplice ricerca di ist2.exe su Google ci indirizza direttamente al sito del produttore del programma: red0xd, che salutiamo volentieri.


Per informazioni contattare staff@cybercrimes.it
Il logo cybercrimes.it e le immagini relative sono di proprietà del sito.
La documentazione presente nel sito è soggetta alla licenza Creative Commons ed è quindi liberamente riproducibile riportando il nome dell'autore originale.

>>>Forum<<<

Google
Web
cybercrimes.it

Lo Staff di Cybercrimes.it

Anconelli Maurizio

Adduci Massimo



ISFCE


hackin9

Hard Disk Forensics e Specifiche ATA