You are on page 1of 245
Hacking et Forensic ig a gts aa Hacking et Forensic Développez Franck EBEL Mes propres outs en Python — @ =i a eax p livre sacresse aux professionnels de la sécurité informatique, du Forensic mais aussi aux personnes désirouses de so former a la conception doulls en Python. Ia our objec'de conde le lecteur 8 une bonne comprehension de bblotheques spéctiques Python pour ql pulsee ensuite concevoi sea outils personnalizés, acapies a dae stuatione pariculres en Hacking et Forensi. Pour en rere meilur oft possible ilest nécassare avoir doe nations de séavite informatique el une bonne connaissance da programvmation Python, Lote ost dboompose on 6 chapites, chacun ost ilut® par do nombreux exemples vec, en in do chasit sin de donner au lecture moyen de sauto-valer 08 exarcloes avee correction Le chapie 1 est consacré@ la programmation réseau, autour détalea programmation de soskes pus les iférents services tels que HTTP, FTP, POP, SSL par exemple, ans que les expressions requires, faccés aux bases de domées. Le chapie 2 est consacé & la bblotneque seapy irs utlo on hacking ot Forensic: Tauteur dale la manipulation de trames, le tunneling es difrens types de scan réseau ot aborde galement IPV6, Dans le chapitre 2, des connaissances de bases aur les nations dareiteture PC et aseembleur, ur Fullisation de debugger, oat indlpenaables pour la compréhonsion do ls biblethéque PyDbg Gu cst ulsee. Le chapitre 4 ost dedié au Fuzzing; dana uno promore parti Tautour uiiee doe biblomoques Ses Vues dane loe shaptes précédens pule, dane une douxidme part, 1 tusio Uno BibatReque panieullére, Sulley, spécalisse dans ls fuzzing. Le chapive 5 parce en revue i bblotheque PIL qui va permet ce gérer es Images, de los ‘Modifer, do capivrer des images de webcam pour en extiare des données, fauieur éuciera un slément pariculer ela sécurite web, les apchel. Eni, le demiorcheptve est enllérement consacre au Forense ; aul fera une ewe, non exhaustive, des ciérentes techniques, et parcoura a stéganographi, la crypiographie, os traques de mals. tour vou fae de co vo un regroupement non exhaust des biblithequos utiles, oxpiqu ‘ve lo lecteur pusses'enapproprer ie fonctonnement. ot illustr6os par dos o mmplosconcrats fin Les chopites du tivo Le réseau — Réseau : la bibbothtque Scapy ~ Débogage sous Windows ~ Le Fuzzing ~ Traitement dimages ~ Forensic ~ Franck EBEL est enssigrant & funversté de Valenciennes, commandant de gendarmerie réseriste, directeur technique de la socité anconsels et spécialiste de la lutte antrcybercriminalité est expert en falles applicatives. I cré ls cence professionnele “ethical hacking" (pele GDAIS! [a seule on France on sécurité ce offensive. Cert CEM, OSCP et Wit, orme ls ntoch dela gardammari do la region Nova-Pas de Calais et le CI-CERT de Cote avoir. La eecurié informatique est Une passion aUil partage Wes largement irs 36 Conferences ou 2 travers los pagos doce lure pour donner & see audiurs ot leteurs un maamum siaformations pour maltiger co vaste uel est ogaloment co autour du lve "Séeurts normatique - thea Hacking aru abx Edtone EN. Ce ure numa 28 congue ot tus dane fe repect es cre auteur Toute ee marquee elds ot dt dlpostes parlour dour repactl. Lao 11 Mae 1957 nuts aux tomes des andas 2! Sd article 41, dunepat. que es "cones ou reproduces Stoner rservges&usepe pve du copie Pn destin 4 ur uttsaton cole’ t autre par que es analyses ctles cours ciatorsdavs un but d'oxaneeetdilusrator. Yate epéseravon ov reprodcton marl. ‘parole, fate sare le cancnteoot autour 2s oo ses aarts Gat oy aya causo, ete" (an Tr do Jace 4). Cle aprasaraian ou ode, par {ewe procase que ce Sol contrat doe une cometazon saan par Ws ries 425 suivants Cade Pst Coprigh Elion EX Celie uméique tre pious mesures de protectin dort n margage i & veins ant vise sures principals iranes Introdu Ce livre siadresse aux amateurs et aux professionnels de la sécurité informatique, du Forensic ou tout simple ment ‘aux personnes désireuses de se former & la conception doutils en Python, I est nécessaire pour 'appréhender d’avoir une bonne connaissance de la programmation avec le langage Python ‘et des notions de sécurité informatique. Ce livre a pour objectif d’amener le lecteur & la compréhension de bibliotheques spécifiques de Python afin de pouvoir rapidement concevair des outlls adaptés a des situations particulléres en Hacking et Forensic. En effet, des années d’expérience dans les audits en sécurité informatique et les formations ont démontré que trés souvent les outils automatiques ont des limites et donnent des résultats parfois farfelus, que ce soit en Forensic ou en Hacking. Nous sommes donc obligés de fabriquer des outils spécifiques a une application ou & un systéme, car chaque cas, demande une réflexion, une intuition et seul humain peut réellement y parvenir. Ge livre est done un recuell, un regroupement non exhaustif des bibliothéques utiles, parfois traduites des documentations anglaises, testées et expliquées avec des exercices afin d’en comprendre le fonctionnement. Lidée de ce livre est venue d'un besoin réel exprimé lors d'une formation des ntechs (techniciens pour la recherche de preuves informatiques) de la Gendarmerie nationale frangalse et du groupe CI-CERT (Céte dIvoire - Computer Emergency Response Team) de Céte d'Ivoire. Une sorte de manuel oli les outils sont rassembiés, oli Yon vient plocher suivant les besoins pour un probleme précis. Ce livre est décompasé en six chapitres, dont cing apportent les connaissances nécessaires, les bibliothéques et la méthode pour pouvoir aborder les outils en Forensic, qui est objet du chapitre Forensic. Tout au fong de ces chapitres chaque partie est illustrée par de nombreux exemples et, en fin de chacun, des exercices avec correction vous donneront le moyen de vous auto-évaluer. Le chapitre Le réseau est consacré & la programmation réseau. Nous aborderons la programmation des sockets Puls les différents services tels que HTTP, FTP, POP, SSL par exemple, mais nous aborderons aussi les expressions régullres, l'accés aux bases de données. Le chapitre Réseau : la bibliothéque Scapy est consacré a une bibliothéque trés particuliére, et surtout trés utile fen Hacking et Forensic, qul est Scapy. Nous aborderons la manipulation de trames, le tunneling, les différents types de scan réseau, Nous toucherons aussi du bout des doigts a I1Pv6. Le chapitre Débogage sous Windows est le chapitre, je pense, le plus complexe car les connaissances de base nécessaires sont plus diverses. En effet les notions d'architecture PC, d'assembleur, Vutilisation de debugger sont Indispensables & la compréhension de la bibliothéque PyDbg que nous utiliserons. Le chapitre Le Fuzzing comporte dans une premiére partie (utilisation de bibliothéques déjé vues dans les cchapitres précédents telles que celles nécessaires pour la programmation réseau, Scapy. Puls, dans une deuxieme partie, nous passerons une bibliothéque particullére, Sulley, spéclalisée dans le fuzzing Le chapitte Traitement d'images passe en revue a bibliothéque PIL qui va nous permettre de gérer les images, de les modifier, de capturer des Images depuis une webcam pour en extraire des données, Nous verrons aussi un probleme particulier de la sécurité sur le web, les captchas. Le chapitre Forensic est consacré entiérement au Forensic, nous y fefons une revue non exhaustive de différentes, techniques, nous parcourrons la stéganographie, la cryptographie, la traque de malls, Beaucoup d'ouvrages existent sur chacun de ces sujets individuellement, principalement en anglais, mais aucun ‘ouvrage ne regroupe en un seul livre un condensé, en frangais, comme celui Introduction Un ordinateur sans connexion a Internet n'est plus vraiment utile de nos jours, sauf dans de rares cas. Faites Vexpérience de vous asseoir devant votre machine et de le déconnecter du Net : plus de recherche sur Google ou autre, plus de chat avec les amis, plus de Facebook Tout passe donc par une connexion et donc par les sockets. Nous en trouvons comme définition sur Wikipédia : « Dans le contexte des logiciels, on peut le traduire par « connecteur réseau » ‘Apparu dans les systémes UNIX, un socket est un élément logiciel qui est aujourd'hui répandu dans la plupart des systémes d'exploitation. 1! s'agit d'une interface logicielle avec les services du systéme dexploitation, grace & laquelle un développeur exploitera facilement et de maniére uniforme les services d'un protocole réseau. 1 sera ainsi par exemple aisé d'établir une session TCP, puis de recevoir et d’expédier des données grace 3 elle. Cela simplifie sa téche car cette couche logiciel, de laquelle il requiert des services en appelant des fonctions, ‘masque le travail nécessaire de gestion du réseau, pris en charge par le systéme. Le terme socket désigne en pratique chaque variable employe dans un programme afin de gérer lune des sessions. » Il devient done nécessaite de comprendre et de savoir programmer des sockets pour pouvoir accéder aux différents services tels que le Web, le FTP, les malls. Les sockets 1. Création d'un socket La bibliothéque socket de Python va nous permettre d'accéder aux services voulus. "ll y a une bibliothéque réseau & connaitre et a savolr utiliser, c'est bien celle-cl Nous verrons bien sir par la sulte d'autres bibliothéques spécifiques aux services cités en introduction, mals avec la bibliothéque socket, nous pourrons tout faire, Cela demandera quand méme de connaitre la norme utilisée pour les communications TCP, UDP et des différents services. Pour cela, nous vous laissons le soin d’aller lire les RFC correspondantes. du socket..." Socket .AF_INET, socket .SOCK_STRERM) print ‘*eonnexion a I’hote distant? * S.connect ({" wmwseni fr", 80)) Nous n‘avons pas ici de grandes difficultés quant & la compréhension de ce code. La bibliothéque socket est Importée des le début du script. Nous créons ensuite objet socket en lui précisant grace 8 AF_INET que nous utilisons IPv4 et en lui désignant le protocole (SOCK_STREAM pour TCP et SOCK_DGRAN pour UDP). Pour nous connecter & 'héte distant (connect), nous devrons utiliser ce que on appelle un tuple, une double parenthdse, contenant 'adresse IP et le port. Il ne se passera rien & Vexécution de ce script puisque nous établissons une connexion sans échanger de données mals nous serons bien connectés & I'héte distant. Pour gérer les accents avec Python, nous devons ajouter, au début du code source : f -* coding: iso-8859-1 ~*~, so-8859-1 peut étre remplacé par un autre encodage suivant celui utilisé par le systéme d'exploitation (utf-8, windows-1252, cp-1252). Pour un soucl d'uniformité, les accents ne seront pas intéqrés dans les scripts. 2. Echange de données Quand la connexion est établle, nous pouvons envoyer et recevolr des données. La communication avec le socket va maintenant pouvoir se faire assez aisément grace & deux fonctions, send () et recy () # send() => tep * sendto() =>udp © reev() = tcp * recvfrom() => udp ‘chapt_exo2.py s~sockst .20cket (socket .AF_INGT, socket .SOCK_ST Ant Taceket fait’ int //connexion a L’/hote distant!’ s.connect (("wwe.ent.£r', 80)) piint ‘connexion faite’ S.send( "GET /index.heel #TML/1.0\z\q data=s.recv (2048) int data s.close() Le résultat a 'écran de ce script ne va étre qu'une partie de la page web rapatriée sur notre machine ; en effet, nous avons demandé de récupérer seulement 2048 octets. Si nous voulons la récupérer en totallté, II nous faudra utiliser une boucle qui va lire jusqu’a ce qu'l n'y alt plus informations a récupérer. chapt exo3.py #1 /use/bin/eow pytnen Ant Texeation du aocket ... socket .socket (socket .AF_INET, socket: SOCK_STREAM) ((uwdsent £2", 80)) piint ‘connexion effectuse’ S.send( "GET /index.php #IML/1.1 eatare recy (128) Dans exemple chap1_exo3.py, nous utilisons une boucle infinle (while 1) et nous vérifions sila variable dat a est vide. Si cela est le cas, nous sortons du script grace au break. Le contenu réel de la page obtenue ne nous intéresse pas pour Instant, vous risquez dailleurs d’obtenir la page detreur et non pas la page demandée. 3. Les erreurs Le script précédent ne fonctionnera que si aucune erreur n'a été générée par l'une ou autre des commandes. Pour que notre script soit optimal et puisse gérer les erreurs, il va nous falloir tester chaque commande avec le couple try et except. ‘try va nous permettre de lancer la ou les commandes qui le suivent. Si une commande échoue, il passera la main 4 except et nous pourrons donc gérer cette erreur ou exécuter une autre commande, Chaque commande a ses exceptions, nous allons done voir ici les exceptions spécifiques aux sockets. Les sockets exceptions : * socket . error : erreurs d’entrées/sorties générales et problemes de communication, + socket .gaierror : erreurs lors de la recherche d’informations sur les adresses. + socket .herror : les autres erreurs d’adresses (correspond a h_error en C) 4 socket timeout : pour tout ce qui vient de problémes de dépassement de temps ; set timeout () doit avoir été appelé avant dans le socket. ‘shap1_exo4.py ¥i/use/bin/enw python feat coding :uTe-2 Amport sacket, 292 host~sys.azgvI1] cextport=sysargv[2) eicnier-eye.arev[3] srsocket -aocket (socket .AF_INET, socket .SOCK_STREAM) except. socket .error,e: nt "erreur lors de la crestion du socket : 4s" 42 sys.exit (a) etnint (textport) except Valuetrror try: port=socket.getservbyname (host, "top! ) except socket .erz0r,e: print ne trouve pas le port ‘s* te sys.exit (1) s.connect ({host, port) | except socket .gaierror, e nt "erreur a’ adresse sys.exit (1) except socket .error, 9: nt "erreur de connexion: ts" te sysvexit Q) connexion au serveur :te" te s.sendall ("GET 4s HTTP/1.0\2\n except socket .error, 91 nt "erreur atenvoi des donnees + ts * te sysvexit QD nt § fichier) ey utes recy (2048) print "erreur de reception des donnees: 4s" Se sys.extt() Af not en (bus) int but Dans ce script, les informations sont attendues en arguments, cest-a-dire que nous allons devolr Indiquer quel est le site, le port et le fichier demandé lors du lancement du script /nome/fasm:8 python chapl_exo4.py wewveni.fx 60 index.html Le premier argument, arav(1], correspond a www.enl.fr, le deuxieme, arav (21, au port voulu, et le troisiéme au fichier demandé (qui se retrouvera derriére le GET), Chaque étape du script est testée afin de la valider ou de sortir proprement du programme. Socket.ertor permet de vérifier si le socket a bien été créé. Valuettror permet quant & lui de voir si port=int (textport) s'est bien déroulé, c'est-a-dire que la transformation en nombre entler de la chaine de caractéres entrée est valide, sinon cela veut dire que Futllisateur a entré autre chose qu'un nombre. Socket. galerror nous indiquera une erreur d’adresse Internet. Socket.error nous renseignera sur une erreur de connexion ou d’envoi de données, Nous avons jusqu’a présent testé la bibliothéque import sur un service web. Tentons d'adapter notre programme pour se connecter & un serveur FTP et de lister par exemple le contenu d'un repertoire, 4, Socket et FTP Pour vous familiariser avec les commandes FTP, rendez-vous sur Google afin de trouver la RFC959, norme du protocole FTP (exemple : www.fags.org/rfes/rfc959.html), La connexion ne sera pas plus compliquée & établir que pour le Web. Une banniere est tout d’abord envoyée par le serveur FTP, ensuite il nous faudra donner notre identifiant (USER nom_login\r\n) puls notre mot de passe (PASS notre_pass\r\n). Si.ces étapes sont franchles, nous pourrons alors lancer les commandes telles que STOR, CWO ou autre. Pour clore Ia connexion, il faudra lancer QUIT\r\n. Tentons cela sur un serveur anonyme ol! nous devrons mettre comme identifiant anonymous et comme mot de passe notre adresse mail ‘Au jour ol ce livre est écrit, le site ftp.Ibiblio.org fonctionne pour une connexion anonyme, Chapt exo5 py #1 /use/bin/env python Boot coding :u7E~2 eet host="£tp. bibl Bef fink 0: dat ans rec (1024) ast: sesocket socket (socket .AF_INET, socket .SOCK_STREAM) connect ({ nost,pore)} Fini) ss,send ("USER anonymous\z\n") Fint() Fini) s.send ("HELP\2\n") finig 2.send(*QUIT\z\n") 26) cata. te\z\n") Résultat du script Fasm@noya:~/ENI_livre_python/exemples$ python chapl_exo5.py 220 ProPTPD Serv 351 Anonymous 1ogin ok, send your complete onait address as your password Welcome to ftp-ibibiio.org, the public ftp server of ibiblio.crg. He hope you find what you'ze looking for TE you have any problems or questions, please see netp://ww.dbiblie.ora/hel/ Thanks! 230 Anonymous access aranted, restrictions apply 214-The following comands are recognized |* ->'s unimplenented) cw xcwO CUP. XCUP.SHNT* QUIT FORT ASV. Rien de bien nouveau dans ce script, juste une définition qui va nous permettre de tester la fin de réception en regardant sila variable data est vide et en coupant la clé par lots de 1024 octets. Nous pouvons maintenant nous attaquer a la conception d'un serveur en Python. 5. Utilisation de 'UDP Le protocole UDP (User Datagram Protocol) est un protocole qui se situe au méme niveau que TCP, cest-a-dire au- dessus de la couche IP. Il fournit un service en mode non connecté (ou datagramme) aux applications. L’en-téte d'un datagramme UDP est composé de quatre champ: Le port UDP source. «Le port UDP destination. «La longueur du message UDP. = Le checksum (somme de contréle) Ce protacole est utile et indispensable au bon fonctionnement d’Tnternet. Il sera utilisé, par exemple, pour le DNS (Domain Name System) La méthodologie est la méme que précédemment, la seule différence est la création du socket (SOCK_DGRAM). chap 2x06 py bin/env python scncoding:UTF=8 import socket, eye host=sys.azqu( textport=sys.argv(2) jocket .socket (socket. AF_INET, socket .SOCK_DGRAH) port=int (textporth except Valueirror: ort=socket .get servbynane (textport,"udp")

You might also like