Aller au contenu principal

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.

info

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.

info

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 :

  1. Les hackers infectent des milliers d’ordinateurs avec un malware, créant ainsi un botnet.
  2. À un moment précis, ils ordonnent à ces machines d’envoyer des millions de requêtes vers le site e-commerce.
  3. Le serveur du site, incapable de gérer autant de connexions, devient extrêmement lent puis cesse de répondre.
  4. 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


Quel est l’objectif principal d’une attaque DoS ?


Quelle est la différence entre DoS et DDoS ?


Quel type d’attaque consiste à envoyer un grand nombre de requêtes pour saturer un serveur ?


Qu’est-ce qu’un botnet ?


Quelle solution permet de répartir la charge d’un site web pour résister à une attaque DDoS ?


Quel est l’effet principal d’une attaque DDoS sur un site web ?


Quel outil est utilisé pour détecter un trafic anormal sur un réseau ?


Quelle entreprise propose un service de protection contre les attaques DDoS ?


Quel protocole est souvent ciblé par les attaques DDoS ?


Quelle action peut aider à limiter l’impact d’une attaque DoS ?



TP pour réfléchir et résoudre des problèmes

Serveur sous Debian - Attaquant sous Windows

Nous allons utiliser deux 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

1️⃣ Se connecter à la machine Debian et mettre à jour les paquets :

sudo apt update && sudo apt upgrade -y

2️⃣ **Installe Python (si ce n’est pas déjà fait) :

sudo apt install python3 -y

3️⃣ **Lance un serveur web sur le port 8080 :

python3 -m http.server 8080

4️⃣ **Vérifie que le serveur fonctionne :

  • Ouvre un navigateur sur Windows et accède à :
    http://<IP_DU_SERVEUR>:8080
  • Remplace <IP_DU_SERVEUR> par l’adresse IP de la machine Debian (ip a pour la trouver).
  • Si tout fonctionne, tu devrais voir une liste des fichiers du répertoire courant.

Simulation d’une attaque DoS

Récupérer l’IP du serveur Debian

Sur la machine Debian, exécute :

ip a

Note l’adresse IP de l’interface réseau (ex. 192.168.1.100).

Lancer l’attaque depuis Windows

1️⃣ **Ouvre un terminal PowerShell sur Windows (Win + R → powershell)

2️⃣ **Exécute la commande suivante pour envoyer des requêtes en boucle :

while ($true) { Invoke-WebRequest -Uri "http://192.168.1.100:8080" }

(Remplace 192.168.1.100 par l’IP de ton serveur Debian.)

3️⃣ **Observe 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.

4️⃣ **Arrête l’attaque avec Ctrl + C dans le terminal PowerShell.


Protection contre les attaques DoS

Nous allons maintenant mettre en place des protections sur le serveur Debian.

Limiter les connexions avec iptables

1️⃣ **Affiche les règles actuelles du pare-feu :

sudo iptables -L

2️⃣ **Ajoute une règle pour limiter les connexions par IP (ex. : 10 connexions max) :

sudo iptables -A INPUT -p tcp --dport 8080 -m connlimit --connlimit-above 10 -j REJECT

3️⃣ **Ajoute une règle pour limiter le taux de requêtes (ex. : 5 requêtes par seconde) :

sudo iptables -A INPUT -p tcp --dport 8080 -m limit --limit 5/second -j ACCEPT

4️⃣ **Vérifie que les règles sont bien appliquées :

sudo iptables -L -v

5️⃣ **Teste à nouveau l’attaque et observe si le serveur résiste mieux.


Bloquer les IP suspectes avec fail2ban

fail2ban permet de bloquer automatiquement les IP qui envoient trop de requêtes.

1️⃣ **Installe fail2ban :

sudo apt install fail2ban -y

2️⃣ **Crée un fichier de configuration pour surveiller les connexions sur le port 8080 :

sudo nano /etc/fail2ban/jail.local

Ajoute le contenu suivant :

[http-server]
enabled = true
port = 8080
filter = http-server
logpath = /var/log/syslog
maxretry = 10
findtime = 60
bantime = 300

3️⃣ **Redémarre fail2ban pour appliquer les changements :

sudo systemctl restart fail2ban

4️⃣ **Teste à nouveau l’attaque et observe si l’IP de Windows est bloquée après plusieurs requêtes.


Utiliser un proxy inverse (NGINX) pour filtrer les requêtes

Un proxy inverse comme NGINX peut être utilisé pour limiter le nombre de requêtes provenant d’une même IP.

1️⃣ **Installe NGINX :

sudo apt install nginx -y

2️⃣ **Ajoute une règle pour limiter les requêtes dans la configuration de NGINX :

sudo nano /etc/nginx/nginx.conf

Ajoute ces lignes dans la section http :

limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;

server {
listen 8080;
location / {
limit_req zone=one burst=10 nodelay;
}
}

3️⃣ **Redémarre NGINX pour appliquer les modifications :

sudo systemctl restart nginx

4️⃣ **Teste à nouveau l’attaque et observe si les requêtes sont limitées.


Vérification des protections

1️⃣ **Relance le serveur :

python3 -m http.server 8080

2️⃣ **Tente une attaque depuis Windows avec PowerShell.

  • Si iptables est activé, les requêtes devraient être limitées.
  • Si fail2ban est activé, l’IP de Windows devrait être bloquée.
  • Si NGINX est activé, les requêtes devraient être filtrées.

3️⃣ **Vérifie les logs pour voir si les protections fonctionnent :

sudo iptables -L -v  # Vérifier les règles du pare-feu  
sudo fail2ban-client status http-server # Vérifier les IP bloquées
sudo tail -f /var/log/nginx/access.log # Voir les requêtes filtrées par NGINX

Conclusion et bonnes pratiques

Ce que nous avons appris :

✔️ Comment fonctionne une attaque par déni de service (DoS).
✔️ Comment simuler une attaque depuis Windows.
✔️ Comment observer l’impact sur un serveur sous Debian.
✔️ Comment mettre en place des protections efficaces :

  • Pare-feu (iptables) : Limite le nombre de connexions et le taux de requêtes.
  • fail2ban : Bloque automatiquement les IP suspectes.
  • Proxy inverse (NGINX) : Filtre et limite les requêtes.

Bonnes pratiques pour protéger un serveur web contre DoS/DDoS :

✔️ Utiliser un pare-feu pour limiter le trafic suspect.
✔️ Activer fail2ban pour bloquer les IP malveillantes.
✔️ Mettre en place un proxy inverse (NGINX, Cloudflare) pour filtrer les requêtes.
✔️ Surveiller les logs pour détecter les attaques en temps réel.
✔️ Utiliser un service anti-DDoS (Cloudflare, AWS Shield, etc.) pour les sites critiques.