Smarte Glühbirne "Xiaomi Yeelight" verrät WLAN-Zugangsdaten
Die Einen lieben sie, die Anderen halten sie für die überflüssigste der
modernen Errungenschaften, aber wenige sind sich bewusst dass "Smart
Home"-Produkte leicht auch zum Einfallstor in das heimische WLAN werden
können.
Ein Beispiel für unzureichende Sicherheit im Internet der Dinge
liefert das LED-Leuchtmittel Yeelight RGBW des Herstellers Xiaomi.
Angreifer können die privaten WLAN-Zugangsdaten des Benutzers erhaschen, im
wörtlichen Sinn: der kryptographische Schlüssel der smarten Glühbirne leitet
sich aus dem MD5-Hash einer Gerätekennung ab.

https://github.com/openmihome
Normalbetrieb
Das Yeelight RGBW ist ein LED-Leuchtmittel mit WLAN-Funktion. Der Benutzer
kann es mit einer MiHome genannten Android-App steuern. Bevor das funktioniert, muss das
Leuchtmittel jedoch in das heimische WLAN eingebunden werden. Diesen Vorgang
nennt Xiaomi auch "SmartConnect".
Aus Benutzersicht läuft es so:
- Benutzer gibt WLAN-Zugangsdaten in MiHome-App ein.
- Das Yeelight verbindet sich zum WLAN.
- Fertig.
Die MiHome-App muss beim Erstkontakt mit dem Yeelight die WLAN-Zugangsdaten übertragen. Dieser Vorgang ist leider unsicher.

Security by obscurity
Was geschieht hinter den Kulissen?
Im Auslieferungszustand öffnet das Yeelight einen WLAN-AP, wie iwlist scan
zeigt:
Cell 01 - Address: F0:B4:29:XX:XX:XX
Channel:6
Frequency:2.437 GHz (Channel 6)
Quality=70/70 Signal level=-34 dBm
Encryption key:off
ESSID:"yeelink-light-color1_xxxxxxxx"
Beim Erstkontakt verbindet die MiHome-App das Smartphone mit diesem
Netzwerk und erhält per DHCP die IPv4-Adresse 192.168.13.2. Das Yeelight selbst
belegt 192.168.13.1. Ein Scan dieser IP mit nmap
offenbart leider keinen
erreichbaren TCP-Port.
Ein Traffic-Dump mit Wireshark ist ernüchternd. Augenscheinlich
handelt es sich um proprietäres Protokoll auf UDP-Port 54321.

Dieses Protokoll wird sowohl bei der Initialisierung als auch später zur
Steuerung benutzt. Es hat dieses Format;
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Magic number = 0x2131 | Packet Length (incl. header) |
|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
| Unknown1 (const) |
|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
| Unknown2 (const) |
|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
| Stamp (counter) |
|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
| MD5 checksum |
| ... or Device Token in response to the "Hello" packet |
|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
| optional variable-sized data (encrypted) |
|...............................................................|
Eine detaillierte Beschreibung findet sich im Git-Repository.
Kurzfassung:
- MiHome verbindet sich zu diesem offenen WLAN
- MiHome sendet ein "Hallo"-Paket an Yeelight
- Yeelight antwortet mit 128-bit Gerätekennung (
Token
)
- MiHome errechnet AES-Parameter aus
Token
- MiHome sendet WLAN-Zugangsdaten verschlüsselt an Yeelight
- Yeelight schließt den offenen AP
- Yeelight verbindet sich zum WLAN
Die Verschlüsselung leitet sich aus dem Token
ab.
Key = MD5(Token)
IV = MD5(MD5(Key) + Token)
PKCS#7 padding
Cipher Block Chaining (CBC).
Kritisch sind also die Punkte 3) bis 5). Das Token
wird auf dem initialen,
unverschlüsselten WLAN-AP übertragen. Ein Angreifer kann es problemlos
abhören, daraus die AES-Parameter errechnen, und die WLAN-Zugangsdaten in
Schritt 5) entschlüsseln.
Proof-of-concept code habe ich auf Github eingestellt. Das Skript extrahiert und entschlüsselt das Protokoll zwischen Yeelight und MiHome-App.
./pcap-decrypt.py wlan0.pcapng.gz
### 192.168.13.2 (xx:xx:xx:xx:xx:xx) => 192.168.13.1 (yy:yy:yy:yy:yy:yy)
DECRYPTED: {"id":1234567890,"method":"miIO.config_router",
"params":{"ssid":"WiFi name","passwd":"WiFi password","uid":987654321}}
Fatal ist auch, dass die Birne im Werkszustand immer nur auf Kanal 6 aktiv ist.
Ein Angreifer kann so mit nur einem einzigen WLAN-Adapter im Monitor Mode und
einer großen omnidirektionalen Antenne problemlos sämtliche Yeelights im
Umkreis von einigen hundert Metern erfassen.
Aus der Yeelight WiFi Light Inter-Operation Specification:
When user received the smart LED device for the first time, he/she
needs to complete a configuration procedure to provision the router's
SSID and password to the device. This procedure is normally called
SmartConfig or QuickConnect. Due to security consideration, the
protocol used for SmartConfig is proprietary
Links
Verwandte Projekte