Bsfe.sh
Nel 2009 avevo lavorato per un’esigenza personale allo sviluppo di uno script che consentisse l’estrazione dei file da disco o immagine dello stesso.
Nacque così bsfe.sh, un lungo script per la bash, le cui funzionalità sono descritte in questo vecchio post e in questo video di 30 minuti.
Successivamente lo script si evolse ancora un poco, raffinando l’interfaccia grafica, ma di questa versione ho perso tutto nei due anni successivi nei quali lo sviluppo si è fermato per carenza di interesse.
In questo periodo di stasi lo script è stato utilizzato solo da un paio di amici delle FFPP.
Recentemente sono tornato ad utilizzarlo. Poi nei giorni scorsi a me e Nanni sono giunte alcune domande inerenti SFDumper, script al cui sviluppo e mantenimento non partecipo più.
In particolare ci chiedevano se fosse possibile far lavorare SFDumper su tutto il disco e non su una singola partizione e se fosse possibile recuperare più di una tipologia di file per singolo running.
No, SFDumper non fa tutto ciò, ma BSFE si!
BSFE, acronimo per Bash Script Forensic Environment, può essere inteso quale evoluzione avanzata di SFDumper, eseguendo come questo l’estrazione di file referenziati, attivi e cancellati, il carving ed il controllo dei file duplicati.
Ma quando l’ho sviluppato desideravo facesse qualcosa di più ed infatti:
- calcola gli hash dei file (md5 e sha1);
- estrae i metadati e mac-time dei file;
- estrae le proprietà dei file;
- crea la galleria a miniature per i file jpg e png;
- estrae le informazioni relativa al file system;
- se è presente un sistema MS Win estrae le info dal registro con RegRipper;
- estrae i dbx di MS Outlook Express ed esporta le mail in txt ed eml (da terminare e perfezionare);
- estrae gli index.dat della cronologia di MS Internet Explorer e la rende linkabile;
Lo script è molto scalabile sia dal punto di vista dello sviluppo che dell’uso.
Come definisco cosa deve fare lo script? Con un file di configurazione.
Il file script.conf è commentato in ogni sua parte e non dovrebbero esserci problemi nel configurarlo, in ogni caso diamo alcuni chiarimenti, premettendo che per utilizzare lo script è necessario creare una directory su un supporto abbastanza ampio da contenere i file che si pensa di recuperare. In essa si copierà bsfe.sh, script.conf e nominiatura.png. Quindi, una volta customizzato il file di configurazione come di seguito specificato sarò sufficiente lanciare bsfe.sh da sudo.
Ma ora vediamo il file di configurazione:
# PARAGRAPH 1 # defines image file or device to analyze. BSFE support all kind of image file that you can use with SleuthKit. # examples: # /dev/sda # /home/user/evidence/image/image.dd # /home/user/evidence/image/image.E (for EWF images format no insert number of chunks nor asterisk) # # IMAGE=
non mi sembra ci sia molto da dire, non c’è da cancellare alcun carattere #, ma solo da fa seguire IMAGE= dal percorso e nome del file immagine o del device. Nel caso si lavori con file EWF non si deve mettere il carattere asterisco al termine del nome per indicare i vari split/chunk. Non ho ancora testato, nè implementato, la possibilità di lavorare con file AFF e dd splittati.
# PARAGRAPH 2 ----------------------------------------------------------- # defines if use back-up of file lists # if you want use back-up replace OFF with ON # if you want to make the list (eg, running first) leaves OFF # # FILE-LIST-BACKUP-OFF
Talvolta la creazione della lista dei file contenuti in una partizione, attraverso il comando fls di TSK, richiede molto tempo. Nel caso dopo la prima esecuzione ci si accorga di aver scordato di recuperare una data tipologia di file sarà sufficiente copiare in una nuova directory bsfe.sh, script.conf e nominiatura.png e tutti i file filelist_parNN.backup. Quindi in script.conf si definirà # FILE-LIST-BACKUP-ON e si indicheranno le nuove tipologie di file da recuperare. In questo modo lo script utilizzerà le liste di file già generate senza perdere tempo.
# PARAGRAPH 3 ------------------------------------------------------------------------------------------------------------------- # defines if retrieve the referenced files (active and deleted) # formats are specified below in next paragraph # if you want recover files leave ON # if you do not want to retrieve them put OFF # # RESEARCH-FILESYS-ON
il paragrafo 3 definisce se operare il recupero dei file referenziati dal file system, la cui tipologia andrà indicata nelle righe successive.
# PARAGRAPH 4 # define types of referenced files to be recovered # **remove the comment character from those who want to recover** # you can add what you want .... may be it will not be found# ----------- FILES REFERENCED BY FILE SYSTEM # EXT dbx # EXT txt # EXT doc # EXT docx # EXT xls # EXT xlsx # EXT ppt # EXT pptx # EXT pdf # EXT jpg # EXT png # EXT tif # EXT snm # EXT htm # EXT zip # EXT rar # EXT 7z # EXT lnk # EXT exe
in questo caso è necessario cancellare il carattere # dalle righe corrispondenti alle tipologie di file che si desidera recuperare. Si può aggiungere tutte le estensioni desiderate
EXT pippo EXT abc
va precisato che in questo caso il recupero avviene esclusivamente in base all’estensione definita dal nome file, non in base a magic numeber o header e footer.
Si passa quindi al capitolo relativo al carving, che è stato testato ed è utilizzabile, ma non è completamente rifinito, meriterebbe ancora diverse ore di lavoro. Inoltre è possibile effettuarlo con sole immagini raw, non ewf. Devo implementare il controllo relativi a ciò.
Specifichiamo che al momento si può far eseguire il carving allo script, definendo al SUB-PAR 5.1 # CARVING-ON ed al SUB-PAR 5.2 le estensioni da recuperare, eliminando il carattere # in corrispondenza delle tipologie di interesse. Va notato che lo script usa Foremost ed opera il carving per le sole estensioni supportate dal built-in di Formost.
Il SUB-PAR 5.3 definisce se effettuare il controllo di esistenza di file duplicati tra quelli referenziati dal file system e quelli recuperati con il carving. Il controllo viene svolto in base agli hash MD5 e SHA 1, porre attenzione al fatto che i file “carvati” risultanti duplicati saranno eliminati (rm e poi sono ceci).
Nel caso si abbia già l’output di un precedente utilizzo di Foremost si può inglobarlo in BSFE. In tal caso si dovrà definire
# SUB-PAR 5.1
# CARVING-OFF
# SUB-PAR 5.4
# CARVING-EXT
copiare la directory di output del precedente uso di Foremost nella directory in cui si sta operando e indicarne il nome al
# SUB-PAR 5.5
DIR=output
# PARAGRAPH 5 ----------- CARVING ------------------------------------------------------------------------------------------------------------- # SUB-PAR 5.1 # with ON you make carving, put OFF if you don't want make carving # ***LEAVE OFF THIS FUNCTION IS NOT TESTED AND FULLY DEVELOPED*** # # CARVING-OFF # SUB-PAR 5.2 # define file formats that foremost retrive using its builtin option. # remove the # character on the lines corresponding to the format to be recovered # ***DON'T MODIFY THIS FUNCTION IS NOT TESTED AND FULLY DEVELOPED*** # # FORTYPE doc # FORTYPE xls # FORTYPE ppt # FORTYPE pdf # FORTYPE tif # FORTYPE htm # FORTYPE rar # FORTYPE jpg # FORTYPE png # SUB-PAR 5.3 # If you want duplicates replace with OFF with ON # # DUPLICATED-OFF # SUB-PAR 5.4 # if you've already made carving and you want to use foremost output in question don't change any things. # if you have not any foremost output to use delete EXT. # only works with CARVING-OFF # # CARVING-EXT # SUB-PAR 5.5 # Define the name of the foremost output directory you have already obtained running foremost as separate task. # Copy or move foremost output directory in this directory together this file and bsfe.sh. # DIR=output
Seguono i paragrafi 6 e 7
# PARAGRAPH 6 ------------------------------------------------------------------------------------------------------------------- ----------- SYSTEM # define if you want retrive and anlyze MS Windows register, ON do it, delete ON if you don't want do it # # REG-ON # PARAGRAPH 7 ------------------------------------------------------------------------------------------------------------------- ----------- APPLICATION # mail # This feature works for MS Outlook Express only ...for now # ***it require that dbx must be defined for recovering in "PARAGRAPH 4" # if you don't want do it replace ON with OFF # # MAIL-ON ----------- # browser # This feature works for MS Internet Explorer cronology on index.dat file ...for now # if you don't want do it replace ON with OFF # # BROWSER-CRON-ON -----------
dove si definisce se voler estarre le informazioni dai registri di MS Windows con RegRipper, se estrarre le mail da file dbx di MS Outlook Express (è necessario aver impostato “EXT dbx” al paragrafo 4, devo inserire un controllo su questo) e se estrarre e rendere linkabile la cronologia di MS Internet Explorer.
Non pensate che io abbia inventato l’acqua calda, lo script bsfe.sh non fa altro che usare un certo numero di script e tools (oltre al TSK di Carrier) sviluppati da chi è davvero capace di programmare e non si limita a usare a scrocco
.
Come installarli tutti? Nel pacchetto che scaricate è presente la directory components_installer__stable al cui interno c’è un installer che basta lanciare da sudo. Lo script di installazione verifica la presenza di TSK, Foremost e gli altri tools, installandoli se non presenti.
Se non volete inquinare la vostra installazione potete usare anche un live-cd di Ubuntu o un live-cd per la forensic, ieri l’ho testato su Caine 2.0 e installa tutto abbastanza velocemente.
A mio avviso bsfe.sh può avere una certa utilità nella preview. Ipotizziamo di arrivare a casa del sospetto per la perquisizione, abbiamo molti pc e dischi. Su uno di essi avviamo Caine o Deft, attraverso il router ci colleghiamo ad internet, installiamo con l’installer quel poco che manca. Con Caine ci si può collegare ad internet con estrema facilità con un cellulare, con Deft forse no, alleggerendola mi sembra siano stati eliminati i pacchetti necessari (mi corregga Stefano se sbaglio). A questo punto, collegato un proprio dispositivo di memoria su cui riversare gli output sarà possibile creare la directory di lancio, configurare script.conf, magari per le sole jpg e lanciare bsfe.sh. In pochi minuti si potrà verificare nella photo gallery quanto trovato.
Notare che insieme all’installer sono presenti i sorgenti di alcuni programmi, se lo script di installazione li individua evita di fare il download risparmiando tempo.
Per le mie necessità personali lo script, a questo livello di sviluppo, va più che bene, anche se ammetto che per renderlo fruibile ai più, risolvere alcuni problemi e renderlo adattabile ad un maggior numero di casi ci sarebbe da lavorarci ancora. Se ci sarà un riscontro, risolti alcuni impegni contingenti, gli dedicherò altro tempo, in caso contrario rimarrà fermo allo stato attuale, come è avvenuto in questi due anni.
Ho realizzato una photo gallery per mostrare alcune funzionalità.
Se volete provare lo script scaricatelo qui:
BSFE v.0.4.8.7 hash MD5:ae55a6f47e21b12f4be2e798e3e18d56