Test der 'Netatmo Welcome' Smart Camera

Netatmo Welcome ist eine intelligente Kamera, die Gesichter erkennen, Aufnahmen in die Cloud streamen oder den Besitzer im Falle eines Einbruchs alarmieren kann. Im Rahmen laufender Forschungen zur Sicherheit des Internets der Dinge haben wir statische und dynamische Analysen der Android- und Linux-App sowie der Kamera selbst durchgeführt. Während die Cloud-Kommunikation für ein IoT-Gerät als einigermaßen sicher befunden wurde (es gibt sogar einen IPsec-Modus für Firmware-Updates!), entdeckten wir eine Schwachstelle, die es einem Angreifer ermöglicht, sein Konto mit einer Kamera zu verknüpfen, auf die er zuvor zugreifen konnte. Danach kann er den Besitzer ausspionieren oder ihm sogar den Zugriff auf seine eigene Kamera entziehen. Netatmo hat diese Schwachstelle im Februar 2019 behoben.

Inhalt

  1. Zusammenfassung der Sicherheitsanalyse
  2. Geräteeinrichtung
  3. Android App
  4. Linux Setup Tool
  5. API
  6. Gesichtserkennung
  7. Sonstiges (FTP, Hardware-Angriffe, …)
  8. Responsible Disclosure
  9. Fazit
  10. Update 4. Februar 2019

1. Zusammenfassung der Sicherheitsanalyse

Das Gute

  • Cloud-Kommunikation nutzt HTTPS und CA-Pinning
  • IPSec für kritischen Verkehr (Firmware-Updates)
  • Kommunikation zu Netatmo ausschließlich über die Kamera selbst, nicht über die App

Das Schlechte

  • Einige API-Befehle erfordern (nicht änderbare) Kamerazugangsdaten
  • Wahrscheinlich schlechte Standardeinstellungen (Mikrofon standardmäßig an)
  • Keine Benachrichtigung, wenn ein neuer Benutzer mit einem Konto verknüpft wird
  • Schlechte Gesichtserkennung
  • Debug-Ports

2. Geräteeinrichtung

Die Netatmo Welcome kommt in einem schlanken, zylindrischen Design ohne Tasten daher. Das Gerät besteht aus einem USB-Anschluss (der zur Stromversorgung des Geräts und für die erste Einrichtung verwendet wird), einem microSD-Kartensteckplatz (wo die Kamera Aufnahmen speichern kann), einer mehrfarbigen LED (grün beim Einschalten, blau im Bluetooth-Modus und rot, während sie aufnimmt (nur wenn vom Benutzer aktiviert)). Für die Konnektivität gibt es einen Ethernet-Anschluss, WLAN und Bluetooth, wobei letzteres nur für die Kommunikation zwischen der App und dem Gerät im Setup-Modus verwendet/aktiviert wird.

Wenn sie eingesteckt ist, versucht eine unkonfigurierte oder frisch zurückgesetzte Netatmo Welcome, auf das Internet zuzugreifen. Wenn dies gelingt, sucht sie nach Firmware-Updates, lädt das Update herunter und installiert es ungefragt.

Um die Kamera einzurichten, kann der Besitzer entweder eine Smartphone-App verwenden und sich über Bluetooth mit der Kamera verbinden, indem er sie auf den Kopf stellt. Oder er kann eine Windows/Linux/macOS-Binärdatei herunterladen, um die Kamera über ein USB-Kabel zu verbinden.

Die Kamera selbst kann über Ethernet oder WLAN mit dem Internet verbunden werden (letzteres muss während der Einrichtung konfiguriert werden).

Netatmo Welcome

3. Android App

Wir haben die Android App für Netatmo Welcome, Netatmo Security in unserer MitM-fähigen Android-VM untersucht. Um den Netzwerkverkehr aufzuzeichnen, wurde mitmproxy verwendet. Bluetooth-Verkehr kann innerhalb von Android abgefangen werden, indem HCI-Snooping unter den Entwickleroptionen aktiviert wird. Wir haben ein Paket mit unserem Proxy abgefangen, das sowohl einen Gerätenutzernamen als auch ein Gerätepasswort enthielt. Das Interessante daran ist, dass das Passwort und der Benutzername tatsächlich statisch sind. Der Benutzername ist die MAC-Adresse der Kamera und das Passwort ist ein gerätespezifisches, fest codiertes Passwort.

Setup-Ablauf Laufzeit-Ablauf

4. Linux Setup Tool

Wir analysierten das Linux Setup Tool mit radare2 und strace, fanden aber nichts Faszinierendes (fest codierte Passwörter, versteckte URLs usw.). Das Programm muss jedoch als Root ausgeführt werden. Was ein schlechtes Design ist, aber an sich keine Schwachstelle. Während des Einrichtungsvorgangs muss die Kamera über USB verbunden sein. Wireshark kann den USB-Verkehr aufzeichnen. Nach der Analyse der Pakete stellten wir fest, dass die Kamera denselben Gerätenutzernamen und dasselbe Gerätepasswort wie zuvor die Android App gesendet hat.

5. API

Nach Erhalt des Gerätenutzernamens und -passworts mit einer der oben genannten Methoden kann der Angreifer diese verwenden, um die folgende API-Anfrage zu erstellen:

Anfrage

POST /oauth2device/token HTTP/1.1
Host: app.netatmo.net
Connection: close
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 257

client\_id=na\_client\_linux&client\_secret=\*\*53c237...acce55\*\*&grant\_type=password&password=\*\*bada55h0tbabe...h0tc0ffee\*\*&username=70:ee:50:2e:13:37

Antwort

"access\_token":"70:ee:50:2e:13:37|OurAwesomeDeviceToken",
"expires\_in":10800,
"refresh\_token":"tGzv3JOkF0XG5Qx2TlKWIA"

Da Benutzername und Passwort statisch sind, kann ein Angreifer diesen API-Aufruf wiederholen, auch wenn er die Kamera nicht mehr besitzt. Das client_secret ist für diesen Aufruf nicht wichtig, um Zugriff zu erhalten.

Der Angreifer könnte zum Beispiel eine Rückerstattung für das Gerät beantragen, es dorthin zurückschicken, wo er es gekauft hat, und warten, bis ein Opfer genau diese Kamera abholt. Schließlich wird die Kamera wieder an unser Opfer verkauft. Das Opfer installiert die Kamera und führt das Setup aus, wodurch die Kamera erfolgreich an sein Cloud-Konto gebunden wird.

Zu diesem Zeitpunkt führt der Gegner die obige Anfrage erneut aus, die immer noch ein gültiges Token zurückgibt. Der Angreifer speichert dann das zurückgegebene Token als access_token_device. Er erstellt auch sein eigenes Netatmo Cloud-Konto über die Netatmo-Website. Anschließend fordert er ein Benutzertoken mit der folgenden Anfrage an:

POST /oauth2/token HTTP/1.1
Host: app.netatmo.net
Connection: close
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 156

client\_id=na\_client\_linux&client\_secret=\*\*53c237...acce55\*\*&grant\_type=password&password=supersecret&username=attacker%40softscheck.com

Diese Anfrage gibt JSON-Daten zurück, die das Benutzertoken “OurAwesomeUserToken” enthalten.

Nun kann der Angreifer diese beiden Token kombinieren, um das folgende Paket zu erstellen und zu senden und die Kontrolle über die Kamera zu erlangen:

POST /api/associatedevice HTTP/1.1
Host: app.netatmo.net
Connection: close
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 141

access\_token\_device=70:ee:50:2e:13:37|OurAwesomeDeviceToken&access\_token=OurAwesomeUserToken

Dies bindet die Kamera an das Benutzerkonto des Angreifers, so dass er jederzeit über die Netatmo-Cloud auf die Kamera zugreifen kann. Das Opfer kann die Kamera und die Cloud-Schnittstelle weiterhin nutzen, was die Chance erhöht, dass der Angriff unbemerkt bleibt. Währenddessen erhält das Opfer keine Benachrichtigung über das neu hinzugefügte Konto.

Hier ist ein Video des Angriffs in Aktion:

Hier endet es jedoch nicht, der Angreifer kann nun dem Besitzer den Zugriff auf die Kamera entziehen. Der Besitzer erhält nicht einmal eine Benachrichtigung darüber, dass ihm der Zugriff auf seine eigene Kamera entzogen wurde. Wenn er also nicht die Netatmo App oder Webseite öffnet, hat er keine Ahnung, dass er gerade ausgesperrt wurde. Ein Dieb könnte so vorgehen:

  1. Die Kamera binden und die Bewohner ausspionieren
  2. Wenn alle weg sind, ihren Zugriff auf die Kamera widerrufen
  3. Einbrechen

6. Gesichtserkennung

“Dank revolutionärer Gesichtserkennung bietet Welcome eine bessere Haussicherheit.” – https://www.netatmo.com/de-de/security/cam-indoor

Tatsächlich ist die Technologie ziemlich gut darin, Gesichter zu erkennen, selbst wenn eine Person im Nebenraum einige Meter entfernt den Kamerawinkel kreuzt. Die Kamera ist jedoch anfällig für False Positives. Die Cantina-Band-Aliens aus dem Video oben werden tatsächlich von der Kamera nach einer gewissen Zeit als Gesicht erkannt. Die Kamera ist auch nicht so gut darin, Gesichter bereits bekannten Personen zuzuordnen (wird aber nach einer Lernphase besser). Ein Feature der Kamera ist die “Dieb”-Erkennung, die so funktioniert: Die Bewohner scannen ihre Gesichter mit der Kamera. Dann loggen sie sich in die Cloud-Webseite ein und benennen diese erkannten Gesichter. Wenn alle ihren Status auf abwesend setzen, beginnt die Kamera, Warnungen an ihre Smartphones zu senden, wenn ein unbekanntes Gesicht erkannt wird. Wenn es einem Angreifer irgendwie gelingt, Netatmo Welcome vorzutäuschen, dass nicht eine unbekannte Person, sondern einer der Bewohner nach Hause gekommen ist, kann er einbrechen, ohne dass eine Benachrichtigung an die Besitzer der Kamera gesendet wird. Wenn die Privatsphäre-Funktion der Kamera aktiviert ist, wird sie den Dieb nicht einmal aufnehmen.

Wir begannen damit, unsere Gesichter auf einem DIN A4 Papier auszudrucken. Dies allein reichte der Kamera, um ein neues Gesicht zu erkennen. Unser Ziel war jedoch, die Kamera glauben zu lassen, dass der Ausdruck tatsächlich wir waren.

Also filmten wir einen unserer Kollegen den ganzen Tag und identifizierten das Gesicht, das die Kamera als ihn erkannte. Dies ist wichtig, da die Gesichtserkennung der Kamera umso besser wird, je mehr Proben man liefert (Lernphase). Dann machten wir eine Hardcopy des Bildes vom Gesicht unseres Kollegen, schnitten es am Rand seines Gesichts aus und hielten es vor die Kamera. Die Netatmo Welcome erkannte den Ausdruck als sein Gesicht, unser Angriff war also erfolgreich.

Dies ist schlecht, denn der Besitzer könnte die Kamera auf “nicht aufnehmen und keine Benachrichtigungen senden, wenn sie mich sieht” eingestellt haben, so dass der Angreifer unentdeckt vorbeigehen kann.

7. Sonstiges

  • Kann auf einen FTP-Server hochladen - bietet selbst keinen FTP-Code an
  • Kann Dateien auf verschlüsselter Speicherkarte speichern
  • Mainboard enthält Testports. Hardware-basierte Angriffe könnten möglich sein.
  • Keine offenen Ports
  • Abschaltung bei Abwesenheit, Benutzer wird NICHT benachrichtigt

8. Responsible Disclosure

Als wir Netatmo wegen der Sicherheitslücke kontaktierten, sagten sie uns, dass der Besitzer der Kamera eigentlich eine E-Mail erhalten sollte, wenn jemand die Kamera des Besitzers mit seinem eigenen Konto verknüpft, und es sich daher nur um einen Fehler handelt. Unserer Meinung nach ist dies, selbst wenn die E-Mail-Benachrichtigung funktionieren würde, immer noch eine schwache Schadensbegrenzung. Eine bessere Lösung wäre, den Besitzer zu bitten, die Verknüpfung der Kamera zu genehmigen. Netatmo sagte, sie würden es in Betracht ziehen. Das war vor vier Monaten. Aber bei Veröffentlichung dieses Artikels kann ein Angreifer die vorgestellten Schwachstellen immer noch ausnutzen. Wir werden diesen Beitrag aktualisieren, wenn Netatmo die Schwachstelle behebt.

9. Fazit

Das Erlangen des Gerätenutzernamens und -passworts erfordert irgendwann physischen Zugriff auf die Kamera oder eine andere Schwachstelle, die es dem Angreifer ermöglicht, Benutzername und Passwort irgendwie während der Übertragung zu lesen. Mit anderen Worten, ein Man-in-the-Middle-Angriff. Wenn der Angriff diese Informationen jedoch irgendwie erlangt, ist diese Schwachstelle kritisch, da der Angreifer die Kamera vollständig kontrollieren kann. Das nächste große Problem ist, selbst wenn das Opfer von dieser Schwachstelle weiß und weiß, dass jemand Zugriff auf seine Kamera hat, kann es den Angreifer NICHT daran hindern, sie auszunutzen. Es kann nur die Kamera zurückschicken und ein neues Gerät kaufen! Die leicht zu täuschende Gesichtserkennung und der Power-Cut-Angriff machen es einfach, unentdeckt einzubrechen, wenn der Angreifer das Opfer kennt. Eine Person, die eine Kamera gekauft hat, um sich vor Dieben zu schützen, wird jedoch wahrscheinlich auch in Sicherheitsschlösser und Glas investieren. Ein Dieb könnte stattdessen nach einer “low-hanging fruit” suchen, anstatt das Risiko einzugehen.

10. Update 4. Februar 2019

Netatmo schrieb zurück und gab an, dass sie das Problem behoben haben. Wenn die Kamera bereits an ein Konto gebunden ist, gibt der Aufruf von /api/associatedevice jetzt {"error":{"code":13,"message":"This device is in a home"}} zurück. Darüber hinaus erhält der Benutzer, dem die Kamera gehört, auch eine E-Mail, die ihm mitteilt, wer versucht hat, Zugriff auf die Kamera zu erhalten, und ihm ermöglicht, diese Person einzuladen. Unserer Meinung nach ist dies eine ziemlich gute Methode, um das Problem zu lösen, ohne Funktionalität wegzunehmen.

In Teil 2 unserer Analyse haben wir uns die Hardware der Kamera angesehen und Debug-Pins gefunden, die wir verwendet haben, um Root-Zugriff zu erhalten. Teil 2 finden Sie hier

Lesen Sie über weitere interessante Themen in unserem Blog.