Gestione del formato EWF con tools Open Source + Screencast

ottobre 16th, 2008

Ho già parlato del formato EWF nell’articolo articolo “EWF, LinEn, libewf e Guymager“, oggi invece desideravo soffermarmi sulla gestione di questo formato con i tools open sorce. Ho trattato l’argomento anche in forma di screencast, a fondo pagina trovate le informazioni ad esso relative.
In questo articolo torno a parlare, più dettagliatamente, delle librerie EWF, sviluppate dai ricercatori Metz e Mora, scaricabili dalle pagine web del progetto “ewflib”.
I sorgenti possono essere utilizzati su sistemi Linux, BSD, Mac, Solaris e MS Windows (con Cygwin).
Una volta effettuata l’installazione avremo a disposizione cinque tools:

- ewfacquire per acquisire immagini di device;
- ewfacquirestream per acquisire immagini dallo standard input;
- ewfexport per esportare l’immagine in altri formati, per es raw;
- ewfverify per verificare l’immagine;
- ewfinfo per estrarre le informazioni contenute nei metadati.

Vediamoli nel dettaglio:
L’acquisizione di immagini nel formato EWF avviene attraverso ewfacquire, oppure attraverso ewfacquirestream, che consente l’acquisizione di dati attraverso lo standard input e che non tratterò in questo articolo.

nemo@nexus:~$ ewfacquire -h
ewfacquire 20080501 (libewf 20080501, zlib 1.2.3, libcrypto 0.9.8, libuuid)
Usage: ewfacquire [ -d digest_type ] [ -l filename ] [ -hqsvV ] source
source: the source file or device
-d: calculate additional digest (hash) types besides md5, options: sha1
-h: shows this help
-l: logs acquiry errors and the digest (hash) to the filename
-q: quiet shows no status information
-s: swap byte pairs of the media data (from AB to BA)
(use this for big to little endian conversion and vice versa)
-v: verbose output to stderr
-V: print version

le opzioni rilevanti sono la:

-d che consente di richiedere il calcolo opzionale dell’hash SHA1. Di default viene calcolato solo l’MD5 che, al contrario dello SHA1, viene memorizzato nei metadati.

-l indicante il file per il log delle operazioni. Su di esso vengono scritti eventuali errori di lettura e gli hash calcolati

-s per invertire in acquisizione l’ordine dei bytes da little a big Endian o viceversa.

Nell’ipotesi di voler:
- acquisire /dev/sdb
- calcolare anche lo SHA1
-salvare il log in /home/nemo/Scrivania/log_acquisizione.txt
la nostra command line sarà:

$ ewfacquire -d sha1 -l /home/nemo/Scrivania/log_acquisizione.txt /dev/sdb

Il comando va eseguito con i diritti di root per poter accedere al device. Il tool presenta una parte interattiva con la quale ci richiede di fornire, oltre al percorso e nome dell’immagine da creare, parte delle informazioni che saranno inserite nei metadati ed informazioni relative all’acquisizione vera e propria, quali:
- formato dell’immagine da creare (smart, ftk, encase1, encase2, encase3, encase4, encase5, encase6, linen5, linen6, ewfx),
- da quale byte a quale byte duplicare, ecc..
In caso di errore in lettura ewfacquire ripeterà il tentativo di lettura per il numero di volte indicatogli e, se indicatogli, provvederà a wipare i settori corrispondenti a quelli in cui ha rilevato l’errore.

Per verificare l’integrità dei dati duplicati e contenuti all’interno del file EWF, confrontandoli con l’hash salvato nei metadati, utilizzeremo il tool ewfverify:

nemo@nexus:~$ ewfverify -h
ewfverify 20080501 (libewf 20080501, zlib 1.2.3, libcrypto 0.9.8, libuuid)
Usage: ewfverify [ -d digest_type ] [ -hqsvVw ] ewf_files
-d: calculate additional digest (hash) types besides md5, options: sha1
-h: shows this help
-l: logs verification errors and the digest (hash) to the filename
-q: quiet shows no status information
-s: swap byte pairs of the media data (from AB to BA)
(use this for big to little endian conversion and vice versa)
-v: verbose output to stderr
-V: print version
-w: wipe sectors on CRC error (mimic EnCase like behavior)

Vediamo le opzioni:

-d consente il calcolo dell’hash SHA1. Questo non viene confrontato con nulla in quanto lo SHA1 non viene memorizzato in fase di acquisizione all’interno dei metadati, starà all’operatore effettuare la verifica recuperandolo dal log dell’acquisizione

-l per indicare il file in cui loggare eventuali errori e hash

-s inverte l’ordine dei bytes come descritto in precedenza.

La command line sarà quindi:

$ ewfverify -d sha1 -l file_di_log file_ewf_da_verificare

Per estrarre le informazioni, i metadati, memorizzati all’interno del file EWF useremo il tool ewfinfo :

nemo@nexus:~$ ewfinfo -h
ewfinfo 20080501 (libewf 20080501, zlib 1.2.3, libcrypto 0.9.8, libuuid)
Usage: ewfinfo [ -d date_format ] [ -himvV ] ewf_files
-d: specify the date format, options: ctime (is default), dm (day/month), md (month/day), iso8601
-e: only show EWF read error information
-h: shows this help
-i: only show EWF acquiry information
-m: only show EWF media information
-v: verbose output to stderr
-V: print version

L’opzione:
-d definisce il formato di visualizzazione della data
-e mostra la registrazione di eventuali errori in lettura
-i mostra le info relative all’acquisizione (caso, evidence, operatore, data, ecc..)
-m mostra le info relative al media (tipologia, dimensione, offset di inizio e fine duplicazione, ecc..)
-v output esteso.

la command line sarà
$ ewfinfo -d dm -v file_ewf_da_cui_estrarre_info

Potrebbe capitare di voler operare sui dati duplicati con strumenti che non leggono il formato EWF con il quale il file è stato creato (disponibili: smart, ftk, encase1, encase2, encase3, encase4, encase5, encase6, linen5, linen6, ewfx), per esempio perchè disponiamo di una versione di EnCase meno recente di quella con cui è stata effettuata l’acquisizione.
In tal caso sarà necessario procedere alla conversione del formato utilizzando ewfexport:

nemo@nexus:~$ ewfexport -h
ewfexport 20080501 (libewf 20080501, zlib 1.2.3, libcrypto 0.9.8, libuuid)
Usage: ewfexport [ -b amount_of_sectors ] [ -B amount_of_bytes ] [ -c compression_type ] [ -d digest_type ] [ -f format ] [ -o offset ] [ -S segment_file_size ] [ -t target ] [ -hsquvVw ] ewf_files
-b: specify the amount of sectors to read at once (per chunk), options: 64 (default),
128, 256, 512, 1024, 2048, 4096, 8192, 16384 or 32768
(not used for raw format)
-B: specify the amount of bytes to export (default is all bytes)
-c: specify the compression type, options: none (is default), empty_block, fast, best
(not used for raw format)
-d: calculate additional digest (hash) types besides md5, options: sha1
(not used for raw format)
-f: specify the file format to write to, options: raw (default), ewf, smart,
encase1, encase2, encase3, encase4, encase5, encase6, linen5, linen6, ewfx
-h: shows this help
-q: quiet shows no status information
-o: specify the offset to start the export (default is 0)
-s: swap byte pairs of the media data (from AB to BA)
(use this for big to little endian conversion and vice versa)
-t: specify the target file to export to, use - for stdout (default is export)
stdout is only supported for the raw format
-S: specify the segment file size in bytes (default is 1.4 GiB)
(minimum is 1.0 MiB, maximum is 7.9 EiB for encase6 format and 1.9 GiB for other formats)
(not used for raw format)
-u: unattended mode (disables user interaction)
-v: verbose output to stderr
-V: print version
-w: wipe sectors on CRC error (mimic EnCase like behavior)

Le opzioni di maggior interesse specificano:
-b la dimensione del blocco da leggere, come per l’opzione -bs del tool dd
-B la quantità dei bytes da convertire
-c il tipo di compressione da usare
-d se calcolare l’hash opzionale SHA1
-f il formato in cui convertire
-o l’offset dal quale cominciare l’esportazione
-s se effettuare l’inversione dei bytes Little/Big Endian
-t il file da creare
-S la dimensione dei segmenti nel caso si desideri suddividere l’immagine in più parti

Va notato che alcune opzioni, quali il calcolo dell’hash, la compressione, ecc.. non vengono utilizzate convertendo il file EWF nel formato raw.
Ipotizzando di voler convertire un file EWF in formato raw, convertendo tutti i bytes, useremo:

$ ewfexport -f raw -t immagine.dd file_ewf_da_convertire

se invece desiderassimo convertire un file EWF-EnCase5 in un formato EnCase4 compresso, useremo:

$ ewfexport -c best -d sha1 -f encase4 -t file_risultante file_ewf_da_convertire

Nel caso di desideri lavorare sull’immagine del device in formato raw, convertirla significa disporre di altro spazio di storage, perchè si viene a creare un duplicato, un secondo file, di dimensioni circa uguali, nel caso non si sia usata compressione nell’acquisizione, se non superiori nel caso si sia fatto ricorso alla compressione.
Ciò può rappresentare una soluzione scomoda a livello di storage.
In tal caso ci viene in aiuto lo script mount_ewf-20080513.py, per la cui esecuzione è necessario avere installato il pacchetto python-fuse (Python bindings for FUSE), per Ubuntu disponibile nei repository.
Una volta creata la directory da utilizzarsi quale punto di mount, e dopo aver dato allo script i permessi di esecuzione è sufficiente utilizzare la seguente sintassi:

$ mount_ewf-20080513.py file_ewf_.E01 /percorso/punto_di_mount

Dopo aver eseguito l’operazione con i diritti di root si potrà accedere al punto di mount trovandovi i dati duplicati in formato raw ed un file di testo contenente i metadati.

Per coloro che non amano la riga di comando esiste Guymager, un’interfaccia grafica il cui utilizzo ho già spiegato nel precedente articolo relativo al formato EWF, che tuttavia consente di effettuare la sola acquisizione di immagini.
guymager - parametri per l\'acquisizione
Il formato nel quale acquisire viene definito all’interno del file di configurazione (/etc/guymager/local.cfg).

Dopo aver illustrato l’utilizzo dei tools open source spendo due parole su Linen il tool della Guidance Software.
Perchè? Perchè potrebbe capitare di non poter utilizzare tools open source ed in tal caso Linen rappresenterebbe un’utile, estrema risorsa.
Ipotiziamo uno scenario:
devo effettuare l’acquisizione di un sistema RAID non riconosciuto dalle usuali distro per la forensics.
Decido quindi di usare una Knoppix o una Kannotix, con un maggior supporto hardware. All’avvio avrò cura di passare le dovute opzioni per impedire il mount di qualunque dispositivo.
Volendo acquisire l’immagine in formato EWF mi collego in rete per scaricare il pacchetto ewflib e:
- non ho connettività 8O
- ho connettività ma non riesco a soddisfare le eventuali dipendenze :shock:
Quindi non riesco ad installare le ewflib.
Se ho Linen su penna usb ho risolto il problema.

Screencast
Ieri ho realizzato uno screencast in cui spiego quanto avete letto nelle righe precedenti, si tratta di un file in formato avi di circa 830 MB, della durata di circa 61 minuti.
Sfortunatamente mentre presentavo ewfexport ha suonato il campanello (si sente) un corriere. Mettendo in pausa la registrazione si nota solo il suono, però mi ha fatto perdere il filo ed ho tralasciato di parlare dello script in python, sopra spiegato.
Ho provato a convertire in formato flv e a ridurre la risoluzione, ma si ha una perdità di qualità tale da non consentire di leggere la shell, quindi hi uploadato il file nelle sue dimensioni originali.
Buona visione e, mi raccomando, fatemi sapere se è stato interessante e se ritenete lo screencast (con questo livello di trattazione tecnica) una risorsa utile.

Forensics, Tools | Comments | Trackback

Leave a Reply

  1.  
  2.  
  3.  
  4. XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
You can keep track of new comments to this post with the comments feed.

Cerca

 

settembre: 2010
L M M G V S D
« ago    
 12345
6789101112
13141516171819
20212223242526
27282930  

Categorie

Blogroll

Feed