Steganografia & Crittografia: volume cifrato nascosto in file JPG, ODF, MP3 o AVI
L'idea è semplice: nascondere un volume cifrato all'interno di un'immagine o file multimediale, concatenandolo o inserendolo in esso. Stiamo parlando quindi di una tecnica steganografica e crittografica allo stesso tempo.
Vediamo quali sono i passi da fare in una breve e sommaria descrizione.
Creare il volume cifrato: utilizziamo TrueCrypt e creiamo il più piccolo volume cifrato possibile: 275 KByte (ma solo con FAT). In questo modo le immagini avranno delle dimensioni ragionevoli e "rumori" in file MP3 o AVI appena percettibili.
Nascondiamo il volume dentro al file multimediale: nel caso di immagini JPEG il volume andrà concatenato, nel caso di documenti in formato ODT (Open Document Format) inseriamo l'immagine JPEG "taroccata" nel documento (ricordate che questi formati sono sostanzialmente dei contenitori ZIP), nel caso di MP3 e AVI file il discorso è analogo.
Distribuzione del file e gestione delle chiavi: distribuiamo il file liberamente su Blog, Siti Web, P2P; con un altro canale, sicuro, distribuiamo poi la password di accesso al volume cifrato e l'offset nel file "contenitore" e size del volume cifrato; abbiamo quindi ben 3 chiavi segrete (ma la prima e la terza sono un po' debolucce perché enumerabili: basta contare).
Ed ora i comandi da una shell Linux o CygWin se siete su Windows.
Volume cifrato: creiamo il volume con TrueCrypt di tipo FAT (per NTFS il volume di minor grandezza è maggiore e di parecchio rispetto ai 275 KB) e registriamo in esso i segreti che vogliamo veicolare;
Immagini JPEG:
- concateniamo all'immagine "image.jpg" il volume cifrato "crypto.tc" producendo una nuova immagine "append.jpg":
- $ cat image.jpg crypto.tc >append.jpg;
- per risalire al volume cifrato data l'immagine "append.jpg" invece:
- $ split --bytes=OFFSET newstest.jpg
- $ mv xab crypto.tc
Lo split divide l'immagine in due parti a partire dall' offset, producendo come prima parte l'immagine originale e come seconda parte il volume cifrato.
Documenti ODF:
- si crea l'immagine JPEG come da punto precedente;
- si aggiunge l'immagine originale ad un nuovo documento aperto con l'editor opportuno;
- si apre il documento tramite un UnZipper e si sostituisce l'immagine originale con quella opportunamente modificata.
Nel caso invece di documenti DOCX (Office Open XML di Microsoft) la stessa tecnica non funziona perché evidentemente Word effettua un controllo di integrità dell'immagine inclusa.
File MP3 e AVI:
- dividiamo il file MP3 in due parti a partire da un certo offset (dove offset > file_size/2):
- $ split --bytes=OFFSET music.MP3;
- inseriamo il volume cifrato dentro il file MP3: $ cat xaa crypto.tc xab > musicFinal.mp3
- estraiamo il volume cifrato:
- $ split --bytes=OFFSET musicFinal.MP3
- $ split --bytes=VOLUME_SIZE xab
- $ mv xaa crypto.tc
Per i file AVI il discorso è analogo ai file MP3. Attenzione però perché i player potrebbero dare problemi nella riproduzione, segnalando qualche "stranezza" all'utente e rivelando che c'è qualche cosa che non va nel file.
Un po' di Computer Forensic:
Pensando invece alla parte di Computer Forensic, individuare il formato del volume cifrato non è così facile perché TrueCrypt afferma di generare dei volumi che non hanno tratti distintivi ma del tutto simili a sequenze randomiche.
No TrueCrypt volume can be identified (volumes cannot be distinguished from random data)
Però con un po' di analisi attraverso l'editor esadecimale di vostro gusto e la documentazione tecnica sui formati dei file, potreste capire abbastanza presto di essere di fronte ad un file un po' "strano". E allora? Anche se arrivaste a capire che è stato nascosto un volume cifrato Truecrypt, sarà abbastanza difficile romperne la cifratura!
Nell'esempio per MP3 e AVI, l'estrazione del file può avvenire in un colpo solo con dd:
RispondiElimina$ dd bs=1 skip=OFFSET count=VOLUME_SIZE if=musicFinal.MP3 of=crypto.tc
Si può usare dd anche per la creazione del file, eliminando la limitazione sull'offset:
$ ( dd if=music.MP3 bs=1 count=OFFSET; cat crypto.tc; dd if=music.MP3 bs=1 skip=OFFSET ) > musicFinal.MP3