mercredi 5 mars 2008

Les différentes attaques

Les différents types d'attaques

L’informatique étant un domaine très vaste, le nombre de vulnérabilités présentes sur un système peut donc être important. Ainsi, les attaques visant ces failles peuvent être à la fois très variées et très dangereuses. C’est pourquoi nous allons dans un premier temps analyser ce que nous appellerons « l’anatomie d’une attaque », puis dans un second temps, nous caractériserons ces attaques et observerons leur déroulement.
Un nombre important de termes techniques vont être employés dans cette partie. Ceux-ci ne seront pas toujours détaillés, afin de ne pas surcharger la lecture ; mais une annexe comportant un rappel sur les notions fondamentales liées aux protocoles des réseaux (TCP, UDP et IP) est disponible à la fin de ce document.

1) Anatomie d’une attaque
Fréquemment appelés « les 5 P » dans la littérature, ces cinq verbes anglophones constituent le squelette de toute attaque informatique : Probe, Penetrate, Persist, Propagate, Paralyze.
Observons le détail de chacune de ces étapes :
· Probe : consiste en la collecte d’informations par le biais d’outils comme whois, Arin,DNS lookup. La collecte d’informations sur le système cible peut s’effectuer de plusieursmanières, comme par exemple un scan de ports grâce au programme Nmap pourdéterminer la version des logiciels utilisés, ou encore un scan de vulnérabilités à l’aidedu programme Nessus.
Pour les serveurs web, il existe un outil nommé Nikto qui permet de rechercher les failles connues ou les problèmes de sécurité.
Des outils comme firewalk, hping ou SNMP Walk permettent quant à eux de découvrir la nature d’un réseau.
· Penetrate : utilisation des informations récoltées pour pénétrer un réseau. Destechniques comme le brute force ou les attaques par dictionnaires peuvent être utiliséespour outrepasser les protections par mot de passe. Une autre alternative pour s’infiltrerdans un système est d’utiliser des failles applicatives que nous verrons ci-après.
· Persist : création d’un compte avec des droits de super utilisateur pour pouvoir seréinfiltrer ultérieurement. Une autre technique consiste à installer une application decontrôle à distance capable de résister à un reboot (ex : un cheval de Troie).
· Propagate : cette étape consiste à observer ce qui est accessible et disponible sur leréseau local.
· Paralyze : cette étape peut consister en plusieurs actions. Le pirate peut utiliser leserveur pour mener une attaque sur une autre machine, détruire des données ouencore endommager le système d’exploitation dans le but de planter le serveur.
Après ces cinq étapes, le pirate peut éventuellement tenter d’effacer ses traces, bien que cela ne soit rarement utile. En effet, les administrateurs réseaux sont souvent surchargés de logs à analyser. De plus, il est très difficile de supprimer entièrement des traces.

2) Les attaques réseaux
Ce type d’attaque se base principalement sur des failles liées aux protocoles ou à leur implémentation. Les RFC1 ne sont parfois pas assez spécifiques, et un choix particulier d’implémentation dans les différents services ou clients peut entraîner un problème de sécurité.
Observons quelques attaques bien connues.
Les techniques de scan :
Les scans de ports ne sont pas des attaques à proprement parler. Le but des scans est de déterminer quels sont les ports ouverts, et donc en déduire les services qui sont exécutés sur la machine cible (ex : port 80/TCP pour un service HTTP). Par conséquent, la plupart des attaques sont précédées par un scan de ports lors de la phase Probe qui est comme nous l’avons vu, la première phase des 5P’s dans le déroulement d’une attaque.
Il existe un nombre important de techniques de scan. Idéalement, la meilleure technique de scan est celle qui est la plus furtive afin de ne pas alerter les soupçons de la future victime. Voici une description des techniques de scan les plus répandues :

· Le scan simple : aussi appelé le scan connect(), il consiste à établir une connexionTCP complète sur une suite de ports. S’il arrive à se connecter, le port est ouvert ;sinon, il est fermé. Cette méthode de scan est très facilement détectable.

· Le scan furtif : aussi appelé scan SYN, il s’agit d’une amélioration du scan simple. Cescan essaie également de se connecter sur des ports donnés, mais il n’établit pascomplètement la connexion : pas de commande ACK (acquittement) après avoirreçu l’accord de se connecter. Grâce à ceci, la méthode est bien plus furtive que lescan normal.

· Les scans XMAS, NULL et FIN : se basent sur des détails de la RFC du protocole TCPpour déterminer si un port est fermé ou non en fonction de la réaction à certainesrequêtes. Ces scans sont moins fiables que le scan SYN mais ils sont un peu plusfurtifs. La différence entre ces trois types de scan se situe au niveau des flags TCPutilisés lors de la requête.

· Le scan à l’aveugle : s’effectue via une machine intermédiaire et avec du spoofing(voir plus bas). Le système attaqué pense que le scan est réalisé par la machineintermédiaire et non par le pirate.
· Le scans passif : est la méthode la plus furtive. Consiste à analyser les champsd’en-tête des paquets (TTL, ToS, MSS, …) et les comparer avec une base designatures qui pourra déterminer les applications qui ont envoyé ces paquets.
Remarque : l’utilitaire incontournable pour réaliser des scans de ports se nomme Nmap.
.
IP Spoofing But : usurper l’adresse IP d’une autre machine.
Les request for comment (RFC, littéralement demande de commentaires) sont une série de documents et normes concernant l'Internet, commencée en 1969. Peu de RFC sont des standards, mais tous les standards de l'Internet sont enregistrés en tant que RFC.

Finalité : se faire passer pour une autre machine en truquant les paquets IP. Cette technique peut être utile dans le cas d’authentifications basées sur une adresse IP (services tels que rlogin ou ssh par exemple).

Déroulement : il existe des utilitaires qui permettent de modifier les paquets IP ou de créer ses propres paquets (ex : hping2). Grâce à ces utilitaires, il est possible de spécifier une adresse IP différente de celle que l’on possède, et ainsi se faire passer pour une autre « machine ».
Cependant, ceci pose un problème : en spécifiant une adresse IP différente de notre machine, nous ne recevrons pas les réponses de la machine distante, puisque celle-ci répondra à l’adresse spoofée.
Il existe toutefois deux méthodes permettant de récupérer les réponses :
· Source routing :
technique consistant à placer le chemin de routage directement dansle paquet IP. Cette technique ne fonctionne plus de nos jours, les routeurs rejetantcette option.
· Reroutage : cette technique consiste à envoyer des paquets RIP aux routeurs afin demodifier les tables de routage. Les paquets avec l’adresse spoofée seront ainsi envoyésaux routeurs contrôlés par le pirate et les réponses pourront être également reçues parcelui-ci.
. ARP Spoofing (ou ARP Redirect) But : rediriger le trafic d’une machine vers une autre.
Finalité : grâce à cette redirection, une personne mal intentionnée peut se faire passer pour une autre. De plus, le pirate peut rerouter les paquets qu’il reçoit vers le véritable destinataire, ainsi l’utilisateur usurpé ne se rendra compte de rien. La finalité est la même que l’IP spoofing mais on travaille ici au niveau de la couche liaison de données.
Déroulement : pour effectuer cette usurpation, il faut corrompre le cache ARP de la victime. Ce qui signifie qu’il faut lui envoyer des trames ARP en lui indiquant que l’adresse IP d’une autre machine est la sienne. Les caches ARP étant régulièrement vidés, il faudra veiller à maintenir l’usurpation.

. DNS Spoofing
But : fournir de fausses réponses aux requêtes DNS, c'est-à-dire indiquer une fausse adresse IP pour un nom de domaine.
Finalité : rediriger, à leur insu, des Internautes vers des sites pirates. Grâce à cette fausse redirection, l’utilisateur peut envoyer ses identifiants en toute confiance par exemple.

Déroulement : il existe deux techniques pour effectuer cette attaque.
· DNS Cache Poisoning : les serveurs DNS possèdent un cache permettant de garderpendant un certain temps la correspondance entre un nom de machine et son adresseIP. Le DNS Cache Poisoning consiste à corrompre ce cache avec de faussesinformations. Ces fausses informations sont envoyées lors d’une réponse d’un serveurDNS contrôlé par le pirate à un autre serveur DNS, lors de la demande de l’adresse IPd’un domaine . Le cache du serveur ayant demandé lesinformations est alors corrompu.
· DNS ID Spoofing : pour communiquer avec une machine, il faut son adresse IP. Onpeut toutefois avoir son nom, et grâce au protocole DNS, nous pouvons obtenir sonadresse IP. Lors d’une requête pour obtenir l’adresse IP à partir d’un nom, un numérod’identification est placé dans la trame afin que le client et le serveur puissent identifierla requête. L’attaque consiste ici à récupérer ce numéro d’identification (en sniffant lऐ réseau) lors de la communication entre un client et un serveur DNS, puis, envoyer des réponses falsifiées au client avant que ले serveur DNS lui réponde.
Remarque : Une attaque que nous allons voir ci-après, le Déni de Service, peut aider à ralentir le trafic du serveur DNS et ainsi permettre de répondre avant lui.

. Fragments attacks
But : le but de cette attaque est de passer outre les protections des équipements de filtrage IP.
Finalité : en passant outre les protections, un pirate peut par exemple s’infiltrer dans un réseau pour effectuer des attaques ou récupérer des informations confidentielles.
Déroulement : deux types d’attaque sur les fragments IP peuvent être distingués.
Fragments overlapping : quand un message est émis sur un réseau, il est fragmenté en plusieurs paquets IP. Afin de pouvoir reconstruire le message, chaque paquet possède un offset. Le but de l’attaque est de réaliser une demande de connexion et de faire chevaucher des paquets en spécifiant des offsets incorrects. La plupart des filtres analysant les paquets indépendamment, ils ne détectent pas l’attaque. Cependant, lors de la défragmentation, la demande de connexion est bien valide et l’attaque a lieu.
Tiny fragments : le but de l’attaque est de fragmenter une demande de connexion sur deux paquets IP : le premier paquet de taille minimum (68 octets selon la RFC du protocole IP) ne contient que l’adresse et le port de destination. Le deuxième paquet contient la demande effective de connexion TCP. Le premier paquet est accepté par les filtres puisqu’il ne contient rien de suspect. Quand le deuxième paquet arrive, certains filtres ne le vérifient pas pensant que si le premier paquet est inoffensif, le deuxième l’est aussi. Mais lors de la défragmentation sur le système d’exploitation, la connexion s’établit !
De nos jours, une grande majorité des firewalls2 sont capables de détecter et stopper ce type d’attaques.

. TCP Session Hijacking
But : le but de cette attaque est de rediriger un flux TCP afin de pouvoir outrepasser une protection par mot de passe.

Finalité : le contrôle d'authentification s'effectuant uniquement à l'ouverture de la session, un pirate réussissant cette attaque parvient à prendre possession de la connexion pendant toute la durée de la session.
Déroulement : dans un premier temps, le pirate doit écouter le réseau, puis lorsqu’il estime que l’authentification a pu se produire (délai de n secondes par exemple), il désynchronise la session entre l’utilisateur et le serveur. Pour ce faire, il construit un paquet avec, comme adresse IP source, celle de la machine de l’utilisateur et le numéro d'acquittement TCP attendu par le serveur. En plus de désynchroniser la connexion TCP, ce paquet permet au pirate d'injecter une commande via la session préalablement établie.
Un firewall, ou pare-feu est un dispositif logiciel ou matériel qui
filtre le flux de données sur un réseau informatique. Il est parfois appelé
coupe-feu.

3) Les attaques applicatives
Les attaques applicatives se basent sur des failles dans les programmes utilisés, ou encore des erreurs de configuration. Toutefois, comme précédemment, il est possible de classifier ces attaques selon leur provenance.

i. Les problèmes de configuration
Il est très rare que les administrateurs réseaux configurent correctement un programme. En général, ils se contentent d’utiliser les configurations par défaut. Celles-ci sont souvent non sécurisées afin de faciliter l’exploitation du logiciel (ex : login/mdp par défaut d’un serveur de base de données).
De plus, des erreurs peuvent apparaître lors de la configuration d’un logiciel. Une mauvaise configuration d’un serveur peut entraîner l’accès à des fichiers importants, ou mettant en jeu l’intégrité du système d’exploitation. C’est pourquoi il est important de bien lire les documentations fournies par les développeurs afin de ne pas créer de failles.

ii. Les bugs
Liés à un problème dans le code source, ils peuvent amener à l’exploitation de failles. Il n’est pas rare de voir l’exploitation d’une machine suite à une simple erreur de programmation. On ne peut toutefois rien faire contre ce type de problèmes, si ce n’est attendre un correctif de la part du développeur.

iii. Les buffer overflows
Les buffer overflows, ou dépassement de la pile, sont une catégorie de bug particulière. Issus d’une erreur de programmation, ils permettent l’exploitation d’un shellcode3 à distance. Ce shellcode permettra à une personne mal intentionnée d’exécuter des commandes sur le système distant, pouvant aller jusqu’à sa destruction.
L’erreur de programmation est souvent la même : la taille d’une entrée n’est pas vérifiée et l’entée est directement copiée dans un buffer dont la taille est inférieure à la taille de l’entrée. On se retrouve donc en situation de débordement, et l’exploitant peut ainsi accéder à la mémoire.

iv. Les scripts
Principalement web (ex : Perl, PHP, ASP), ils s’exécutent sur un serveur et renvoie un résultat au client. Cependant, lorsqu’ils sont dynamiques (i.e. qu’ils utilisent des entrées saisies par un utilisateur), des failles peuvent apparaître si les entrées ne sont pas correctement contrôlées.
L’exemple classique est l’exploitation de fichier à distance, tel que l’affichage du fichier mot de passe du système en remontant l’arborescence depuis le répertoire web.
3 Un shellcode est une chaîne de caractères qui représente un code binaire exécutable capable de lancer un shell ('/bin/sh' sous Unix ou command.com sous DOS et Microsoft Windows par exemple). Un shellcode peut être utilisé par un cracker voulant avoir accès à la ligne de commande.

v. Les injections SQL
Tout comme les attaques de scripts, les injections SQL profitent de paramètres d’entrée non vérifiés. Comme leur nom l’indique, le but des injections SQL est d’injecter du code SQL dans une requête de base de données. Ainsi, il est possible de récupérer des informations se trouvant dans la base (exemple : des mots de passe) ou encore de détruire des données.

vi. Man in the middle
Moins connue, mais tout aussi efficace, cette attaque permet de détourner le trafic entre deux stations. Imaginons un client C communiquant avec un serveur S. Un pirate peut détourner le trafic du client en faisant passer les requêtes de C vers S par sa machine P, puis transmettre les requêtes de P vers S. Et inversement pour les réponses de S vers C.
Totalement transparente pour le client, la machine P joue le rôle de proxy. Il accédera ainsi à toutes les communications et pourra en obtenir les informations sans que l’utilisateur s’en rende compte.

4) Le Déni de service
Evoqué précédemment, le déni de service est une attaque visant à rendre indisponible un service. Ceci peut s’effectuer de plusieurs manières : par le biais d’une surcharge réseau, rendant ainsi la machine totalement injoignable ; ou bien de manière applicative en crashant l’application à distance.
L’utilisation d’un buffer overflow peut permettre de planter l’application à distance. Grâce à quelques instructions malicieuses et suite à une erreur de programmation, une personne mal intentionnée peut rendre indisponible un service (serveur web, serveur de messagerie, … etc) voir un système complet.
Voici quelques attaques réseaux connues permettant de rendre indisponible un service :

· SYN Flooding : exploite la connexion en 3 phases de TCP (Three Way Handshake : SYN / SYN-ACK / ACK). Le principe est de laisser un grand nombre de connexions TCP en attente. Le pirate envoie de nombreuses demandes de connexion (SYN), reçoit les SYN-ACK mais ne répond jamais avec ACK. Les connexions en cours occupent des ressources mémoire, ce qui va entraîner une saturation et l’effondrement du système.

· UDP Flooding : le trafic UDP est prioritaire sur TCP. Le but est donc d’envoyer un grand nombre de paquets UDP, ce qui va occuper toute la bande passante et ainsi rendre indisponible toutes les connexions TCP.
Exemple : faire une requête chargen (port 19 / service de génération de caractères) à une machine en spoofant l'adresse et le port source, pour rediriger vers echo (port 7 / service qui répète la chaîne de caractères reçue) d'une autre machine.

· Packet Fragment : utilise une mauvaise gestion de la défragmentation au niveau ICMP.
Exemple : ping of death. La quantité de données est supérieure à la taille maximum d'un paquet IP.
Remarque : pour rappel, nous avons vu que les techniques d’attaque se basant sur la fragmentation des paquets peuvent aussi être utilisées pour outrepasser un filtre IP.

· Smurfling : le pirate fait des requêtes ICMP ECHO à des adresses de broadcast enspoofant l'adresse source (en indiquant l’adresse de la machine cible). Cette machinecible va recevoir un nombre énorme de réponses, car toutes les machines vont luirépondre, et ainsi utiliser toute sa bande passante.

· Déni de service distribué : le but est ici de reproduire une attaque normale à grandeéchelle. Pour ce faire, le pirate va tenter de se rendre maître d’un nombre important demachines. Grâce à des failles (buffer overflows, failles RPC4, … etc) il va pouvoirprendre le contrôle de machines à distance et ainsi pouvoir les commander à sa guise.

Une fois ceci effectué, il ne reste plus qu’à donner l’ordre d’attaquer à toutes les machines en même temps, de manière à ce que l’attaque soit reproduite à des milliers d’exemplaires. Ainsi, une simple attaque comme un SYN Flooding pourra rendre une machine ou un réseau totalement inaccessible.

Aucun commentaire: