Papier de recherche pratique sur StegDetect 0.5 [stegano] ______________________________________________________________________ INTRODUCTION la steganographie est l'art de cacher des donnees dans d'autres. ennemie #1 de bigbrother, la steganographie est-elle une methode sure et efficace pour vos donnees sensibles, ou peut-elle etre facilement detectee, identifiee et cassee ? ce papier est une etude pratique de differents 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 pedophiles ou de mechants 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, code 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 inserer le matos dans le .jpg. il n'y a pas de difference majeure entre JPHS 0.3 et 0.5 excepte que le 0.5 compresse les donnees 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'inserer un fichier de 2 Ko dans une image jpg de 10 Ko, par contre, il accepte de l'inserer 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 generalement vrai : le fichier steganographie est d'une taille inferieure a la taille du jpg original ajoute a celle du fichier insere. STEGDETECT (0.5) stegdetect est ecrit par l'auteur du programme de steganographie outguess, Niels Provos, en 2001, alors que JPhide est ecrit 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 sensitivite a virgule flotante : "-s float Changes the sensitivity of the detection algorithms." 1.0 est le defaut. 1.2 commence deja a renvoyer beaucoup trop de faux positifs. FAUX-POSITIFS AVEC STEGDETECT sensitivite de 1.9+, puis de moins en moins jusqu'a 1.0 : faux positifs. le defaut 1.0 donne toujours de faux positifs, selon la complexite graphique de l'image. bien que l'auteur de stegdetect predise 2% max, je trouve des faux positifs sur 1/20 de mes images environ. avec la sensitivite a 1.9 c'est la foire : /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 algorythme plus elabore. STRATEGIE DE TEST AVEC STEGDETECT, VARIABLE: SENSIBILITE SUR 1MO sensitivite: sur une image de 1Mo avec ses 2Ko de stegano, - avec 1.8 de sensitivite, tres elevee, bp de faux positifs : a.jpg : negative - avec 1.9, tellement elevee que le resultat n'a aucune valeur : thufir:~/temp$ stegdetect -s 1.9 a.jpg a.jpg : jphide(*) == positive, trouve. STRATEGIE DE TEST AVEC STEGDETECT, VARIABLE: TAILLE taille: avec la meme image de 1Mo avec - 2 Ko de donnes steganographiees: non detecte (v. precedent) - 20 Ko de donnees steganographiees: detecte. egalement, sur un fichier de 200 Ko + 2 Ko, steghide detecte jphide a 1.0 (default) de sensibilite, 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 decouvrir a 1.0 (sensitivite normale) - avec une longue pass phrase (21 chars) : trouvee negative de 1.0 -> 2.7 ! (a ce niveau, il y a deja 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 detect 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 differentes op. peuvent etre definies 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/web2a) de 1 Mo, sur un P3 1Ghz proc 99% pdt 1 Min sur une img1Mo.jpg, le mot de passe est trouve : jphide[v3](oki) STRATEGIE DE TEST SUR UNE STEGANOGRAPHIE NON-DETECTEE cas d'un fichier contenant de la steganographie, mais non identifie comme tel par stegdetect (en utilisant pourtant un coefficient de sensitivite de 2.7, ce qui est enorme et donne autant de faux positifs). essai neamoins 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 reussit donc quand meme! le faible mot de passe 'oki' est trouve, bien que le fichier n'ai pas ete identifie 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 essaye cette ancienne version de stegdetect, histoire de comparer les differences eventuelles de resultats avec la recente 0.5. puisque qu'une etude comparative de versions n'est pas le but ici, il en resulte simplement que la 0.3 est moins efficace que la nouvelle pour detecter des petits fichiers inseres. pour le reste, peu de differences. DISCUSSION une large attaque distribuee sur ebay et USENET avec stegdetect a ete effectuee par l'auteur de stegdetect. il en ressort qu'internet n'est PAS utilise comme support pour la distribution d'informations stegano. ils n'ont pas pu trouver un seul document insere parmis 15.000 images trouvees positives par stegdetect. en plus j'imagine que c'etait en tres faible sensitivite, sinon le nombre de faux positifs aurait ete bp plus eleve... puisque le nombre d'images evalue etait de 2 millions. CONCLUSION la stegano est detectable et identifiable. cependant, avec un ratio image/stegano de 1/500e (soit par exemple img1Mo + steg2Ko), prouver statistiquement son existence reste presque impossible. beaucoup de mots de passes sont vulnerables 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, aneantit les chances d'une eventuelle attaque et reduit beaucoup les probabilites de detection si un ratio taille est egalement applique. leonard at madchat.org pour >Under Realms< Mag editeur Brain Override http://under-realms.org REFERENCES UTILISEES (* == 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