Foremost ed i suoi segreti...

Molti di voi sapranno cos'è Foremost, il più famoso "carver" nell'ambito del recupero dati e della computer forensics, ma per chi non lo sapesse:
Foremost è un programma da console per recuperare i file in base alle loro intestazioni, footers, e le strutture dati interne.
Questo processo viene comunemente denominato data carving.Foremost è in grado di lavorare su file immagine (bitstream), come quelli generati dai dd, Safeback, Encase, ecc, o direttamente sul dispositivo.
Gli headers ed i footers possono essere specificati da un file di configurazione o è possibile utilizzare parametri della riga di comando per specificare i tipi di file built-in.
Originariamente sviluppato da parte degli US Air Force Office of Special Investigations e dal The Center for Information Systems Security Studies and Research, attualmente Foremost è Open Source ed è mantenuto da Jesse Kornblum, Kris Kendall, and Nick Mikus.
Quando questo fantastico programmino viene lanciato, crea nella directory di output un file "audit.txt" ed una serie di sottocartelle nominate col tipo di file ricercato (es. jpg, doc, tiff, ecc.).
All'interno di queste cartelle ci sono i files "carvati", ossia estratti in base al loro "magic number" presente negli headers e nei footers, questi files sono quelli attivi, quelli cancellati e anche quelli non-allocati.
Dato che Foremost agisce sulla parte dati del dispositivo da analizzare e non considera il File System,(ecco perchè si può usare per recuperare i dati dai supporti formattati), i files trovati non avranno il nome, ma saranno nominati con l'indirizzo del settore sul quale sono allocati, che moltiplicato per l'offset dà l'indirizzo assoluto sul dispositivo, sia i nomi dei files sia i loro offset sono scritti nel file AUDIT.TXT.
Ecco un esempio:

 

Foremost version 1.5.2 by Jesse Kornblum, Kris Kendall, and Nick MikusAudit File
Foremost started at Fri Mar 28 11:59:15 2008
Invocation: foremost usb.dd
Output directory: /home/nemo/immagini_dd/output
Configuration file: /usr/local/etc/foremost.conf
------------------------------------------------------------------
File: usb.dd
Start: Fri Mar 28 11:59:15 2008
Length: 962 MB (1009254400 bytes)
Num Name (bs=512) Size File Offset Comment
0: 00000611.jpg 11 KB 312832
1: 00000643.jpg 8 KB 329216
2: 00000675.jpg 3 KB 345600
3: 00000707.jpg 9 KB 361984
4: 00000739.jpg 8 KB 378768
-------------------------------------------------

il nome rappresenta il settore in cui si trova il file.
esempio per il primo file
nome_file=611 >> il settore in cui si trova, il cui offset è 611*512=312832
dove 512 bytes è la misura minima del settore.

L'offset ci indica l'indirizzo assoluto in bytes sul disco, quindi 611 settori sono equivalenti a 312832 bytes.

nemo@nexus:~/immagini_dd$ xxd -s 312832 -l 512 usb.dd
004c600: ffd8 ffe0 0010 4a46 4946 0001 0100 0001 ......JFIF......
004c610: 0001 0000 ffdb 0043 0005 0304 0404 0305 .......C........
004c620: 0404 0405 0505 0607 0c08 0707 0707 0f0b ................
004c630: 0b09 0c11 0f12 1211 0f11 1113 161c 1713 ................
004c640: 141a 1511 1118 2118 1a1d 1d1f 1f1f 1317 ......!.........
004c650: 2224 221e 241c 1e1f 1eff db00 4301 0505 "$".$.......C...
004c660: 0507 0607 0e08 080e 1e14 1114 1e1e 1e1e ................

Da un'analisi di Andrea Ghirardini è emerso, che per supporti di grandi dimensioni Foremost non riesce a scrivere il numero del settore corretto.

 

Quando Andrea ne parlò sospettammo subito in una limitazione di qualche variabile, notando che tutti i files carvati avevano il nome composto sempre di 8 + 3 caratteri (nome+estensione), ed infatti dopo molti giorni di passione, i curatori di Foremost risposero ad Andrea, confermando il fatto che se il nome del file non può superare gli otto caratteri, il bug è causato da un integer overflow che comporta un errato calcolo.

Nanni Bassetti

http://www.nannibassetti.com