_ _____________________________________ _ -a- `^°*;:,.> Stegano Megalo <.,:;*°^` _____________________/¯¯¯¯¯¯¯¯¯¯leonard¯¯¯¯¯¯¯¯¯¯\_____________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, 20/10/2002 Papier de recherche pratique sur stegdetect 0.5 [stegano] INTRODUCTION La steganographie est l'art de cacher des données dans d'autres. Ennemie #1 de bigbrother, la stéganographie est-elle une méthode sure et efficace pour vos données sensibles, ou peut-elle etre facilement detectée, identifiée et cassée ? Ce papier est une étude pratique de différents cas sur des images. Il sera utile a ceux qui souhaitent utiliser la stegano au mieux, et a ceux qui se demandent si internet est un repaire de pédophiles ou de méchants terroristes qui en veulent a votre grand-mere. mot clefs: steganography, jphide, stegdetect, stegbreak, wordlist, brute-force, jpeg, cryptography, statistical steganalysis. OUTIL STEG: JPHIDE 0.3 L'avantage de jphide and seek, codé par Allan Lathman, est triple. Il existe sous unix ET windows, il utilise un crypt blowfish pre-steg, et il n'utilise pas de table fixe pour insérer le matos dans le .jpg. Il n'y a pas de différence majeure entre JPHS 0.3 et 0.5 excepté que le 0.5 compresse les données avant de les crypter puis de les stegano. Comme le 0.5 n'est pas fourni sur la page de l'auteur, nous nous en tiendrons, question de parano, au 0.3. A noter que jphide refuse d'insérer un fichier de 2 Ko dans une image jpg de 10 Ko, par contre, il accepte de l'insérer dans 1.jpg de 40Ko. Autre decouverte au cours de recherches avec la fonction brute-force de stegdetect : jphide a un probleme au niveau des mots de passe. i.e. si vous entrez 'okioki' comme passphrase, vous pourrez extraire votre image en tapant 'okioki', bien sur, mais egalement simplement 'oki'. Taille des fichiers en octets: 39086 (original jpg) + 1886 (tgz) => 39947 (taille du jpg en sortie) ou encore: 1097804 + 1886 => 978077. ceci est l'illustration extreme d'un cas généralement vrai : le fichier stéganographié est d'une taille inferieure a la taille du jpg original ajouté a celle du fichier inséré. STEGDETECT (0.5) stegdetect est ecrit par l'auteur du programme de steganographie outguess, Niels Provos, en 2001, alors que JPhide est écrit en 99. Niels a donc eut le temps d'etudier le source et algos de JPhide. stegdetect contient aussi un utilitaire de brute-force qui fonctionne avec le dictionnaire qu'on lui donne: stegbreak. Tests: if information has been embedded with jsteg, with outguess, jphide, invisible secrets (?), F5 (?). Enfin stegdetect a une variable de sensitivité a virgule flotante : "-s float Changes the sensitivity of the detection algorithms." 1.0 est le defaut. 1.2 commence déja a renvoyer beaucoup trop de faux positifs. FAUX-POSITIFS AVEC STEGDETECT De 1.9+, puis de - en - redescendant jusqu'a 1.0 : faux positifs. Bien que l'auteur de stegdetect predise 2% max, je trouve des faux positifs sur 1/20 de mes images environ. /hda5/0cd/images/Decypher_S1.jpg : jphide(***) /hda5/0cd/images/IRAX.jpg : jphide(*) /hda5/0cd/images/Image 11.jpg : outguess(**) jphide(*) /hda5/0cd/images/Image 41.jpg : jphide(*) /hda5/0cd/images/image23.jpg : outguess(***) /hda5/0cd/images/Image1000.jpg : jphide(*) /hda5/0cd/images/image2.jpg : jphide(*) jphide est plus souvent responsable de faux positifs que d'autres comme outguess ou jsteg, grace a son algorithme plus élaboré. STRATEGIE DE TEST AVEC STEGDETECT, VARIABLE: SENSIBILITE SUR 1MO Sensitivité: sur une image de 1Mo avec ses 2Ko de stegano, - avec 1.8 de sensitivité (tres élevée, bp de faux positifs) : a.jpg : négative - avec 1.9 de sensitivité (encore plus élevée) : thufir:~/temp$ stegdetect -s 1.9 a.jpg a.jpg : jphide(*) == positive, trouvé. STRATEGIE DE TEST AVEC STEGDETECT, VARIABLE: TAILLE Taille: avec la meme image de 1Mo avec - 2 Ko de données steganographiées: non détecté (v. precedent) - 20 Ko de données steganographiées: détecté. Egalement, sur un fichier de 200 Ko + 2 Ko, steghide détecte jphide a 1.0 (default) de sensibilité, ce qui veut dire qu'il y a de forte chances que ce ne soit pas un faux positif. STRATEGIE DE TEST AVEC STEGDETECT, VARIABLE: PASS PHRASE Toujours sur l'image de 1 Mo, contenant 2 Ko de stegano. - avec un tres faible mot de passe 'oki' : se fait découvrir a 1.0 (sensitivité normale) - avec une longue pass phrase (21 chars) : trouvée négative de 1.0 -> 2.7 ! (a ce niveau, il y a déja tellement de faux positif que le test n'a plus aucune valeur) Avec 20Ko dans l'image de 1 Mo, meme avec la big passphrase steghide détect positif a 1.0 (**) et deja (***) a 1.5. BRUTE-FORCE CRACKING EXTRACTION STRATEGIE AVEC STEGBREAK L'utilitaire stegbreak de stegdetect, est une sorte de moulinette qui fonctionne avec un dictionnaire de mots sur lequel différentes op. peuvent etre définies en plus dans un rules.ini, dans le style de john the ripper. exemple de ligne: # Duplicate reasonably short pure alphabetic words (fred -> fredfred) <7>1!?Ald En utilisant un dico (ici /crypto/wordlists/1anothercollection/web2) de 1 Mo, sur un P3 1Ghz proc 99% pdt 4 Min sur une img1Mo.jpg, le mot de passe est trouvé et la partie stegano extraite : jphide[v3](oki) STRATEGIE DE TEST SUR UNE STEGANOGRAPHIE NON-DETECTEE Cas d'un fichier contenant de la steganographie, mais non identifié comme tel par stegdetect (en utilisant pourtant un coefficient de sensitivité de 2.7, ce qui est énorme et donne autant de faux positifs). Essai néanmoins de brute force avec stegbreak : thufir:~/temp$ stegbreak -t p -f wordlists/web2 a.jpg Loaded 1 files... a.jpg : jphide[v3](oki) Processed 1 files, found 1 embeddings. Time: 34 seconds: Cracks: 129503, 3808.9 c/s L'attaque réussit donc quand meme! le faible mot de passe 'oki' est trouvé, bien que le fichier n'ai pas ete identifié comme contenant de la stegano. Bon a savoir si vous suspectez un fichier en particulier. POST-COMPARATIF AVEC LA PRECEDENTE VERSION DE STEGDETECT (0.3) J'ai essayé cette ancienne version de stegdetect, histoire de comparer les différences éventuelles de résultats avec la récente 0.5. Puisque qu'une étude comparative de versions n'est pas le but ici, il en résulte simplement que la 0.3 est moins efficace que la nouvelle pour détecter des petits fichiers insérés. pour le reste, peu de différences. DISCUSSION Une large attaque distribuée sur ebay et USENET avec stegdetect a été effectuée par l'auteur de stegdetect. Il en ressort qu'internet n'est PAS utilisé comme support pour la distribution d'informations stegano. Ils n'ont pas pu trouver un seul document inséré parmis 15.000 images trouvées positives par stegdetect. En plus j'imagine que c'etait en tres faible sensitivité, sinon le nombre de faux positifs aurait été bp plus élevé... Puisque le nombre d'images évalué etait de 2 millions. CONCLUSION La stegano est détectable et identifiable. cependant, avec un ratio de 1/500e, prouver statistiquement son existence reste presque impossible. Beaucoup de mots de passes sont vulnérables a des attaques par force- brute a l'aide d'un dictionnaire aide d'algorithmes. Avec JPHide, choisir une passphrase longue, plutot qu'un simple mot de passe, anéantit les chances d'une éventuelle attaque et réduit beaucoup les probabilités de détection. leonard at madchat.org [mAdchAt, base de fichiers libres] REFERENCES UTILISEES {* == 5hdumat.samizdat.net ou http://madchat.org} */crypto/textes/detect.pdf */crypto/steganography/unix/stegdetect-0.5.tar.gz */crypto/steganography/unix/stegdetect-0.3.tar.gz */crypto/steganography/unix/libevent-0.6.tar.gz */crypto/steganography/unix/jpeg/jphs-0.3.tgz */crypto/steganography/windos/jpeg/jphs05.zip */crypto/wordlists/1anothercollection/web2 leonard@madchat.org