Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

Einleitung

Ein Hinweis vorab: diese Anleitung ist eher für technisch Interessierte, die mehr über die CoAP Kommunikation zwischen IKEA Tradfri Gateway herausfinden möchten, aber nicht notwendig, um IKEA Smart Home Geräte in Loxone einzubinden.

...

Die verschlüsselte Kommunikation wird dabei nicht über Zertifikate ausgehandelt, sondern initial über einen Security Code, der auf der Unterseite des Gateway aufgedruckt ist. Mit diesen Code kann ein CoAP Client z.B. die IKEA Smart Home App bei der Einrichtung ein Password für einen gewünschten User anfordern (bei der App nicht sichtbar), der für die nachfolgende Kommunikation beibehalten wird.

Erste Schritte

Mit der verlinkten sehr gut beschriebenen Anleitung https://github.com/glenndehaan/ikea-tradfri-coap-docs und dem Tool coap-client kann man sehr einfach die ersten Schritte selbst durchführen und die eigenen Geräte abfragen.

...

Neben einer Liste der Endgeräte kann man sich über unterschiedliche URIs eine Liste der Gruppen, Szenen/Stimmungen, Benachrichtigungen und Smart-Tasks ausgeben lassen. Über die jeweiligen instanceIDs kann man dann Details zu einem einzelnen Element einer Liste erhalten. Näheres steht alles in der verlinkten Anleitung, so dass ich mir hier Details spare.

Sniffing COAPS Protokoll

Richtig spannend wird es, wenn man die Kommunikation zwischen dem Client z.B. Node-RED und dem IKEA Tradfri Gateway per Wireshark mitsniffen möchte. Man kann so einen Mitschnitt z.B. über eine Portspiegelung auf dem eigenen Netzwerkswitch oder einer Fritzbox und dem Aufruf über die URL /html/capture.html erhalten. Zuerst sieht man nur verschlüsselte Pakete, denn das IKEA Tradfri Gateway spricht nur COAPS. Es gibt aber die Möglichkeit den Pre-Shared-Key in Wireshark zu hinterlegen, um den Datenverkehr im Klartext mitlesen zu können.

...

Wenn man die Lampen z.B. über die IKEA Fernbedienung ändert, dann wird ein Event an Node-RED gesendet, wie man in dem nachfolgenden Beispiel gut erkennen kann:

...

...

Sniffing IKEA Smart Home app

Da die IKEA Smart Home app die primäre Referenz für die Kommunikation zum Tradfri Gateway ist, wäre es natürlich super, wenn man diese Kommunikation ebenfalls mitlesen könnte.

Meine ersten Ideen dazu: Wenn man den Pre-Shared-Key aus der IKEA Smart Home App auslesen kann oder initial die Koppelung über den Security Code mitschneidet, dann könnte man vielleicht auch die Kommunikation zwischen IKEA Smart Home App und Tradfri Gateway mitlesen.

Die erste Variante habe ich nicht näher betrachtet, sondern gleich die 2. Variante ausprobiert. Ich habe also die IKEA Smart Home app von meinem Handy gelöscht und neu installiert. Dadurch werden lokal gespeicherte Informationen, wie z.B. pre-shared Keys gelöscht. Dann habe ich mich über die App wieder mit dem Gateway verbunden und wurde erwartungsgemäß zum Scannen des QR-Codes oder der Eingabe des Security Codes aufgefordert. Nachdem diese Informationen eingegeben waren, konnte ich wieder meine installierten Lampen sehen.

Dann habe ich das Capture mit Wireshark untersucht. Anfangs sah ich nur eine DTLS Kommunikation und Hello Pakete von beiden Seiten. Bei näherer Untersuchung stellte ich fest, dass eine verschlüsselte Kommunikation ausgehandelt wird. Die Authentifizierung, die ja bereits hier in der verlinkten Anleitung beschrieben war, lief bereits verschlüsselt ab. Ich habe nicht mal im RFC zu COAPS suchen müssen, sondern habe direkt gesehen, dass der Security Code ‘zufälligerweise’ die gleiche Länge hat, wie die pre-shared Keys. Ich habe daher das Capture gespeichert, den Security Code von ASCII in Hex umgewandelt und, wie oben beschrieben, in Wireshark eingetragen. Bingo! Jetzt konnte ich die Authentifizierung im Klartext mitlesen:

...

Am Anfang sieht man mehrere “Client Hello” und “Server Hello” Pakete, die Aushandlung der symmetrischen Verschlüsselung (ähnlich wie bei TLS, nur mit weniger Ciphers). Danach folgt die Authentifizierung, mit der der CoAP-Client ein Pre-Shared Key für einen gewünschten Usernamen anfordert. Hierfür sendet der Client die Property “9090” und den gewünschten (dynamisch gewählten) Username im JSON-Format an den CoAP-Server.

Nachfolgend ist die Antwort vom CoAP-Server näher erläutert:

...

Die Antwort im JSON-Format enthält die Property “9091” und den vom Server zufällig gewählten Pre-shared Key. Diesen Key kann man sehr einfach über die angegebenen Menüpunkte “Copy”, “…as Printable Text” in die Zwischenablage kopieren und speichern. Nachdem man diesen Pre-shared Key wieder von ASCII in Hex konvertiert hat und in Wireshark eingegeben hat, kann man endlich die Kommunikation zwischen App und Gateway mitlesen.

Sicherheit von COAPS

Auch wenn dieser Guide zeigt, wie man die verschlüsselte Kommunikation mitlesen kann, um z.B. die Kommunikation für neue Geräte zu verstehen, ist das Protokoll CoAPS sehr sicher. Nur wenn man die initiale Koppelung zwischen der App und dem Gateway, die über den Security Code erfolgt, mitlesen kann, ist eine Entschlüsselung möglich. Da die Kommunikation bei IKEA nur im lokalen LAN und (hoffentlich verschlüsselten) WLAN zu Hause stattfindet, ist die Sicherheit in der Praxis nicht gefährdet oder beeinträchtigt.

Viel Spaß beim Entschlüsseln der CoAP Kommunikation!