Skip to content

IoT, ESP8266 und Tasmota

Tasmota ist eine freie Firmware, mit deren Hilfe man günstige Cloud-only-Devices entgegen des Produktmanagements ihrer Hersteller cloudfrei im Heimnetz betreiben kann. Ursprünglich mit einem IR-Sender hier eingezogen, habe ich inzwischen sechs Devices (davon eins vermutlich nur noch als Briefbeschwerer tauglich) zusammen mit einem eingedockerten MQTT-Broker im Haus und bin so weit, Euch einen Bericht darüber zu schreiben.

Wie Ihr vielleicht wisst, leben wir seit 2014 in einem KNX-Haus. KNX ist ein international standardisierter, herstellerübergreifender Bus für die Hausautomatisierung, der sich im Bereich gewerblicher Immobilien seit vielen Jahren nahezu alternativlos durchgesetzt hat und dem ein ähnlicher Erfolg in Privathäusern aufgrund der zwischen abenteuerlich und unverschämt einzustufenden Preispolitik bis heute versagt geblieben ist. Um weiterhin herstellerunabhängig zu bleiben, haben wir die klassische Variante des KNX-Busses mit dem speziellen, parallel zur 230-V-Verkabelung verlegten Kabel gewählt. Aber ehe ich hier jetzt erstmal einen Artikel über KNX-Grundlagen schreibe, merke ich mir das für einen zukünftigen Artikel und komme zum für heute geplanten Thema zurück.

Angefangen haben meine Experimente mit Tasmota mit der besten vierstelligen Investition, die wir nach dem Einzug in unser Haus nachträglich getätigt haben: Der Klimaanlage. Die wird mit einer Infrarot-Fernbedienung bedient und das KNX-Interface hätte im oberen dreistelligen Bereich gelegen. Und dann kam die c't mit einem Artikel über die Nutzung einer Cloud-Fernbedienung mit MQTT.

Schnell war der Artikel bei Pearl in Südbaden bestellt, und nachdem er geliefert wurde habe ich ihn, ohne mich näher mit dem Mechanismus zu beschäftigen, umgeflasht und dann für ein halbes Jahr in die Schublade gelegt. Dann begab sich die Zeit, in der die Frau angefangen hat, das Wohnzimmer mit dem Küchenradio zu beschallen, was ich lästig finde weil man immer aufstehen muss um es abzuschalten (weil der Fernseher an ist oder das Telefon klingelt). Also wurde Projekt Nummer eins ein Fernabschalter für das Küchenradio und ich erinnere mich an den IR-Sender, der immer noch in der Schublade liegt.

Arduino ist eine quelloffene Physical-Computing-Plattform, die aufgrund ihrer Offenheit in Bastlerkreisen sehr beliebt ist. Man bekommt die flexiblen und in einer C-ähnlichen Hochsprache programmierbaren Kleinrechner für einstellige Eurobeträge, Dokumentation und simpel aufsteckbare Zusatzhardware gibt es an jeder Straßenecke. Mein erster Arduino-Einsatz war letztes Jahr beim Interface für den Regensensor, diese Lösung ist aber inzwischen schon weider außer Betrieb gegangen.

Der ESP8266 wurde ursprünglich als reiner WLAN-Controller für Embedded-Systeme entworfen, basiert auf demselben Microcontroller wie die Arduino-Welt und wurde von seinem Herseller vor ein paar Jahren so weit geöffnet, dass man den eigentlich ursprünglich nur für die WLAN-Bedienung gedachten Controller inzwischen mit denselben Werkzeugen wie einen Arduino programmieren kann. Als NodeMCU kann man das Ding für ein Viertel des Geldes kaufen, das man für ein Ethernet-Interface für einen Arduino hinlegen müsste (und wenn man das Interface hat, hat man noch nicht den Switchport gekauft). Ja, WLAN ist billiger als verkabeltes Netz. Pervers.

Jedenfalls ist es auf diese Weise dazu gekommen, dass nahezu jedes Cloud-IoT-Dingens, das man aktuell auf der Welt kaufen kann und das per WLAN angesprochen wird, auf Basis des ESP8266 gebaut ist. Und wo es schnell gehen muss, macht man die Entwicklung mit demselben Platinenlayout wie für das fertige Produkt und lässt die Lödpads für die Entwickler-Tools einfach drin. Das bedeutet für uns technikinteressierte Endkunden, dass man im Augenblick die Hardware-Grundlage für so manche interessante Bastelei für minimales Geld im Laden kaufen kann und nichtmal direkt "beim Chinesen" bestellen muss.

Für auf dem ESP8266 basierende Geräte hat sich die Firmware Tasmota als Plattform für alternative Nutzung beeindruckend entwickelt. Da ein ESP8266 im Wesentlichen ein ESP8266 ist und sich die Beschaltungmöglichkeiten des Herstellers in verhältnismäßig engen Grenzen halten, kann Tasmota mit einer Handvoll Builds nahezu das gesamte Universum der auf diesem Chip basierenden Geräte bedienen. Durch ein flexibles, auf Templates bsaierendes Abstraktionslayer kann man Tasmota, ohne den Compiler bemühen zu müssen, an seine vorhandene Hardware anpassen.

Für die meisten Geräte bedeutet die Installation von Tasmota, dass man sich Zugang zur seriellen Konsole des ESP8266 verschaffen muss, um ihn über diese Schnittstelle mit der alternativen Firmware und seiner Erstkonfiguration versorgen zu können. Die meisten ESP-Programmierer sind allerdings für die Verwendung für die Bastel-Version mit einer Pfostenleiste gedacht; man muss also in den meisten Fällen, wenn der ESP8266 fest eingebaut ist, löten oder andere Methoden verwenden. Es soll wohl auch spezielle Zangen geben, aber wie die funktionieren müsste mir mal jemand erklären.

Aber bei vielen Geräten ist nichtmal das notwendig. Damit die Produktentwicklung nochmal schneller geht, kann man als IoT-Hersteller einfach die Kombination aus Gerätefirmware und Cloud-Backend von Tuya einkaufen, die sich für kleines Geld instanziieren lässt und dann so aussieht, als hätte man Webfrontend und App selbst erstellt. So kommt es, dass ein nicht vernachlässigbarer Teil der heute käuflichen IoT-Geräte nicht nur eine auf dem ESP8266 aufbauende Hardware, sondern auch die Tuya-Firmware mitbringt. Und die hat den für uns nicht zu unterschätzenden Vorteil, dass sie unsicher ist und wir einen Exploit für unsere Zwecke benutzen können.

Die einfache, gar berührungslose Lösung ist von Michael Steigerwald von VTRUST, wurde auf dem 35C3 der Öffentlichkeit vorgestellt und dann in der c't genauer beschrieben und alltagstauglich aufbereitet. Kurz beschrieben, installiert man die Software auf einem Linux-System mit von hostap unterstütztem WLAN-Chip wie zum Beispiel einem Raspberry Pi 3 und versetzt das IoT-Device durch einen längeren Druck auf die meist vorhandene Taste in den Konfigurationsmodus. Manche Geräte erkennen auch automatisch, dass sie noch nicht konfiguriert sind und gehen automatisch in diesen Modus. Das Tool tuya-convert öffnet - Schritt 1 - ein WLAN mit passendem Namen und verwendet das Protokoll "SmartConfig", um sich Zugang zum Tuya-Device zu verschaffen. Das funktioniert nur, wenn bereits ein anderes WLAN-Gerät mit diesem WLAN verbunden ist. Dieses Gerät nimmt dabei nicht an der Kommunikation teil sondern dient nur dazu, das WLAN "oben" zu halten (und ist auch nicht gefährdet).

Anschließend flasht tuya-convert - Schritt 2 - eine etwas ältere Version von Tasmota auf das ESP8266-Device, das danach rebootet und einen eigenen WLAN-Hotspot öffnet. An diesen kann man nun - Schritt 3 - mit einem Notebook connecten und erhält ein Webinterface präsentiert, auf dem man die Zugangsdaten seines "eigentlichen" WLANs eintragen kann. Das Device rebootet dann noch einmal, connectet - Schritt 4 - an das "richtige" WLAN, holt sich per DHCP eine IP-Adresse aus dem LAN und ist fortan ein "normaler" Netzteilnehmer. In Schritt 5 kann man nun wieder auf das Webinterface connecten, mit einem Mausklick die Installation der aktuellen Tasmota-Firmware auslösen und das Gerät schließlich final konfigurieren.

In diesem Prozess liegt nun auch der Hase im Pfeffer, denn man legt in Schritt 3 den Key für das "eigene" WLAN offen - denn der von dem frisch geflashten Device geöffnete Hotspot ist unverschlüsselt und man trägt dort den WPA Personal Key des "richtigen" WLANs über eine http-Verbindung ein. Das kann im Prinzip jeder mitschneiden und hat dann den Key für das WLAN. Auch die Idee, dort zuerst den Key eines temporären WLANs einzutragen und darüber dann den "richtigen", ist nur im ersten Ansatz sinnvoll, denn wen man den Key des temporären WLANs hat, ist dessen Traffic zwar verschlüsselt, aber mitlesen kann man ihn trotzdem. Es führt keinen Weg daran vorbei: Hat man keine Möglichkeit, den WLAN-Key über eine Kabelverbindung in das Gerät hineinzubringen, wird man ihn bei der Einrichtung eines Tasmota-Gerätes kompromittieren.

Ich habe das für mich dadurch gelöst, dass ich die Ersteinrichtung im Stahlbetonkeller vorgenommen habe. Für einen ernsthaften Angreifer mit vernünftigen Antennen natürlich kein Hinderungsgrund, und weil mein nur semiprofessionelles Ubiquiti-WLAN keine weitere SSID mehr im 2,4 GHz-WLAN frei hat, müssen sich die Tasmotas dasselbe WLAN mit den "dummen" WLAN-Radios teilen.

Und wo wir gerade bei den Dingen sind, die der Netzwerk-Stack von Tasmota auch nicht kann, müssen zwei meiner Steckenpferde leider auch genannt werden: Tasmota kann weder IPv6 noch WPA Enterprise. Vielleicht ist das bei diesen winzigen CPUs und ihrem winzigen Speicher auch ein wenig zu viel verlangt; geade ein IPv6-Stack ist dann noch ein bisschen größer als ein simpler IPv4-Stack. Gerne würde ich die Tasmotas deswegen ein bisschen besser einsperren, stoße dabei aber an Grenze meines WLAN-Setups, und außerdem werden gerade die Tasmotas irgendwann mal mit der Hausautomatisierung sprechen müssen, was mir bei den prinzipbedingten Sicherheitsbedenken schon jetzt ein wenig Kopfschmerzen bereitet.

Die "Template" ist eine Konfigurationszeile, in der steht, welcher GPIO-Pin des ESP8266 mit welcher Funktion belegt ist. So lautet zum Beispiel die Template der WLAN-Steckdose Gosund SP111

{"NAME":"SP111 v1.1","GPIO":[56,0,158,0,132,134,0,0,131,17,0,21,0],"FLAG":0,"BASE":45}

Das ist ein magischer Gesang, den man sich für die meisten Geräte ergoogeln kann. Da ist mehr Magie drin wie es aussieht; nach der Eingabe der Template wächst auf dem Webinterface des SP111 ein großer Toggle-Button, mit dem man das Gerät über das Webinterface ein- und ausschalten kann und eine Liste von Meßwerten.

Aber der eigentliche Zugriff auf ein tasmotisiertes IoT-Device läuft über MQTT. Dabei gibt man dem Tasmota-Device den Namen des MQTT-Brokers und ggf die Zugangsdaten, und schon ist das Device über MQTT ansprechbar und meldet seine Telemetriedaten automatisiert dorthin. Auch hier wieder ein Wermutstropfen: In die ganz kleinen ESP8266-Devices passt kein Tasmota mit TLS-Support. Größere können das aber, und ich habe es auch noch nicht ausprobiert.

Nachdem ich den Vortrag von Michael heute früh noch einmal angesehen habe, muss ich noch eine eindringliche Warnung hier loslassen: Dass man Tuya- und andere ESP8266-basierende IoT-Geräte so einfach "befreien" kann, ist neben der wirklich interessanten positiven Möglichkeiten natürlich genau so eine Gefahr wie die Ab-Werk-Unsicherheit der Geräte. Niemand von Euch kann wissen, was die Geräte im Auslieferungszustand an "undokumentierten" Features mitbringen. Michaels Interesse an den Geräten begann damit, dass er den WLAN-Key unverschlüsselt im Flashspeicher seiner ESP8266-LED-Lampe fand, und selbst wenn er ihn dort nicht unverschlüsselt gefunden hätte, hätte die Lampe ihn trotzdem irgendwo ablegen MÜSSEN damit sie an das WLAN connecten kann. Und die zur Lampe gehörende App meldet unter anderem die Geokoordinaten des WLANs in die White-Label-Herstellercloud und an den Hersteller der Lampe, der auf diese Weise den Zugang zu Deinem WLAN bekommen hat. Den braucht er aber gar nicht, denn er kann sowieso beliebigen Schadcode auf deine Lampe hochladen. Und wenn Du das Device nicht direkt vom Hersteller bekommen hast, weißt Du auch nicht, ob Dein Device überhaupt die Herstellerfirmware drauf hat, oder ob das Gerät von irgend wem in der Lieferkette (die ja auch die Auslieferung und Rückgabe an und von einen anderen Kunden beinhalten könnte) mit undokumentierten "Features" angereichert wurde.

Und natürlich muss man auch Tasmota vertrauen, dass die Binärdownloads auch genau das tun, was im veröffentlichten Quelltext steht. An gewissen Sicherheitsmaßnahmen führt also gar kein Weg vorbei, und komplett sicher bekommt man es mit vertretbarem Aufwand so oder so nicht.

Hier jetzt für heute erstmal Schluß, die konkrete Anwendung und die bei mir etablierten Sicherheitsmaßnahmen bekommen einen eigenen Artikel.

Trackbacks

No Trackbacks

Comments

Display comments as Linear | Threaded

Thilo on :

Hast du mal den Eigenverbrauch der Stecker gemessen?

Marc 'Zugschlus' Haber on :

Der Gosund SP-111 V1.1 braucht "Aus" etwa 0,4 Watt und "Ein" etwa 0,7 Watt. Bitte mit einem Pfund Salz sehen, ich messe mit einem Energy Master Basic; solche Geräte sind in so niedrigen Größenordnungen nicht unbedingt genau.

Add Comment

Markdown format allowed
Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.
E-Mail addresses will not be displayed and will only be used for E-Mail notifications.
Form options