Les attaques reseaux
Les attaques reseaux s’appuient sur des vulnerabilites liees directement aux protocoles ou à leur implementation. Il en existe un grand nombre. Neanmoins, la plupart d’entre elles ne sont que des variantes des cinq attaques reseaux les plus connues aujourd’hui.
Fragments attacks:
Cette attaque outrepasse la protection des equipements de filtrage IP. Pour sa mise en pratique, les pirates utilisent deux methodes : les Tiny Fragments et le Fragment Overlapping. Ces attaques etant historiques, les pare-feux actuels les prennent en compte depuis longtemps dans leur implementation.
Tiny Fragments
D’apres la RFC (Request For Comment) 791 (IP), tous les noeuds Internet (routeurs) doivent pouvoir transmettre des paquets d’une taille de 68 octets sans les fragmenter d’avantage. En effet, la taille minimale de l’en-tete d’un paquet IP est de 20 octets sans options. Lorsqu’elles sont presentes, la taille maximale de l’en-tete est de 60 octets. Le champ IHL (Internet Header Length) contient la longueur de l’en-tete en mots de 32 bits. Ce champ occupant 4 bits, le nombre de valeurs possibles vaut de 2^4 – 1 = 15 (il ne peut pas prendre la valeur 0000). La taille maximale de l’en-tete est donc bien 15*4 = 60 octets. Enfin, le champ Fragment Offset qui indique le decalage du premier octet du fragment par rapport au datagramme complet est mesure en blocs de 8 octets. Un fragment de donnees occupe donc au moins 8 octets. Nous arrivons bien à un total de 68 octets.
L’attaque consiste à fragmenter sur deux paquets IP une demande de connexion TCP. Le premier paquet IP de 68 octets ne contient comme donnees que les 8 premiers octets de l’en-tete TCP (ports source et destination ainsi que le numero de sequence). Les donnees du second paquet IP renferment alors la demande de connexion TCP (flag SYN à 1 et flag ACK à 0).
Or, les filtres IP appliquent la meme regle de filtrage à tous les fragments d’un paquet. Le filtrage du premier fragment (Fragment Offset egal à 0) determinant cette regle elle s’applique donc aux autres (Fragment Offset egal à 1) sans aucune autre forme de vérification. Ainsi, lors de la defragmentation au niveau IP de la machine cible, le paquet de demande de connexion est reconstitue et passe à la couche TCP. La connexion s’etablit alors malgre le filtre IP.
Fragment Overlapping
Toujours d’apres la RFC 791 (IP), si deux fragments IP se superposent, le deuxieme ecrase le premier. L’attaque consiste à forger deux fragments d’un paquet IP. Le filtre IP accepte le premier de 68 octets car il ne contient aucune demande de connexion TCP (flag SYN = 0 et flag ACK = 0). Cette regle d’acceptation s’applique, la encore, aux autres fragments du paquet. Le deuxieme (avec un Fragment Offset egal à 1) contenant les veritables donnees de connexion est alors accepté par le filtre IP. Ainsi, lors de la defragmentation les donnees du deuxieme fragment ecrasent celles du premier à partir de la fin du 8eme octet (car le fragment offset est egal à 1). Le paquet reassemble constitue donc une demande de connexion valide pour la machine cible. La connexion s’etablit malgre le filtre IP.
Spoofing
Le but de cette attaque est l’usurpation de l’adresse IP d’une machine. Ceci permet au pirate de cacher la source de son attaque (utilisée dans les denis de services dont nous discuterons plus tard) ou de profiter d’une relation de confiance entre deux machines. Nous expliquerons donc ici cette deuxieme utilisation de l’IP Spoofing.
Le principe de base de cette attaque consiste à forger ses propres paquets IP (avec des programmes comme hping2 ou nemesis) dans lesquels le pirate modifiera, entre autres, l’adresse IP source. L’IP Spoofing est souvent qualifiee d’attaque aveugle (ou Blind Spoofing). Effectivement, les reponses eventuelles des paquets envoyes ne peuvent pas arriver sur la machine du pirate puisque la source est falsifiee. Ils se dirigent donc vers la machine spoofee. Il existe neanmoins deux methodes pour recuperer des reponses :
1. le Source Routing : le protocole IP possede une option appelee Source Routing autorisant la specification du chemin que doivent suivre les paquets IP. Ce chemin est constitue d’une suite d’adresses IP des routeurs que les paquets vont devoir emprunter. Il suffit au pirate d’indiquer un chemin, pour le retour des paquets, jusqu’à un routeur qu’il controle. De nos jours, la plupart des implamentations des piles TCP/IP rejettent les paquets avec cette option ;
2. le Reroutage : les tables des routeurs utilisant le protocole de routage RIP peuvent etre modifiees en leur envoyant des paquets RIP avec de nouvelles indications de routage . Ceci dans le but de rerouter les paquets vers un routeur que le pirate maitrise.
Ces techniques ne sont plus (ou difficilement) utilisables : l’attaque est donc menee sans avoir connaissance des paquets emis par le serveur cible.
Le Blind Spoofing s’utilise contre des services de type rlogin ou rsh. En effet, leur mecanisme d’authentification se base uniquement sur l’adresse IP source de la machine cliente. Cette attaque relativement bien connue (surtout grace à Kevin Mitnick qui l’avait utilisée contre la machine de Tsutomu Shimomura en 1994) se deroule en plusieurs etapes
* determination de l’adresse IP de la machine de confiance en utilisant par exemple showmount -e qui montre ou sont exportes les systemes de fichiers ou rpcinfo qui apporte des informations supplamentaires ;
* mise hors service de l’hote de confiance via un SYN Flooding par exemple (nous aborderons les denis de service plus loin dans cet article). Cela est necessaire pour que la machine ne puisse pas repondre aux paquets envoyes par le serveur cible. Dans le cas contraire elle enverrait des paquets TCP RST qui mettraient fin à l’etablissement de la connexion ;
* prediction des numeros de sequence TCP : à chaque paquet TCP est associe un numero de sequence initiale. La pile TCP/IP du systeme d’exploitation le genere de maniere lineaire, dependante du temps, pseudo-aleatoire ou aleatoire selon les systemes. Le pirate peut uniquement appliquer cette attaque à des systemes generant des numeros de sequence previsibles (generation lineaire ou dependante du temps) ;
* l’attaque consiste à ouvrir une connexion TCP sur le port souhaite (rsh par exemple). Pour une meilleure comprehension, nous allons rappeler le mecanisme d’ouverture d’une connexion TCP. Elle s’effectue en trois phases (TCP Three Way Handshake) :
1. l’initiateur envoie un paquet comportant le flag TCP SYN et un numero de sequence x, est envoye à la machine cible ;
2. cette derniere repond avec un paquet dont les flag TCP SYN et ACK (avec un numero d’acquittement de x+1) sont actives. Son numero de sequence vaut y ;
3. l’initiateur renvoie un paquet contenant le flag TCP ACK (avec un numero d’acquittement de y+1) à la machine cible. Le pirate utilise la machine A tandis que la C represente la machine de confiance. La notion A(C) signifie que le paquet est envoye par A avec l’adresse IP Spoofee de C. A noter l’existence du programme mendax qui met en oeuvre ces differents mecanismes de l’IP Spoofing.
TCP Session Hijacking
Le TCP Session Hijacking permet de rediriger un flux TCP. Un pirate peut alors outrepasser une protection par un mot de passe (comme telnet ou ftp). La necessite d’une ecoute passive (sniffing) restreint le perimetre de cette attaque au reseau physique de la cible. Avant de detailler cette attaque, nous expliquerons quelques principes fondamentaux du protocole TCP.
Nous ne devoilerons pas ici les arcanes du protocole TCP, mais preciserons uniquement les points essentiels à la comprehension de l’attaque. L’en-tete TCP est constitue de plusieurs champs :
* le port source et le port destination, pour identifier la connexion entre deux machines ;
* le numero de sequence qui identifie chacun des octets envoyes ;
* le numero d’acquittement qui correspond au numero d’acquittement du dernier octet relu ;
* les flags, avec ceux qui vont nous int?resser sont :
o SYN qui synchronise les numeros de sequence lors de l’etablissement d’une connexion ;
o ACK, le flag d’acquittement d’un segment TCP ;
o PSH qui indique au recepteur de remonter les donnees à l’application.
Dans ce cas, il s’agit de la machine A qui a initialise une connexion TCP sur la machine B. Les numeros de sequence vont evoluer en fonction du nombre d’octets de donnees envoyees. Le numero de sequence est represente par Seq, le numero d’acquittement se trouve apres les flags PSH et ACK et le nombre d’octets de donnees envoye se trouve entre parentheses.
Cette attaque cree un etat de desynchronisation de chaque coté de la connexion TCP, rendant possible le vol de session. Une connexion est desynchronisee lorsque le numero de sequence du prochain octet envoye par la machine A est different du numero de sequence du prochain octet à recevoir par B. Et reciproquement, il y a desynchronisation lorsque le numero de sequence du prochain octet envoye par la machine B est different du numero de sequence du prochain octet à recevoir par A.
la fin de la première etape quand B recoit son paquet, A attends un paquet avec un numero d’acquittement de x+60. Si le prochain paquet qu’envoie B n’a pas ce numero d’acquittement alors A et B sont dits desynchronises.
Concretement, un pirate avec une machine C veut voler une session Telnet etablie entre les machines A et B. Dans un premier temps, la machine C sniffe le traffic Telnet (port TCP 23) entre A et B. Une fois que le pirate estime que A a eu le temps de s’authentifier aupres du service Telnet de la machine B, il desynchronise la machine A par rapport à B. Pour cela, il forge alors un paquet avec, comme adresse IP source, celle de la machine A et le numero d’acquittement TCP attendu par B. La machine B accepte donc ce paquet. En plus de desynchroniser la connexion TCP ce paquet permet au pirate d’injecter une commande via la session Telnet prealablement etablie par A. En effet, ce paquet peut transporter des donnees (flag PSH egal à 1).
La machine B accepte bien la commande envoyee par C, elle acquitte donc ce paquet en envoyant un paquet à A avec le flag ACK. Entre temps, si A a envoye un paquet à B celui-ci n’a pas ete accepté du fait de numero de sequence qui n’est pas celui attendu par B.
Un problame apparait alors : le Ack Storm. Il s’agit d’une multitude de ACK qui sont generes. Ils apparaissent lorsque A envoie un paquet TCP avec un numero de sequence non valide (car A est desynchronise) B le jette et envoie à A un ACK avec le numero de sequence qu’il attend. De son coté, A recoit ce ACK et comme le numero de sequence ne correspond pas à celui attendu il renvoie à son tour un ACK à B et B refait la meme chose…
Ce problame du Ack Storm peut etre regle si le pirate utilise l’ARP Spoofing. Dans ce cas, la machine C empoisonnera le cache ARP de la machine B en lui indiquant que l’adresse IP de A est desormais associee à l’adresse MAC de C. Ces differentes techniques sont implamentees par le programme hunt.
ARP Spoofing
Cette attaque, appelee aussi ARP Redirect, redirige le trafic reseau d’une ou plusieurs machine vers la machine du pirate. Elle s’effectue sur le reseau physique des victimes. Au prealable nous ferons un rappel sur l’utilite et le fonctionnement du protocole ARP.
Le protocole ARP (Address Resolution Protocol) implemente le mecanisme de resolution d’une adresse IP en une adresse MAC Ethernet. Les equipements reseaux communiquent en echangeant des trames Ethernet (dans le cas d’un reseau Ethernet bien sur) au niveau de la couche liaison de donnees. Pour pouvoir echanger ces informations il est necessaire que les cartes reseau possedent une adresse unique au niveau Ethernet, il s’agit de l’adresse MAC (Media Access Control).
Quand un paquet IP doit etre envoye la machine expeditrice a besoin de l’adresse MAC du destinataire. Pour cela une requete ARP en broadcast est envoyee à chacune des machines du reseau physique local. Cette requete pose la question : “Quelle est l’adresse MAC associee à cette adresse IP à”. La machine ayant cette adresse IP repond via un paquet ARP, cette reponse indiquant à la machine emettrice l’adresse MAC recherchee. Des lors, la machine source possede l’adresse MAC correspondant à l’adresse IP destination des paquets qu’elle doit envoyer. Cette correspondance sera gardee pendant un certain temps au niveau d’un cache (pour eviter de faire une nouvelle requete à chaque paquet IP envoye).
Cette attaque corrompt le cache de la machine victime. Le pirate envoie des paquets ARP reponse à la machine cible indiquant que la nouvelle adresse MAC correspondant à l’adresse IP d’une passerelle (par exemple) est la sienne. La machine du pirate recevra donc tout le trafic à destination de la passerelle, il lui suffira alors d’ecouter passivement le trafic (et/ou le modifier). Il routera ensuite les paquets vers la veritable destination.
L’ARP Spoofing sert dans le cas ou le reseau local utilise des switchs. Ceux-ci redirigent les trames Ethernet sur des ports differents selon l’adresse MAC. Il est des lors impossible à un sniffer de capturer des trames au-dela de son brin physique. L’ARP Spoofing permet ainsi d’ecouter le trafic entre des machines situees sur des brins differents au niveau du switch.
Pour mettre en oeuvre une attaque par ARP Spoofing, le pirate va utiliser un generateur de paquet ARP comme ARPSpoof ou nemesis. Soit la machine victime 10.0.0.171, sa passerelle par defaut 10.0.0.1 et la machine du pirate 10.0.0.227. Avant l’attaque un traceroute donne comme resultat :
[root@cible -> ~]$ traceroute 10.0.0.1 traceroute to 10.0.0.1 (10.0.0.1), 30 hops max, 40 byte packets 1 10.0.0.1 (10.0.0.1) 1.218 ms 1.061 ms 0.849 ms
Et le cache ARP de la machine cible est :
[root@cible -> ~]$ arp Address HWtype HWAddress Flags Mask Iface 10.0.0.1 ether 00:b0:c2:88:de:65 C eth0 10.0.0.227 ether 00:00:86:35:c9:3f C eth0
Le pirate lance alors ARPSpoof :
[root@pirate -> ~]$ arpspoof -t 10.0.0.171 10.0.0.1 0:0:86:35:c9:3f 0:60:8:de:64:f0 0806 42: arp reply 10.0.0.1 is-at 0:0:86:35:c9:3f 0:0:86:35:c9:3f 0:60:8:de:64:f0 0806 42: arp reply 10.0.0.1 is-at 0:0:86:35:c9:3f 0:0:86:35:c9:3f 0:60:8:de:64:f0 0806 42: arp reply 10.0.0.1 is-at 0:0:86:35:c9:3f 0:0:86:35:c9:3f 0:60:8:de:64:f0 0806 42: arp reply 10.0.0.1 is-at 0:0:86:35:c9:3f 0:0:86:35:c9:3f 0:60:8:de:64:f0 0806 42: arp reply 10.0.0.1 is-at 0:0:86:35:c9:3f 0:0:86:35:c9:3f 0:60:8:de:64:f0 0806 42: arp reply 10.0.0.1 is-at 0:0:86:35:c9:3f 0:0:86:35:c9:3f 0:60:8:de:64:f0 0806 42: arp reply 10.0.0.1 is-at 0:0:86:35:c9:3f
Les paquets envoyes sont des paquets ARP empoisonnant le cache ARP de la machine 10.0.0.171 avec des ARP Reply indiquant que l’adresse MAC associee à 10.0.0.1 est maintenant 00:00:86:35:c9:3f.
Desormais, le cache ARP de la machine 10.0.0.171 est :
[root@cible -> ~]$ arp Address HWtype HWAddress Flags Mask Iface 10.0.0.1 ether 00:00:86:35:c9:3f C eth0 10.0.0.227 ether 00:00:86:35:c9:3f C eth0
Pour verifier que le trafic passe maintenant par la machine 10.0.0.227 il suffit de faire un nouveau traceroute vers la passerelle 10.0.0.1 :
[root@cible -> ~]$ traceroute 10.0.0.1 traceroute to 10.0.0.1 (10.0.0.1), 30 hops max, 40 byte packets 1 10.0.0.227 (10.0.0.227) 1.712 ms 1.465 ms 1.501 ms 2 10.0.0.1 (10.0.0.1) 2.238 ms 2.121 ms 2.169 ms
Le pirate est desormais capable de sniffer le trafic de la machine 10.0.0.171 vers 10.0.0.1. Il ne faut pas que le pirate oublie d’activer le routage IP sur sa machine 10.0.0.227 (avec l’IP Forwarding – activer la cla > net.ipv4.ip_forward dans /etc/sysctl.conf ou fragrouter).
DNS Spoofing
Le protocole DNS (Domain Name System) a pour role de convertir un nom de domaine (par exemple www.test.com) en son adresse IP (par exemple 192.168.0.1) et reciproquement, à savoir convertir une adresse IP en un nom de domaine. Cette attaque consiste à faire parvenir de fausses reponses aux requ?tes DNS ?misent par une victime. Il existe deux methodes principales pour effectuer cette attaque.
DNS ID Spoofing
L’en-tete du protocole DNS comporte un champ identification qui permet de faire correspondre les reponses aux demandes. L’objectif du DNS ID Spoofing est de renvoyer une fausse reponse à une requete DNS avant le serveur DNS. Pour cela il faut predire l’ID de la demande. En local, il est simple de le predire en sniffant le reseau. neanmoins, cela s’avere plus complique à distance. Cependant il existe plusieurs methodes :
* essayer toutes les possibilit?s du champ ID. Cette methode n’est pas tres realiste puisqu’il y a 65535 possibilites pour le champ ID (car ce champ est code sur 16 bits) ;
* envoyer quelques centaines de requetes DNS dans l’ordre. Cette methode est bien evidemment peu fiable ;
* trouver un serveur qui genere des ID previsibles (incrementation de 1 de l’ID par exemple), ce genre de faille existe sur certaines version de Bind ou des machines Windows 9x.
Dans tous les cas, il est necessaire de repondre avant le serveur DNS, en le faisant tomber via un deni de service par exemple.
Pour parvenir à ses fins, l’attaquant doit controler un serveur DNS (ns.attaquant.com) ayant autorité sur le domaine attaquant.com. Le serveur DNS cible (ns.cible.com) est suppose avoir des numeros de sequence previsibles (s’incrementant de 1 à chaque nouvelle requete).
L’attaque se decompose en quatre etapes :
1. l’attaquant envoie une requete DNS pour le nom www.attaquant.com au serveur DNS du domaine cible.com
# le serveur DNS cible a donc relaye la demande au DNS du domaine attaquant.com ;
# l’attaquant est capable de sniffer la requete pour recuperer son ID (dans notre exemple l’ID a une valeur de 100) ;
# l’attaque falsifie l’adresse IP associee à un nom de machine, ici la machine victime est www.spoofed.com qui a normalement l’adresse IP 192.168.0.1. Le pirate emet une requete DNS de implemente du nom www.spoofed.com vers ns.cible.com. Immediatement apres, il envoie une multitude de reponses DNS falsifiees (donnant comme adresse IP celle du site de l’attaquant 10.0.0.1) à cette meme requete en ayant spoofe l’adresse IP source avec celle du serveur DNS du domaine spoofed.com. L’ID de chaque reponse sera incrementee de 1 à partir de celui recupere lors de la deuxieme etape (ID = 100) pour augmenter la chance de tomber sur le bon numero d’ID reponse, dans le cas ou ns.cible.com aurait du repondre à d’autre requete et donc incremente son ID DNS.
Le cache du serveur DNS cible est donc corrompu, et la prochaine machine demandant une implemente du nom www.spoofed.com recuperera l’adresse IP de la machine de l’attaquant et sera redirigee vers son site qui pourra etre une copie du vrai site pour tromper les internautes et leur voler des informations confidentielles.
DNS Cache Poisoning
Les serveurs DNS possedent un cache gardant en local, pendant un certain temps, les reponses de requetes passees. Ceci pour eviter de perdre du temps à interroger chaque fois le serveur de nom ayant autorité sur le domaine demande. Ce deuxieme type de DNS Spoofing va consister à corrompre ce cache avec de fausses informations. Voici un exemple de cache poisoning :
Les conditions de l’exemple precedent sont toujours valables. Voici les differentes etapes de l’attaque :
* envoyer une requete DNS de implemente du nom www.attaquant.com au serveur DNS du domaine cible.com ;
* Le serveur DNS cible envoie donc une requete portant sur une implemente du nom www.attaquant.com au serveur DNS de l’attaquant ;
* Le serveur DNS de l’attaquant enverra une reponse avec des enregistrements falsifiees qui permettront d’assigner un nom de machine avec une adresse IP appartenant à l’attaquant. Par exemple, le site www.cible.com pourra avoir un enregistrement DNS falsifie renvoyant l’adresse IP de www.attaquant.com au lieu de la bonne adresse IP.
Les attaques applicatives
Les attaques applicatives s’appuient principalement sur des vulnerabilites specifiques aux applications utilisees. Cependant, certaines attaques peuvent etre classees par type.
Les problemes de configuration
Un des premiers problames de securite engendre par les applications est celui des erreurs de configurations. Nous distinguerons deux types d’erreurs : les installations par defaut et les mauvaises configurations à proprement parler.
Des logiciels, comme les serveurs Web, installes par defaut ont souvent des sites exemples qui peuvent etre utilises par des pirates pour acceder à des informations confidentielles. Par exemple, il peut y avoir des scripts permettant d’obtenir les sources des pages dynamiques ou des informations sur le systeme utilise. En outre, lors d’une telle installation une interface d’administration à distance est disponible avec un login/mot de passe par defaut (trouvable dans le guide d’administration de l’application). Le pirate a donc la main sur le site et peut le modifier selon son bon vouloir.
Les principales failles generees par une mauvaise configuration sont des listes d’acces mal parametrees. Le pirate accede alors à des pages et autres bases de donnees privees.
Comme exemple classique de problame de configuration, les erreurs de parametrage du serveur Web Lotus Domino sont courantes. En effet, lors de l’installation de ce serveur, des bases Lotus de configuration sont accessibles sans aucune liste de controle d’acces. Concretement, si la base Lotus names.nsf est accessible via un navigateur Web sans demande d’authentification, il est alors possible d’obtenir de nombreuses informations comme le nom de tous les utilisateurs Lotus. Cette base n’est qu’un exemple, et Lotus Domino en contient un nombre important de sensibles.
Les bugs
Une mauvaise programmation des logiciels entraine obligatoirement des bugs. Ceux-ci seront la source des failles de securite les plus importantes. Ces vulnerabilites quand elles sont decouvertes vont permettre d’executer des commandes non autorisees, obtenir le source de pages dynamiques, rendre indisponible un service, prendre la main sur la machine…etc. Les plus connus de ces bugs et les plus interessants en ce qui concerne leur exploitation sont les buffer overflow.
Les buffer overflow
Le depassement de pile est une faille due à une mauvaise programmation. Effectivement, un buffer overflow apparait quand une variable passee en argument d’une fonction est recopiee dans un buffer sans que sa taille n’aie ete verifiee. Il suffit que la variable ait une taille superieure à l’espace memoire reservee pour ce buffer pour qu’un depassement de pile se produise. Celui-ci sera exploite en passant dans la variable un fragment de programme capable de faire demarrer un shell tout en obligeant ce debordement de pile à se produire. Dans le cas ou un pirate reussit cette attaque il obtiendra alors le moyen d’executer à distance des commandes sur la machine cible avec les droits de l’application attaquee. Le buffer overflow et son exploitation ont ete le sujet d’une serie d’articles de Linux Magazine.
Les scripts
Une mauvaise programmation des scripts a souvent une repercution sur la securite d’un systeme. En effet, il existe des moyens d’exploiter des failles de scripts developpes en Perl qui permettront de lire des fichiers hors racine Web ou d’executer des commandes non autorisees. Ces problames de programmation ont ete evoques dans le dernier article de Linux Mag sur les failles des developpements en Perl et PHP.
Man in the middle
L’objectif principal de cette attaque est de detourner le trafic entre deux machines. Cela pour intercepter, modifier ou detruire les donnees transmises au cours de la communication. Cette attaque est plus un concept qu’une attaque à part entiere. Il existe plusieurs attaques mettant en oeuvre ce principe du Man in The Middle, comme le DNS Man in the Middle qu’une utilisation du DNS Spoofing pour detourner le trafic entre un client et un serveur Web. De meme, une application recente a ete elaboree pour detourner du trafic SSH
Les denis de service
Cette attaque porte bien son nom puisque qu’elle aboutira à l’indisponibilite du service (application specifique) ou de la machine visee. Nous distinguerons deux types de deni de services, d’une part ceux dont l’origine est l’exploitation d’un bug d’une application et d’autre part ceux dus à une mauvaise implementation d’un protocole ou à des faiblesses de celui-ci.
Les denis de service applicatifs
Tout comme les vulnerabilites d’une application entrainent la possibilite de prendre le controle d’une machine (exemple du buffer overflow), elles peuvent aussi amener à un deni de service. L’application sera alors indisponible par saturation des ressources qui lui sont allouees ou un crash de celle-ci.
Les denis de service reseaux
Il existe differents types de deni de service utilisant les specificites des protocoles de la pile TCP/IP.
SYN Flooding
Nous avons vu qu’une connexion TCP s’etablie en trois phases (TCP Three Way Handshake). Le SYN Flooding exploite ce mecanisme d’etablissement en trois phases. Les trois etapes sont l’envoi d’un SYN, la reception d’un SYN-ACK et l’envoi d’un ACK. Le principe est de laisser sur la machine cible un nombre important de connexions TCP en attentes. Pour cela, le pirate envoie un tres grand nombre de demandes de connexion (flag SYN à 1), la machine cible renvoie les SYN-ACK en reponse au SYN refus. Le pirate ne repondra jamais avec un ACK, et donc pour chaque SYN recu la cible aura une connexion TCP en attente. Etant donne que ces connexions semi-ouvertes consomment des ressources memoires au bout d’un certain temps la machine est saturee et ne peut plus accepter de connexion. Ce type de deni de service n’affecte que la machine cible.
Le pirate utilise un SYN Flooder comme synk4, en indiquant le port TCP cible et l’utilisation d’adresses IP source alaatoires pour eviter toute identification de la machine du pirate.
UDP Flooding
Ce deni de service exploite le mode non connecte du protocole UDP. Il cree un “UDP Packet Storm” (generation d’une grande quantite de paquets UDP) soit à destination d’une machine soit entre deux machines. Une telle attaque entre deux machines entraine une congestion du reseau ainsi qu’une saturation des ressources des deux hotes victimes. La congestion est plus importante du fait que le trafic UDP est prioritaire sur le trafic TCP. En effet, le protocole TCP possede un mecanisme de controle de congestion, dans le cas ou l’acquittement d’un paquet arrive apres un long delai, ce mecanisme adapte la frequence d’emission des paquets TCP, le debit diminue. Le protocole UDP ne possede pas ce mecanisme, au bout d’un certain temps le trafic UDP occupe donc toute la bande passante n’en laissant qu’une infime partie au trafic TCP.
L’exemple le plus connu d’UDP Flooding est le Chargen Denial of Service Attack. La mise en pratique de cette attaque est simple, il suffit de faire communiquer le service chargen d’une machine avec le service echo d’une autre. Le service chargen genere des caracteres tandis que echo se contente de reemettre les donnees qu’il recoit. Il suffit alors au pirate d’envoyer des paquets UDP sur le port 19 (chargen) à une des victimes en spoofant l’adresse IP et le port source de l’autre. Dans ce cas le port source est le port UDP 7 (echo). L’UDP Flooding entraine une saturation de la bande passante entres les deux machines. Un reseau complet peut donc etre victime d’un UDP Flooding.
Packet fragment
Les denis de service de type Packet Fragment utilisent des faiblesses dans l’implementation de certaines pile TCP/IP au niveau de la defragmentation IP (reassemblage des fragments IP).
Une attaque connue utilisant ce principe est Teardrop. L’offset de fragmentation du second fragment est inferieur à la taille du premier ainsi que l’offset plus la taille du second. Cela revient à dire que le deuxieme fragment est contenu dans le premier (overlapping). Lors de la defragmentation certains systemes ne gerent pas cette exception et cela entraine un deni de service. Il existe des variantes de cette attaque : bonk, boink et newtear par exemple. Le deni de service Ping of Death exploite une mauvaise gestion de la defragmentation au niveau ICMP, en envoyant une quantite de donnees sup?rieure à la taille maximum d’un paquet IP. Ces differents denis de services aboutissent à un crash de la machine cible.
Smurfing
Cette attaque utilise le protocole ICMP. Quand un ping (message ICMP ECHO) est envoye à une adresse de broadcast (par exemple 10.255.255.255), celui-ci est demultiplie et envoye à chacune des machines du reseau. Le principe de l’attaque est de spoofer les paquets ICMP ECHO REQUEST envoyes en mettant comme adresse IP source celle de la cible. Le pirate envoie un flux continu de ping vers l’adresse de broadcast d’un reseau et toutes les machines repondent alors par un message ICMP ECHO REPLY en direction de la cible. Le flux est alors multiplie par le nombre d’hote composant le reseau. Dans ce cas tout le reseau cible subira le deni de service, puisque l’enorme quantite de trafic genere par cette attaque entraine une congestion du reseau.
deni de service distribue
Les denis de services distribues saturent le reseau victime. Le principe est d’utiliser plusieurs sources (daemons) pour l’attaque et des maitres (masters) qui les controlent. Les outils de DDoS (Distributed Denial of Service) les plus connus sont Tribal Flood Network (TFN), TFN2K, Trinoo et Stacheldraht.
Le pirate utilise des maitres pour controler plus facilement les sources. En effet, il a besoin de se connecter (en TCP) aux maitres pour configurer et preparer l’attaque. Les maitres se contentent d’envoyer des commandes aux sources en UDP. S’il n’y avait pas les maitres, le pirate serait oblige de se connecter à chaque source. La source de l’attaque serait detectee plus facilement et sa mise en place beaucoup plus longue.
Chaque daemon et master discutent en echangeant des messages specifiques selon l’outil utilise. Ces communications peuvent meme etre cryptees et/ou authentifiees. Pour installer les daemons et les masters, le pirate utilise des failles connues (buffer overflow sur des services RPC, FTP ou autres). L’attaque en elle-meme est un SYN Flooding, UDP Flooding ou autre Smurf Attack. Le resultat d’un deni de service est donc de rendre un reseau inaccessible.
Conclusion
Aujourd’hui, la securite contre les attaques à distance se renforce de plus en plus contrairement à la securite interne. Ce parent pauvre de la protection contre les pirates laisse encore de belles perspectives à des attaques en local comme le TCP Session Hijacking, l’ARP Spoofing et le DNS Spoofing. Par ailleurs, la prediction de numero de sequence (coeur de l’IP Spoofing) et les variantes de Fragments Attacks apparaissent uniquement à cause de bugs au niveau des OS des equipements reseaux. En ce qui concerne les attaques applicatives, elles ont encore de beaux jours devant elles grace à la complexite sans cesse croissante des applications liees au Web et aux delais de plus en plus courts imposes aux d?veloppeurs et aux administrateurs. Quant aux denis de service, ils seront toujours aussi redoutables dans leur forme distribuee tant que tout le monde ne sera pas sensibilise à la protection de leur machine personnelle.