Steganografia Seminario per il corso di Sicurezza A.A. 2007/2008 Mattia Camporesi [email protected] Steganografia e Crittografia La steganografia è l'arte di nascondere un messaggio segreto all'interno di una comunicazione pubblica che apparentemente trasporta tutt'altra informazione. Da non confondere con la crittografia!! Lo scopo della crittografia, fondamentalmente, è quello di nascondere il contenuto di un messaggio, mentre la steganografia si prefigge di nasconderne l’esistenza. Etimologia La parola steganografia deriva dall'unione dei due vocaboli greci stego (rendere occulto) e grajh (scrittura). Steganografia è dunque "la scrittura nascosta" o meglio ancora l'insieme delle tecniche che consente a due o più persone di comunicare in modo tale da nascondere non tanto il contenuto, ma la stessa esistenza della comunicazione agli occhi di un eventuale osservatore. Si tratta di un'idea tutt'altro che nuova e che anzi vanta origini molto antiche. Nel corso dei secoli sono stati escogitati numerosi metodi steganografici, alcuni anche bizzarri. Ad esempio… Un po di storia… Erodoto (400 a.C.) racconta la storia di un nobile persiano che fece tagliare a zero i capelli di uno schiavo fidato al fine di poter tatuare un messaggio riservato sul suo cranio. Una volta che i capelli furono ricresciuti, inviò lo schiavo alla sua destinazione, con la sola istruzione di tagliarseli nuovamente. Ai giorni nostri invece, lo studio di questa materia nella letteratura scientifica si deve a Simmons che nel 1983 formulò il “Problema dei prigionieri”. Il problema dei Prigionieri Alice e Bob sono in prigione e devono escogitare un piano per fuggire: tutti i loro messaggi vengono scambiati tramite il guardiano Eva. Se Eva scopre che essi si scambiano messaggi cifrati metterà uno di loro in isolamento ed il piano fallirà. Quindi essi devono trovare un metodo per nascondere il loro testo cifrato in un testo apparentemente innocuo. Il problema dei Prigionieri Perche utilizzarla? Ai giorni nostri la steganografia viene adottata: da organizzazioni militari e di intelligence da forze di polizia e investigative a causa delle recenti imposizioni limitative riguardo la crittografia per sistemi di pagamento è un ottimo modo per mantenere una segretezza di cui, per qualche ragione, sentiamo la necessità da organizzazioni criminali In sostanza, la steganografia funziona finchè nessuno si aspetta che qualcuno ne stia facendo uso In Sostanza Caratteristica della steganografia è l'esistenza di due messaggi: il primo, detto messaggio contenitore, è facilmente percepibile ed ha il compito di nascondere il secondo, detto messaggio segreto, racchiudendolo al suo interno e rendendolo quindi invisibile o, più correttamente, difficilmente percepibile. Immagine di Lincoln, contenente svariate altre immagini. Una prima classificazione I principi che stanno alla base dei software steganografici sono sempre gli stessi…tuttavia esistono diversi approcci che fanno individuare varie famiglie di software. In base all'origine del file contenitore possiamo distinguere: steganografia iniettiva steganografia generativa Steganografia Iniettiva Questa categoria è senz'altro la più numerosa. I software di questo tipo consentono di "iniettare" il messaggio segreto all'interno di un messaggio contenitore già esistente modificandolo in modo tale sia da contenere il messaggio, sia da risultare, al livello al quale viene percepito dai sensi umani, praticamente indistinguibile dall'originale. Steganografia Generativa Nei software di tipo generativo, invece, si parte dal messaggio segreto per produrre un opportuno contenitore atto a nascondere nel migliore dei modi quel determinato messaggio segreto. Nella pratica: Oltre a questa classificazione di carattere prettamente concettuale, ne esiste un’altra che caratterizza le tecniche steganografiche più a livello pratico: Steganografia Sostitutiva Steganografia Selettiva Steganografia Costruttiva Steganografia Sostitutiva È senz'altro la tecnica steganografica più diffusa, tanto che spesso quando si parla di steganografia ci si riferisce implicitamente a quella di questo tipo. Alla base di questa tecnica c'è un'osservazione: la maggior parte dei canali di comunicazione (linee telefoniche, trasmissioni radio, ecc.) trasmettono segnali che sono sempre accompagnati da qualche tipo di rumore. Questo rumore può essere sostituito da un segnale (il messaggio segreto) che è stato trasformato in modo tale che, a meno di conoscere una chiave segreta, è indistinguibile dal rumore vero e proprio, e quindi può essere trasmesso senza destare sospetti. Steganografia Sostitutiva La tecnica impiegata nella maggior parte dei programmi è concettualmente molto semplice: sostituire i bit meno significativi dei file digitalizzati con i bit che costituiscono il file segreto Quello che succede quindi è che il file contenitore risultante, dopo un'iniezione steganografica, si presenta in tutto e per tutto simile all’originale, con differenze difficilmente percettibili e quindi, a meno di confronti approfonditi con il file originale (comunque non effettuabili ad occhio nudo) è difficile dire se le eventuali perdite di qualità siano da imputare al rumore od alla presenza di un messaggio segreto steganografato. Inoltre il più delle volte il file originale non è disponibile e quindi effettuare questo confronto è pressoché impossibile. Steganografia Sostitutiva - Bitmap Supponiamo di voler utilizzare come contenitore un file di tipo bitmap (bmp) con una profondità di colore a 24 bit. Un immagine, dal punto di vista digitale, non è altro che una matrice MxN di pixel. Un file grafico di tipo bitmap a 24 bit è codificato in modalità RGB, pixel per pixel. Questo significa che ogni singolo pixel viene codificato tramite 3 byte in sequenza, ognuno dei quali rappresenta i livelli (da 0 a 255) dei colori primari, cioè Red, Green e Blue che costituiscono il colore di quel determinato pixel. Questo significa che, per fare un esempio, un file bitmap a 24 bit di dimensioni 640x480 occuperà uno spazio di 640x480x3=921600 byte. Un'operazione di steganografia sostitutiva su questi tipi di file consiste nel sostituire i bit meno significativi dei singoli byte con quelli del messaggio segreto. Steganografia Sostitutiva - Bitmap Se ad esempio, abbiamo un pixel codificato in questo modo: 11100001 00000100 00010111 possiamo inserire tre bit del messaggio segreto. Se i bit del messaggio segreto sono 110 il nostro pixel diventerà il seguente: 11100001 00000101 00010110 Le operazioni che si fanno su ogni singolo byte quindi possono essere tre: Lo si lascia invariato Gli si aggiunge 1 Gli si sottrae 1 Questo fa sì che ad occhio nudo le variazioni di colore siano praticamente impercettibili. Steganografia Sostitutiva - Bitmap Dato che un solo pixel può contenere un'informazione segreta di 3 bit, un'immagine di dimensioni MxN può contenere un messaggio segreto lungo fino a (3*M*N)/8 byte. Tuttavia è possibile raddoppiare o addirittura triplicare o quadruplicare la possibile dimensione del messaggio segreto utilizzando non più il singolo bit meno significativo di ogni byte, ma i due, tre o quattro bit meno significativi. L’altra faccia della medaglia sarà ovviamente una diminuzione della qualità dell’immagine e quindi si può dire che più bit si usano, maggiore è la possibilità di destare sospetti. Quindi quello che si può fare è controllare ogni volta il risultato e decidere di conseguenza quanti bit utilizzare a seconda di quanto è visibile la perdita di qualità. Steganografia Sostitutiva La tecnica appena descritta rappresenta il cuore della steganografia sostitutiva, anche se di fatto ne esistono numerose variazioni. Innanzitutto è ovvio che tutto quello che abbiamo detto vale non solo per le immagini, ma anche per altri tipi di media, per esempio suoni (wav) e video digitalizzati. Tutto sembra funzionare perfettamente, ma c'è un problema intrinseco nell'operare nel modo sopra esposto. Il problema risiede proprio nel formato del file contenitore utilizzato. I formati bitmap e wav, infatti, sono formati abbastanza pesanti ed ingombranti e proprio per questo non sono molto popolari sulla rete, quindi il solo fatto di scambiare un file del genere potrebbe destare sospetti. Ecco perché, sulla base del concetto originario, si sono escogitate altre tecniche steganografiche da attuare anche sui formati di file più comuni. Si sono però dovute trovare delle soluzioni alternative. Steganografia Sostitutiva - JPEG In particolare, non è possibile operare come sinora descritto con i file compressi. Se iniettassimo delle informazioni in un file bitmap e dopo lo convertissimo in JPEG, ad esempio, le informazioni andrebbero inevitabilmente perse. La compressione JPEG, infatti, ha la tendenza a preservare le caratteristiche visive dell'immagine piuttosto che l'esatta informazione contenuta nella sequenza di pixel, di conseguenza sarebbe impossibile risalire al file bitmap originario. Quello che si fa in questi casi è operare ad un livello di rappresentazione intermedio. Per poter utilizzare anche le immagini JPEG come contenitori, è possibile iniettare le informazioni nei coefficienti di Fourier ottenuti dalla prima fase di compressione. File Compressi Un discorso analogo a quello fatto per i file JPEG si può fare per i file Mp3 e in generale per tutti i file compressi. Il problema principale della steganografia che usa file compressi come contenitori è che è facilmente attaccabile, nel senso che se un file compresso che fa da contenitore viene decompresso e compresso nuovamente, è facile capire che il messaggio nascosto andrà perso. Consigli… Ci sono comunque dei semplici principi a cui attenersi: Innanzitutto non bisogna mai usare file pubblici o facilmente accessibili, quindi noti, perché ciò darebbe più possibilità all’attaccante di scorgere la presenza di un messaggio steganografato. Inoltre non bisogna mai usare più volte lo stesso file come contenitore e distruggere gli originali dopo averli usati!! Problema Tuttavia, il principale difetto della steganografia sostitutiva è che le sostituzioni possono alterare le caratteristiche statistiche del rumore nel media utilizzato. Se il nemico, infatti, possiede un modello del rumore, può utilizzarlo per testare se i file sono conformi al modello: se non lo sono probabilmente si è in presenza di un messaggio steganografato. Il problema di questo tipo di attacco però sta nella difficoltà di costruire un modello che tenga conto di tutti i possibili errori o rumori. Steganografia Selettiva La steganografia selettiva ha valore puramente teorico e, per quanto se ne sappia, non viene realmente utilizzata nella pratica. L'idea su cui si basa è quella di procedere per tentativi, ripetendo una stessa misura fintanto che il risultato non soddisfa una certa condizione. Come è evidente, il problema di questa tecnica è che è troppo dispendiosa rispetto alla scarsa quantità di informazione che è possibile nascondere. Steganografia Costruttiva La steganografia costruttiva, opera più o meno come la steganografia sostitutiva, con la differenza che nel modificare il file contenitore si tiene conto di un modello di rumore, nel senso che si tenta di sostituire il rumore presente nel media utilizzato con il messaggio segreto nel rispetto delle caratteristiche statistiche del rumore originale. Questo approccio sembra la soluzione migliore, ma in realtà anch'esso non è esente da difetti. Steganografia Costruttiva Come si è già detto non è facile costruire un modello del rumore, ed anche se lo si costruisce è possibile che qualcun altro abbia costruito un modello più accurato e quindi in grado di scorgere comunque la presenza di un messaggio segreto. Inoltre se il modello utilizzato cadesse nelle mani del nemico, egli lo potrebbe analizzare per cercarne i punti deboli. In questo modo si regalerebbe involontariamente al nemico uno strumento di attacco molto efficace. Sistema Steganografico Ideale A causa dei suddetti problemi, la tecnica sostitutiva rimane la più conveniente da usare. Se si hanno particolari esigenze di sicurezza, si può pensare di usare contenitori molto più grandi rispetto al messaggio segreto. In questo modo il messaggio contenitore verrà modificato sono lievemente in modo da rendere impossibile la rilevazione di un messaggio nascosto. Principio di Kerckhoff In ambito crittografico si danno le definizioni di vari livelli di robustezza di un sistema, a seconda della capacità che esso ha di resistere ad attacchi basati su vari tipi di informazioni a proposito del sistema stesso. In particolare, i sistemi più robusti sono quelli che soddisfano i requisiti posti dal principio di Kerckhoff, che, formulato in ambito steganografico suona così: la sicurezza del sistema deve basarsi sull'ipotesi che il nemico abbia piena conoscenza dei dettagli di progetto e d’implementazione del sistema stesso; la sola informazione di cui il nemico non può disporre è una sequenza di numeri casuali (la chiave segreta) senza la quale, osservando un canale di comunicazione, non deve avere neanche la più piccola possibilità di verificare che è in corso una comunicazione nascosta. Primo Problema Se si vuole aderire a questo principio, è evidente che le tecniche esposte fin qui non sono ancora soddisfacenti per caratterizzare un sistema steganografico completo. Infatti, se i dettagli di implementazione dell'algoritmo sono resi di dominio pubblico, chiunque è in grado di accedere a eventuali informazioni nascoste, semplicemente applicando il procedimento inverso (nell'esempio visto, ciò si ottiene "riaggregando" i bit meno significativi dell'immagine). Per affrontare questo problema, è necessario introdurre una fase di preelaborazione del file segreto, che lo renda non riconoscibile come portatore di informazioni significative. La soluzione più ovvia è quella di impiegare un sistema di crittografia convenzionale (per esempio, il PGP), il quale garantisce appunto l'inaccessibilità da parte del nemico al messaggio vero e proprio. Secondo Problema La storia purtroppo non è finita qui, perché in questo meccanismo a due stadi il secondo processo è reversibile. Poiché si presume che un crittoanalista esperto possa facilmente riconoscere un file prodotto da un programma di crittografia convenzionale, questo schema è ancora da considerarsi incompleto. Questo punto è di importanza fondamentale, perché rende definitivamente non valido il sistema steganografico, indipendentemente dal fatto che il contenuto dell'informazione segreta resti inaccessibile. In altre parole, la crittografia fallisce il suo scopo quando il nemico legge il contenuto del messaggio: la steganografia invece fallisce quando il nemico si rende semplicemente conto che esiste un messaggio segreto dentro il file contenitore, pur non potendolo leggere. Soluzione È opportuno quindi che il messaggio crittografato, prima di essere immerso nel contenitore, venga "camuffato" in modo da diventare difficilmente distinguibile da semplice rumore. A tale scopo si può procedere in questo modo: Il più semplice è quello di eliminare dal file criptato da PGP tutte le informazioni che lo identificano come tale: il PGP, infatti, genera un file che rispetta un particolare formato, contenente, oltre al blocco di dati cifrati vero e proprio, informazioni piuttosto ridondanti che facilitano la gestione del file da parte dello stesso PGP…ma saltano subito agli occhi di un esperto! Soluzione Esiste un piccolo programma, Stealth, capace di togliere e di reinserire nella fase di ricostruzione tutte le informazioni diverse dal blocco di dati cifrati. Il file che esce da Stealth appare come una sequenza di bit del tutto casuale, molto difficile da distinguere dal normale rumore. Software Stenografici Esistono svariati software stenografici, i più famosi sono Steganos 3 Security Suite - Il programma è stato sviluppato dalla DEMCOM di Francoforte (Germania) in collaborazione con CenturionSoft di Washington (USA) S-Tools - scritto da Andy Brown, è un programma steganografico tra i più diffusi, facilmente reperibile in rete presso i più comuni siti di software freeware. L’uso del programma, infatti, è completamente gratuito ed illimitato nel tempo. MP3stego - questo programma si occupa di steganografia con file MP3 come contenitori. E’ stato rilasciato nell’agosto del 1998 ed è disponibile sia per i sistemi operativi Microsoft che per Linux. Oltre all’eseguibile, l’autore Fabien Petitcolas (Computer Laboratory) distribuisce anche il sorgente liberamente. Steghide - free software che occulta un messaggio segreto di testo in una immagine jpg. Riferimenti Procedure Steganografiche e Protocolli Speciali per l’Occultamento e la Trasmissione dei Dati Dott. Serena Longhini http://www.dia.unisa.it/~ads/corso-security/www/CORSO0001/Steganografia.htm Tools steganografici, Prof. Alfredo De Santis “Steganografia, l'arte della scrittura nascosta” di Claudio Agosti http://www.stegoarchive.com Steganography information, software www.tonycrypt.com - Steganografia and news to enhance you privacy