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 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

  1. Se connecter à la machine Debian et mettre à jour les paquets :
sudo apt update && sudo apt upgrade -y
  1. Installer Python (si ce n’est pas déjà fait) :
sudo apt install python3 -y
  1. Lancer un serveur Web sur le port 8080 :
python3 -m http.server 8080
  1. 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 a pour la trouver).
    • Si tout fonctionne, nous allons 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écuter :

ip a

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

Lancer l’attaque depuis Windows

  1. Ouvrir un terminal PowerShell sur Windows (Win + R → powershell)

  2. 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.)

  1. 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.
  2. Arrêter 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. Afficher les règles actuelles du pare-feu :
sudo iptables -L
  1. Ajouter 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
  1. Ajouter 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
  1. Vérifier que les règles sont bien appliquées :
sudo iptables -L -v
  1. Tester à nouveau l’attaque et observer 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. Installer fail2ban :
sudo apt install fail2ban -y
  1. Créer un fichier de configuration pour surveiller les connexions sur le port 8080 :
sudo nano /etc/fail2ban/jail.local

Ajouter le contenu suivant :

[http-server]
enabled = true
port = 8080
filter = http-server
logpath = /var/log/syslog
maxretry = 10
findtime = 60
bantime = 300
  1. Redémarrer fail2ban pour appliquer les changements :
sudo systemctl restart fail2ban
  1. Tester à nouveau l’attaque et observer 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
  1. Ajouter une règle pour limiter les requêtes dans la configuration de NGINX :
sudo nano /etc/nginx/nginx.conf

Ajouter 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;
}
}
  1. Redémarrer NGINX pour appliquer les modifications :
sudo systemctl restart nginx
  1. Tester à nouveau l’attaque et observer si les requêtes sont limitées.

Vérification des protections

  1. Relancer le serveur :
python3 -m http.server 8080
  1. Tenter 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.
  2. Vérifier 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

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.