Contexte réseau
Nous nous intéressons à deux types de problèmes dans les réseaux : la classification de services, et la détection d'attaques.
Classification de services
La classification de services par les routeurs d'un réseau est un problème important : cette classification permet d'affecter des qualités de service différentes aux services (par exemple une priorité pour la voix sur IP, et une priorité plus faible pour les applications de téléchargement peer-to-peer). Elle peut aussi servir à détecter certaines attaques qui se mettent à utiliser intensivement des services inhabituels.
Cette classification se base sur les en-têtes des paquets : en-tête IP (adresse source et destination) mais aussi en-tête UDP ou TCP (numéros de port source et destination). Mais les ports utilisés par une application sont facilement modifiables. Pour être plus fiable, la classification se base donc sur des analyses plus fines comme la taille des paquets envoyés, le degré d'asymétrie de la connexion (les paquets sont presque tous envoyés de A vers B, et seuls des acquittements sont envoyés de B vers A, ou au contraire A et B envoient la même quantité de données)...[TAN97] L'analyse n'utilise pas directement le contenu des paquets UDP ou TCP car il peut être chiffré, il n'est pas toujours bien défini, et cela nécessiterait de plus des ressources importantes (beaucoup de protocoles à ce niveau là sont définis en texte, et non plus de manière binaire).
Ceci pose un problème important : la reconstitution du flux. Que ce soit :
- en TCP où un flux est clairement défini par le protocole : il commence par un paquet SYN et se termine par un paquet FIN ;
- ou en UDP où un flux se crée de fait : il y a une communication entre deux terminaux : il faut récupérer tous les paquets entre les deux terminaux sur les mêmes ports, en maintenant un timer pour décider quand le flux s'arrête.
Cette reconstitution demande de grosses ressources en mémoire et en processeur. Il faut en effet retenir les premiers paquets tant que l'on n'a pas assez d'informations pour prendre une décision sur le flux, puis garder ce flux en mémoire.
Détection d'attaques
Actuellement énormément de machines et de services sont accessibles par Internet. Ce qui facilite grandement les échanges et le travail collaboratif facilite aussi les attaques de tous types. Pour se protéger de ces attaques, les antivirus et pare-feux sur les terminaux ne suffisent pas. C'est pourquoi nous nous intéressons à l'implémentation de la détection d'attaques à l'intérieur même du réseau, sur des liens à très haut débit, pour arrêter les attaques aussi tôt que possible.
Contrairement à la classification de services, la détection d'attaques peut dans certains cas se faire efficacement sans reconstituer les flux
Attaques DoS et DDoS
Les attaques DoS (Denial of Service : attaques par déni de service) sont les plus courantes : elles consistent à rendre des services inaccessibles. Elles ne servent pas à accéder à des données protégées ou à les modifier, mais simplement à nuire à la réputation d'un fournisseur de services en provoquant un arrêt de certains services pendant le plus longtemps possible.
Ces attaques peuvent être effectuées en saturant un serveur de requêtes, ou en exploitant les failles d'un protocole ou d'un logiciel (souvent les attaques utilisent les deux méthodes à la fois).
Les attaques DDoS (Distributed Denial of Service : déni de service distribué) sont des attaques par déni de service effectuées depuis plusieurs machines sur le réseau. La personne malveillante prend au préalable le contrôle de plusieurs machines dites zombies (en utilisant un cheval de Troie par exemple), puis utilise ces zombies pour augmenter sa puissance d'attaque.
Détecter ces attaques au cœur du réseau évite de devoir les détecter sur la machine cible qui risque de toute manière d'être surchargée rien que par la détection des attaques.
Syn Flooding
Les attaques par Syn Flooding font partie des attaques par déni de service. Elles saturent le serveur cible en utilisant une faille du protocole TCP. Elles peuvent être détectées sans reconstituer de flux.
Le Syn Flooding consiste à envoyer un grand nombre de requêtes TCP de type SYN à un serveur. Ces requêtes ont pour but d'ouvrir une connexion TCP. Les serveur répond alors par des paquets de type SYN-ACK, et le client est sensé répondre par un paquet ACK, ce qu'il ne fera pas. Ceci ouvre à moitié de nombreuses requêtes, ce qui consomme des ressources sur le serveur, qui finit par saturer.
En effet le protocole TCP n'oblige pas la machine qui initie la connexion à créer un contexte de connexion pour envoyer la première requête, alors que le serveur doit créer un contexte avant de répondre. Il consomme donc plus de mémoire et de ressource que l'attaquant, ce qui rend l'attaque efficace.
Pour détecter ces attaques, il faut compter le nombre de paquets TCP SYN envoyés à un même hôte. S'il y en a un nombre anormalement élevé, c'est une attaque par Syn Flooding.
Ping Flooding
Les attaques par Ping Flooding sont aussi des attaques par déni de service qui peuvent être détectées sans reconstituer de flux. Ce sont des attaques très simples qui consistent simplement à envoyer un maximum de requêtes ICMP de ping à la cible. Il est aussi possibles d'envoyer des paquets ICMP avec un contenu plus gros que la taille maximum contenue dans un paquet IP. Cela oblige la cible à reconstituer les paquets à la sortie. Il faut cependant que l'attaquant ait d'énormes capacités pour surcharger un serveur de cette manière.
La détection du Ping Flooding est à peu près similaire à celle du Syn Flooding, mais ces attaques sont moins efficaces.
Attaques Teardrop
Les attaques Teardrop sont un exemple d'attaques par déni de service qui ne peuvent pas être détectées par un simple comptage comme les précédentes. Elles utilisent une faille dans le réassemblage des paquets IP fragmentés en insérant des données de décalage erronées dans l'en-tête des paquets. Une machine recevant ces paquets IP risque de redémarrer si elle est sensible à cette attaque.
La meilleure méthode pour se protéger de ce genre d'attaques est de modifier les équipements terminaux pour corriger la faille. C'est un exemple d'attaques qui ne concerne par le cœur du réseau (la détection consommerait énormément de ressources pour vérifier les informations de fragmentation de tous les paquets).
Sources
| [BCC07] | Tian Bu, Jin Cao, Aiyou Chen, Patrick P. C. Lee. A Fast and Compact Method for Unveiling Significant Patterns in High Speed Networks. IEEE. 2007. |
| [BFG09] | Yannick BLEUWART, Éric FAGOT, Grégory GIEMZA, Yanick PIGNOT. Séminaire de détection d’intrusions Dos, DDos. Attaque du Syn Flooding : exemple sur un serveur web Apache. [En ligne] Disponible sur http://www.student.montefiore.ulg.ac.be/~bleuwart/ (consulté le 30 novembre 2009). |
