Sichere Initialisierung von IoT-Geräten

Sichere Initialisierung von IoT-Geräten

Internetfähige Geräte müssen, wie der Name schon sagt, mit dem Internet verbunden werden. Die Verbindung mit dem Internet wird häufig, wie z.B. bei Amazon Echo, direkt über den WLAN Router hergestellt. Dazu muss der Nutzer dem Gerät Zugangsdaten zur Verfügung stellen. In vielen Fällen besitzen die Geräte keine Touchscreens oder andere direkte Eingabemöglichkeiten. Die Verbindung mit dem WLAN wird dann über ein anderes Gerät, meistens das Handy, hergestellt. Dies ist auch häufig bei IoT-Geräten der Fall. Doch wie lässt sich diese Initialisierung sicher gestalten?

Vertrauen zwischen Gerät und Nutzer

Bei der Initialisierung mit dem Handy über Bluetooth oder einen WiFi Access Point müssen folgende Punkte sichergestellt sein:

  • Die Verbindung zwischen dem Gerät und dem Handy muss verschlüsselt sein, da ansonsten die WLAN-Zugangsdaten abgefangen werden könnten.
  • Der Nutzer muss sicherstellen, dass er auch wirklich mit dem Gerät verbunden ist, dass er mit dem Internet verbinden will. Andernfalls, kann ein Dieb vorgaukeln, dass Gerät zu sein und nimmt dann die WLAN-Zugangsdaten entgegen.
  • Das Gerät muss sicherstellen, dass es auch mit dem eigentlichen Besitzer verbunden ist. Inbesondere bei Geräte die sensible Daten liefern (z.B. eine Kamera), ist dies wichtig. Ein Angreifer könnte sonst das Gerät kapern, wenn auch nur vorübergehend.
1.) Mobile App baut Verbindung auf und Gerät authentifiziert sich. 2.) App überprüft die Authentifizierung. 3.) App überträgt Zugangsdaten. 4.) Nutzer weißt Besitz nach. 5.) Gerät baut Verbindung zum Backend auf.

Eine sichere Verbindung zwischen Nutzer und Gerät

Da eine Funkverbindung zwischen Handy des Nutzers und dem Gerät besteht, ist diese grundsätzlich abhörbar. Die WLAN-Zugangsdaten oder andere sensiblen Informationen dürfen nur über eine abhörsichere Verbindung übertragen werden.

Ein typischer Stack zur Initialisierung sieht folgendermaßen aus:
Das Gerät erstellt zunächst einen WLAN Accesspoint. Dieser sollte nur solange offen sein, wie für die Initialisierung notwendig. Über diesen verbindet sich das Handy mittels einer mobilen App. Die App kommuniziert dann mit dem Gerät über eine leichtgewichtigen HTTP-Server, der auf dem Gerät läuft.

Die WLAN Verbindung muss über einen sicheren Standard wie z.B. WPA2-PSK abgesichert sein. Bei diesem speziellen Anwendungsfall kann die HTTP-Verbindung zwischen Gerät und Handy unverschlüsselt sein. Eine HTTPS Verschlüsselung wird nur notwendig, wenn beim Übertragen der Daten zwischen Client und Server ein Angreifer mithören kann. In diesem Fall gibt es aber eine direkte Verbindung zwischen Handy und dem Gerät die schon über WPA2 verschlüsselt ist. Voraussetzung ist aber, dass sich Nutzer und Gerät vor dem Datenaustausch gegenseitig identifizieren (siehe unten).

Fehlende Standards für die Initialisierung von IoT-Geräten

Unverschlüsselte HTTP-Verbindung lassen sich bei vielen Clients nur noch über Umwege herstellen. Eine HTTPS-Verbindung aufzubauen ist aber auch nicht einfach möglich. Gültige Zertifikate für IoT-Geräte gibt es nicht. Die Geräte haben keine eindeutigen Namen der sich für Zertifikate verwenden lässt. IP-Adressen als Subject in Zertifikaten sind auch möglich, werden aber auch nicht von allen HTTP-Clients unterstützt. Selbst-signierte Zertifikate funktionieren nur mit einer deaktivierten Zertifikatvalidierung auf Client-Seite. Obwohl die Geräteinitialisierung ein sehr häufiger Anwendungsfall ist, scheint es bisher hierzu keine Standardisierungsbemühungen zu geben. Im Gegenteil: Es ist eher denkbar, dass die mobilen HTTP-Clients in Zukunft restriktiver werden. Es ist sogar denkbar, dass gängige HTTP-Clients unverschlüsselte HTTP-Verbindungen in Zukunft vollkommen verhindern.

Geräte müssen eine Identität besitzen

Ein potentieller Angreifer könnte auf neue Accesspoints zur Initialisierung warten und dann vortäuschen, selbst der Accesspoint zu sein. Er wäre dann in der Lage, die WLAN-Zugangsdaten zu klauen.

Es ist daher unbedingt notwendig, dass das Gerät sich gegenüber den Nutzern (bzw. der mobilen App) authentifiziert. Dazu bekommt das Gerät schon von Werk aus eine Deviceidentität zugewiesen. Die Identität besteht entweder aus einem Public-Private Keypair oder aus einem symmetrischen Schlüssel, den nur das Gerät und ein Authentifizierungsservice im Backend kennen. Die mobile Anwendung stellt dann über diesen Service sicher, dass sie tatsächlich mit dem richtigen Gerät verbunden ist.

Eine sichere Deviceidentität auf Seiten des Gerätes zu realisieren stellt in der Praxis aber eine Herausforderung dar. Die Geräte haben in der Regel weder viel Rechenleistung noch viel Arbeitsspeicher zur Verfügung. Sichere Algorithmen zur Authentifizierung sind oft ressourcenintensiv. Mehr dazu gibt in einem unser anderen Blogbeiträge zu lesen.

Nachweisen, dass man der Besitzer ist

Nicht nur das Gerät muss sich dem Besitzer gegenüber authentifizieren, sondern der Besitzer sollte sich auch als Besitzer ausweisen. Tut er das nicht, könnte ein Angreifer versuchen das Gerät zu kapern, sobald die Initialisierung gestartet wird. Besonders bei Geräten, die sensible Daten liefern können, stellt dies ein Risiko da. Beispielsweise könnte ein Angreifer eine Smart-Home Kamera kapern, um das innere einer Wohnung auszuspähen.

Im Vergleich zu anderen Angriffen sind die Folgen jedoch weniger gravierend. Meist hat nur der Besitzer auch einen physischen Zugang zu dem Gerät und kann es im Ernstfall ausschalten. Der Nutzer wird von der App darüber informiert, dass das Gerät bereits einem anderen Nutzer zugewiesen wurde und kann darauf reagieren.

Da Gerätehersteller häufig nicht den endgültigen Besitzer kennt, muss dieser eine Möglichkeit haben, sich vom Angreifer zu unterscheiden:

  • Durch die physische Nähe zum Gerät. Eine Authentifizierung per NFC ist beispielsweise denkbar.
  • Einen Code (z.B. QR-Code) der dem Gerät beiliegt.

Beides ist für den Nutzer recht aufwändig. Wenn die kurzfristige Übernahme des Geräts keine große Gefahr darstellt, kann man auf diese zusätzliche Sicherheit zu verzichten. Z.B. ist es keine große Gefahr, wenn ein Temperatursensor von einem Angreifer ausgelesen wird. Die App bekommt bereits während der Initialisierung mit, dass der Sensor mit einem anderen Konto verknüpft wurde. Der Besitzer kann dann zu einem Reset aufgefordert werden.

Generell sollte jedoch die Verknüpfung eines Gerätes mit dem Besitzer so früh wie möglich stattfinden. Ein Beispiel sind Amazon Geräte, die bereits beim Kauf mit einem Konto verknüpft werden.

Ablauf der Initialisierung

Nach dem oben beschriebenen sieht der Initialisierungsflow also folgendermaßen aus (siehe auch Skizze weiter oben):

  1. Die mobile App verbindet sich mit dem Access-Point des Gerätes. Das Gerät überträgt dabei einen Nachweis über seine Identität
  2. Die mobile App überprüft die Gültigkeit der Geräteidentiät über einen Authentifizierungsservice
  3. Die mobile App überträgt die notwendigen Daten zur Initialisierung, insbesondere die WLAN-Zugangsdaten
  4. (Optional): Bevor das Gerät eine Verbindung aufbaut und Daten überträgt, verlangt es vom Benutzer einen „Besitznachweis“, z.B. über einen QR-Code
  5. Das Gerät baut eine Verbindung mit dem WLAN-Router auf

Fazit

Obwohl es ein häufiger Anwendungsfall ist, gibt es für die Initialisierung von IoT-Geräten bisher weder Standards noch Bibliotheken. Die Initialisierung ist ein sicherheitskritischer Vorgang. Immer wieder werden IoT-Geräte gehackt, bei denen der Initialisierungsflow nicht 100%ig durchdacht war. Wir haben uns drei Punkte angeschaut, die dabei zu beachten sind.

OneIoT bietet eine sichere Initialisierungslösung, mit individuelle Lösungen für diese Punkte. Die Entwicklung dazu war aufwendig und wir hoffen, dass es in Zukunft Standards entwickelt werden. Dadurch könnten Fehler bei der Initialisierung vermieden und die Aufwände für Gerätehersteller deutlich verringert werden.

Christof Tinnes

Christof Tinnes

Co-Founder

Kommentar verfassen