Attacchi alle immagini
Gli attacchi visuali sono stego-only-attack che sfruttano l’assunzione fatta dalla maggior parte degli autori dei programmi steganografici secondo i quali i bits meno significativi di un cover sono casuali.
Per analizzare le immagini, vengono utilizzati classi particolari di algoritmi detti di algoritmi di filtering. Tali algoritmi rimuovono le parti di immagine che coprono il messaggio e rendono facile il lavoro di un operatore umano che, a partire dall'immagine filtrata, deve dire se questa contiene o meno un messaggio nascosto. Il filtering di un’immagine stego dipende dalla funzione di embedding applicata e consiste in una sorta di operazione inversa della funzione di embedding: quindi, possiamo dire che non esiste un algoritmo di filtering per eccellenza che filtri un qualsiasi tipo di cover. Siccome, però, quasi tutte le funzioni di embedding sono simili, sono necessari solo pochi accorgimenti per adattare un algoritmo di filtering esistente ad un’altra funzione di embedding.
Gli esempi di attacchi visuali che seguono sono tratti da uno studio di Andreas Pfitzmann e Andreas Westfeld intitolato “Attacks on Steganographic Systems”[4] del 1999.
La figura a sinistra è un cover file gif nel quale non è stato inserito ancora alcun messaggio. Quella a destra, invece, nasconde un messaggio. L’embedding è stato effettuato con EzStego. La dimensione del messaggio rappresenta il solo 50% della massima capacità del cover. Non vi sono grosse differenze percepibili dall’occhio umano.
|
|
Figura 25: cover non alterata. |
Figura 26: immagine stego che contiene un messaggio nascosto. |
L’algoritmo di filtering rimpiazza la palette originale del file stego prima della modifica con una palette in bianco e nero che rispetta l’algoritmo di embedding del programma stesso. Nell’immagine filtrata un pixel nero corrisponde a un pixel nel quale è stato nascosto uno 0 steganografico e un pixel bianco corrisponde ad un pixel nel quale è stato nascosto un 1 steganografico.
La Figura 27 mostra l’immagine cover filtrata e per l’occhio umano non c’è nulla di strano. La Figura 28 mostra l’immagine filtrata del file stego contenente un messaggio segreto di dimensione del 50% circa della capacità del cover. La parte bassa del file stego filtrato è identica alla corrispondente parte dell’immagine filtrata del cover non contenente messaggi, mentre la parte alta consiste di dati variabili (il messaggio nascosto). A questo punto, è un uomo a dire se vi sono dati nascosti in un file semplicemente osservando l’immagine stego filtrata.
Figura 27: cover filtrato |
Figura 28: immagine stego filtrata |
Gli attacchi visuali hanno due inconvenienti non sottovalutabili. Se devono essere analizzate molte immagini, essi sono molto lenti e costosi perché ogni immagine deve essere filtrata, visualizzata ed osservata da un uomo. Altro importante svantaggio è che qualche immagine (non modificata) potrebbe contenere random-looking-data (messaggi segreti involontari) nei suoi bits meno significativi. Se un’immagine del genere viene usata come cover, l’attacco visuale fallisce.
Gli attacchi statistici, come quelli visuali, sfruttano il fatto che i programmi steganografici trattano i bits meno significativi come bits random e perciò assumono che si possono sovrascrivere con altri bit random (il messaggio segreto cifrato). Invece, come è stato mostrato dagli attacchi visuali, tali bits nei file di immagini non sono random. Quando un programma steganografico nasconde un bit sovrascrivendo il bit meno significativo di un pixel nel cover, il valore del colore (la tonalità) di questo pixel passa al valore adiacente nella palette (o nel RGB cube se si tratta di un’immagine true-color).
Concentriamoci su una coppia di valori (CdV) di colore adiacenti cioè differenti del solo ultimo bit. Quando viene sovrascritto il bit meno significativo di tutte le occorrenze di uno dei due valori con un bit del messaggio segreto, la frequenza di questi due colori sarà sostanzialmente la stessa. Questo perché i dati da nascondere sono cifrati e quindi egualmente distribuiti.
Facendo un piccolo esempio: se una tonalità di colore è codificata con un byte, due colori adiacenti differiranno per solo per l'ottavo bit. Consideriamo la CdV (10101010,10101011).
Definiamo occ(x) come il numero di occorrenze del pixel x.
Supponiamo che:
occ(10101010)=157 e occ(10101011)=49.
Siccome l'embedding non considera l'ultimo bit di ogni pixel e siccome i bits segreti sono equamente distribuiti, ogni pixel che comincia per 1010101 sarà completato con 0 o 1 con la stessa probabilità. Per cui, dopo l'embedding,
occ(10101010) ≈ occ(10101011) ≈ 103
Dove 103 dato dalla media delle occorrenze di 10101010 e 10101011 prima dell'embedding:
[occ(10101010) + occ(10101011) ]/2= [157+49] /2.
Un risultato del genere viene mostrato nella seguente figura (presa dalla trattazione "Attacks on Steganographic Systems"[4] di Pfitzmann e Westfeld): gli istogrammi rappresentano le frequenze di tonalità di colore prima e dopo l’embedding di un file nascosto all’interno di un cover con EzStego.
|
Figura 29: Dopo l’embedding le frequenze si eguagliano a due a due: L ed R stanno ad indicare, rispettivamente, l'elemento a sinistra e a destra della coppia. |
La frequenza attesa viene calcolata come media delle frequenze di una CdV in un potenziale file stego. L’attacco statistico seguente usa un chi-square test: vengono, cioè, analizzate aree crescenti del potenziale file stego in passi successivi fino all’intera immagine.
La figura seguente (presa ancora dalla trattazione di Pfitzmann e Westfeld) mostra l’output di un attacco statistico effettuato come descritto. Per nascondere il messaggio (con dimensione di circa il 50% della capacità del cover) è stato usato EzStego. L’asse delle ascisse indica la dimensione del campione che è stato analizzato in percentuale del totale file stego. L’asse delle ordinate indica la probabilità di embedding corrispondente all’area analizzata con il chi-square attack. È semplice notare che il risultato è molto alto nella prima metà dell’immagine e molto basso per la seconda metà. Questo risultato corrisponde all’attacco visuale terminato con successo in Figura 27.
|
Figura 30: Output di un attacco statistico |
Difendersi dagli attacchi statistici
Per difendersi dagli attacchi statistici è sufficiente preservare la frequenza dei colori del cover quando si effettua l’embedding, visto che tali attacchi sono basati sul calcolo delle frequenze.
Un metodo per fare ciò è il seguente: assumiamo che abbastanza bits ridondanti rimangono inutilizzati per correggere le distorsioni statistiche. Dopo la fine dell’embedding deve essere avviato un algoritmo di correzione. Questo algoritmo cambia i valori dei colori nei bits ridondanti che non contengono dati nascosti in modo tale che le frequenze di colore dell’immagine stego eguaglino quelle dell’immagine cover.
Altrimenti deve essere lo stesso algoritmo di embedding che deve mantenere intatta la distribuzione delle frequenze dei colori dopo aver memorizzato tali valori prendendoli dal cover. Ma ciò, si può fare se si riescono ad estrapolare tali informazioni dai cover, cosa difficilmente attuabile nella maggior parte dei tipi di files.