La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Steganografia Un esempio pratico. Il formato TAR Possiamo pensare ad un archivio TAR come ad un contenitore di file. Per ogni file nellarchivio viene.

Presentazioni simili


Presentazione sul tema: "Steganografia Un esempio pratico. Il formato TAR Possiamo pensare ad un archivio TAR come ad un contenitore di file. Per ogni file nellarchivio viene."— Transcript della presentazione:

1 Steganografia Un esempio pratico

2 Il formato TAR Possiamo pensare ad un archivio TAR come ad un contenitore di file. Per ogni file nellarchivio viene memorizzato: –il contenuto del file –informazioni aggiuntive (nome file, permessi, ecc.) Possiamo usare alcuni byte delle informazioni aggiuntive per memorizzare un messaggio steganografato.

3 Informazioni aggiuntive Per ogni file presente nellarchivio sono presenti le seguenti informazioni: nome permessi user id, user name group id, group name dimensione tempo dellultima modifica altre informazioni per gestire file non regolari (es. link, device, ecc.)

4 Il campo mtime Il campo mtime, di 36 bit, memorizza la data dellultima modifica al file. 36 bit Essa è codificata come il numero di secondi trascorsi dalle ore 0:00 del 01/01/1970. Possiamo usare gli ultimi 8 bit per memorizzare un byte di informazione. La data originale è distorta al più di 255 secondi, ovvero 4 minuti e 15 secondi.

5 Codifica di un messaggio Dato un messaggio lungo n byte, lo codifichiamo su n+4 byte. I primi 4 byte rappresentano la lunghezza del messaggio. I successivi n byte contengono il messaggio vero e proprio. Lunghezza massima di un messaggio: 4 Gb. Esempio: –messaggio = ciao –lunghezza = 4 –archivio di 9 file Nome mtime File1 xxxxxxx File2xxxxxxx File3xxxxxxx File4xxxxxxx File5xxxxxxx File6xxxxxxx File7xxxxxxx File8xxxxxxx File9xxxxxxx xx ciaociao 00 04 63 69 61 6F 00 04 63 69 61 6F xx

6 Codice sorgente - steganotar.py Scritto in Python 2.3 (http://www.python.org)http://www.python.org Perché Python? –Semplice –Portabile (Linux, Windows, Mac, ecc.) –Modulo standard per i file TAR Chi non conosce Python? –Sembra pseudocodice. In laboratorio è installato Python 1.5, perciò steganotar.py non funziona.

7 Codifica di un messaggio Data una stringa in input, dobbiamo produrre unaltra stringa così formata: –i primi 4 byte memorizzano la lunghezza, espressa in notazione big endian. –i successivi byte memorizzano il messaggio vero e proprio. La funzione struct.pack effettua la conversione tra intero a 32 bit e stringa di byte in big endian. def encode_message(data): length = struct.pack('!i', len(data)) return length + data

8 Decodifica di un messaggio Dato un messaggio codificato, dobbiamo decodificarlo per produrne una rappresentazione usabile. Prima di tutto leggiamo i primi 4 byte e li convertiamo in un intero a 32 bit (con la funzione struct.unpack). Ora che sappiamo la lunghezza, sappiamo quanti byte leggere per ottenere il messaggio originale. def decode_message(data): length = struct.unpack('!i', data[:4])[0] return data[4:4+length]

9 for index, filename in enumerate(files): tarinfo = tar.gettarinfo(filename) if index < len(data): char = data[index] tarinfo.mtime &= MASK tarinfo.mtime |= ord(char) tar.addfile(tarinfo, file(filename)) Creazione di un archivio Alcune variabili utilizzate: –data: messaggio gia` codificato (array di byte) –tar: oggetto che rappresenta l'archivio tar –files: lista di nomi di file da inserire nell'archivio –MASK = 0xFFFFFFF00

10 Lettura di un archivio def read_tar(filename): tar = tarfile.open(filename, 'r') data = [] for tarinfo in tar: # ottiene lultimo byte di mtime char = tarinfo.mtime & 0xFF data.append(chr(char)) tar.close() return ''.join(data)

11 Dimostrazione pratica [anto@anto tmp]$ ls prova file01 file02 file03 file04 file05 file06 file07 file08 file09 file10 file11 file12 file13 file14 file15 [anto@anto tmp]$ ls -l prova/file05 -rw-r--r-- 1 anto anto 0 dic 12 15:21 file05 [anto@anto tmp]$ steganotar.py --encode prova.tar prova/ Messaggio [anto@anto tmp]$ tar tvf prova.tar | grep file05 -rw-r--r-- anto/anto 0 2003-12-12 15:22:53 prova/file05 [anto@anto tmp]$ steganotar.py --decode prova.tar Messaggio

12 Memorizzare un intero file Se dalla linea di comando non è specificato alcun messaggio, steganotar.py lo legge da standard input. Possiamo sfruttare questa caratteristica per steganografare file arbitrari in un archivio TAR. Esempio: creiamo un archivio che contiene i sorgenti del kernel di Linux: sono 14050 file, quindi possiamo memorizzare circa 14 Kb di informazioni. [anto@anto tmp]$ steganotar.py --encode linux.tar /usr/src/linux < \ Steganography.txt [anto@anto tmp]$ steganotar.py --decode linux.tar > Steganography2.txt [anto@anto tmp]$ diff Steganography.txt Steganography2.txt

13 Implementazioni alternative Abbiamo scelto di usare il campo mtime, ma potevamo anche scegliere diversamente. In particolare, i campi uid e gid non sono quasi mai utilizzati: i corrispettivi user name e group name hanno sempre la precedenza. I campi uid e gid ci avrebbero permesso di memorizzare 4 byte per ogni file nellarchivio. Purtroppo nella maggior parte dei file TAR i campi uid e gid hanno sempre lo stesso valore, per cui sarebbe facile scoprire che un file è steganografato.


Scaricare ppt "Steganografia Un esempio pratico. Il formato TAR Possiamo pensare ad un archivio TAR come ad un contenitore di file. Per ogni file nellarchivio viene."

Presentazioni simili


Annunci Google