Matter

From Embedded Lab Vienna for IoT & Security
Revision as of 22:32, 27 January 2024 by MArcilla (talk | contribs)
Jump to navigation Jump to search
Logo of Matter[1]

Matter ist ein offener Standard, der von der Arbeitsgruppe "Project Connected Home over IP" (kurz CHIP) seit 2019 entwickelt und im Oktober 2022 erstmals publiziert wurde. Er soll die Kommunikation zwischen Geräten diverser Hersteller wie Google, Samsung, Apple und Amazon ermöglichen und damit die Grenzen bestehender Smart-Home Netze erweitern.

Protokoll

Es handelt sich um ein Application-Layer-Protokoll, welches auf Netzwerkprotokolle wie IPv6, Thread und BLE aufsetzt. Um von IP-Netzwerken auf z.B. Thread- oder BLE-basierte Geräte zugreifen zu können werden Bridges benötigt, welche die Netzwerklayer übersetzen.


The Matter Stack in the TCP/IP and OSI Model


Matter Virtual Device

Das Google Developer Center stellt Resourcen zur Entwicklung von Matter-basierten Geräten wie einer Sample App zum Verbinden von Matter-Geräten [2] oder virtuellen Matter-Geräten [3] zum Testen der Schnittstellen bereit.

Ein Matter Virtual Device (MVD) ist eine Emulation eines Matter Devices und simuliert das Verhalten eines Gerätes z.B. das Ein-/Ausschalten eines Lichtschalters.

Möglichkeiten

Das Virtual Device kann man über mehrere Wege bauen und starten. Dazu wurden insgesamt drei Möglichkeiten gefunden:

  • Standalone
  • Docker Image
  • GitHub Repository

Es hat sich herausgestellt, dass das Standalone am Besten geeignet ist, um schnell ein MVD einzurichten. Dazu wird eine Umgebung mit einem 64-bit x86 Prozessor und mindestens Debian 11, Ubuntu 20.04 oder MacOS benötigt.

GitHub Repository

  1. git clone https://github.com/project-chip/connectedhomeip
  2. Initialisieren des Matter-Projektes durch "source scripts/activate.sh"

Diese Variante wurde nicht weiter verfolgt, da das Repository rekursiv aufgelöst wird und das Klonen und Ausführen daher sehr viel Zeit in Anspruch nimmt.

Docker Image Repository

  1. docker pull us-docker.pkg.dev/nest-matter/docker-repo/virtual-device-image:latest

Dieser Ansatz lädt ein Docker Image herunter, welches größer als 10GB ist. Entpackt hat es dann mehr als 30GB und ist daher als schneller Ansatz für die Entwicklung mit Matter-Geräten ebenfalls nicht tauglich.

Standalone

Das Standalone-Matter-Device wurde relativ neu von Google publiziert, lässt sich aber sehr einfach aufsetzen. Durch seine vergleichsweise geringe Größe mit weniger als 70MB ist es einfach herunterzuladen und ist innerhalb weniger Minuten lauffähig.

Rjqabwb.png

Installationsschritte (Debian/Ubuntu)

  1. wget https://dl.google.com/mvd/mvd_1.3.0_amd64.deb
  2. sudo dpkg -i mvd_1.3.0_amd64.deb
  3. mvd

Es öffnet sich eine GUI, womit man ein MVD erstellen kann.

MVD-Create.png

Beim neuen Fenster kann man einige Einstellungen bezüglich des Gerätes konfigurieren:

  1. Device Type - Man kann mehrere Arten von Smart Home Geräten simulieren
  2. Vendor ID - Eindeutige zertifierte ID für den Händler (Mögliche Werte in der Entwicklung: 0xFFF1, 0xFFF2, 0xFFF3 and 0xFFF4)
  3. Product ID - Eindeutige zertifizierte ID für das Produkt (Mögliche Werte in der Entwicklung: 0x8000 bis 0x801F)
  4. Discriminator - Im Fall, dass im Netzwerk das gleiche Produkt mehrmals auftritt, kann über den Discriminator unterschieden werden.

Controller GUI

Um mit dem Matter Device zu kommunizieren, wird eine GUI benötigt. Dazu gibt es wieder zwei Möglichkeiten:

Internal GUI über RPC

Das Standalone MVD wird mit einer integrierten GUI geliefert, wobei das Gerät auf einem anderen Port (RPC-Port: 33000) angesprochen wird, als den Matter Port (Matter-Port: 5540). Sobald das MVD erstellt wurde, öffnet sich die Control-UI für das simulierte Gerät.

MVD-GUI.png

GUI über Mobile App

Das Google Developer Center hat ein CodeLab[2] zur Verfügung gestellt, womit man eine simple Kotlin-App für die Steuerung von Matter Geräten entwickeln kann. Dazu kann man ein Skeleton herunterladen und das Tutorial begleitet den Entwickler, um etwaige fehlende Code-Stellen zu implementieren, die mit dem Kommentar "// CODELAB:" versehen sind.

Diese App wurde dann mittels USB-Debugging auf ein Handy gestartet.

MVD-KotlinCode.png

req0VHX.png

8jGIO3T.png


Connection

Um sich am Handy mit einem Matter Gerät zu verbinden, braucht man folgende Voraussetzungen:

  • Android Version - Version >= 8.1
  • Google Play Service - Version >= 22.36.15
  • Google Home App - Installiert
  • Steps

  • Zur Überprüfung, ob das Handy bereit ist, Matter Geräte zu verbinden, wird geschaut ob unter Einstellungen -> Google -> Devices and Sharing die Auswahl Matter devices existiert.
  • Falls nicht, sollte man versuchen die Google Home App neu zu installieren, da beim Download von dieser App gleichzeitig auch die benötigten Dependencies heruntergeladen werden, um sich mit einem Matter Gerät zu verbinden.
  • Matter-DevicesAndSharing.png Matter-Devices.png

  • Sofern dieser Schritt geschafft worden ist, wird im MVD-Controller GUI ein QR-Code generiert.
  • MVD-QR.png

  • Auf der App wird auf das + Symbol geklickt und es öffnet sich ein neues Fenster, wo man mit der Kamera den QR-Code scannen kann.
  • Matter-Scan.png

  • Beim Verbinden des Gerätes sollte stehen, dass es Matter Credentials erstellt, Commissioned und schlussendlich auch verbunden ist.
  • Matter-Connected.png

  • Security Aspekt

    Dieses Thema wurde im Rahmen des Wahlfachprojektes 2 vorgestellt. Die Aufgabe bestand darin, mit dem MVD einen Angriff nachzustellen und zu zeigen, dass dieser daher bereits während der Entwicklung erkennt und mitigiert werden könnte. Aufgrund der Neuheit des Standards ist dieser aber noch nicht in der Breite etabliert und daher sind auch noch wenige Vulnerabilities und Exploits bekannt. Daher konnten wir nur eine DoS Attacke ausprobieren und damit den Zugriff auf das MVD verhindern. Eine Differenzierung, ob es dabei zu einem DoS des Gerätes selbst oder der ausführenden Plattform kam, konnte nicht evaluiert werden.