- Zwei Cybersicherheitsstudenten versuchten aus Spaß und als Herausforderung, eine Waschmaschine zu hacken
- Durch Reverse Engineering der mobilen App der Waschmaschine untersuchten sie die API und das Verschlüsselungsverfahren
- Sie fanden den XOR-Verschlüsselungsschlüssel und implementierten eine Methode, um Statusdaten der Waschmaschine in Echtzeit zu lesen und zu entschlüsseln
- Mit einem Discord-Webhook bauten sie einen Benachrichtigungs-Bot, der den Betriebsstatus der Waschmaschine und Fertigmeldungen automatisiert
- Künftig planen sie, ähnliche Smart-Home-Automatisierung auch auf andere „dumme“ Haushaltsgeräte anzuwenden
Einleitung
- Der Autor startete zusammen mit einem Freund im neu bezogenen Haus ein Projekt zum Hacken einer Waschmaschine
- Ziel war weniger reiner praktischer Nutzen als vielmehr Spaß und technische Herausforderung
- Ausgangspunkt war die Neugier, die Waschmaschine und andere Haushaltsgeräte an ein Smart-Home-System anzubinden
- Die dabei gewonnenen Erfahrungen durch eigenes Hacken halfen auch als praktische Übung im Reverse Engineering
Hintergrund
- Im Haus war standardmäßig eine smarte Waschmaschine mit Wi‑Fi-Unterstützung installiert
- Diese Waschmaschine kann über eine mobile App Fortschrittsbenachrichtigungen senden
- Da immer nur eine Person gleichzeitig die App koppeln kann, ist die gemeinsame Nutzung unpraktisch
- Der Autor sah darin eine Gelegenheit und entschied sich, es so umzubauen, dass mehrere Personen Statusmeldungen ohne die Einschränkungen der App erhalten können
Das Türklingel-Beispiel
- Die Türklingel im Haus nutzt ein System, das Benachrichtigungen über 433-MHz-Funksignale sendet
- Ein Freund baute ein System, das das Klingelsignal erkennt und Benachrichtigungen an einen Discord-Server sendet
- Es wird zusammen mit dem echten Klingelton genutzt und dient auch als Backup-Benachrichtigung
- Dieser erfolgreiche Anwendungsfall führte zu dem Versuch, auch die Waschmaschine auf ähnliche Weise in automatische Benachrichtigungen einzubinden
Plan und Vorbereitung
- Der Autor wollte die mobile App per Reverse Engineering analysieren, um das Verhalten der API zu verstehen
- Um Netzwerkverkehr direkt von der smarten Waschmaschine aufzuzeichnen, wurde ein OpenWRT-Router eingesetzt
- Die Waschmaschine wurde vorübergehend mit einem temporären Wi‑Fi verbunden, um per Packet Capture Kommunikationsmuster zu untersuchen
Analyse des Waschmaschinen-Traffics
- Die Waschmaschine sendet und empfängt Traffic über mehrere Wege: ihre eigene IP, 255.255.255.255 (Broadcast), externe Server (HTTP-API, verschlüsselter Traffic) sowie direkte HTTP-Kommunikation mit der App (Port 80)
- Besonderes Augenmerk lag auf dem Teil der direkten Kommunikation mit der mobilen App, der deshalb gezielt analysiert wurde
Reverse Engineering der Waschmaschinen-API
- Die App nutzt wiederholt zwei Endpunkte: /http-read.json?encrypted=1 (Status lesen) und /http-write.json?encrypted=1 (Befehle senden)
- Im Fokus stand der Lese-Endpunkt, doch die Antwortdaten sind verschlüsselt (HEX, HTML-Typ)
- Selbst mit dem Query-Parameter
encrypted=0 kam es nur zu fehlgeschlagener Entschlüsselung oder einem 400-Fehler
Analyse der Verschlüsselung und Beschaffung des Schlüssels
- Unter der Annahme, dass es sich um eine einfache XOR-basierte Verschlüsselung handelt, wurde mit Online-Tools wie CyberChef ein Brute-Force-Angriff versucht
- In einem Referenzprojekt (CandySimplyFi-tool) fand der Autor Code, der den Schlüssel bereits erfolgreich extrahiert hatte, und konnte damit innerhalb weniger Sekunden den Schlüssel rekonstruieren und die Daten entschlüsseln
- Um das Datenschema weiter zu verstehen, wurde außerdem der Open-Source-Code von ofalvai/home-assistant-candy herangezogen
Experimente mit Waschmaschinen-Statuswerten
- Bei verschiedenen physischen Bedienhandlungen an der Waschmaschine (Programmwechsel, Temperatur- und Geschwindigkeitsanpassung, Start/Stopp/Ende) wurden die Änderungen in den Daten beobachtet
- Wichtige Felder der Statuswerte:
- Pr: Status des Programmwahlknopfs
- PrPh: laufender Waschzyklus
- Temp: eingestellte Temperatur
- SpinSp: eingestellte Schleuderdrehzahl
- RemTime: verbleibende Zeit (in Minuten, teils mit feststehendem Wert von 10 Minuten)
- Nachteil: Einige Werte, etwa SpinSp, können vom tatsächlichen Wert abweichen
Entwicklung des Automatisierungsskripts für Benachrichtigungen
- Die Implementierung von API-Schema, Verschlüsselungsschlüssel, Datenlesen und -entschlüsselung sowie Statuserkennung wurde abgeschlossen
- Anschließend wurde ein Benachrichtigungs-Bot-Skript mit Discord-Webhook erstellt
- Wichtige Ablauffolge:
- Waschmaschine pollen
- Wenn es keine Statusänderung gibt, schlafen und wiederholen
- Bei erkannter Änderung die letzte Nachricht aktualisieren oder eine neue Nachricht senden
- Wiederholen
Abschluss und weitere Pläne
- Die Automatisierung von Türklingel- und Waschmaschinen-Benachrichtigungen wurde bereits erfolgreich umgesetzt
- Als Nächstes sind ähnliche Automatisierungen für Geschirrspüler, Trockner, Fernseher usw. geplant, etwa mit Smart Plugs, Vibrationssensoren oder IR-Blastern
- Auch ein einfaches Sicherheitssystem mit Webcam soll testweise aufgebaut werden
Fazit
- Durch dieses Projekt eignete sich der Autor Grundlagen in praxisnahem IoT-Reverse-Engineering und einfachem Smart-Home-Hacking an
- Es war ein Beispiel, das sowohl praktischen Nutzen als auch Spaß bot
1 Kommentare
Hacker-News-Kommentare
Vorab: Das ist nicht als Kritik am Originalbeitrag gemeint. Ich finde, er zeigt den wirklich faszinierenden Prozess der Geräteanalyse großartig.
Wenn das Gerät mit einer Android-App kommuniziert, empfehle ich apk-mitm.
Das Tool entfernt aus einer APK fast alle bekannten Formen von Certificate Pinning und schreibt außerdem das Manifest so um, dass lokale Zertifikate auch ohne Root verwendet werden können.
Wenn man die Original-App löscht und anschließend das Ergebnis von apk-mitm per Sideload installiert, kann man
mitmproxyauf einem ganz normalen Stock-Gerät verwenden.Wichtig ist auch: Wenn die App verschlüsselte Daten empfängt und sie dann entschlüsselt anzeigt, befindet sich der Schlüssel irgendwo in der App oder wird von irgendwoher geladen.
Wenn man die APK mit jadx analysiert, kann man sie fast wie Java-Code ansehen und den Schlüssel oft finden.
Manche Hersteller verlagern die Kryptologik allerdings in nativen Code; dann muss man mit Ghidra oder Ähnlichem reverse engineeren.
Dieser Prozess kann extrem langweilig sein oder wahnsinnig viel Spaß machen.
Der Autor baut zwar auf vorhandenen Forschungsergebnissen anderer auf, aber ich denke, selbst wenn noch niemand so etwas gemacht hat, lohnt es sich absolut, nicht aufzugeben und es zu versuchen.
Am Ende kann man viel lernen, indem man aufklärt, wie ein Gerät funktioniert, das einem selbst gehört.
Irgendwann wurde dann der Serverzugang blockiert. Dabei bin ich zufällig auf Certificate Pinning gestoßen, habe dieses Repo ausprobiert und das Problem wurde wirklich sauber gelöst.
Nebenbei wurden wohl auch alte Werbe-URLs blockiert, sodass keine Werbung mehr angezeigt wurde.
Die Entwicklerfirma hat die App ohnehin nur immer weiter verschlechtert, daher habe ich damit kein Mitleid.
Ich nutze eine Bosch-Waschmaschine, um — anders als im Originalbeitrag — den Fortschritt der Maschine vom anderen Ende des Hauses aus zu überwachen.
Dank der Bosch-API kann ich sehen, ob der Waschgang beendet ist und ob die Tür geöffnet wurde.
Im Moment verwende ich noch die Standard-API-Version, aber der PoC ist abgeschlossen und ich werde als Nächstes auf eine lokal gehostete Option umsteigen.
Mit Home Assistant gilt: Wenn der Waschgang beendet ist, die Tür aber nicht geöffnet wurde, bedeutet das, dass die nasse Wäsche noch drin ist.
Deshalb habe ich eingerichtet, dass mein Handy — und das Handy meiner Frau, aber nur wenn sie zu Hause ist — alle 15 Minuten eine Wäsche-Erinnerung bekommt.
Sehr simpel und funktioniert perfekt.
Meine Waschmaschine ist ein altes Modell aus den 90ern und arbeitet über einen Timer-Drehknopf.
Keine Computer, keine Sensoren; ich erkenne nur zusätzlich die Wasserfüllphase.
Ich stelle einfach immer 40 Minuten ein, und damit ist die Sache erledigt. Sogar eine Alarm-aus-Funktion gibt es — einfacher geht es kaum.
So etwas Ähnliches plane ich auch für einen kleinen Ofen.
Es gibt keine API und keine Konnektivität, aber er steckt an einer Smart-Plug, über die ich den Stromverbrauch messe, um Leerlauf- und Betriebszustand zu überwachen und Benachrichtigungen auszulösen.
Ich lasse die Waschmaschine oft vor dem Schlafengehen laufen und verschiebe das Ausräumen dann auf den nächsten Tag. Meine Maschine hat eine Funktion wie „verlängertes Drehen“, die die Wäsche über Nacht frisch hält.
Das verbraucht etwas mehr Wasser, rettet aber meine Abendroutine und hilft außerdem dabei, Nachtstrom zu nutzen.
Ich mag meine Electrolux wirklich sehr, und ich vermute, dass andere Hersteller etwas Ähnliches anbieten.
Ich benutze seit über 15 Jahren eine G-Shock 5600 als Timer-Erinnerung für die Waschmaschine.
Wenn ich die Wäsche starte, stelle ich einfach die Gesamtdauer im Timer der Uhr ein, und wenn sie fertig ist, piept sie.
Funktioniert unabhängig von APIs und unabhängig von der Marke.
Wirklich eine elegante Lösung.
Einfache Logik, aber mit eindeutig spürbarem Nutzen im Alltag.
Ich bastle gerade an einem Hardware-Hack für einen Kühlschrank.
Nicht softwareseitig: Es ist ein teurer Kühlschrank für ein Wohnmobil, der Gas/12v/220v unterstützt.
Die Elektroniksteuerung ist abgebrannt und hat Kabel sowie Innenteile beschädigt, aber der Kühlschrank selbst ist noch in Ordnung.
Da ohnehin alle Teile ersetzt werden müssten, will ich statt für 250 Dollar ein neues Control Board zu kaufen lieber Komponenten aus alten Gasboilern kombinieren und durch ein neues System ersetzen.
Auf dem Boiler-Motherboard ist die komplette Zündelektronik bereits vorhanden; wenn ich die Logik und die Sicherheitsmechanismen sauber hinbekomme, sollte sich der Gasbetrieb damit realisieren lassen.
So muss ich keinen neuen Kühlschrank kaufen und habe gleichzeitig ein gutes Projekt, um meinem neunjährigen Sohn Elektronik beizubringen.
Natürlich ist Gas gefährlich, aber am Ende macht so etwas immer Spaß, und wenn der Hack fertig ist, verstummt auch die Kritik.
Wenn Interesse besteht, könnte ich den gesamten Verlauf als eigenen Beitrag dokumentieren.
Ich habe an Waschmaschine und Trockner einen Zigbee-Vibrationssensor angebracht und in Home Assistant eingebunden.
An die Überwachung von Strom/Spannung über eine smarte Steckdose hatte ich noch gar nicht gedacht, finde das aber eine gute Idee.
Mit einfachen Trigger-Bedingungen werden Dashboard-Updates und E-Mail-Benachrichtigungen beim Start und Ende des Waschgangs automatisch ausgelöst.
Es gibt zwar auch App- und Bluetooth-Funktionen, aber die App verlangt Zugriff auf Kamera, Audio und Kontakte meines Handys, deshalb werde ich sie nicht benutzen.
An einer HA-Integration wurde offenbar auch unter dem folgenden Link gearbeitet.
https://github.com/home-assistant-HomeWhiz/home-assistant-HomeWhiz/blob/main/README.md
Solche Beiträge sind für mich die Essenz von Hacker News.
Ich wünschte, es gäbe wieder mehr solche Artikel über echtes Hacking im Sinne von Hobby-Modding; gefühlt besteht inzwischen alles nur noch aus AI-/LLM-Themen.
Wer Hardware-Hacks dieser Art mag, dem kann ich auch https://hackaday.com/ sehr empfehlen.
Auf einem nicht gerooteten Android ist das Installieren eigener Zertifikate eher umständlich.
Man kann sie nur dem System-Zertifikatsspeicher hinzufügen, und dafür braucht man meist ein Magisk-Modul.
Ein einfacherer Weg ist, einen alten Android-Emulator auf dem PC zu starten, dort das Zertifikat zu installieren und den Traffic an BurpSuite oder
mitmproxyweiterzureichen.Dann muss man auch kein Gerät tauschen.
Mit APKLab oder Jadx sollte man immerhin den Algorithmus zur Schlüsselableitung im App-Code finden können.
Ich frage mich, ob App und Waschmaschine wirklich nur funktionieren, wenn beide im selben Netzwerk sind — genau dieser Teil gefällt mir.
Die Erwähnung eines „3-Stunden“-Waschgangs, der in Wirklichkeit 4–5 Stunden dauert, hat mich überrascht.
Meine Waschmaschine braucht im normalen Eco-Modus keine 30 Minuten und meldet sich danach mit einem sehr lauten Signalton.
Durch die Kombination aus kurzem Waschgang und Signal brauche ich keine separate komplizierte technische Lösung.
Der Kommentator ist vermutlich in den USA.
Europäische Waschmaschinen laufen wegen der strengeren Anforderungen an Wasser- und Stromverbrauch länger.
Das Gerät im Beitrag scheint außerdem eine Wasch-Trockner-Kombination zu sein, was die Dauer zusätzlich erhöht.
Bei uns dauert sogar der normale Modus 104 Minuten, und bei Überladung kann es bis zu 3 Stunden werden.
Lange Waschzyklen sind wirksamer gegen Mikroorganismen, wenn Enzyme und sauerstoffbasierte Bleichmittel verwendet werden.
Ein 30-Minuten-Programm spült die Wäsche im Grunde nur durch.
https://pubmed.ncbi.nlm.nih.gov/25207988/
Mein Trockner ist ein Modell ohne Abluftschlauch — praktisch ein einziger Frust — und braucht deshalb 3 Stunden.
Von Waschen bis Trocknen gehen insgesamt 4,5 Stunden drauf.
Er ist das unbefriedigendste Haushaltsgerät, das ich je benutzt habe.
Manchmal wird die Wäsche nicht einmal richtig trocken.
Jemand weist darauf hin, dass keine Verschlüsselung zu erkennen sei.
Die Daten im Input-Fenster des ersten Screenshots (
cyberchef.avif) wirkten wie einfacher unverschlüsselter Hex-ASCII.Als Beispiel wurden Deutungen genannt wie
7D={,0D0A=CRLF,09=TAB,22="usw.Mit anderen Worten: Es sehe nach dekodiertem Klartext aus, und die Erklärung mit XOR-Verschlüsselung wirke deshalb nicht stimmig.
Außerdem passe der im Screenshot gezeigte Schlüsselwert weder zu Byte-Grenzen noch zur Ausrichtung und stimme auch nicht mit den tatsächlichen Lücken im Input überein.
Daher kam die Frage auf, ob der Screenshot manipuliert oder bearbeitet worden sein könnte.
Der Kommentator fragte, was genau der Grund sei und was dort eigentlich passiert.
Es wird darauf hingewiesen, dass der Bildlink mit der Beschriftung „For now, I plugged this key into CyberChef, and was able to decrypt the data.“ kaputt ist.
Dazu wurden sogar das betreffende HTML-Element und der zugehörige Link im Detail genannt.
Zur Aussage „Die Waschmaschine hat extrem viel mit sich selbst kommuniziert“ meinte jemand, das wirke so, als hätte der Designer des Netzwerk-Stacks das Konzept eines Loopback-Interfaces nicht gekannt.
Es wurden viele Pakete an die eigene IP gesendet, außerdem Pakete pro Sekunde an
255.255.255.255; der Kommentator sagte aber, er habe dem keine große Bedeutung beigemessen.Ich habe dieses Verhalten bei IoT-Geräten oft gesehen; es wird manchmal verwendet, um IP-Konflikte oder Änderungen zu erkennen.
Ich denke in eine ähnliche Richtung.