DoS et DDoS
Déni de service (DoS) et DDoS : Comprendre et se protéger
Notions théoriques
Un déni de service (DoS) est une attaque informatique qui vise à rendre un service indisponible en le surchargeant de requêtes.
L'attaque par déni de service a pour objectif est d'empêcher les utilisateurs légitimes d'accéder à un site Web, une application ou un serveur.
Comment fonctionne une attaque DoS ?
Une attaque DoS consiste à envoyer une grande quantité de requêtes vers une cible (serveur, site web, API) pour saturer ses ressources (processeur, mémoire, bande passante).
Résultat : le service devient lent ou totalement inaccessible.
Différence entre DoS et DDoS
-
DoS (Denial of Service) : Une seule machine attaque une cible.
-
DDoS (Distributed Denial of Service) : Plusieurs machines attaquent une cible simultanément.
Les machines, qui attaquent une cible simultanément, sont souvent des ordinateurs infectés (botnets) contrôlés à distance par un attaquant.
Types d'attaques DoS/DDoS
- Saturation de la bande passante : Envoi massif de données pour épuiser la connexion réseau.
- Saturation des ressources serveur : Envoi de requêtes complexes pour surcharger le CPU et la mémoire.
- Exploitation de vulnérabilités : Utilisation de failles pour provoquer un crash du service.
Conséquences d'une attaque DoS/DDoS
- Indisponibilité du service : Impossible d’accéder au site ou à l’application.
- Pertes financières : Une entreprise peut perdre des clients et de l’argent.
- Atteinte à la réputation : Un site souvent indisponible perd la confiance de ses utilisateurs.
Comment se protéger ?
- Limiter le nombre de requêtes par utilisateur avec un pare-feu ou un proxy.
- Utiliser un réseau de distribution de contenu (CDN) pour absorber le trafic.
- Détecter les comportements suspects avec un système de détection d’intrusion (IDS).
- Bloquer les adresses IP suspectes avec un pare-feu.
- Utiliser des services anti-DDoS comme Cloudflare, Akamai ou AWS Shield.
Exemple pratique
Cas concret : Une attaque DDoS sur un site web
Un site e-commerce est victime d’une attaque DDoS orchestrée par un groupe de hackers.
Déroulement de l’attaque :
- Les hackers infectent des milliers d’ordinateurs avec un malware, créant ainsi un botnet.
- À un moment précis, ils ordonnent à ces machines d’envoyer des millions de requêtes vers le site e-commerce.
- Le serveur du site, incapable de gérer autant de connexions, devient extrêmement lent puis cesse de répondre.
- Pendant plusieurs heures, les clients ne peuvent plus accéder au site, entraînant une perte de ventes importante.
Mesures de protection mises en place :
- L’entreprise utilise un CDN pour filtrer le trafic et absorber la surcharge.
- Un pare-feu est configuré pour bloquer les adresses IP suspectes.
- Un système de détection d’intrusion analyse le trafic et bloque automatiquement les requêtes anormales.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Serveur sous Debian - Attaquant sous Windows
Nous allons utiliser 2 machines :
-
Serveur Web (Debian)
- Héberge un serveur Web sur Debian.
- Subira l’attaque DoS.
-
Attaquant (Windows)
- Enverra un grand nombre de requêtes pour surcharger le serveur.
Mise en place du serveur
Nous pouvons utiliser un serveur Web déjà disponible pour des tests, sinon voici comment lancer un serveur Web avec Python.
- Se connecter à la machine Debian et mettre à jour les paquets :
sudo apt update && sudo apt upgrade -y
- Installer Python (si ce n’est pas déjà fait) :
sudo apt install python3 -y
- Lancer un serveur Web sur le port 8080 :
python3 -m http.server 8080
- Vérifier que le serveur fonctionne :
- Ouvrir un navigateur sur Windows et accéder à :
http://<IP_DU_SERVEUR>:8080
- Remplacer
<IP_DU_SERVEUR>par l’adresse IP de la machine Debian (ip apour la trouver). - Si tout fonctionne, nous allons voir une liste des fichiers du répertoire courant.
- Ouvrir un navigateur sur Windows et accéder à :
Simulation d’une attaque DoS
Récupérer l’IP du serveur Debian
Sur la machine Debian, exécuter :
ip a
Noter l’adresse IP de l’interface réseau (ex. 192.168.1.100).
Lancer l’attaque depuis Windows
-
Ouvrir un terminal PowerShell sur Windows (Win + R →
powershell) -
Exécuter la commande suivante pour envoyer des requêtes en boucle :
while ($true) { Invoke-WebRequest -Uri "http://192.168.1.100:8080" }
(Remplacer 192.168.1.100 par l’IP de notre serveur Debian.)
- Observer l’impact sur le serveur Debian :
- Le terminal où tourne le serveur affichera une série de requêtes.
- Le serveur peut ralentir ou cesser de répondre.
Comment afficher les requêtes HTTP/HTTPS qui sont faites vers ce serveur ?
Solution n°1. Afficher les log du serveur Web, avec la commande tail :
sudo tail -f /var/log/apache2/access-atedi.log
La commande sudo tail -f /var/log/apache2/access-atedi.log réalise plusieurs actions importantes :
Détails de la commande :
-
sudo : Exécute la commande avec les privilèges
root. -
tail : C'est une commande qui affiche les dernières lignes d'un fichier. Par défaut, elle affiche les 10 dernières lignes, mais vous pouvez spécifier une autre quantité si besoin.
-
-f : Cette option signifie "follow" (suivre). Lorsqu'elle est utilisée,
tailcontinuera à afficher les nouvelles lignes ajoutées au fichier en temps réel. Cela est particulièrement utile pour surveiller des fichiers journaux. -
/var/log/apache2/access-atedi.log : C'est le chemin du fichier dont vous souhaitez afficher les contenu. Dans ce cas, il s'agit du fichier journal d'accès (access log) d'Apache pour un site ou un service spécifique nommé "atedi".
Cette commande surveille et affiche en temps réel les requêtes HTTP qui arrivent sur le serveur gérées par Apache, selon le fichier log spécifié. Cela permet de suivre l'activité du serveur et d'obtenir des informations sur le trafic entrant, comme les adresses IP des visiteurs, les pages consultées, et d'autres données utiles pour le diagnostic et l'analyse.
Solution n°2. Afficher le trafic TCP avec la commande tcpdump :
Pour installer tcpdump, il suffit d'exécuter les commandes suivantes :
sudo apt update
sudo apt install tcpdump
Pour afficher les requêtes HHTP, il suffit d'exécuter la commande suivante :
sudo tcpdump 'tcp port 80'
Détails de la commande :
- sudo : Exécute la commande avec les privilèges
root. - tcpdump : Outil de capture de paquets.
- 'tcp port 80' : Filtre pour n'afficher que le trafic HTTP (port 80).
Si vous souhaitez afficher aussi les requêtes HTTPS, il suffit de remplacer 'tcp port 80' par 'tcp port 80 or tcp port 443'.
sudo tcpdump 'tcp port 80 or tcp port 443'
- Arrêter l’attaque avec
Ctrl + Cdans le terminal PowerShell.
Protection contre les attaques DoS
Nous allons maintenant mettre en place des protections sur le serveur Debian à l'aide de Fail2ban qui va Bloquer les IP suspectes.
fail2banpermet de bloquer automatiquement les IP qui envoient trop de requêtes.
-
Installer Fail2Ban
sudo apt updatesudo apt install fail2ban -
Créer un filtre
apache-floodpour protéger Apache contre le flood HTTP/HTTPS