On appelle « attaque par déni de service » toutes les actions malfaisantes ayant pour résultat la mise hors-ligne d'un serveur. Techniquement, couper l'alimentation d'un serveur dans un but malfaisant peut-être considéré comme une attaque par déni de service. Dans les faits, les attaques par déni de service sont opérées en saturant un des éléments du serveur ciblé.
Une des attaques les plus courantes consistait à envoyer un paquet ICMP de plus de 65 535 octets. Au dessus de cette limite, les piles IP ne savaient pas gérer le paquet proprement, ce qui entrainait des erreurs de fragmentation UDP, ou encore les paquets TCP contenant des « flags » illégaux ou incompatibles.
Les piles actuelles résistent à ce type d’attaques. Néanmoins, les délais de traitement de ce genre de paquets restent plus longs que ceux nécessaires pour traiter les paquets légitimes. Ainsi, il devient commun voire trivial de générer une consommation excessive de processeur (CPU) par la simple émission de plusieurs centaines de milliers d’anomalies par seconde, ce qu’un outil tel que hping3 permet en une unique ligne de commande...
Ex : [root@localhost root]# hping3 -SARFU -L 0 -M 0 -p 80 www.cible.com --flood
Avec l'arrivée du haut débit et l'augmentation de la puissance des ordinateurs personnels, le potentiel d'attaque a été décuplé, mettant en évidence la faiblesse des installations développées il y a plusieurs années. Cette augmentation permet à quasiment toutes les anomalies d’être à l’origine d’un déni de service, pourvu qu’elles soient générées à un rythme suffisamment important.
Par exemple :
Une attaque SYN Flood est une attaque visant à provoquer un déni de service en émettant un nombre important de demandes de synchronisation TCP incomplète avec un serveur. Quand un système (client) tente d'établir une connexion TCP vers un système offrant un service (serveur), le client et le serveur échangent une séquence de messages. Le système client commence par envoyer un message SYN au serveur. Le serveur reconnaît ensuite le message en envoyant un SYN-ACK message au client. Le client finit alors d’établir la connexion en répondant par un message ACK. La connexion entre le client et le serveur est alors ouverte, et le service de données spécifiques peut être échangé entre le client et le serveur. Voici une vue de ce flux de messages:
Client Server ------ ------ SYN-------------------->
<--------------------SYN-ACK
ACK-------------------->
Le risque d'abus se pose à l'endroit où le système de serveur a envoyé un accusé de réception (SYN-ACK) au client, mais ne reçoit pas le message ACK. Le serveur construit dans sa mémoire système une structure de données décrivant toutes les connexions. Cette structure de données est de taille finie, et elle peut être débordée en créant intentionnellement trop de connexions partiellement ouvertes.
Créer des connexions semi-ouvertes s’accomplit facilement avec l'IP spoofing. Le système de l'agresseur envoie des messages SYN à la machine victime; ceux-ci semblent être légitimes, mais font référence un système client incapable de répondre au message SYN-ACK. Cela signifie que le message ACK final ne sera jamais envoyé au serveur victime.
Normalement il y a un délai d'attente associé à une connexion entrante, les semi-connexions ouvertes vont expirer et le serveur victime pourra gérer l’attaque. Toutefois, le système agresseur peut simplement continuer à envoyer des paquets IP falsifiée demandant de nouvelles connexions, plus rapides que le serveur victime.
Dans la plupart des cas, la victime aura des difficultés à accepter toute nouvelle connexion réseau entrante. Dans ces cas, l'attaque n'affecte pas les connexions entrantes, ni la possibilité d'établir des connexions réseau sortant. Toutefois, le système peut saturer la mémoire, ce qui provoque un crash rendant le système inopérant.
Ce déni de service exploite le mode non connecté du protocole UDP. Il crée un "UDP Packet Storm" (génération d’une grande quantité de paquets UDP) soit à destination d’une machine soit entre deux machines. Une telle attaque entre deux machines entraîne une congestion du réseau ainsi qu’une saturation des ressources des deux hôtes victimes. La congestion est plus importante du fait que le trafic UDP est prioritaire sur le trafic TCP. En effet, le protocole TCP possède un mécanisme de contrôle de congestion, dans le cas où l’acquittement d’un paquet arrive après un long délai, ce mécanisme adapte la fréquence d’émission des paquets TCP et le débit diminue. Le protocole UDP ne possède pas ce mécanisme. Au bout d’un certain temps, le trafic UDP occupe donc toute la bande passante, ne 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 premier génère des caractères, tandis que le second se contente de réémettre les données qu’il reçoit. 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 entraîne une saturation de la bande passante entre les deux machines, il peut donc neutraliser complètement un réseau.
Les dénis de service de type Packet Fragment utilisent des faiblesses dans l’implémentation de certaines pile TCP/IP au niveau de la défragmentation IP (réassemblage des fragments IP).
Une attaque connue utilisant ce principe est Teardrop. L’offset de fragmentation du second fragment est inférieur à la taille du premier ainsi que l’offset plus la taille du second. Cela revient à dire que le deuxième fragment est contenu dans le premier (overlapping). Lors de la défragmentation, certains systèmes ne gèrent pas cette exception et cela entraîne un déni de service. Il existe des variantes de cette attaque : bonk, boink et newtear. Le déni de service Ping of Death exploite une mauvaise gestion de la défragmentation au niveau ICMP, en envoyant une quantité de données supérieure à la taille maximum d’un paquet IP. Ces différents dénis de services aboutissent à un crash de la machine cible.
Cette attaque utilise le protocole ICMP. Quand un ping (message ICMP ECHO) est envoyé à une adresse de broadcast (par exemple 10.255.255.255), celui-ci est démultiplié et envoyé à chacune des machines du réseau. Le principe de l’attaque est de spoofer les paquets ICMP ECHO REQUEST envoyés 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 réseau et toutes les machines répondent alors par un message ICMP ECHO REPLY en direction de la cible. Le flux est alors multiplié par le nombre d’hôte composant le réseau. Dans ce cas tout le réseau cible subit le déni de service, car l’énorme quantité de trafic générée par cette attaque entraîne une congestion du réseau.