Copy Link
Add to Bookmark
Report

Cos'è la Steganografia?

DrWatson's profile picture
Published in 
guide hacker
 · 1 Nov 2021

La steganografia è una delle categorie di studio che rientra, insieme alla crittografia e ad altre tecniche ancora, sotto la casta dell' "information hiding" cioè quella serie di operazioni finalizzate a nascondere un dato o limitare la sua accessibilità o comunque a far in modo che chi abbia accesso a quel dato senza esserne stato autorizzato non possa avere le stesse informazioni di chi invece lo è stato.

Dove la crittografia mira a modificare i dati in modo che solo chi ha l'esatta chiave possa riottenere il dato originale, la steganografia mira a nascondere i dati in modo che solo chi ha la chiave esatta possa estrarli.

Per nascondere i dati normalmente viene utilizzato un sistema di "trasporto" dentro il quale i dati vengono effettivamente nascosti. Il dato di trasporto è solitamente un file e può essere di vari tipi, la sua funzione è semplicemente quella di "sembrare" l'oggetto della trasmissione, ad esempio, posso inviare una serie di foto via mail, il dato che sto trasferendo apparentemente è una semplice serie di immagini, ma grazie alla steganografia posso far in modo che le immagini siano dei mezzi di trasporto, e all'interno di essere nascondere i dati che mi interessa realmente comunicare.

Immagini, file sonori, file multimediali in genere si prestano particolarmente a svolgere la funzione di trasporto perché è possibile modificarli quel poco che basti in modo che all'interno contengano i nostri dati, ma apparentemente (all'occhio o all'orecchio umano che analizza il file) non vi sia una differenza sensibile.

In termini tecnici, visto che ogni pixel di un immagine, come ogni singolo segmento sonoro di un file musicale ... sono memorizzati come dei numeri, la steganografia non fa altro che cambiare quel numero di quel poco che basta a lasciare l'informazione multimediale quasi inalterata (inavvertibile per l'uomo) ma sostituendo le parti meno importanti del dato con i dati che vogliamo nascondere al suo interno.

Con un software di steganografia possiamo sia inserire i dati in questi punti di poca importanza, sia estrarli se dovessimo ricevere un dato che ne trasporta altri.

Come si utilizza?

La possibilità di poter nascondere, all'interno di file di tutt'altro significato, dati di altra natura ... dà la possibilità di comunicare senza far notare l'esistenza della comunicazione. In effetti il focus della steganografia è quello di nascondere l'esistenza stessa di una comunicazione, mentre quello della crittografia ad esempio è solo di far rendere illeggibile una comunicazione che si sà c'è.

L'utilizzo può essere vario, sia per conservare dati in modo nascosto localmente, sia per comunicare con persone "abilitate" (che hanno sia il software che la password necessaria) senza dover necessariamente conoscerle... supponiamo di pubblicare su un sito web delle immagini con contenuto steganografato, tutti quelli che lo visiteranno le scaricheranno (per lo + inconsapevoli del fatto che esse contengano + dati di quanti ne diano effettivamente a vedere), ma chi sà come e da dove ottenere le informazioni, una volta scaricate le immagini potrà salvarle separatamente ed applicare il processo inverso che gli consentirà di estrapolare i dati nascosti.

Normalmente la steganografia viene applicata a dati già cifrati, per aumentare la sicurezza verso vari tipi di attacco, sia bruteforce che altri...

Il file che trasporta il dato ha un'importanza significativa nella sicurezza del sistema steganografico, se parliamo espressamente di immagini (ma è valido per ogni contenitore multimediale) la dimensione del contenitore è direttamente proporzionale alla quantità di dati che si possono immagazzinare. La grandezza dell'immagine è data sia dalla sua dimensione effettiva (più punti ci sono, più posti per mettere dati) e dalla sua definizione di colori (se ha molti colori è più difficile che l'occhio umano noti una differenza, invece se avrà pochi colori (256 o meno ad esempio) le modifiche che il programma porterà all'immagine potrebbero esser più facilmente notate. (se un rosso dei 32.000 possibili rossi cambia nel rosso successivo nessuno se ne accorgerà, se in un'immagine a 16 colori un rosso diventa viola invece ...)

Inoltre, non ha senso utilizzare la steganografia al posto della normale crittografia, se desidero comunicare con qualcuno, l'invio di foto della mia festa di compleanno di 15 anni fà probabilmente non sarà una scusa plausibile se utilizzata per più di due volte :) a quel punto tanto vale usare pgp... la steganografia andrebbe bene applicata a dati che vanno diffusi tra tante persone, come immagini pubblicate su pagine web, immagini mandate su newsgroup o spammate in catene di Sant' Antonio e simili ... :) in modo che solo chi sà come estrarre i dati li estragga.

Come si utilizza un software per steganografare?

Nel caso specifico vedremo l'uso di Outguess , la manualistica in esso distribuita può essere vista al:

http://www.ecn.org/crypto/crypto/tutorial/outguess/

tradotta in italiano, potrà dare una spiegazione delle opzioni più corretta della mia...

il software può essere scaricato da:

http://ftp.it.debian.org/debian/pool/main/o/outguess/outguess_0.2.orig.tar.gz

ma al momento si presta ad esser compilato ed avviato sotto linux, per l'utilizzo sotto altri sistemi ci stiamo lavorando.

In se può fare un numero interessante di operazioni, quello che conta di più in un software di steganografia utilizzato a livello semplice, è riuscire a iniettare dati all'interno di file e di estrarli quando si presenta la necessità.

Avendo quindi a disposizione un'immagine sufficientemente grande (nel caso essa non dovesse bastare outguess provvederebbe a segnalarlo ...) ed un file contenente il dato da nascondere, avviando:

 outguess -k "password" -d hidden.txt monkey.jpg out.jpg 

con -k "password" la password che deve essere scambiata tra i comunicanti e deve essere utilizzata anche in fase di estrazione

 -d hidden.txt il file che stà per essere nascosto 

e poi, indicati senza opzioni il file originale da utilizzare come trasporto (che rimarrà invariato) ed il file destinazione (dato dalla fusione del file di trasporto con il dato da nascondere, dopo che questo sarà stato cifrato con la password).

Alla fine dell'esecuzione si sarà creato un file di nome out.jpg con una dimensione SIMILE a monkey.jpg, a causa di particolari proprietà deil file JPEG è possibile che la dimensione sia leggermente maggiore o leggermente minore, aprendo le immagini noterete che apparentemente esse non differiscono, ma provando a sottoporre ad entrambe outguess utilizzato in modalità estraente:

 outguess -k "password" -r out.jpg message.txt 

se state utilizzando la password utilizzata per iniettare, ed il file generato da outguess, che il messaggio estratto sarà uguale a quello inserito inizialmente.

Le opzioni che si utilizzano per estrarre sono:

  • -k per specificare la password, da usare nello stesso modo che nella fase di iniezione
  • -r per indicare l'immagine dalla quale vogliamo estrarre i dati
  • e poi per ultimo, il nome del file nel quale saran estratti i dati.

Un esempio del suo utilizzo può essere questo:

 debian:/home/stzg# ls -l testo 
-rw-r--r-- 1 root root 1710 Jul 7 19:16 testo

abbiamo un file di testo di 1710 byte che vogliamo nascondere

 debian:/home/stzg# ls -l friends.jpg 
-rw-r--r-- 1 stzg stzg 149377 Jun 23 12:38 friends.jpg

l'immagine friends.jpg si presterebbe alla funzione di "trasporto", ci sembra sufficientemente grande, proviamo ad usarla con la password che abbiamo deciso con il destinatario del messaggio

 debian:/home/stzg# outguess -k "our__SECRET__" -d testo friends.jpg friends2.jpg 
Reading friends.jpg....
JPEG compression quality set to 75
Extracting usable bits: 155060 bits
Correctable message size: 7471 bits, 4.82%
Encoded 'testo': 13680 bits, 1710 bytes
steg_embed: message larger than correctable size 13680 > 7471
debian:/home/stzg#

l'immagine sebbene decentemente grande, non basta! fate attenzione alla password, essendo specificata a riga di comando non può contenere spazi o simboli particolari (ameno chè non utilizziate il simbolo "\" prima di questi simboli, ma non è necessario complicarsi la vita quando si può utilizzare una password di lettere e numeri sufficientemente lunga

 debian:/home/stzg# ls -l Image1.jpg 
-rw-r--r-- 1 stzg stzg 105141 Feb 27 13:42 Image1.jpg

ho anche l'immagine Image1.jpg, un pò più piccola di friends.jpg, visto e considerato che jpeg non ha una dimensione direttamente proporzionale alla definizione ed alla dimensione, provo ad usarla ...

 debian:/home/stzg# outguess -k "our__SECRET__" -d testo Image1.jpg aa.jpg 
Reading Image1.jpg....
JPEG compression quality set to 75
Extracting usable bits: 131194 bits
Can not calculate estimate
Correctable message size: -1 bits, 3273752.84%
Encoded 'testo': 13680 bits, 1710 bytes
Finding best embedding...
0: 6862(50.0%)[50.2%], bias 6167(0.90), saved: -2, total: 5.23%
2: 6883(50.2%)[50.3%], bias 6093(0.89), saved: -5, total: 5.25%
4: 6880(50.2%)[50.3%], bias 6066(0.88), saved: -5, total: 5.24%
5: 6815(49.7%)[49.8%], bias 6024(0.88), saved: 3, total: 5.19%
10: 6707(48.9%)[49.0%], bias 6041(0.90), saved: 16, total: 5.11%
151: 6753(49.2%)[49.4%], bias 5901(0.87), saved: 10, total: 5.15%
151, 12654: Embedding data: 13680 in 131194
Bits embedded: 13712, changed: 6753(49.2%)[49.4%], bias: 5901, tot: 131053, skip: 117341
Foiling statistics: corrections: 2125, failed: 6, offset: 173.262013 +- 299.926862
Total bits changed: 12654 (change 6753 + bias 5901)
Storing bitmap into data...
Writing aa.jpg....

ed ha funzionato! nella fattispecie non perché avesse trovato una quantità di bits disponibile maggiore, ma perché non è riuscito a calcolarlo, ed ha accettato di steganografare anche se questo potrebbe effettivamente danneggiare l'immagine (mai in modo visibile, ma danneggiandola a livello statistico e rendendola vulnerabile ad un attacco di steganalisi)

La steganalisi è il tipo di attacco che può essere portato ad un dato steganografato, la sua finalità è di capire se c'è un dato nascosto all'interno di un immagine o no, un software in grado di portare questa analisi è "stegdetect" dello stesso autore di outguess, e può essere utilizzato per testare i file da noi prodotti per verificare che effettivamente la nostra modifica non sia individuabile a questi attacchi

Nel caso specifico di Image1.jpg che è diventata aa.jpg, non vi sono stati problemi e l'immagine appare come l'originale, sia visualizzandola che analizzandola con il software di steganalisi

 debian:/home/stzg# ls -l aa.jpg 
-rw-r--r-- 1 root root 124057 Jul 7 19:17 aa.jpg
debian:/home/stzg#

vediamo che la dimensione è aumentata di 24k ...

 debian:/home/stgz# outguess -k "our__SECRET__" -r aa.jpg dato_estratto 
Reading aa.jpg....
Extracting usable bits: 131194 bits
Steg retrieve: seed: 151, len: 1710

e con la stringa finalizzata ad estrarre testiamo che l'inserimento è andato a buon fine, rimettendo la stessa password estraiamo il dato nascosto nel file "dato_estratto"

 debian:/home/stgz# ls -l dato_estratto 
-rw-r--r-- 1 root root 1710 Jul 7 19:24 dato_estratto

che effettivamente è grande quando il file originale "testo"

 debian:/home/stgz# diff dato_estratto testo 
debian:/home/stgz#

e tramite il programma "diff" che mostra le differenze tra 2 file, vediamo che non ve n'e' alcuna.

← previous
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT