Immersion in the partition table

Aprile 14th, 2009

Nel precedente articolo (Cronaca di un disastro mancato) ho raccontato come, a seguito del danneggiamento della tabella delle partizioni del mio laptop, sia comunque riuscito ad accedere al file system criptato contenuto in una partizione logica.
Conosciuto l’offset al quale si trovava la partizione contenente l’LVM con file system criptato, ho bypassato la tabella delle partizioni impostando un loop device definito attraverso il passaggio dell’offset.
in tal modo mi è stato possibile decrittare il device, visualizzare le tre partizioni in esso contenute, montare quelle di mio interesse e recuperare i dati.

Siccome sono curioso non mi sono accontentato e mi sono domandato come potessi intervenire per riparare “a mano” la tabella delle partizioni in modo da poter avviare il sistema.
Il discorso è un po’ lungo, ne faccio un breve sunto così che possiate capire se la lunga lettura vale la pena ho meno:
in parole povere, nota la struttura della tabella delle partizioni e le modalità in cui esse sono definite, ho estratto i settori contenenti le varie tabelle e, messo mano all’editor esadecimale, le ho modificate, per poi reimmetterle sul disco.
L’operazione ha avuto successo e mi è stato possibile riavviare il sistema.

Probabilmente l’utilità di tutto ciò, da un punto di vista pratico è scarsa, avendo recuperato tutti i file di mio interesse, compresi quelli di configurazione, mi sarebbe stato sufficiente portarli su un sistema creato ex novo, tuttavia da un punto di vista “didattico” trovavo questa nuova sfida molto stimolante.
Raccontare quanto ho fatto senza parlare un poco della struttura del disco e delle tabelle delle partizioni sarebbe forse poco utile per chi legge, da qui la necessità di dilungarmi nelle spiegazioni che seguiranno, dove nel modo più semplice e chiaro che mi riesce proverò a spiegare come interpretare tali elementi, presenti nei nostri dischi, spesso citati parlando di informatica, ma forse poco conosciuti nel dettaglio ai più.
Il riferimento per tutti è il quinto capitolo (PC-based partitions) del libro “File System Forensic Analisys” di Brian Carrier.

La gran parte di noi possiede personal computer con infrastruttura hardware Intel, quali gli i386, x86, ecc…
Tali dispositivi utilizzano quella che è comunemente definita partizione di tipo DOS (DOS partition).
In essa abbiamo un MBR e più partizioni. L’MBR, costituito dai primi 512 bytes (il primo settore o settore 0) contiene nei primi 446 (0-445) bytes il codice di boot, che indica al computer dove localizzare il sistema operativo da avviare e nei successivi rimanenti bytes (dal 446 al 511) la definizione della tabella delle partizioni ed il valore di signature.

bytes
-----------------------------------
0-445  codice di boot
446-461  entry 1
462-477 entry 2
478-493 entry 3
494-509  entry 4
510-511   valore signature (0xAA55)

Le partizioni possono essere quattro,

definite dalla relative “entry”, della lunghezza di 16 bytes.

bytes
--------------------------------------------------------------
0      definisce se la partizione è avviabile (bootable flag)
1-3    indirizzo CHS inizio partizione
4      Tipo partizione
5-7    indirizzo CHS fine partizione
8-11   indirizzo LBA inizio partizione
12-15  dimensione della partizione in settori

il sistema di indirizzamento CHS (cylinders, heads, sectors) funziona unicamente su dischi di capacità inferiore agli 8 GB, mentre l’indirizzamento LBA (logical block addresses) può gestire dischi aventi capacità di più terabytes (TB)

Essendo disponibili solo quattro “entry”, il numero delle partizioni disponibili apparirebbe oltremodo limitato. La soluzione a questo problema è data dalla possibilità di creare partizioni di tipo esteso.
L’utente interessato ad utilizzare più di quattro partizioni, sei per esempio, potrà quindi creare tre partizioni primarie, che occuperanno le prime tre “entry” della partition table e una partizione estesa, definita dall’ultima “entry”.
In essa verranno create le restanti tre partizioni logiche.
La gestione delle partizioni logiche da parte fa riferimento ad un MBR che ogni partizione estesa ha al suo interno. Infatti, proprio come per il disco, i primi 63 settori della partizione estesa sono riservati ed il primo di questi rappresenta l’MBR della partizione stessa.
Esso ricalca la struttura di quello del disco, con la parte per il codice di boot e quella per le entry definenti le partizioni.
Usualmente l’MBR delle partizioni estese ospita due entry, la prima definisce la partizione che conterrà il file system, la seconda una nuova partizione estesa. Questa a sua volta conterrà un MBR, con la prima entry che definisce la partizione con file system e la seconda una nuova partizione logica, ecc…
L’immagine sottostante spiega (spero chiaramente) questo concetto.

Come si vede il disco inizia con l’MBR (in verde), costituito dal codice di boot e dalle 4 entry della partition table.
Le prime tre entry puntano ad altrettante partizioni primarie (nei colori giallo ed arancione) contenenti file system (ntfs, fat, ext*, ecc….), mentre l’ultima entry definisce (faccio riferimento al solo indirizzamento LBA) inizio e dimensione della prima partizione estesa (Primary extended partition, indicata in rosso scuro), questa ha dimensione pari allo spazio rimanente sul disco.
All’inizio della partizione estesa primaria abbiamo nuovamente un MBR (sempre in verde), con lo spazio riservato al boot code (vuoto se la partizione non è bootabile) e due “entry”. La prima definisce la partizione contenente il file system (in azzurro), la seconda una nuova partizione estesa (in viola). Questa partizione estesa secondaria (secondary extended partition) non ha dimensione pari a tutto lo spazio disponibile, ma unicamente pari alla dimensione delle partizione con file system che conterrà più 63 settori di MBR e spazio non allocato.
Se andiamo a vedere il contenuto della prima partizione estesa secondaria (in viola) nell’estratto, vediamo che contiene un nuovo MBR (in verde) e due entry, la prima per la partizione con file system (sempre in celeste), la seconda per una nuova partizione estesa secondaria (in lilla).
Questa partizione logica ha dimensione pari alla rimanenza del disco perchè, come vediamo dall’estratto, conterrà l’utlima partizione con file system.
Se osserviamo l’estratto notiamo che l’MBR ha lo spazio riservato al codice di boot ed una sola entry, definente (come dicevamo) l’ultima partizione contenente un file system.

Ad onor del vero va precisato che esistono più tipologie di partizioni estese (DOS extended, Windows 95 extended e Linux extended) e che in esse non vi saranno neccessarimente due sole entry.
Brian Carrier ha infatti reso disponibile (http://groups.yahoo.com/group/cftt) un’immagine bitstream nella quale si trova una partizione estesa avente due entry per partizioni con file system ed una per la successiva partizione estesa.
Tale struttura crea errori nella gestione da parte di alcuni tools forensi.

Per vedere nella pratica questi concetti racconto come sono intervenuto nella modifica delle partizioni del mio disco.
Carrier spiega, nel suo libro, le modalità con cui individuare l’offset di inizio delle varie partizioni dall’analisi delle sole entry.
Nel mio caso, la presenza della partition table, per quanto danneggiata, mi ha consentito di evitare questi calcoli sfruttando l’output di mmls, tool sviluppato dallo stesso Carrier e facente parte dello Sleuth Kit.

Il disco in questione ha una dimensione di
250059350016 bytes = 488397168 settori dallo 0 al 488397167

A seguito dei due interventi con l’utility “testdisk” descritti nel precedente articolo, la condizione della tabella delle partizioni era la seguente:

Analizziamo le singole tabelle delle partizioni:

00:  Meta    0000000000   0000000000   0000000001   Primary Table

Come si vede è presente il codice di boot (si tratta in realtà di GRUN e non di LILO) e sono definite due partizioni:

03:  Meta    0001060290   0110157704   0109097415   Win95 Extended (0x0F)

nell’MBR della partizione estesa primaria troviamo la definizione:

08:  01:01   0022041180   0043006004   0020964825   DOS Extended (0x05)

MBR della partizione estesa secondaria, identificata nell’output di mmls dal n°8, dove troviamo:

12:  02:01   0043022070   0105948674   0062926605   DOS Extended (0x05)

dove sono definite:

15:  03:01   0105948675   0110157704   0004209030   DOS Extended (0x05)

MBR della partizione identificata da mmls con il n° 15 dove individuiamo:

18:  04:01   0110157705   0110173769   0000016065   DOS Extended (0x05)

l’MBR della partizione estesa secondaria identificata dal n°18 contiene una sola entry per una partizione con file system ext* della dimensione di soli 16002 settori, che è dove avrebbe dovuto esserci il mio file system criptato!!

Al fine di recuperare il mio sistema decido di ridimensionare quest’ultima partizione, ma per prima cosa dovrò aumentare la dimensione della partizione estesa primaria, che contiene tutte quelle successive.
Facendo riferimento al primo MBR in cui la dimensione di tale partizione è definita nella seconda entry

dovrò modificare il valore c7b18006 (>> 068018c7 >> 53G) trasformandolo nella nuova dimensione in settori che voglio assegnare alla partizione. Questa  dimensione sarà definita dalla numero di settori disponibili sul disco a cui sottraggo quello di inizio partizione, più un altro settore corrispondente al settore 0, ossia:
(488397168-1060290)-1=487336877 >> 0×1d0c2bad >> ad2b0c1d nuova dimensione

come indicato nell’immagine sopra. Una volta modificato il valore nel dump che avevo effettuato, non mi resta che copiare il nuovo mbr (boot code e partition table) sul disco

denis@caine:~$ sudo dd if=new_1mbr.dd of=/dev/sdb

Se lancio nuovamente fdsik -l ed mmls, posso notare:

il corretto dimensionamento della partizione estesa primaria (in verde), mentre le partizioni definite dai numeri 18 (estesa secondaria) e 20 (secondary file system) sono rimaste invariate e non sono corrette.
E’ inoltre presente lo spazio non allocato a fine disco di numerosi GB.

Decido a questo punto di provare a modificare direttamente la dimensione della partizione con file system ext3, definita dal n°20, ignorando bellamente che questa è contenuta nell’estesa secondaria n°18.
Tuttavia la dimensione della partizione (n°20) con file system ext3 è definita nell’MBR della partizione estesa secondaria n°18, del cui MBR effettuo il dump:

denis@caine:~$ sudo dd if=/dev/sdb skip=110157705 bs=512 count=1|xxd

dove 0×823e0000 (0×00003e82 in big endian) definisce una dimensione di 16002 settori, mentre deve assumere il valore di tutto lo spazio disponibile

16002+378223398=378239400 > 0×168B79A8 (big.end.) > a8798b16 (lit.end.)

apportate le modifiche all’MBR estratto e lo reimmetto sul disco

denis@caine:~$ sudo dd if=last_ext_part_.dd of=/dev/sdb seek=110157705 bs=512

Se ora osservo gli output di fdisk ed mmls noto che:

ora la dimensione della partizione contenente il secondary file system (in arancione) è corretta, arriva sino alla fine del disco e non lascia alcuno spazio non allocato.

A questo punto ho spento Caine, estratto il disco da lavoro dal portatile e reimmesso il disco di cui ho modificato le partizioni e…magia! Il sistema si è avviato! Dopo il boot ho inserito, quando richiesta, la password e, passato il controllo, tutto il sistema è stato caricato! Soddisfazione enorme.

Ma non ero ancora contento: come potete vedere dall’immagine sopra, la dimensione della partizione estesa secondaria, identificata dal n°18 non è corretta. Così ho deciso di intevenire a correggerla.
Questa dimensione è definita dalla seconda entry presente nell’MBR della precedente partizion estesa secondaria, la n° 15.
Avvio nuovamente con Caine collegando il disco da modificare via usb e faccio quindi il dump dell’MBR della partizione definita nell’output di mmls dal n°15:

denis@caine:~$ sudo dd if=/dev/sdb skip=105948675 bs=512 count=1 |xxd

posso osservare che viene definita e dimensionata la partizione di swap linux e la partizione dos estesa, la cui dimensione è definita dal valore (in verde) 0xc13e 0000, che trasformato il big endian (0×3ec1) come già detto, da 16065 settori.
La nuova dimensione sarà definita dalla dimensione dell’ultima partizione linux (378239400 settori) a cui si aggiungono i 63 settori del suo bot sector (110157768-110157705=63)
378239400+63=378239463 >> 168B79E7 >> e7798b16

Modificato l’MBR lo copio al suo posto

denis@caine:~$ sudo dd if=tab_15_new.dd of=/dev/sdb seek=105948675 bs=512

e dall’output di mmls

verifico il corretto dimensionamento dell’ultima partizione estesa secondaria.

A questo punto non mi resta che spegnere, rimettere il disco su cui ho modificato le partizione nel laptop e riavviare. Tutto funziona perfettamente, tantè che sto scrivendo con esso.

Il mio logorroico articolo è giunto al termine. Mi auguro non venga erroneamente scambiato per un qualche sfoggio di capacità, mi sono solo sforzato di leggere dal libro di Carrier e di applicare le nozioni. Spero invece che quanto scritto possa servire a chi ancora non ha chiara la struttura delle partizioni e delle tabelle in cui esse sono definite a spazzare via qualche dubbio.

Dal punto di vista forense può forse esserci un applicabilità nel contrasto ad alcune metodiche di anti forensics, o quanto meno si può comprendere con maggiore facilità come strutture create ad-hoc per mettere in crisi programmi di analisi forense possano essere realizzate.

Dal punto di vista del recupero dati tutto dipende…dalla vostra voglia di sbattervi :-D

Strumenti utilizzati:

Forensics, Linux | Comments | Trackback

4 Responses to “Immersion in the partition table”

  1. 1wiz4rd
    Aprile 15th, 2009 @ 10:30

    Complimenti , che lavorone e in particolare che tenacia :-) , ottima anche la spiegazione che mi ha chiarito alcuni dubbi che avevo pur avendo letto il libro File System Forensic Analisys.

  2. 2bancaldo
    Ottobre 25th, 2009 @ 21:53

    Grazie infinite.
    Fino alla partition table della partizione Estesa, non ho avuto problemi.
    Fino al link alla seconda partizione logica all’interno della estesa, tutto ok.
    Con gli offset, invece, dalla terza partizione logica in poi, non ci saltavo più fuori.
    Grazie alla tua guida ed allo sleuthkit (mmls), ho risolto l’arcano.

    Grazie ancora.

  3. 3Appunti in libertà: MBR ed EBR/CBR « bancaldo™
    Ottobre 25th, 2009 @ 21:53

    [...] RINGRAZIO per tanto l’autore del KIT e questa guida esaustiva. [...]

  4. 4admin
    Ottobre 25th, 2009 @ 22:36

    @ bancaldo

    :-)

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.

 

Febbraio 2010
L M M G V S D
« Gen    
1234567
891011121314
15161718192021
22232425262728

Categorie

Pagine

Blogroll