Sicherheit in der IoT oder auch
Ich weiß, wie kalt es in deiner Tiefkühltruhe ist!
Um es gleich vorweg zu sagen, dies ist kein umfassender Blogeintrag zum Thema "Sicherheit in der IoT". Dieser kleine Blog soll auch kein fertiges Sicherheitskonzept liefern, sondern nur für das Thema sensibilisieren.
Warum dann dieser Blog?
Bei so manchem Beitrag im IoT-Umfeld wundere ich mich über die Sorglosigkeit, mit der IoT-Geräte über das Internet zugreifbar gemacht werden. Deswegen möchte ich auf ein paar besonders offensichtliche Aspekte einmal eingehen. Anfangen möchte ich mit einer kleinen, nicht ganz so fiktiven Geschichte:
"Moin Micha, schönes Wochenende gehabt?" "Klar, Melanie und ich waren den ganzen Tag unterwegs und abends waren wir noch beim Italiener." "Hm, dein Italiener war wohl eher eine Tiefkühlpizza und Melanie hab ich gestern bei dir im Wohnzimmer gar nicht gesehen."
Was war passiert? Naja, Micha ist begeisterter Bastler und IoT-Fan. Also hat er sich eine WebCam selbstgebaut und als Überwachungskamera ins Wohnzimmer gestellt. Und die Temperatur seines Tiefkühlschranks lässt er mithilfe eines kleinen Wifi-Modules auch überwachen. Und weil er gerne von unterwegs Zugriff auf die Geräte haben möchte, hat er alles schnell per Router und DynDns ins Internet gestellt. Natürlich ist die Webcam per Passwort gesichert! "admin/admin" reicht doch, oder?
Diese zugegeben etwas übertriebene Geschichte zeigt leider, wie sorglos viele IoT'ler mit ihren Daten umgehen. Aber nicht nur die Maker-Gemeinde ist da etwas blauäugig. Da funken "professionelle" Saugroboter den Wohnungsgrundriss auf offene Server in China, Kontaktdaten inkl. Adresse gleich dabei. Oder Alarmanlagen lassen sich per Internet ein- und ausschalten, gesichert einzig durch einen statischen API-Key. Oder IoT Firmware zur Hausautomatisierung, mit der sich Jedermann ganz einfach auf jedem Smartphone eine Benutzeroberfläche für sein Smarthome zusammen klicken kann.
Die Sensordaten und Ausführungsanweisungen liegen dabei auf Servern irgendwo im Internet. Wie sicher diese Daten sind, weiß keiner.
Aber fangen wir vorne an:
IoT und WebServer
Zugegeben: Es ist natürlich beeindruckend und verlockend, mit ein paar Zeilen Code kann man auf einem Wifi-Modul einen WebServer betreiben und damit dann z.B. Daten von Sensoren oder Bilder von der angeschlossenen Kamera im Netzwerk zur Verfügung stellen.
Und es ist toll, wenn ich in meinem Heimnetzwerk dann mit dem Handy auf eben diese Webserver zugreifen kann, um mir die Daten anzuschauen. Dagegen ist soweit nichts einzuwenden. Aber, sobald ich diese Daten über das Internet zugreifbar machen möchte, sollte ich mir folgende Fragen stellen:
Wie sicher ist dieser WebServer?
Kann ich den Server gegen unautorisierten Zugriff schützen? Je größer der Schutz sein soll, den ich brauche, umso komplizierter wird die WebServer Konfiguration. (statischer Zugriffsschutz mit ApiKey, Passwortschutz, OAuth2, OpenID...)
Und wie sieht das mit Sicherheit der Übertragung aus?
Kann der WebServer die Daten verschlüsselt versenden (https, TLS 1.2/1.3, um mal ein bisschen Buzzword Bingo zu betreiben)? Vieles davon benötigt zusätzliche Rechenleistung, manchmal mehr als für die eigentliche Aufgabe. Wifi-Module sind für solche Anwendungen einfach zu schwach.
Und was ist mit DoS Attacken, Einbruchsversuche und WebShell?
Auch dafür sind die 10€ Wifi-Module nicht gebaut. Sie haben gegen solche Angriffsversuche keine Schutzmechanismen, wenn man diese nicht selber implementiert hat.
Aber wofür sind diese Module denn dann gemacht?
Natürlich geht es bei diesen Modulen um den einfachen und schnellen Zugriff auf die Daten. Diese Module sind aber dazu gedacht, in einem sicheren Umfeld betrieben zu werden. Das heißt, nicht die Wifi-Module stellen die Sicherheit her, sondern andere darauf spezialisierte Komponenten in einem in sich geschlossenen Netzwerk. Im professionellen Umfeld übernehmen diese Funktionen Infrastrukturkomponenten wie Firewalls, Gateways, Proxies, Router, usw...
Und bei mir im privaten Umfeld?
Natürlich brauche ich in meinem privaten Umfeld keine solch komplexe Infrastruktur. Und tatsächlich gibt es einige dieser Komponenten in fast jedem moderneren Heimnetzwerk. Unser Router ist z.B. eine solche Komponente.
Eine Hauptaufgabe des Routers ist es, neben dem Zugriff auf das Internet, eben auch Zugriffe aus dem Internet in das Netzwerk zu kontrollieren. Und genau hier liegt das Problem, welches ich bei vielen IoT Anleitungen entdecke. Nicht die Möglichkeit, per Web Interface einfach auf die IoT Geräte zugreifen zu können, ist das Problem, sondern diesen Zugriff ohne weitere Prüfung, ohne Schutz, im Internet zur Verfügung zu stellen. Es gibt dabei nun mehrere Wege, wie man sein Netzwerk sichert und trotzdem den Zugriff auf die eigenen IoT Geräte ermöglicht.
-
Firewall: Eine Firewall dient dazu, den Netzwerkzugriff basierend auf den vorhandenen Daten, wie Absender oder Ziel, zu beschränken. Sie überwacht den durch Sie durchlaufenden Datenverkehr und entscheidet anhand eines Regelwerkes, ob bestimmte Netzwerkpakete durchgelassen werden oder nicht. Somit werden unerlaubte Netzwerkzugriffe unterbunden.
-
Proxyserver: Ist ein Dienst, der den Zugriff auf die Geräte kanalisiert und dabei absichert. D.h. der Zugriff vom Internet auf die IoT-Geräte, bzw. von den IoT-Geräten auf das Internet laufen alle über diesen Server. Somit hat man nur einen Punkt im Netzwerk, der den Attacken ausgeliefert ist. Und dort kann man mit geeigneten Maßnahmen den Zugriff sichern.
- API-Gateway: Ein API-Gateway ist so eine Art Proxyserver, das Abfragen aus dem Eingangskanal automatisiert auf verschiedene Geräte verteilt. Z.B. auf Basis einer Zugriffs URL. Dabei können nun unterschiedliche Geräte mit unterschiedlichen Zugriffspfaden in einem virtuellen Baum zusammengefasst werden.
Beispiel: Ich habe 3 Temperatur-Sensor-Module:
-
eines für die Tiefkühltruhe. Der Pfad dorthin lautet:
http://192.168.127.36/sensors/temperatur
- eines für die Außentemperatur. Pfad http://192.168.127.37/temp1
- und eines für die Innentemperatur. Pfad: http://192.168.127.38:8080/wohnzimmer/temp
In einem API-Gateway kann ich nun verschiedene Pfade definieren z.B. https://192.168.127.80/temperaturen/aussen
https://192.168.127.80/temperaturen/innen
https://192.168.127.80/temperaturen/kuehlschrank und diesen dann die entsprechenden Pfade auf die Geräte mitteilen.
https://192.168.127.80/temperaturen/aussen = http://192.168.127.37/temp1
https://192.168.127.80/temperaturen/innen = http://192.168.127.38:8080/wohnzimmer/temp
https://192.168.127.80/temperaturen/kuehlschrank = http://192.168.127.36/sensors/temperatur
Der Client benötigt für den Zugriff nur die Pfade des Gateways. Das Gateway sendet die entsprechenden Anfragen dann an die konfigurierten Geräte weiter und gibt die Antwort an den Client zurück. Viele Gateways bieten noch sehr viel mehr für uns nützliche Features. Z.B.
- SSL Verschlüsselung: nicht das angeschlossene Gerät muss SSL beherrschen, sondern die SSL Terminierung liegt beim Gateway.
- Zugriffssteuerung: viele API Gateways können die Endpunkte per BasicAuth, oder sogar per OAuth oder OpenID, gegen unbefugten Zugriff absichern.
- Offlineerkennung: Manche Gateways erkennen, wenn ein angeschlossener Dienst nicht aktiv ist und können dann statt der Weiterleitung eine Standardmeldung ausgeben ...Und vieles mehr.
Router: verbindet ein lokales Netzwerk mit dem öffentlichen Internet und verwaltet dabei die Routen zwischen den Netzwerken. Viele Router für Heimnetzwerke können aber sehr viel mehr. Sind quasi eine Mischung aus den o.g. verschiedenen Diensten und je nach Hersteller sind diese Dienste mal mehr mal weniger konfigurierbar.
Das Heimnetzwerk mit solchen Diensten abzusichern, kann, je nachdem wie viele IoT-Geräte man verwalten möchte, eine echte Herausforderung werden. Vor allem die Routenerstellung verlangt viel Übersicht und Wissen. Und natürlich ist man schnell geneigt, für die eine Kamera oder den einen Sensor mal eben eine Ausnahme zu machen.
Gibt es nicht noch einen einfacheren Weg?
Ja, den gibt es. Voraussetzung ist, dass tatsächlich nur ich den Zugriff auf diese Dienste benötige (oder andere Personen, denen ich soweit vertraue, dass ich sie in mein Netzwerk lassen möchte). Bei dieser Lösung stehen die Geräte nicht öffentlich im Internet, sondern ich ermögliche eine gesicherte Verbindung mit dem benötigten Endgerät in das Netzwerk. Das Zauberwort hierfür heißt VPN, Virtual Private Network.
Ein VPN ermöglicht es, dass Rechner, die sich physikalisch in anderen Netzwerken befinden, logisch wie Geräte aus dem gleichen Netzwerk behandelt werden. Der Zugriff erfolgt dabei zwar über öffentliche Pfade, wird aber dann komplett zwischen den beiden beteiligten Komponenten verschlüsselt, sodass kein Angreifer in diese Kommunikation eingreifen kann. Auf beiden Seiten ist eine spezielle VPN-Software aktiv, mit dessen Hilfe die Verbindung hergestellt wird.
Viele von Ihnen kennen VPN bereits aus der Arbeitswelt. Aber auch für den Privatbereich ist das mittlerweile ein gängiges Verfahren und leicht einzurichten. Beispielsweise haben die Router der Firma AVM (Fritz.box) die Möglichkeit einer VPN Verbindung bereits eingebaut (auch andere Router Hersteller haben ein VPN Feature). Die Einrichtung ist, AVM typisch, sehr einfach. Näheres findet man auf den Herstellerseiten.
Z.B. bei AVM: https://avm.de/service/vpn/uebersicht/
Will man Teile seiner Sensoren doch öffentlich zur Verfügung stellen, gibt es andere Wege. Einige IoT Hersteller bieten eigene Hardware an, die den sicheren Zugriff ermöglicht oder zumindest sich besser absichern lassen, z.B. Homematic oder Gigaset. Allerdings mit dem Nachteil, dass die Anbindung dann proprietär ist.
Eine OpenSource Alternative dazu (zumindest, was den Server angeht), noch dazu mit diversen anderen netten Features ist Blynk.io. Benötigt wird dazu jedoch ein Stück eigene Hardware, auf der der Blynk-Server (https://github.com/blynkkk/blynk-server) läuft. Dafür reicht allerdings auch schon ein einfacher aktueller Raspberry Pi.
Ich hoffe, Ihnen hat dieser kleine Blog gefallen! Bis zum nächsten Mal.
Wilfried Klaas
8 Reacties
Safe38
Sein Heimnetzwerk im privaten Umfeld auch sicher zu machen ist absolut notwendig, Der Beitrag hierzu ist super wertvoll.
Wilfried Klaas
Hallo Herr Sternberg,
was soll ich zu ngrok sagen? Prinzip ist folgendes:
Ich installiere mir auf dem jeweiligen Server (oder zumindest im gleichen Netzwerk) ein Stück Schnüffelsoftware von dem jeweiligen Anbieter. Das verbindet sich dann mit dem Server des Anbieters und ich kann dann mit meinem Client (Browser oder App) auf dem Server des Anbieters meine Seiten betrachten. Man kann das sicher aber auch unsicher betreiben. Das Problem ist, ich öffne mein privates Netzwerk für diesen Anbieter. Die entscheidende Frage ist dann, in wie weit vertraue ich diesem Anbieter. Zumindest gibt es eine OpenSource Variante von dem lokalen Tunnel Programm. D.h. man könnte die Quellen nach verdächtigen Code absuchen. Aber ist die OpenSource Variante auch die, die man downloaden kann? Und wer steckt hinter dem Server? Das sind die Fragen, die man sich und auch dem Anbieter stellen muss. Just my 2 cent.
Konrad Sternberg
Hallo beisammen,
Der Beitrag hat mich bestätigt, dass ich weiterhin die Finger davon lasse meine “localhost” Daten von außen zugreifen zu lassen (auch wenn ich das gerne mal probieren würde). Ich habe die Kenntnis über die vielen Sicherheitsaspekte schlicht nicht.
Kleine Frage am Rand: Wie sieht der Autor eigentlich das Thema “Tunneln” (z.B. mit ngrok)?
Danke für eine Erläuterung durch Experten.
Grüße Konrad
Johann Hobel
Sehr interessanter Artikel – vielen Dank!
TM
Die korrekte Adresse lautet blynk.io, nicht blync.io
Hauke Buder
Moin Moin,
Ich bin dazu übergegangen, ESP8266 als WebCLIENT zu verwenden.
Mein Server dazu liegt bei Strato (habe ich eh wegen Mails, daher war es das günstigste)
Der ESP sendet stumpf die Daten an eine PHP Seite “beispiel.php?value=”PARAMETER" via GET , die es in eine MySQL Datenbank einträgt.
Die Antwort der Seite kann man auch für Steuerungsbefehle nutzen – ist dann zwar nicht Echtzeit aber das braucht man für die meisten Anwendungen ja auch nicht.
Somit ist es praktisch ausgeschlossen, dass jemand auf dem Wege in mein Netz eindringt.
Klar hilft zusätzlich “Security through obscurity” bei Einzelentwicklungen – für die Massenentwicklung bräuchte es mindestens HTTPS aber ich finde es allemal besser als direkt ins Internet stellen eigener Geräte
Klaus Hagemann
Vielen Dank für den aufschlussreichen Beitrag.
Ich bin dadurch „aufgeweckt“ worden.
Für mich ein sehr wichtiges Thema.
LG Klaus
Martin Pasch
Sehr gute Zusammenfassung! Als Ergänzung zum oben beschriebenen “Werkzeugkasten”:
Es gibt in der Tat keinen echten Schutz vor Vandalismus, immer nur eine Bedrohungs-/Risiko-Abschätzung. Was man aber machen kann, wenn kein VPN im Einsatz ist:
DoS Attacken:
1. SYN Flooding vermeiden. Das ginge zB über eine IP WhiteList (d.h. das System lernt zB die letzten 15 Connections und gewährt somit einer bekannten IP Addresse vorrangig den Zugang). Bei einer SYN rate über einem Limit wird auf die Whitelist umgeschaltet
2. Fail2Ban: Die letzten 15 IP Addressen, die sich mit 2 Zugangs-Fehlversuchen geoutet haben, werden ganz gesperrt
3. Falls die Rate so hoch wird, dass gar nichts mehr geht: Hier kann man aus der Automotive Industry (CAN-BUS) abschauen: Dort gibt es einen BUSOFF Zustand. Übertragen würde man den Server eine gewisse Zeit vom WLAN trennen und das Ganze später nochmals versuchen. Somit wird die eigentliche Aufgabe des Devices (zB Heizungssteuerung) nicht mehr gestört. Kombiniert man das mit einer Änderung der MAC-(wenn möglich)/IP-Addresse mit zentraler Registrierung an einem Lookup-Service, hat man schon etwas bewirkt.
4. Reverse Proxy verwenden. Man könnte den Server auch rein hinter einen Reverse Proxy schalten, d.h. er akzeptiert nur Verbindungsversuche von dort. Als Reverse Proxy könnte ein RasPi o.ä. zum Einsatz kommen und mit wesentlich mehr Power die Load abnehmen…
5. nur Outgoing Connections nehmen. Hier kann man einen ganzen Server vor seine IoT Geräte schalten. Diese verbinden sich zB via WebSocket direkt mit dem Server und lassen sonst nichts anderes zu.