- Ich habe eine Tapo-Kamera gekauft, um meinen Hund im Haus zu beobachten, und dabei unerwartet die Funktionsweise von TP-Link-Geräten und der App rückwärts analysiert
- Um den Onboarding-Prozess und die Struktur der verschlüsselten API-Kommunikation zu untersuchen, kamen verschiedene Techniken zum Einsatz, darunter MITM, APK-Decompiling und das Erstellen von Entschlüsselungsskripten
- Durch die Entdeckung des initialen Administrator-Passworts und des Ableitungsprozesses für Sitzungsschlüssel konnten verschlüsselte Nachrichten entschlüsselt und Probleme mit der unzuverlässigen Synchronisierung zwischen Gerät und Cloud-Konto erkannt werden
- Durch die Analyse des gesamten Onboarding-Ablaufs wurden die wichtigsten API-Aufrufe, Kontenerstellung, Passwortänderung und der Wi‑Fi-Verbindungsprozess per Bash-Skript automatisiert
- Es werden Schwachstellen im Sicherheitsdesign der Tapo-Firmware, eine wenig ausgereifte Verschlüsselungsimplementierung und eine unregelmäßige Kontensynchronisierung aufgezeigt – typische Merkmale günstiger IoT-Geräte
Projektüberblick
- Der Autor kaufte und nutzte eine günstige Tapo-Kamera zur Beobachtung seines Hundes in der Wohnung
- Während der Nutzung führten umständliche Einrichtung und mangelnde verfügbare Informationen im Netz dazu, dass er die Funktionsweise des Produkts genauer untersuchte
- Unerwartete Probleme bei der Integration mit frigate und beim Aktivieren von 2way audio weckten das Interesse an einer direkten Onboarding-Methode ohne Cloud-Anbindung
Analyse von Onboarding- und Authentifizierungsstruktur
- Um den Verbindungsprozess der Tapo-Kamera zu analysieren, wurden MITM proxy und das dynamische Hooking-Tool frida verwendet, um den Datenverkehr zwischen App und Kamera abzufangen
- Da aktuelle Apps häufig Schutzmechanismen wie Proxy-Ignorierung und certificate pinning besitzen, ist ein Ansatz mit dynamischen Tools wirksam
- Nach dem Einrichten dieser Umgehungsstruktur konnte im Onboarding-Flow der Kamera der Vorgang des Default-Logins mit dem Administrator-Konto genau nachvollzogen werden
- Es wurde festgestellt, dass die Default-Login-API unabhängig vom Passwort des Cloud-Kontos mit einem gerätespezifischen Standardpasswort arbeitet
Verschlüsselungsstruktur und Suche nach dem Standardpasswort
- Durch APK-Decompiling (mit JADX) und Codeanalyse wurde das Standardpasswort des
admin-Kontos (TPL075526460603) ermittelt - Dass bereits verknüpfte Kamerageräte selbst nach einer Änderung des Cloud-Passworts diese Änderung nicht erkennen, bestätigte die fehlerhafte Passwortsynchronisierung zwischen App und Kamera
- Nachdem das Standardpasswort bekannt war, konnte durch Implementierung der Ableitungslogik für die Sitzungsschlüssel (
lsk,ivb) die verschlüsselte API-Kommunikation in Echtzeit entschlüsselt werden
mitmproxy-Skripting und API-Analyse
- Unter Bezug auf das Open-Source-Projekt PyTapo wurde der tatsächliche API-Ablauf des Tapo-Onboardings präzise analysiert
- Mit dem Skript
tapo_decrypt_pretty.pywurden- der Login-Handshake erkannt
- Sitzungsschlüssel extrahiert
- verschlüsselte APIs entschlüsselt und gut lesbar ausgegeben sowie als JSON gespeichert
- Aus der vollständigen Liste der Onboarding-API-Aufrufe wurden nur die relevanten Hauptschritte ausgewählt und daraus ein automatisierter Workflow erstellt
- Wi‑Fi-Liste abrufen (
scanApList) - RTSP/ONVIF-Konto aktivieren
- Administrator-Passwort ändern
- Wi‑Fi verbinden
- Wi‑Fi-Liste abrufen (
Automatisierung und Ergebnisse
- Mit dem Bash-Skript (
tapo_onboard.sh) wurde der gesamte oben beschriebene Onboarding-Prozess vollautomatisch ausgeführt- Standard-Login als admin
- Wi‑Fi auswählen und verbinden
- Logo aus dem Kamerafeed entfernen
- RTSP/ONVIF aktivieren
- Administrator-Passwort zurücksetzen
- In der Struktur der Kamera-Firmware wurden folgende Eigenschaften und Schwachstellen festgestellt
- Einige APIs verwenden SHA-256-Hashes, andere behalten veraltete Verfahren wie MD5 bei
- Es existieren 2 öffentliche Schlüssel, aber es ist unklar, in welcher Situation welcher Schlüssel verwendet werden soll
- Die Passwortsynchronisierung zwischen App und Gerät ist äußerst instabil
Fazit und Eindruck
- Die Sicherheitsstruktur von Tapo-Kamera-Firmware und API wirkt provisorisch und wenig ausgereift
- Das Projekt vermittelte indirekt praktische Einblicke in Sicherheitslücken günstiger IoT-Geräte und die Realität unvollständiger Onboarding-Systeme
- Das eigentliche Ziel des Projekts – den Hund zu überprüfen – wurde erreicht; zu sehen war meist, wie der Hund auf dem Sofa oder dem Bett schläft
2 Kommentare
CVE-2022-37255, also 7,5 Punkte.
Hacker-News-Kommentare
Faszinierend, dass mein Frida-Skript verwendet wurde; das Skript ist hier zu finden. Es freut mich, dass es in der Praxis gut zu funktionieren scheint. Falls du etwas ergänzt oder verändert hast, würde ich das gern hören.
Zur Info: Wenn man bidirektionales Audio in Frigate nutzen will, muss man in go2rtc für den Hauptstream
tapo://statt des üblichenrtsp://konfigurieren. TP-Link bietet bidirektionales Audio nur über die eigene API an. Das ist lästig, weil damit ONVIF (für die Schwenk-/Neigesteuerung der Kamera mit Open-Source-Tools) nicht funktioniert. Wenn man beides nutzen will, braucht man einen ziemlich aggressiven Workflow: Lesen destapo://-Streams stoppen → ONVIF-Client starten / schwenken-neigen → ONVIF beenden →tapo://wieder starten.Ich halte IoT-Sicherheit insgesamt für ein einziges Chaos. Besonders besorgniserregend ist, dass Consumer-Router undurchsichtige Blackboxes sind, die den gesamten Netzwerkverkehr verarbeiten und sich nicht auditieren lassen. Den meisten Leuten ist nicht bewusst, dass ihre Router-Firmware oft seit Jahren keine Updates mehr bekommen hat und bereits bekannte Schwachstellen enthält. Das Vertrauensmodell der Lieferkette bei Netzwerkhardware ist meiner Meinung nach komplett kaputt.
Ich fand diesen Blogpost außergewöhnlich gut geschrieben. Heutzutage sind viele Texte in diesem Stil von LLMs erzeugt und oft unangenehm zu lesen, aber dieser hier hält die Balance zwischen technischer Tiefe und angenehmer Lesbarkeit beeindruckend gut. (Ich weiß, dass das Titelbild KI-generiert ist, aber das hat für mich nichts mit der Qualität des Textes zu tun.)
Ich frage mich, ob sich Tools wie Frida und mitmproxy auch künftig noch bei Android-Apps einsetzen lassen und was passiert, wenn nächstes Jahr die Signaturanforderungen greifen.
Zur Einordnung gibt es dazu auch The Tapo C200 research project und PyTapo: eine Python-Bibliothek für Tapo-Kameras.
Weiteres verwandtes Material: (TP-Link-Firmware-Entschlüsselung und Analyse des Bootloaders der Cloud-Kamera C210 V2) gibt es hier.
Vielleicht bewegt sich der Hund des OP vom Bett auf den Boden, weil die Heizung bzw. der Radiator angeht; dafür bräuchte man wohl zusätzliche Sensordaten.
Ich habe das Gefühl, wir sind inzwischen an dem Punkt, an dem ein fest eincodiertes Administratorpasswort niemanden mehr besonders überrascht.
Ich hätte gern eine Referenzübersicht dazu, welche Tapo-Kameras RTSP unterstützen. Die C210 funktioniert einigermaßen gut (Cloud-Capture geht nicht) und läuft bei mir in Frigate. Heute habe ich die C402 (Outdoor-Modell) gekauft, aber dort fehlt in den erweiterten Einstellungen ein Kamera-Account. Der niedrige Preis ist attraktiv, aber die Funktionskonsistenz lässt zu wünschen übrig. Falls jemand eine gute, günstige Outdoor-Kamera empfehlen kann, die RTSP-Streams unterstützt und sich mit einem Solarpanel betreiben lässt, wäre ich dankbar.
rtsp://nicht unterstützt, sollte es möglich sein,tapo://als go2rtc-Streamquelle zu verwenden. Ich habe meine Frigate-Konfiguration als Referenz hier hinterlegt.