IoT Security Training Kit (ESP32)
⚠️ Alle Verwundbarkeiten sind absichtlich implementiert und ausschließlich für Laborszenarien gedacht. Kein Einsatz in Produkten.
Kurzfassung / Value Proposition
- Hands‑on statt Folien: 10 reale IoT‑Angriffsflächen (HTTP, MQTT, OTA, UART, BLE, Storage, RNG, Logging) auf echter Hardware.
- Vorher/Nachher sichtbar: Umschaltbarer Build‑Modus (Vulnerable vs. Fixed) mit klaren Messkriterien und PoV‑Tests.
- Praxisnahes Setup: Docker‑Services (MQTT, OTA/Web, Scoring), PoV‑Skripte und CI Checks – sofort einsatzbereit.
- Skalierbar: Team‑CTF mit Flag‑Abgabe, Trainer‑Guides, erweiterbar um eigene Szenarien (z. B. Signierte OTA‑Pipelines, SBOM).
Highlights
- 10 Challenges mit klaren Lernzielen (siehe unten)
- Build‑Switch: BUILD_FIXED=1 aktiviert Härtung (zeigt unmittelbar den Effekt)
- Saubere Trennung: Exploit‑freie PoV‑Skripte demonstrieren Risiken ohne „Weaponization“
- Trainer‑Material: Syllabus, Lösungsleitfäden, Moderations‑Fahrplan, Scoring‑Server
- CI‑ready: Beispiel‑Workflow (Static Analysis/Tree), leicht erweiterbar (SAST/Secrets‑Scan)
Lieferumfang
- Firmware (ESP‑IDF v5.x) mit 10 Modulen (HTTP‑Server, MQTT‑Client, BLE‑GATT, UART‑CLI, OTA‑Handler, KV‑Store etc.)
- Docker Compose: Mosquitto (MQTT), leichter OTA/Web‑Server, optional Scoring‑Server
- PoV‑Tools (Python) + Requirements, Beispiel‑Kommandos
- Dokumentation: Setup, Syllabus, Challenges (Beschreibung → PoV → Fix → Erfolgskriterien), Facilitation Guide
- CI‑Workflow (.github/workflows) als Startpunkt für Ihre Pipeline
Lernziele & Curriculum
- systematisch IoT‑Angriffsflächen erkennen und priorisieren,
- unsichere Defaults, schwache Token/PRNG, unverschlüsselte Kommunikation nachweisbar identifizieren,
- OTA‑Pfad (Download → Prüfung → Commit) sicher gestalten (TLS, Signatur, Anti‑Rollback, Verify‑before‑Commit),
- Speicher‑/Protokollfehler (Overflow, Formatstring, fehlende Bounds‑Checks) gezielt finden und beheben,
- BLE‑Berechtigungen richtig einsetzen (Pairing/Encryption, Attribute‑Permissions),
- Log‑/KV‑Speicher so konfigurieren, dass Secrets nicht „abfließen“.
Die 10 Challenges im Überblick
- Default Credentials (HTTP Basic) PoV: Login mit Standard‑Daten. Fix: Basic deaktivieren, kurzlebige Tokens + TLS, Secrets niemals hardcoden.
- Insecure MQTT (ohne TLS/Auth) PoV: Publish/Subscribe ohne Auth; Befehlsmissbrauch. Fix: TLS, Username/Passwort, Topic‑Isolation, Autorisierung, QoS/Retain‑Regeln.
- Weak Token (PRNG) PoV: Vorhersagbare Session‑Tokens (rand() mit festem Seed). Fix: TRNG/DRBG (esp_random), Nonces, Ratelimits.
- Command Injection (simuliert) & Logging PoV: Unvalidierter cmd‑Parameter → Log‑Format/Buffer‑Issues. Fix: Whitelist, sichere Formatierung, Bounds‑Checks.
- UART Overflow PoV: Unchecked copy → Out‑of‑Bounds Write. Fix: Länge prüfen, strlcpy/memcpy_s, Fuzzing an UART‑Pfaden.
- Unsigned/Plain OTA PoV: OTA aus http:// ohne Signaturprüfung. Fix: HTTPS, Signatur vor Commit, Anti‑Rollback, Hash‑Verifikation nach dem Schreiben.
- BLE Insecure Permissions PoV: Lesen/Schreiben ohne Pairing/Encryption. Fix: GATT‑Permissions verschärfen, Bonding, Secure Connections.
- Plaintext Provisioning & Secret Logging PoV: KV‑Store/Logs enthalten Passwörter. Fix: Redaction, NVS‑Verschlüsselung, Secrets nie loggen.
- Sensitive Data in NVS PoV: Unverschlüsselter NVS‑Dump. Fix: NVS‑Encryption aktivieren, Schlüsselverwaltung.
- Insecure Update Channel (TOCTOU) PoV: Zeitfenster zwischen Prüfung und Anwendung. Fix: Atomare „verify‑before‑commit“‑Strategie, Post‑Write‑Hash, A/B‑Rollback.
Architektur (Labor)
[Teilnehmende] ──(HTTP/MQTT/BLE/UART)──> [ESP32 DevKit]
│ │
├───────────────(MQTT)──────────────┤
│ ▼
[Docker: Mosquitto] [Docker: OTA/Web]
│ │
└──────────────(HTTP/REST)──────────┘
│
[Scoring‑Server]
Build‑Modi:
- Vulnerable (Default): Verwundbarkeiten aktiv, PoVs funktionieren.
- Fixed: Härtungen aktiv → PoVs schlagen fehl; Logs/Checks zeigen „sauberes“ Verhalten.
Technische Eckdaten
- Target: ESP32 DevKit (ESP32‑WROOM32/gleichwertig)
- ESP‑IDF: v5.x (HTTP Server, MQTT Client, BLE GATT, NVS, OTA)
- Partitionierung: A/B‑fahig (factory, ota_0, ota_1); Rollback‑support aktivierbar
- Docker: Mosquitto (MQTT, 1883), OTA/Web (Flask, 8000), optional Scoring (5050)
- PoV‑Tools: Python 3.10+ (requests, paho‑mqtt)
- CI‑Skeleton: Cppcheck + Struktur, einfach erweiterbar (SAST, Secret‑Scan, Lint)
Beispiel‑Ablauf (2‑Tage‑Workshop)
- Setup & Recon (nmap, MQTT‑Sub, BLE‑Scan)
- HTTP/MQTT Challenges (#1, #2, #3)
- UART Overflow (#5) inkl. Logic‑Analyzer‑Einblick
Integration & Erweiterungen
- Signierte OTA‑Pipeline (ESP32/STM32): nahtlose Anbindung einer Ed25519‑basierten Update‑Kette (Manifest, Verify‑before‑Commit, Anti‑Rollback).
- SBOM & Supply‑Chain: CycloneDX in CI, Release‑Signaturen (cosign), Repro‑Builds.
- Device‑spezifische Szenarien: CAN‑Gateway, Industrieprotokolle, Sensorik mit Wheatstone‑Bridge‑Beispielen.
Sicherheit & Ethik
- Das Kit wird ausschließlich in isolierten Laborumgebungen betrieben (eigene SSID/VLAN).
- PoV‑Skripte adressieren nur die bereitgestellte Hardware/Container.
- Keine Veröffentlichung produktionsnaher Exploits oder 0‑Days.
Varianten & Services
Häufige Fragen (FAQ)
Beispiel‑Kommandos
Bash
# Firmware (Vulnerable)
idf.py -C firmware/esp32 set-target esp32
idf.py -C firmware/esp32 build && idf.py -C firmware/esp32 flash monitor
# Firmware (Fixed)
idf.py -C firmware/esp32 build -D BUILD_FIXED=1
# Docker‑Services
docker compose -f docker/docker-compose.yml up -d
# PoV: Default Credentials
python tools/pov_default_creds.py http://<ESP32-IP>/login
# PoV: Insecure MQTT
python tools/pov_insecure_mqtt.py
Kontakt & Demo
SEO / Metadaten (optional)
Html
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Course",
"name": "IoT Security Training Kit (ESP32)",
"description": "CTF‑artiges Hands‑on‑Training für sichere Embedded‑Entwicklung auf ESP32.",
"provider": {
"@type": "Organization",
"name": "Büngener Software",
"url": "https://buengener-software.de"
},
"hasCourseInstance": {
"@type": "CourseInstance",
"courseMode": "OnSite/OnLine",
"startDate": "2025-10-01",
"endDate": "2025-12-31",
"location": {
"@type": "Place",
"name": "Inhouse / Remote"
}
}
}
</script>
Versionierung
- v1.0 – Initiale Veröffentlichung des Training Kits (10 Challenges, Docker‑Lab, PoV, CI‑Skeleton)