vignette|droite|Schéma illustrant un cours de programmation.

Une attaque par déni de service (DoS attack pour en anglais) est une attaque informatique ayant pour but de rendre indisponible un service, d'empêcher les utilisateurs légitimes d'un service de l'utiliser. À l’heure actuelle la grande majorité de ces attaques se font à partir de plusieurs sources, on parle alors d'attaque par déni de service distribuée (DDoS attack pour ).

Il peut s'agir de : l’inondation d’un réseau afin d'empêcher son fonctionnement ; la perturbation des connexions entre deux machines, empêchant l'accès à un service particulier ; l'obstruction d'accès à un service pour une personne en particulier ; également le fait d'envoyer des milliards d'octets à une box Internet.

L'attaque par déni de service peut ainsi bloquer un serveur de fichiers, rendre impossible l'accès à un serveur web ou empêcher la distribution de courriel dans une entreprise.

L'attaquant n'a pas forcément besoin de matériel sophistiqué. Ainsi, certaines attaques DoS peuvent être exécutées avec des ressources limitées contre un réseau de taille plus importante et plus moderne. On appelle parfois ce type d'attaque « attaque asymétrique » en raison de la différence de ressources entre les protagonistes.

Les attaques en déni de service se sont modifiées au cours du temps (voir historique).

Historique

Les attaques par déni de service ont vu le jour dans les années 1980. Les DDoS (ou attaques DoS Distribuées) seraient plus récentes : la première attaque DDoS connue a eu lieu en . : un outil appelé « Trinoo DDO » (décrit ci-dessous) a été déployé dans au moins 227 systèmes, dont 114 étaient sur Internet, pour inonder les serveurs de l'université du Minnesota. À la suite de cette attaque, l'accès internet de l'université est resté bloqué pendant plus de deux jours.

La première attaque DDoS médiatisée dans la presse grand public a eu lieu en , causée par Michael Calce, mieux connu sous le nom de Mafiaboy. Le , Yahoo! a été victime d'une attaque DDoS qui a rendu son portail Internet inaccessible pendant trois heures. Le , Amazon, Buy, CNN et eBay ont été touchés par des attaques DDoS qui ont provoqué soit l'arrêt, soit un fort ralentissement de leur fonctionnement. Le , E-Trade et ZDNet ont à leur tour été victimes d’attaques DDoS.

Les analystes estiment que durant les trois heures d'inaccessibilité, Yahoo! a subi une perte sur le commerce électronique et les recettes publicitaires s'élevant à environ . Selon Amazon.com, son attaque a entraîné une perte de sur dix heures. Au cours de l'attaque, eBay.com est passé de 100 % de disponibilité à 9,4 % ; CNN.com est passé au-dessous de 5 % du volume normal ; Zdnet.com et ETrade.com étaient, eux, pratiquement inaccessibles. Schwab.com, le site en ligne du courtier Charles Schwab, a également été touché, mais il a refusé de donner des chiffres exacts sur ses pertes. On peut seulement supposer que, dans une société qui fait de dollars par semaine sur les métiers en ligne, la perte n’a pas été négligeable. Michael Calce, qui a piraté Amazon.com, Yahoo!, CNN et Ebay, fut condamné à huit mois dans un centre de détention pour jeunes (il n'avait que au moment des faits).

En , un certain virus Code Red infecte quelques milliers de systèmes, et une seconde version, intitulée Code Red II, installe un agent DDoS. Les rumeurs prétendent qu'il devait lancer une attaque contre la Maison-Blanche. Dans un contexte politique de crise, le gouvernement américain annonce que des mesures de sécurité vont être prises. Mais dès l'été 2002, c'est au tour d'Internet de subir une attaque DDoS à l'encontre de ses treize serveurs racines. Ces serveurs sont les points clés du système d'aiguillage de l'Internet, appelé Domain Name System (DNS). Cette attaque ne durera qu'une heure mais aurait pu paralyser l'ensemble du réseau Internet. L'incident est pris au sérieux par les experts qui affirment renforcer à l'avenir la sécurité de leurs machines.

La première version de Slapper, apparue à la mi-, a contaminé plus de Linux en deux semaines. Slapper exploite une faille de sécurité présente dans le module OpenSSL1, et véhicule un agent DDoS. Celui-ci est détecté et stoppé à temps.

Malgré tout, le lundi , une nouvelle attaque DOS bloque neuf des treize serveurs clefs, rendant leurs ressources inaccessibles pendant trois heures. Une partie des entreprises et organismes gérant ces serveurs clés réagit et décide de revoir leurs dispositifs de sécurité. Le FBI a ouvert une enquête, mais localiser le ou les auteurs de l'attaque s'annonce difficile.

Peu de temps après, des serveurs de bases de données Microsoft SQL Server, mal configurés, sont infectés par le ver SQL Slammer. Ce dernier transporte un agent DDoS qui lance une attaque le contre Internet. Cette fois-ci, seuls quatre des treize serveurs racines ont été affectés. Malgré la virulence de l'attaque, la performance globale du réseau a été à peine réduite de 15 %.

Le , le serveur Minemen Club, bien connu dans la communauté Minecraft, a été la cible d’une attaque DDoS massive. Cette attaque a atteint un taux énorme de 3,15 milliards de paquets par seconde, établissant ainsi un nouveau record mondial. L’attaque, qui a duré un peu plus d’une heure, a principalement été orchestrée depuis la Russie, le Vietnam et la Corée du Sud. Le serveur n'a globalement eu de dégâts grâce à leur protection anti DDoS.

Les premières attaques n'étaient perpétrées que par un seul « attaquant » ; rapidement, des attaques plus évoluées sont apparues, impliquant une multitude d'attaquants. On parle alors de DDoS (). Certains pirates informatiques se sont spécialisés dans la « levée » d’armées de « zombies » qu’ils peuvent ensuite louer à d’autres personnes ou groupes malveillants pour attaquer une cible particulière. Avec la forte augmentation du nombre d’échanges commerciaux sur Internet, le nombre de chantages au déni de service a très fortement progressé..

Types d'attaques On appelle « attaque par déni de service » toutes les actions ayant pour résultat la mise hors ligne d'un serveur. Techniquement, couper la connexion entre un serveur et un client, 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 la bande passante d'un serveur défini.

Exploitation des failles ou des limites des machines Une des attaques les plus courantes consistait à envoyer un paquet ICMP de plus de Au-dessus de cette limite, les piles IP ne savaient pas gérer le paquet proprement, ce qui entraînait 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…

[root@localhost root]# hping3 -SARFU -L 0 -M 0 - 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 : l’usage des champs « réservés » de l’en-tête TCP ; le positionnement d’un numéro de séquence d’accusé de réception dans un paquet SYN ; des paquets dont l’en-tête de couche 4 (TCP/UDP) est tronqué en dépit de checksums corrects.

Attaque par déni de service SYN Flood

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 Serveur

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és 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.

UDP Flooding Ce déni de service exploite le mode non connecté du protocole UDP. Il crée une 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 la « 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 à l’attaquant d’envoyer des paquets UDP sur le port 19 (chargen) à une des victimes en usurpant 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.

Packet Fragment Les dénis de service de type Packet Fragment utilisent des faiblesses dans l'implémentation de certaines piles TCP/IP au niveau de la défragmentation IP (ré-assemblage des fragments IP).