Eccoci finalmente al momento di rivelare tutti i segreti del game di data hiding. Come prima cosa voglio ringraziare tutti i partecipanti per il tempo speso e soprattutto per essere “stati al gioco”. Andiamo al sodo.
Le bandierine
Il pen drive contiene due filesystem nascosti, oltre a quello “visibile”. Entrambi sono di tipo FAT, creati con l’ausilio dei loop device in Linux. Il primo, in FAT32 con etichetta di volume nascosto1, ha questi dati di dimensione ed utilizzo:
- Totale: 1.009.729.536 byte
- Usati: 11.706.368 byte
- Liberi: 998.023.168 byte
Per poterlo montare senza lamentele da parte del sistema operativo, basta creare un loop device con questo comando:
# losetup -o 1009935360 /dev/loop1 pen-drive.dd
e di seguito usare il comando mount sul device appena assegnato, ossia loop1, in questo modo:
# mount -t vfat /dev/loop1 /media/loop1 -o ro,noatime
Le opzioni usate sono per essere proprio sicuri che niente venga toccato. I file sono quattro, tutte immagini. Lavorando con i comandi ls e stat si ottengono tutte le informazioni richieste:
# ls -l
-rwxr-xr-x 1 root root 3256972 21 ott 13:26 img_0154.jpg
-rwxr-xr-x 1 root root 2882079 21 ott 13:26 img_0155.jpg
-rwxr-xr-x 1 root root 3447899 21 ott 13:26 img_0156.jpg
-rwxr-xr-x 1 root root 2107408 21 ott 13:26 img_0477.jpg
# stat *
File: `img_0154.jpg'
Size: 3256972 Blocks: 6368 IO Block: 4096 regular file
Device: 701h/1793d Inode: 6 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2008-10-21 01:00:00.000000000 +0200
Modify: 2008-10-21 13:26:34.000000000 +0200
Change: 2008-10-21 13:26:56.000000000 +0200
File: `img_0155.jpg'
Size: 2882079 Blocks: 5632 IO Block: 4096 regular file
Device: 701h/1793d Inode: 7 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2008-10-21 01:00:00.000000000 +0200
Modify: 2008-10-21 13:26:38.000000000 +0200
Change: 2008-10-21 13:26:56.000000000 +0200
File: `img_0156.jpg'
Size: 3447899 Blocks: 6736 IO Block: 4096 regular file
Device: 701h/1793d Inode: 8 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2008-10-21 01:00:00.000000000 +0200
Modify: 2008-10-21 13:26:40.000000000 +0200
Change: 2008-10-21 13:26:57.000000000 +0200
File: `img_0477.jpg'
Size: 2107408 Blocks: 4120 IO Block: 4096 regular file
Device: 701h/1793d Inode: 9 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2008-10-21 01:00:00.000000000 +0200
Modify: 2008-10-21 13:26:46.000000000 +0200
Change: 2008-10-21 13:26:57.000000000 +0200
Il conteggio delle bandierine è presto fatto:
- 4 per il filesystem (tipo, dimensione, libero/occupato)
- 4 per i file trovati
- Per ogni file sono 5 bandierine: nome, dimensione ed i tre orari, accesso, modifica, creazione.
In totale fanno 28 punti per questo filesystem.
Passiamo ora a quello che si è rivelato più difficile da trovare. E’ “contenuto” all’interno di quello normalmente visibile, è in FAT16 ed ha etichetta nascosto2. Questi i suoi dati dimensionali:
- Totale: 409.378.816 byte
- Usati: 516.096 byte
- Liberi: 408.862.720 byte
Per poterlo montare senza lamentele, prima si crea il loop device così:
# losetup -o 512000000 /dev/loop2 pen-drive.dd
poi si procede al mount:
# mount -t vfat /dev/loop2 /media/loop2 -o ro,noatime
Et-voilà. Ora passiamo ai file, solo due, entrambi PDF, datasheet di componenti elettronici: una memoria RAM ed un controller per porte seriali.
Come sopra, lavorando di ls e stat abbiamo tutto quello che ci serve:
# ls -l
-rwxr-xr-x 1 root root 364643 21 ott 13:32 16c450.pdf
-rwxr-xr-x 1 root root 146960 21 ott 13:33 62256.pdf
# stat *
File: `16c450.pdf'
Size: 364643 Blocks: 720 IO Block: 8192 regular file
Device: 702h/1794d Inode: 12 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2008-10-21 01:00:00.000000000 +0200
Modify: 2008-10-21 13:32:46.000000000 +0200
Change: 2008-10-21 13:32:46.000000000 +0200
File: `62256.pdf'
Size: 146960 Blocks: 288 IO Block: 8192 regular file
Device: 702h/1794d Inode: 13 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2008-10-21 01:00:00.000000000 +0200
Modify: 2008-10-21 13:33:18.000000000 +0200
Change: 2008-10-21 13:33:18.000000000 +0200
Il conteggio delle bandierine in questo caso è di 16, 4 per il filesystem, 2 i file, 5 per file per i metadati.
In totale è possibile totalizzare 44 punti. Andando di solo carving al massimo si ottengono 12 punti (6 per i file e per ogni file l’unico metadato disponibile è la dimensione).
La classifica
A pieni punti abbiamo:
- Denis Frati, veloce, accurato e preciso (e su di lui non avevo alcun dubbio, bravo Denis!)
- Daniele Murrau, sintetico e preciso
- Davide Paltrinieri, una giovane promessa che ha dimostrato tenacia e intuito, a cui va un plauso aggiuntivo per il fatto di essere da poco utente Linux, e quindi con la difficoltà ulteriore di trovarsi a “domare” un sistema operativo poco conosciuto (…non oso pensare a cosa potrà fare fra qualche anno. E’ meglio tenerselo come amico, ecco)
Seguono le menzioni d’onore:
- Enrico Ardizzoni
- Stran0
- Nanni Bassetti
che pur impegnandosi hanno “mancato” il secondo filesystem nascosto, quello con etichetta nascosto2. Bravi comunque.
Se lo desiderate potete pubblicare nei vostri siti/blog un post con la procedura seguita per trovare le vostre bandierine, e se me lo notificate aggiungo il link alla vostra spiegazione.
La procedura per creare il pen drive
Non è molto lunga, né complicata, una volta capito l’uso dei loop device. Il pen drive conteneva una unica partizione da due gigabyte, al momento dell’acquisto. Ho provveduto a cancellarla ed a crearne una che occupasse circa la metà dello spazio disponibile, formattandola in FAT32.
Ho poi creato un loop device che puntasse esattamente al primo settore dopo la partizione visibile, usando il comando visto sopra. In questo modo ho potuto lavorare su nascosto1 senza creare partizioni, formattandolo in FAT32 e copiandoci sopra i file delle quattro immagini.
A questo punto ho messo mano al terzo filesystem, il secondo nascosto. Ho creato un loop device che partiva dal byte 512.000.000 del pen drive, in modo da avere un numero facile da ricordare (come hanno correttamente ipotizzato Denis e Davide). Il problema è che il loop device “termina” alla fine fisica del pen drive, ossia dopo 1,5 gigabyte, quindi se si va a formattare il loop device si corre il rischio di cancellare il filesystem nascosto creato in precedenza. Viene in aiuto il comando mkdosfs di Linux che consente di specificare di quanti blocchi da 1 kilobyte è composto il filesystem. Ho assegnato 400 megabyte per questo secondo filesystem, in modo da poter preservare l’altro nascosto. Qui sotto una figura che riassume la geometria dei tre filesystem.

La struttura dei filesystem nel pen drive
Ecco tutto. Quindi niente di esoterico, né da guru, solo un po’ di fantasia e di conoscenze dei vari filesystem.
Considerazioni finali
Finalità del game era appunto di offrire un momento di svago utile, con lo scopo neanche tanto nascosto di fornire un minimo di spunti di approfondimento. Loop device, filesystem, partizioni, geometrie, tutti concetti abbastanza basilari, ma troppo spesso dimenticati, nascosti da troppe “finestre e pulsanti”.
Altro intento era di mostrare che il solo carving non risolve tutto. Foremost in pochi secondi estrae tutti i file dall’immagine del pen drive, ma non offre informazioni su tempi e modi in cui i file sono giunti sul supporto. In un caso reale probabilmente la ricostruzione della timeline può essere fondamentale. Come fondamentale può essere la dimostrazione dell’intento, ossia che la struttura dei filesystem contenuti sul supporto è intenzionalmente mirata a nasconderne parte del contenuto.
La sofisticazione nei metodi usati è stata volutamente tenuta ad un livello basso, senza stratificare altri tipi di data hiding. Nella vita reale un tale metodo non resisterebbe a lungo all’analisi di una persona competente. Inoltre vi sono forti controindicazioni per la integrità dei dati nel tempo: un errore di manovra e dati scritti nella partizione visibile possono andare a sovrascrivere porzioni vitali dei dati o della struttura del filesystem della partizione da 400 Mbyte, quella col nome nascosto2.
Ecco anche il motivo per scegliere FAT come filesystem: le strutture di lavoro sono tutte concentrate all’inizio della partizione, per cui si può essere ragionevolmente certi che da un certo punto in poi niente viene scritto o letto durante il normale accesso al filesystem, rendendo possibile “includere” un altro filesystem al suo interno. Questo ad esempio con ext2/3 non è possibile, perché le strutture di supporto e di lavoro del filesystem sono sparse per tutta la partizione, per ragioni di efficienza e prestazioni. Quindi includere un altro filesystem in esso, completamente invisibile, è quasi impossibile.
E’ tutto. Ancora grazie a tutti i partecipanti. Al prossimo gioco.


#1 da Nanni Bassetti il 31 December 2008 - 13:17
Grande Mario! Questi giochini sono sempre ottime palestre per la mente e per lo spirito
AUGURONI di un buon 2009!
#2 da Nanni Bassetti il 31 December 2008 - 13:29
Però col carving si ottenvano i pdf rinominati col numero di settore e l’offset relativo nel file audit.txt…da lì si poteva ricavare l’i-node con ifind e da lì beccare il nomefile del fat…sbaglio?
#3 da Mario Pascucci il 31 December 2008 - 14:57
@Nanni
Beh, in teoria hai avuto un mese per provare le varie possibilità, no?
Prova, soprattutto per capire se con la procedura che citi si individua il filesystem nascosto2.
#4 da Stran0 il 2 January 2009 - 19:07
ahh e` lui il colpevole !
l`ho ignorato tutto il tempo lol
0 eb3c906d 6b646f73 66730000 02100100 .<.m kdos fs.. ….
16 02000200 00f8c400 20004000 00000000 …. …. .@. ….
32 00350c00 00002931 affd486e 6173636f .5.. ..)1 ..Hn asco
48 73746f32 20204641 54313620 20200e1f sto2 FA T16 ..
buona giornata a tutt
#5 da Nanni Bassetti il 4 January 2009 - 19:08
Pubblicata la mia “misera” soluzione sul mio blog
#6 da Daniele il 4 January 2009 - 20:04
Ciao Mario,
leggendo il post di Nanni sul suo blog mi è venuto un dubbio, ma mi sono classificato primo pari merito con Denis e Davide o mi sono classificato secondo ?
Daniele
#7 da denis il 4 January 2009 - 20:55
credo si tratti di pari punteggio.
Mario, tu che hai tutte le soluzioni, invita chi ha provato a risolverlo usando tools commerciali a pubblicare il proprio procedimento, sarebbe utile per capire le potenzialità di tools che personalmente non utilizzo, le feature che mettono a disposizione e confrontarsi con le metodiche e le procedure usuali di chi li utilizza
#8 da Nanni Bassetti il 5 January 2009 - 12:36
Ciao Daniele, non ho capito perchè leggendo il mio post, ti sei “posto” il dubbio? LOL
Scherzi a parte, nella mia frettolosità cmq ho usato un sistema da Windows, che ha risolto in 2-3 minuti un bel pò del quesito…questo è interessante a livello di confronto tra i mezzi…attendo le pubblicazioni degli altri, sono curioso di vedere se ci sono stati altri tool o intuizioni…questo è il bello di questi game
#9 da Mario Pascucci il 5 January 2009 - 13:29
@Daniele
L’ordine è casuale. Conta solo il punteggio, quindi è un “pari merito”.
@Nanni
Il carving non era vietato, rileggi il “bando”. Usando il solo carving non avresti conquistato tante bandierine, ma solo una piccola parte, come spiegato sopra, nella soluzione. Ad esempio non avresti trovato il filesystem, o almeno dal carving non avresti avuto che un sospetto, e nulla più, e non avresti avuto metadati sui singoli file, che erano fonte di bandierine.
Ecco anche il motivo di come erano calcolate i punteggi.
Naturalmente, essendo un momento didattico, lo scopo era delineato in maniera differente da una normale “sfida”, e non c’erano limiti di tempo, come non c’era alcun vantaggio ad arrivare “per primo”.
#10 da Daniele il 6 January 2009 - 20:53
Ecco il mio report recuperato da history e qualche appunto:
http://brainstretching.blogspot.com/2009/01/report-challenge-data-hiding-un-pen.html
Daniele
Pingback: DenisFrati.it » Pen-drive multistrato: i risultati della sfida del Prof. Mario Pascucci
#11 da Nanni Bassetti il 7 January 2009 - 11:37
Comnplimenti Daniele, bello script!
spero che non sia un buco nell’acqua….sto seguendo un’idea, ancora fumosa…
Proprio ieri ho cominciato a scriverne uno simile…ma partendo da sigfind…
#12 da Nanni Bassetti il 7 January 2009 - 21:25
eccolo qui:
http://www.nannibassetti.com/dblog/articolo.asp?articolo=62
L’ho testato solo sul pen-drive di Mario…! no pernacchie pls!