Filtrare la time line di Autopsy

Inserito da denis frati il Gio, 07/17/2008 - 14:52

La scorsa settimana, su CFI ML, Alessio chiedeva come filtrare i risultati della time line generata da Autopsy per estrarre le occorrenze relative ad un determinato arco temporale.
Autopsy Forensic Browser, la GUI per lo Sleuth Ki,t consente nativamente di selezionare l'intervallo temporale da prendere in esame con la time line.
Su un sistema installato ed utilizzato da tempo, la time line potrebbe riportare migliaia di occorrenze, decine di migliaia di righe, tale da essere difficilmente lavorabile con un foglio di calcolo.
L'investigatore può quindi intervenire selezionando l'intervallo di tempo di suo interesse, limitando la quantità di righe di output da dover esaminare.

A quanto scrive chi già utilizza PTK, le possibilità di filtrare i risultati delle time line sono ancora maggiori con tale tool. Il prodotto di DFLabs consente infatti di filtrare i risultati della time line in base alla partizione, alle date, o agli istanti temporali.
Il quesito di Alessio era più che altro legato ad un progetto di tesi già in fase terminale, che non poteva quindi prevedere l'introduzione di tool differenti e richiedeva, per fini del suo autore, un filtraggio testuale della time line.
Per generare una time-line rispondente alle sue necessità si sarebbe potuto quindiutilizzare MACTIME, il tool a riga di comando che opera "dietro" all'interfaccia grafica di Autopsy.

Si deve notare come esistano due versioni di MACTIME, una presente nel Coroner's Toolkit di Dan Farmer e Wietse Venema, l'altra, rielaborazione di questa, nello Sleuthkit di Brian Carrier.
La principale differenza tuttavia è che il tool di Farmer-Vienema lavora su file system Unix like, mentre quello di Carrier supporta anche quelli non Unix-like, come FAT ed NTFS.

Il MACTIME del coroner's Toolkit può essere lanciato direttamente e solo sul file system montato, non è possibile lanciarlo sul device.
Con questa sintassi:
# /usr/local/tct/bin/mactime -y -d bin 1/1/2001-1/14/2001

il tool accedendo direttamente ai metadati relativi ai file contenuti nella directory, svilupperà la time line, in formato testuale.
01 Jan 04 20:03:28 1279 m.c -rwxr--r-- root wheel bin/strip_tct_home
01 Jan 04 20:03:29 12300 m.c -rwxr--r-- root wheel bin/grave-robber
21639 m.c -rwxr--r-- root wheel bin/mactime
01 Jan 04 20:03:32 15149 m.c -rwxr-xr-x root wheel bin/md5
15772 m.c -rwxr-xr-x root wheel bin/timeout
01 Jan 04 20:03:37 62353 m.c -rwxr-xr-x root wheel bin/ils

Il MACTIME di Carrier non lavora direttamente sul file system FAT o NTFS, leggendone i metadati.
Richiede un passaggio intermedio, ossia che si generi il listato dei file contenuti all'interno del file system, estraendo i relativi metadati temporali (mac time).

$ sudo fls -r -f fat -m C: -o 62 immagine.dd
0|C:/a|0|3|16895|d/drwxrwxrwx|1|0|0|0|2048|1215640800|1215700216|1215700216|512|0
0|C:/a/a_001|0|581|33279|-/-rwxrwxrwx|1|0|0|0|27|1215640800|1215700156|1215700156|512|0
0|C:/a/a_002_f|0|582|33279|-/-rwxrwxrwx|1|0|0|0|21|1215640800|1215700168|1215700168|512|0
0|C:/a/a_003_f|0|583|33279|-/-rwxrwxrwx|1|0|0|0|25|1215640800|1215700186|1215700186|512|0
0|C:/a/a_004_f|0|584|33279|-/-rwxrwxrwx|1|0|0|0|21|1215640800|1215700200|1215700200|512|0
0|C:/a/a_005_f|0|585|33279|-/-rwxrwxrwx|1|0|0|0|25|1215640800|1215700216|1215700216|512|0
0|C:/b|0|4|16895|d/drwxrwxrwx|1|0|0|0|2048|1215640800|1215700302|1215700302|512|0
0|C:/b/b_001|0|645|33279|-/-rwxrwxrwx|1|0|0|0|19|1215640800|1215700246|1215700246|512|0
0|C:/b/b_002_f|0|646|33279|-/-rwxrwxrwx|1|0|0|0|19|1215640800|1215700256|1215700256|512|0
0|C:/b/b_003_f|0|647|33279|-/-rwxrwxrwx|1|0|0|0|18|1215640800|1215700268|1215700268|512|0

0|C:/b/b_004_f|0|648|33279|-/-rwxrwxrwx|1|0|0|0|19|1215640800|1215700278|1215700278|512|0
0|C:/b/b_005_f|0|649|33279|-/-rwxrwxrwx|1|0|0|0|19|1215640800|1215700302|1215700302|512|0

(In realtà l'output viene reindirizzato su un file
$ sudo fls -r -f fat -m / -o 62 /dev/sdc > Desktop/fls_x_mactime )

e lo si dia in input al tool MACTIME (presente nello Sleuth Kit)
nemo@nexus:~/Prove$ mactime -d -b Desktop/fls_x_mactime 06/01/2008-07/15/2008
Date,Size,Type,Mode,UID,GID,Meta,File Name
Thu Jul 10 2008 00:00:00,21,.a.,-/-rwxrwxrwx,0,0,582,/a/a_002_f
Thu Jul 10 2008 00:00:00,19,.a.,-/-rwxrwxrwx,0,0,648,/b/b_004_f
Thu Jul 10 2008 00:00:00,2048,.a.,d/drwxrwxrwx,0,0,4,/b
Thu Jul 10 2008 00:00:00,19,.a.,-/-rwxrwxrwx,0,0,646,/b/b_002_f
Thu Jul 10 2008 00:00:00,21,.a.,-/-rwxrwxrwx,0,0,584,/a/a_004_f
Thu Jul 10 2008 00:00:00,25,.a.,-/-rwxrwxrwx,0,0,583,/a/a_003_f
Thu Jul 10 2008 00:00:00,19,.a.,-/-rwxrwxrwx,0,0,645,/b/b_001
Thu Jul 10 2008 00:00:00,25,.a.,-/-rwxrwxrwx,0,0,585,/a/a_005_f
Thu Jul 10 2008 00:00:00,18,.a.,-/-rwxrwxrwx,0,0,647,/b/b_003_f
Thu Jul 10 2008 00:00:00,2048,.a.,d/drwxrwxrwx,0,0,3,/a
Thu Jul 10 2008 00:00:00,19,.a.,-/-rwxrwxrwx,0,0,649,/b/b_005_f
Thu Jul 10 2008 00:00:00,2048,.a.,d/drwxrwxrwx,0,0,5,/c
Thu Jul 10 2008 00:00:00,27,.a.,-/-rwxrwxrwx,0,0,581,/a/a_001
Thu Jul 10 2008 16:29:16,27,m.c,-/-rwxrwxrwx,0,0,581,/a/a_001
Thu Jul 10 2008 16:29:28,21,m.c,-/-rwxrwxrwx,0,0,582,/a/a_002_f
Thu Jul 10 2008 16:29:46,25,m.c,-/-rwxrwxrwx,0,0,583,/a/a_003_f
Thu Jul 10 2008 16:30:00,21,m.c,-/-rwxrwxrwx,0,0,584,/a/a_004_f
Thu Jul 10 2008 16:30:16,2048,m.c,d/drwxrwxrwx,0,0,3,/a
Thu Jul 10 2008 16:30:16,25,m.c,-/-rwxrwxrwx,0,0,585,/a/a_005_f
Thu Jul 10 2008 16:30:46,19,m.c,-/-rwxrwxrwx,0,0,645,/b/b_001
Thu Jul 10 2008 16:30:56,19,m.c,-/-rwxrwxrwx,0,0,646,/b/b_002_f
Thu Jul 10 2008 16:31:08,18,m.c,-/-rwxrwxrwx,0,0,647,/b/b_003_f
Thu Jul 10 2008 16:31:18,19,m.c,-/-rwxrwxrwx,0,0,648,/b/b_004_f
Thu Jul 10 2008 16:31:42,2048,m.c,d/drwxrwxrwx,0,0,4,/b

Indubbiamente leggerlo in tal modo è poco agevole e conviene inviare l'output su un file.
Si consideri che se si desiderà estrarre la time-line dal 10 luglio ore 00:00 al 10 luglio ore 24.00, è necessario impostare l'intervallo 07/10/2008-07/11/2008, ricordando sempre di usare il formato di data anglosassone mm/gg/aaaa.
Solo per completezza segnalo che sebbene da shell il comando sia "mactime" (per lo meno usando il pacchetto precompilato dello STK su *buntu), in realtà Carrier abbia differenziato il suo tool chiamandolo "mactime-sleuthkit" e che da shell il binario venga invocato attraverso dei link

nemo@nexus:~$ locate mactime
/etc/alternatives/mactime
/etc/alternatives/mactime.1.gz
/usr/bin/mactime
/usr/bin/mactime-sleuthkit
/usr/share/man/man1/mactime-sleuthkit.1.gz
/usr/share/man/man1/mactime.1.gz
/var/lib/dpkg/alternatives/mactime
nemo@nexus:~$ ls -al /usr/bin/ | grep mactime
lrwxrwxrwx 1 root root 25 2008-07-08 11:12 mactime -> /etc/alternatives/mactime
-rwxr-xr-x 1 root root 30049 2007-12-11 09:45 mactime-sleuthkit
nemo@nexus:~$ ls -al /etc/alternatives/ | grep mactime
lrwxrwxrwx 1 root root 26 2008-07-08 11:12 mactime -> /usr/bin/mactime-sleuthkit
lrwxrwxrwx 1 root root 42 2008-07-08 11:12 mactime.1.gz -> /usr/share/man/man1/mactime-sleuthkit.1.gz

Tornando alla necessità di Alessio, quando realisticamente potrebbe essere necessario lavorare sulla time line senza poterla rigenerare filtrandola nell'intervallo di tempo desiderato, con i tool visti sopra?
Probabilmente solo quando non si ha l'immagine forense a disposizione.
Senza andare a tirare in causa problematiche e/o errori di procedura e di gestione dei reperti nell'indagine, penserei ad un laboratorio dove le immagini sono mantenute su un server che per qualche problema non sia funzionante e l'investigatore voglia nel frattempo proseguire il proprio lavoro analizzando i dati raccolti sino a quel momento.
In realtà credo si sia trattato più che altro di un'occasione in più per mettermi a giocherellare con la shell facendo un po' di esercizio.

Torniamo quindi al punto in cui abbiamo la time line generata su una partizione dal momento zero al momento dello spegnimento. Abbiamo un sacco di righe, mal gestibili dai fogli di calcolo e abbiamo necessità di filtrarle.
Si potrebbe utilizzare grep.
Ipotizzando di voler estrarre tutti gli eventi del 2008
$ grep -n "[[:alpha:]]\{3\}\ [[:alpha:]]\{3\}\ [[:digit:]]\{2\}\ 2008" Desktop/timeline.txt

tuttavia si otterebbe un risultato non corretto, in quanto nelle time line generate con MACTIME, quando più files/directory sono stati "attivati" dal sistema operativo nello stesso istante/evento, solo il primo della lista riporterà la dicitura dell'istante temporale!

Come fare quindi?
Ho lavorato su uno script che ricevuto in input un anno ne ricercasse l'occorrenza allinterno delle time line, trovatola la copaisse e verificasse se le righe successive cominciavano con spazio, indicando che si trattave di file attivati nello stesso istante temporale. In caso affermativo procedeva al dump delle righe in questione.
Ho quindi cominciato a far provare lo script ad Alessio, modificandolo in modo che potesse avere una qualche utilità (temo non supererà il gradino di mio personale esercizio).
Lo script, nella sua ultima versione, informa l'utente dell'intervallo di tempo coperto dalla time line, quindi richiede l'inserimento dell'intervallo di tempo di interesse, di cui estrarre le righe relative agli eventi avvenuti.
Se lo si desidera si può inserire una stringa (il nome di un file o di una directory) in modo da estrarre solo le occorenze relative all'intervallo di interesse e che coinvolgono unicamente file o directory nei cui nomi compaia tale stringa.

L'output viene inviato in un file di testo creato nelle directory dalla quale si lancia lo script e denominato "timeline_filter_"dataora, per esempio:
timeline_filter_merlug1623:11:06CEST2008
Nel file di output compare l'indicazione temporale anche per le righe della time line che ne sono prive.
in tal modo non sovrescrivo nullo, nè creo altre directory.
Non è presente l'autocompletamento per l'inserimento del file di input, avrei potuto passarlo come variabile direttamente al lancio dello script.
Non sono riuscito a far in modo che la stringa con cui eventualmente filtrare le occorrenze possa contenere spazi, può darsi dipenda da come ho strutturato lo script o da come ho utilizzato le variabile, se volete suggerirmi un modo miglire ben volentiri, miglioro lo scrit e imparo qualcosa di più.

Timeline_filter.sh.tar.gz 56e045a621fb5ae8b58b01c4b4940196

Special Thank's to Alessio G. che mi ha pungolato con il suo quesito e ha provato lo script realizzato

Se avete voglia di provarlo fatemi sapere il vostro parere, segnalatemi eventuali errori e possibili migliorie.

Da www.denisfrati.it