Steganografia…. take it easy…
Ultimo articolo della serie “proviamoci”….
Vedremo come usare la steganografia in modo semplice, faremo qualche esempio pratico e vedremo di combinare delle tecniche che abbiamo appreso negli articoli precedenti. A differenza di quello visto finora la steganografia è qualcosa di più “oscuro” , non sempre se ne parla anche se a pensarci bene è forse la tecnica più efficace e sicura per nascondere/trasportare file e documenti importanti che devono essere mantenuti segreti. Da wikipedia vediamo il significato: “La steganografia è una tecnica che si prefigge di nascondere la comunicazione tra due interlocutori, infatti il termine è composto appunto dalle parole greche στεγανός (nascosto) e γραφία (scrittura).”
Vediamo prima qualche esempio senza l’utilizzo di alcun tool ma semplicemente usando la shell. Per questo esempio useremo un’immagine, il wallpaper di under_r00t:
Cominciamo con scrivere un messaggio su file di nome 1(uno):
$ echo "Domani alle 14:30 net-strike al sito di forza nuova" > 1
E comprimiamolo con gz:
$ gzip 1
Ora possiamo provare a dare un’occhiata al contenuto:
$ cat 1.gz �(�R1s��M��TH��IU04�26P�K-�-.)��N�*g��+�d*��U%*����%r}��~4%
E’ molto importante (indispensabile) conoscere la grandezza esatta del file appena creato, possiamo visualizzarlo con wc:
$ wc -c 1.gz 73 1.gz
Vediamo di appendere il contenuto di 1.gz ad un file immagine, potrebbe anche essere un file audio o video o qualsiasi altro formato:
$ cat 1.gz >> wall_undr00t_steg_prova.png
Ovviamente la nostra immagine non viene modificata, se non nella grandezza del file che abbiamo appeso, ma resterà pur sempre visibile come immagine. Diamo un’occhiata agli ultimi bit della nostra immagine con tail:
$ tail wall_undr00t_steg_prova.png
�(Y�+��;FU�}��\d��Yb�
N7�7/���&���I,��-����/
��0��H����(n�
�cal!���<�ڲ�/l��!^�@,>�2��K���_D���0�1��щ��؞oԎ��&�W�@�Y�/��_
�<���~/�ӽ�ݓ����+>�6�b ���� @
cW�
�4�I� ��hQܫ~J�~j��3R,AO���v���wA�y��z�Byݩ�G,N
]�4�o ʢ���А�$u��5]<�q���I���@���Z}'.��[��{g�'
D�ۂ!̃�I���Ю��ijʃBjƳ�@�=��[���r��!�$L�stZs3�o�Ns��%���$�4��!��F�l*
�����sZu���-ʒ��*&țK.�����)�>ʁ߳�!��
?v����k���֖����m�˞
~���j[q��<���a����z��+�z�H9�릦I�S��
��"�������2?��ec�,���:��o�]���x
�{��!�λ��ߧ� A��F�Od��ǘm� �-
�9�=�Л���_$m(��͂�#�$A�ύƶ~G�
��,P<m�@=�Q
�4@-@!IpVO�9
g@���X����@E"q��uv��EA�Y�;���(��Z-v�r&���\P+������6R�^��~|
,I�=ʟ���ǸA�P���_���m�dxR̕��R6C�R�f�����L��F ݰ
K[��i�M�r%f��o�v}r����O���(
�%C[
�+��������K�z�]7���z�z���Y�ڑ���p��27
�e��ɇ�Q/���Rmy���t_S�{7�?�X�*��5" ������O;
Ur��>���x�0" ��t�?B���AV$�P����?H8p��x �7/��]�Q\���:$vr�F/��xC�d�_��
���¿.IEND�B`��(�R1s��M��TH��IU04�26P�K-�-.)��N�*g��+�d*��U%*����%r}��~4%
Riconoscete la stringa appesa? Si confrontandole noi le riconosciamo ma ad una prima occhiata il nostro messaggio sembra ben nascosto e incomprensibile, a chiunque, dunque anche ai nostri destinatari rendendo di fatto inutile il lavoro appena svolto. Per riuscire a leggere il messaggio che è stato nascosto nell’immagine dovremo fare i passaggi inversi a quelli compiuti finora. Ricordate che prima vi ho fatto stampare la grandezza esatta del fiel 1.gz, questo serve ora perchè “ritagliando” la grandezza esatta del file appeso all’immagine potremo poi decomprimerla e riottenere il messaggio originale, quindi basta far sapere a chi di dovere “un numero” e il destinatario saprà di quanto “tagliare” la coda dell’immagine:
$ tail -c 73 wall_undr00t_steg_prova.png > 1-estr.gz $ gunzip 1-estr.gz $ cat 1-estr Domani alle 14:30 net-strike al sito di forza nuova
Ecco nel terminale come si presenta completamente:
Questo è un primo passo molto semplice, usando solo la potenza della nostra shell… Potremmo aggiungere un ulteriore livello di sicurezza, prima di comprimere il file si potrebbe criptare, potremmo usare gpg, oppure un altro utile programma chiamato aescrypt che potete trovare qui
Procediamo più velocemente:
$ echo "Domani net-strike alle 14:30" > secret.txt $ aescrypt -e -p P4ss-m0lt0-Ro.bust4 secret.txt $ gzip secret.txt.aes $ wc -c secret.txt.aes.gz 241 secret.txt.aes.gz
$ cat secret.txt.aes.gz >> Wall_AES.png $ tail -c 241 Wall_AES.png > Primo_estratto.gz $ gunzip Primo_estratto.gz $ mv Primo_estratto Primo_estratto.txt.aes $ aescrypt -d -p P4ss-m0lt0-Ro.bust4 / -o secret_estratto.txt Primo_estratto.txt.aes $ cat secret_estratto.txt Domani net-strike alle 14:30
E’ stato necessario rinominare “mv Primo_estratto Primo_estratto.txt.aes” in quanto aescrypt dava un errore, probabilmente non riconoscendo il file, strano perchè sui sistemi linux non esistono le estensioni, ma così ho dovuto fare… In più ho commesso un errore grammaticale, ho scritto rUbusta invece che rObusta vabbè! Capita =)
Se volessimo invece fare le cose in modo decisamente più sicuro e sofisticato steghide è un ottimo programma, lo si trova nei repository. Noi vedremo l’utilizzo più semplice, per una visione completa vi rimando alla lettura del manuale. Ci tenevo però a mostrarvi questo (preso ovviamente dal man):
The default encryption algorithm is Rijndael with a key size of 128 bits (which is AES – the advanced encryption standard) in the cipher block chaining mode. If you do not trust this combination for whatever reason feel free to choose another algorithm/mode combination (information about all possible algorithms and modes is displayed by the encinfo command). The checksum is calculated using the CRC32 algorithm.
$ steghide encinfo encryption algorithms: <algorithm>: <supported modes>... cast-128: cbc cfb ctr ecb ncfb nofb ofb gost: cbc cfb ctr ecb ncfb nofb ofb rijndael-128: cbc cfb ctr ecb ncfb nofb ofb twofish: cbc cfb ctr ecb ncfb nofb ofb arcfour: stream cast-256: cbc cfb ctr ecb ncfb nofb ofb loki97: cbc cfb ctr ecb ncfb nofb ofb rijndael-192: cbc cfb ctr ecb ncfb nofb ofb saferplus: cbc cfb ctr ecb ncfb nofb ofb wake: stream des: cbc cfb ctr ecb ncfb nofb ofb rijndael-256: cbc cfb ctr ecb ncfb nofb ofb serpent: cbc cfb ctr ecb ncfb nofb ofb xtea: cbc cfb ctr ecb ncfb nofb ofb blowfish: cbc cfb ctr ecb ncfb nofb ofb enigma: stream rc2: cbc cfb ctr ecb ncfb nofb ofb tripledes: cbc cfb ctr ecb ncfb nofb ofb
Potrebbe non capirsi una mazza, ed effettivamente così è se prima non leggete il manuale ed utilizzate steghide un paio di volte, ma facendovi vedere le potenzialità spero che non vi fermiate agli esempi che vi proponiamo qui, che sono solo semplici esempi di utilizzo senza nessuna pretesa!
Supponiamo di voler nascondere “messaggio_segreto.txt” all’interno di una immagine, il wallpaper di under_r00t, la sintassi sarebbe questa:
$ steghide embed -cf wallpaper_under_r00t.png -ef messaggio_segreto.txt Enter passphrase: Re-Enter passphrase: embedding "messaggio_segreto" in "wallpaper_under_r00t.png"... done
Mentre per estrarre il messaggio:
$ steghide extract -sf wallpaper_under_r00t.png Enter passphrase: wrote extracted data to "messaggio_segreto.txt".
Pensiamo ora di trovarci nella situazione in cui ci arriva una innoqua canzone formato .wav da un nostro amico, potremmo voler ottenere delle informazioni prima di estrarre il messaggio. Steghide ci fornisce info sul contenitore, il formato e la grandezza, dopo di che ci chiede se vogliamo ottenere informazioni sul messaggio steganografato (chiamato embedded), fornendo la password esatta ci verranno stampate a video le info che riguardano “messaggio_segreto.txt” come la grandezza, l’algoritmo di criptazion, il modo e e se è stato compresso:
$ steghide info canzone_punk.wav "canzone_punk.wav": format: wave audio, PCM encoding capacity: 6.3 KB Try to get information about embedded data ? (y/n) y Enter passphrase: embedded file "messaggio_segreto.txt": size: 2.8 KB encrypted: rijndael-256, cbc compressed: yes
Finito anche a sto giro… Ancora bla bla se ci sono orrori scrivete, se blabla le solite cose! Vi lascio una lista non esaustiva di altri tool che potrebbero tornare utili, sia dal lato privacy sia dal lato forense (cioè provate sulla vostra macchina a vedere se riuscite ad ottenere informazioni sensibili):
Lato Provacy:
Ottima lettura ultra consigliata!!! c’è pure un download con una “suite” di tool utili.
Lato Forense:
Tags: analisi forense, hack, privacy, sicurezza, steganografia