Académique Documents
Professionnel Documents
Culture Documents
RÉSEAUX
Vulnérabilités du réseau et applicatives
Vulnérabilités applicatives
Les vulnérabilités
La plupart des logiciels contiennent des défauts
Ces défauts peuvent être exploités par des pirates
Un « exploit » est la méthode, le script, qui permet
d’exploiter le défaut.
Les plus intéressants sont les exploits de serveurs:
Ils peuvent être fait à distance
Les serveurs ont souvent des privilèges élevés
Vulnérabilités conceptuelles
Exemple classique: directory traversal
Les documents d’un serveur web sont accessibles
depuis une racine.
Si le serveur ne vérifie pas les URL, on peut
accéder à d’autres fichiers
Exemple
Dans un cas classique, l'utilisateur peut être amené à remonter progressivement
l'arborescence, notamment dans le cas où la ressource n'est pas accessible, par exemple :
http://cible/base/test/ascii.php3
http://cible/base/test/
http://cible/base/
Des attaques plus évoluées consistent à encoder certains caractères :
soit sous la forme d'encodage d'URL : http://cible/..%2F..%2F..%2Frepertoire/fichier
soit avec une notation Unicode : http://cible/..%u2216..%u2216repertoire/fichier
De nombreux sites dynamiques passent le nom des pages à afficher en paramètre sous
une forme proche de la suivante :
http://cible/cgi-bin/script.cgi?url=index.htm
Pour peu qu'aucun contrôle ne soit réalisé, il est possible pour un pirate de modifier l'URL
manuellement afin de demander l'accès à une ressource du site auquel il n'a pas accès
directement, par exemple :
http://cible/cgi-bin/script.cgi?url=script.cgi
Exemple:
Compaq Server Management Agent:
Petit serveur web de gestion de PC, sur le port
2301
Racine des documents c:\Compaq\x\y\
Pour accéder au fichier c:\interesting\document.txt
Il suffit de taper:
http://mon.serveur.com:2301/../../../interesting/docume
nt.txt
Droits d’accès administrateur
Vulnérabilités techniques
Classique: le buffer overflow
Si un programme ne vérifie pas la quantité de
données qu’il reçoit, il risque d’écraser une zone
mémoire qui contient des variables, du code ou des
adresses de saut
En connaissant bien l’architecture de la machine on
peut fournir du code machine qui sera exécuté
Rappel: la pile
La pile sert à stocker des informations
momentanément
On retire les informations dans l’ordre inverse
qu’on les a déposées
Lors d’un appel de procédure, l’adresse de retour
est posée sur la pile
On dépose aussi les paramètres de la procédure
Rappel: la pile
Les variables locales de la procédure sont aussi
stockées sur la pile
Une zone correspondante (la trame) est réservée sur
la pile
Un pointeur de trame indique où commence la
trame active sur la pile.
Lors d’un appel de procédure, l’ancienne valeur du
pointeur de trame est déposée sur la pile avant
d’être remplacée par sa nouvelle valeur
La pile: exemple
void f(int a, int b) {
char buffer[10];
strcpy(buffer,"hello world.");
}
void main(){
f(1,2);
}
Y-a un truc
La pile ne croît pas de bas
en haut, mais de haut en
bas!
Le bas de la mémoire est
réservé pour le
programme. Ce qui reste
libre en haut, est utilisé
pour la pile
Exploit
Le débordement du buffer
permet d'écraser l'adresse de
retour et une partie de la pile
La pile peut être écrasée avec
un fragment de programme
L'adresse de retour peut
pointer sur ce fragment
Exploit
A la fin de la procédure,
la trame est retirée de la pile,
le pointeur de trame précédent
est retiré,
l'adresse de retour est retirée
L'exécution continue à
l'adresse de retour
Si adr pointe sur le début du
programme, celui-ci est
exécuté
Difficultés
Il est difficile de deviner
l'avancement de la pile et de
choisir adr
Le programme n'a pas le droit
de contenir le caractère spécial
\0 qui termine les chaînes de
caractères et donc le
débordement de la mémoire
Buffer overflow: Exemple
char buf[80];
void vulnerable() {
gets(buf);
}
gets() lit tous les octets disponible de stdin, et les sauvegarde dans
buf[]
Que passe t-il si l’entrée dépasse 80 octets?
gets() écrit en dehors de buf et écrase d’autres parties de la mémoire
Un bug!
Résultat?
Program crash?
Des conséquences pires sont possibles…
Buffer overflow: Exemple
char buf[80];
int authenticated = 0;
void vulnerable() {
gets(buf);
}
Une routine de login initialise un flag d’authentification seulement si
l’utilisateur preuve la connaissance du mot de passe
Quel est le risque?
authenticated est sauvegardée juste après buf
L’attaquant “écrit” des données même après la fin de buf
L’attaquant “écrit” 81 octets (81st ≠0)
Rend authenticated vrai!
L’attaquant peut ainsi accéder: security breach!
Buffer overflow: Exemple
char buf[80];
int (*fnptr)();
void vulnerable() {
gets(buf);
}
fnptr se pointe quelque part
Qu’est ce qu’il un attaquant peut faire?
Il peut écraser fnptr avec n’importe quelle adresse
Rediriger l’exécution du programme vers
Un code d’un programme malicieux
malicious code injection attack
Buffer overflow: Exemple
Le serveur web MS-IIS avait un buffer overflow sur les URL en .htr
(1999) et en .ida (2001)
Le ver Code Red (Juillet 2001) a exploité le buffer overflow .ida
NetMeeting avait un buffer overflow sur l'adresse à appeler:
3. RESET
2. SYN ACK – –
Sure, what
Umm.. I have
do no
you
wantwhy
idea to talk
you are
Alice about? to me
talking Victim - Bob
1. SYN – Let’s
have a
4. No connection – Guess I
conversation
need to take Bob out of the
picture…
Attacker - Eve
DNS spoofing
DNS cache poisoning
41
But :
corrompre le cache d'un serveur DNS et reroutage d’un site sur un site pirate
Principe :
Faire tourner un faux serveur DNS qui permettra de rajouter un
champ "additional record".
Faire une requête sur le serveur DNS victime.
Cette requête devra être redirigée vers le faux serveur DNS.
Grace au champ "additional record", le faux serveur interrogé
répondra avec plus d'enregistrements que demandé.
Exemple :
vulnérabilité découverte en juillet 2007 pour BIND (CERTA)
DNS cache poisoning (exemple)
42
IP Spoofing avecTCP
Les applications que nous voulons pirater (rlogin,
rsh, ..) utilisent TCP
TCP est un protocole à fenêtre,
Il utilise des numéros de séquence pour suivre les
données envoyées et reçues
Pour éviter de réutiliser les mêmes numéros de
séquence, un numéro de séquence initial aléatoire
(ISN) est choisi pour chaque nouvelle connexion
TCP: rappel
Etablissement de la connexion (3-way handshake)
La difficulté du spoofing TCP
A envoie ses paquets avec une adresse source C
Il doit deviner l'ISN que B va proposer à C!
3. At
1.
2. Eveany
assumes
can point,
monitor
aEve
man-in-the-middle
traffic
can assume
betweentheAlice
identity
position
and
through
Bob
of either
without
some
Bobaltering
or
mechanism.
Alicethe
through
packets
Forthe
example,
orSpoofed
sequence
EveIP
could useThis
numbers.
address. Arp breaks
Poisoning,the pseudo
social engineering,
connection
router
as Evehacking
will startetc...
modifying the sequence
numbers
Alice Bob
I’m Bob!
I’m
Alice!
Eve
Session Modem
Le modem donne accès à une ligne série (p. ex.
terminal en ligne)
Un utilisateur peut couper la ligne sans quitter sa
session en ligne
La session de terminal reste active un certain temps
Le prochain utilisateur (ou pirate) qui se connecte
au modem retrouve la session du prédécesseur
Session TCP
Si un pirate peut espionner une connexion TCP, il
peut insérer un paquet TCP avec les bons numéros
de séquence.
L'insertion d'un paquet falsifié dans une connexion
TCP crée une avalanche de paquets
La source, qui n'a pas émis le paquet, n'est pas d'accord
avec le numéro de séquence acquitté et émet un
acquittement
La destination, qui a vu le paquet, n'est pas d'accord
avec le numéro de séquence et envoie un acquittement
Session HTTP
Le protocole HTTP ne connaît pas vraiment de
sessions.
Il est fait de requêtes/réponses indépendantes.
Les sites de commerce électronique utilisent des
artifices pour reconnaître les requêtes formant une
session.
Cookies ou URL personnalisées.
Si le pirate peut espionner ces informations, il peut
créer des requêtes qui font partie de la même session.
Session HTTP: exemple
Dénis de service
Denial of Service (DoS),
Distributed denial of service (DDoS)
Les systèmes informatiques sont si complexes qu'il
est facile de faire gripper la machine
La subtilité consiste à le faire de manière anonyme
Syn flooding
Envoi d'un grand nombre de requêtes d'ouverture
de connexion TCP (syn)
Lors de la réception d'un paquet syn, le serveur
réserve la mémoire nécessaire à la connexion et
l'enregistre dans une queue de connexions semi-
établies
Ce cas n'ayant pas été prévu, le serveur ne peut
plus accepter de nouvelles connexions lorsque la
queue déborde
Syn flooding (anonymat)
Le pirate ne désire pas ouvrir de connexions réelles
Il peut falsifier les adresses sources de ses paquets
syn pour rester anonyme
Les versions récentes des systèmes d'exploitation
(windows, unix) sont protégées contre ces attaques
Mitnick Attack
6. Mitnick fakes
4. forgesthe
a SYN
ACKfrom
usingthe
theserver
to the terminal
proper TCP sequence number
3. Mitnick Probes
2. discovers
thethat
Workstation
the TCP to 1. Mitnick Flood’s server’s
determinenumber
sequence the behaviour
is incremented
of its TCP
by login port so it can no longer
sequenceeach
128000 number
new generator
connection respond
Kevin Mitnick
Smurf
Noyer la cible à l'aide d'amplificateurs de trafic
Cas typique: ICMP echo-request (ping)
Le pirate envoie un paquet ping avec l'adresse de la
cible comme source
La machine "pingée" envoie sa réponse à la cible
Si le pirate envoie le paquet à une adresse
broadcast, ce sont toutes les machines du réseau qui
vont répondre à la cible
Smurf
Denis de service distribués
Pour augmenter l'efficacité des dénis de service, les
pirates compromettent une série de machines et
installent des agents
Plusieurs machines maître contrôlent les agents
Le pirate envoie des commandes aux maîtres, qui
font exécuter les attaques par les agents
DDoS: schéma
DDoS: caractéristiques
La puissance (bande passante) de l'attaque est
multipliée par les agents
Il est plus difficile de remonter aux pirates (2
couches intermédiaires)
L'attaque provenant de plusieurs sources, il est
beaucoup plus difficile de la filtrer
DDoS: exemples
Les logiciels de DDoS connus sont:
Trinoo, TribeFloodNetwork, TFK2000
Stacheldraht, Shaft et Mstream
Caractéristiques (Stacheldraht):
Attaques: syn flood, udp flood, icmp flood, smurf
Communications chiffrées: TCP (pirate-maîtres), ICMP
(maîtres-agents)
Mise à jour automatique des agents
Cas DDoS janvier 2000 (yahoo, cnn, etc..): 70 agents,
80% smurf, 20% syn flooding
Phishing for phishers
User ID = <img
src="http://www.osq.ch/xxx27.gif">
www.owasp.org
Maintient une liste des erreurs classiques qui
permettent de pirater une application web:
XSS
Failles d’injection
Exécution de fichiers malicieux
Manque de restriction d’accès URL
B.O
…
La méthode de piratage
Méthode « standard »
Recherche d’informations
Informations sur les sites web
Bases de données des noms enregistrés
www.networksolutions.com pour les dot-coms
Bases de données des adresses IP
RIPE pour l’Europe
Internic aux US
Sélection des cibles
En connaissant les adresses IP, on peut lancer un
scan pour trouver des cibles intéressantes
Le scanner va essayer de se connecter à tous les
services désirés sur toutes les machines appartenant
à une plage d’adresses.
Résultat: liste des machines accessibles, ports
ouverts sur ces machines.