An Analysis of Ext4 for Digital Forensics | Cerca per titolo, autore, parola chiave | ||||||||
An Analysis of Ext4 for Digital Forensics Kevin Fairbanks. Ext4 è attualmente il filesystem di default per molte distribuzioni Linux. La sua distribuzione attuale e il fatto di essere stato adottato anche da Android aumenta la probabilità che Ext4 sarà il file system utilizzato dagli apparecchi elettronici nel futuro. Diventa, quindi, necessario, imparare ad analizzarlo. Nello specifico, queto testo affronterà le strutture del file system, quali il superblock, il layout dei gruppi di blocchi, la mappatura degli inode. L'unità di misura di base per gli hard disk è il settore, che, normalmente, è composto da 512 byte. I file system, però, tendono ad operare su unità più grandi, composte da più settori: i blocchi. I sistemi ExtX (Ext2 Ext3 Ext4) supportano blocchi da 1024, 2048, 4096 byte. I blocchi, a loro volta, vengono organizzati in unità ancora più grandi, chiamate gruppi di blocchi. Ciascun gruppo di blocchi, a parte, forse, l'ultimo, è composto da un ugual numero di blocchi di dati e di inode. Un inode contiene le informazioni su uno specifico file (metadata), quali timestamp, permessi di accesso, puntatori ai blocchi di dati (il contenuto del file). Poichè un file deve avere un solo inode, il numero totale dei file che un sistema può contenere è limitato, non solo dall'ammontare del numero di blocchi di dati disponibili (liberi), ma anche dal numero totale degli inode. Nei filesystem ExtX (Ext2 Ext3 Ext4), i blocchi non sono tutti uguali. Oltre ai blocchi che conterranno i dati (i contenuti dei file), i filesystem usano anche i descrittori dei gruppi, le bitmap (mappature a bit) dei blocchi dei dati e degli inode, le tabelle inode, il superblock. È l'area del filesystem riservata ai metadata, cioè le informazioni sul filesystem stesso e sui file ospitati dal filesystem. Il superblock contiene le informazioni sull'intero filesystem: numero totale dei blocchi e degli inode, il numero dei blocchi per ciascun gruppo di blocchi, il numero dei blocchi disponibili nel filesystem, il primo inode disponibile. Un descrittore di un gruppo di blocchi contiene le meta informazioni su un particolare gruppo di blocchi: l'intervallo (range) dei numeri inode presenti nel gruppo, i blocchi presenti nel gruppo, l'offset dei blocchi chiave del gruppo. Ciascun gruppo di blocchi contiene una mappatura a bit (bitmap) degli inode presenti nel gruppo e una mappatura a bit dei blocchi dei dati. Ciascuna di queste tabelle occupa un blocco di dati. In una mappatura a bit (bitmap), un bit impostato a 1 identifica un oggetto non disponibile, mentre un bit non impostato (0) indica un oggetto non utilizzato, quindi disponibile. Quindi, per entrambe le tabelle bitmap, un bit rappresenta una specifica zona di dati o uno specifico inode. Nei filesystem ExtX (Ext2 Ext3 Ext4), un inode occupa 128 byte, di default. Gli inode vengono memorizzati in sequenza, in una struttura chiamata: inode table (tabella degli inode), che è presente in ogni gruppo di blocchi. Le dimensioni della tabella degli inode sono correlate alle dimensioni dei blocchi di dati. Per esempio, con i blocchi da 4096 byte, un blocco può contenere 32 inode (4096/128). Poichè sappiamo che un gruppo di blocchi può contenere 32.768 inode, visto che nella tabella bitmap, di 4096 byte o 32.768 bit, ogni bit corrisponde ad un inode, se ciascun inode occupa 128 byte, la tabella degli inode avrà un dimensione di 4.194.304 byte, che possono essere contenuti in 1024 blocchi da 4096 byte ciascuno. Un inode contiene, tra le altre informazioni relative ad un file specifico, anche i puntatori ai blocchi di dati in cui il file è stato memorizzato. Nel tentativo di non estendere troppo la struttura di un inode, pur garantendo la possibilità di supportare file di grandi dimensioni, sono stati implementati puntatori di tipo differente. I primi 10 indirizzi puntano direttamente a blocchi di dati (indirizzamento diretto). Quindi, 10 blocchi di dati sono accessibili direttamente. L'undicesimo indirizzo punta ad un blocco contenente, a sua volta, indirizzi a blocchi di dati (indirect block a indirettezza singola). Il dodicesimo indirizzo punta ad un blocco di dati che contiene, a sua volta, altri 128 puntatori, ciascuno dei quali punta, a sua volta, non ai blocchi di dati, bensì ad un secondo blocco, che contiene altri 128 puntatori, che puntano, finalmente, ai blocchi di dati (indirettezza doppia). il tredicesimo indirizzo, infine, punta ad un blocco di dati, contenente altri 128 indirizzi, ciascuno dei quali punta, non ai dati, bensi ad un altro blocco di altri 128 puntatori, ciascuno dei quali punta, ancora, ad un terzo blocco di altri 128 puntatori, che, a loro volta puntano ai dati. Lo scopo di questa trattazione dettagliata sui puntatori è di portare l'attenzione su come i filesystem Ext2 e Ext3 trattano differentemente la cancellazione di un file: Ext2 marca l'inode del file cancellato come disponibile, editando le tabelle bitmap degli inode e dei blocchi di dati. Questa pratica rende possibile un recupero del file cancellato, a meno che non sia stato sovrascritto, nel frattempo, poichè la tabella degli inode contiene ancora i puntatori ai blocchi di dati. Ext3, invece, in fase di cancellazione di un file, sovrascrive i puntatori contenuti nella tabella degli inode. Questo rende più complesso il recupero del file, che richiederà, eventualmente, tecniche più sofisticate, quali il data carving.
|
|||||||||
An Analysis of Ext4 for Digital Forensics | Disclaimer: questo è un link a contenuti ospitati su server esterni. |