Dynamische Analyse von Android Apps
Ralph Meier
So nutzt und sichert man IoT-Protokolle
Wie aber funktioniert die Kommunikation der IoT-Geräte und welche Protokolle kommen dabei zum Einsatz? In diesem Artikel geht es um IoT-Protokolle, welche in der Anwendungsschicht angesiedelt sind mit Fokus auf MQTT und um die Absicherung der Protokolle, nicht aber der Absicherung der Infrastruktur.
Das zurzeit wohl bekannteste IoT-Kommunikationsprotokoll ist Message Queuing Telemetry Transport (MQTT). Hierbei handelt es sich um ein Netzwerkprotokoll, welches für Machine-to-Machine-Kommunikation (M2M) konzipiert ist. Das Client-Server-Protokoll setzt auf das Publish Subscribe Modell. MQTT funktioniert üblicherweise über TCP. Es gibt jedoch auch Varianten des Protokolls, welche mit UDP funktionieren.
Der Client, in diesem Fall ein Raspberry Pi mit Raumtemperatursensor, sendet Sensordaten an den Server (MQTT Broker). Nach Verbindungsaufbau zwischen Client und Server wird auf einem im Voraus bestimmtem Topic Daten gesendet. Dieses Topic kann zum Beispiel Office/Meetingroom/Temperature heissen. Der Anwendungsfall kann sein, dass die Bürosteuerung dieses Topic abonniert und Mitarbeitende kurz vor ihrer nächsten Besprechung im Meetingroom über die Temperatur informiert und ihnen so die Möglichkeit für frühzeitiges Lüften ermöglicht.
MQTT findet breite Verwendung in Sensoren und Aktoren, Mobiletelefonen, eingebettete Systemen oder auch vollwertige Desktopcomputer. Die Ports 1883 und 8883 sind für MQTT reserviert. Ein grosser Vorteil von MQTT ist der MQTT-Broker, welcher wichtige Aufgaben vom oftmals ressourcenarmen Client übernimmt. Darauf lässt sich auch die grosse Verbreitung in Automatisierungs- und Steuerungslösungen zurückführen.
Das Zusammenspiel funktioniert wie folgt: IoT-Geräte senden Daten, Zustände oder andere Informationen an den MQTT-Broker, dieser sendet die erhaltenen Daten an weitere Geräte und Systeme, welche das dazugehörige Topic abonniert haben. Dadurch muss das IoT-Gerät, die Daten nur an den MQTT-Broker senden, was einiges an Komplexität und Leistung einspart.
Das MQTT-Protokoll bietet folgende Konfigurationsmöglichkeiten bei Quality of Service (QoS), die Sicherstellung der Ankunft einer Nachricht:
Stufe | Wert | Beschreibung |
---|---|---|
At most once | 0 | Einmal Senden, bei Verbindungsunterbruch wohl keine Ankunft |
At least once | 1 | Senden bis Empfang bestätigt wird |
Exactly once | 2 | Sicherstellung, dass Nachricht auch bei Verbindungsunterbruch ankommt |
Die Retain-Option beim Broker ermöglicht es, Nachrichten zu speichern und bei einer neuen Subscription die letzte Nachricht des Topics sofort zuzustellen. Beim Verbindungsaufbau kann definiert werden, was im Fall eines Unterbruchs oder eines kompletten Abbruchs einer Verbindung passiert, beziehungsweise welche Nachricht in so einem Fall an die Subscriber gesendet werden soll.
Der Protokoll-Header ist 2 Byte gross, das erste Byte beinhaltet den Nachrichtentyp (4 Bit) sowie spezifische Flags je nach Nachrichtentyp, bei einer Publish Nachricht zum Beispiel Duplicate Delivery (1 Bit), Quality of Service (2 Bit) und das Retain-Flag (1 Bit). Im zweiten Byte ist die Länge des restlichen Payloads vermerkt. Danach folgt der variable Teil mit MQTT-Topic und dem Payload.
MQTT kann mit dem Einsatz von TLS auf Transportschicht verschlüsselt und somit geschützt werden, dabei wird der Port 8883 (secure-MQTT) verwendet. Im Artikel Transport Layer Security werden die neusten Änderungen erläutert und die empfohlene TLS-Konfiguration aufgezeigt. Zusätzlich besteht die Option, dass sich der Sender beim MQTT-Broker mittels X.509 Zertifikat authentifiziert.
MQTT selbst verfügt über eine Authentifizierung durch Benutzername und Passwort. Es muss beachtet werden, dass ohne den Einsatz von TLS die Übertragung im Klartext stattfindet und somit einfach abgehört werden kann. Zusätzlich zu Benutzername und Passwort kann auch noch ein Clientidentifier der Connect Message hinzugefügt werden. Bei diesem Vorgang wird zuerst die Benutzername und Passwort Kombination geprüft und danach, ob der mitgesendete Clientidentifier dazu passt. Es gibt es eine Option für die Verschlüsselung des Payloads, diese sollte in Betracht gezogen werden, wenn TLS aufgrund sehr geringer verfügbarer Hardware nicht eingesetzt werden kann.
Die Steuerung wird auf dem MQTT-Broker vorgenommen, und zwar über sogenannte Topic Permissions. Folgende Möglichkeiten gibt es hier:
CoAP ist ein IoT-Protokoll, welches sich für Nodes mit wenig Ressourcen, sprich low-power Prozessoren wie 8-bit Microkontroller mit wenig RAM und ROM bestens eignet. Das Protokoll ist ebenso für Machine-to-Machine (M2M) Applikationen designt, sei dies im gleichen Netzwerk oder über das Internet. Einsatzzwecke finden sich in Smart Energy und Gebäudeautomation wieder. CoAP funktioniert anders als MQTT in einem Request/Response Interaktion Modell zwischen Endpunkten.
Die grossen Vorteile von CoAP sind die einfache Umwandlung zu HTTP, die Unterstützung von Multicast sowie der geringe Overhead des Protokolls und die Einfachheit für Geräte mit sehr geringen Ressourcen. CoAP läuft auf den meisten Geräten, welche UDP unterstützen.
Das CoAP-Protokoll bietet vier verschiedene Security Modelle, die meisten verwenden Datagram Transport Layer Security (DTLS). DTLS ist ein Verschlüsselungsprotokoll für unzuverlässige Transportprotokolle wie UDP oder SCTP. DTLS basiert auf TLS und bringt ähnliche Sicherheit mit sich.
Security Modelle von CoAP:
AMQP ist ein offener Standard, bei welchem es sich um ein binäres Netzwerkprotokoll auf Anwendungsebene für Message-orientierte Middleware (MOM) handelt. AMQP baut auf TCP auf. Das AMQP-Protokoll wurde erschaffen, um viele verschiedene Arten von Nachrichten und Kommunikationsmuster zu unterstützen. Es unterstützt verschiedene Message-delivery guarantees, welche den Quality of Service von MQTT entsprechen.
AMQP kann mit TLS verschlüsselt werden, dann wird der Port 5671 (amqps) verwendet. Der Client muss dabei das Zertifikat des Servers validieren. Eine zusätzliche Sicherheit bietet die Authentifizierung des Clients mittels Client-Zertifikat beim Server.
Mit der Unterstützung des Simple Authentication and Security Layer (SASL) Frameworks gibt es eine weitere Option für die Authentifizierung und das Aushandeln von Kommunikationsparametern. SASL bietet viele verschiedene Mechanismen zur Authentifizierung darunter OAuth 2.0 bearer tokens, Kerberos, NTLM, OTP und viele weitere. Darunter gibt es auch eine ANONYMOUS-Variante, wobei es sich um eine nicht authentifiziert Variante handelt und daher nicht unterstützt werden sollte.
DDS (Data Distribution Service) ist ein offener Standard, welcher sich ideal für zeitkritische Systeme eignet. DDS bietet eine breite Unterstützung von kleinsten Geräten bis zum schnellen Desktopcomputer und soll komplizierte Netzwerkprogrammierung verhindern. DDS erhöht die Zuverlässigkeit, ist simpel gehalten und verwendet dabei das Publish Subscribe Modell. Das DDS-Protokoll findet oft Verwendung in den Bereichen Luft- und Raumfahrt, Luftverkehrskontrolle, autonome Fahrzeuge, medizinische Geräte, Roboter und andere Anwendungsbereiche welche Echtzeit Datenaustausch benötigen.
Ähnlich wie beim MQTT-Protokoll gibt es Publishers, diese erstellen Topics und versenden Samples. DDS verteilt diese Samples an die Abonnenten (Subscribers) der jeweiligen Topics.
DDS wird auch als Netzwerk Middleware bezeichnet, welche die Adressierung der Nachrichten und die Serialisierung sowie Deserialisierung der Nachrichten bei plattformübergreifender Kommunikation handhabt. DDS managt zudem auch Autorisierung und Fehlerbehandlung, wenn eine Nachricht nicht zugestellt werden kann. Die Quality of Service (QoS) kann bei DDS auch konfiguriert werden. DDS unterstützt Hot-Swapping zwischen redundanten Publishers, dabei springt ein Backupnode ein beim Ausfall des primären Publishers.
Bevor es das DDS-Securitymodell gegeben hatte, wurden vor allem TLS und DTLS für die Sicherung von DDS verwendet, dies funktionierte jedoch nur mit Unicast.
Das DDS-Securitymodell, was im Nachhinein dazu kam, ist modular und ermöglicht verschiedene Bereiche als Plug-ins hinzuzufügen. Es stehen folgende Plug-ins im Security Bereich zur Auswahl:
Die Plug-ins Authentifizierung, Access Control und Kryptographie sollten auf jeden Fall verwendet werden beim Einsatz von DDS. Je nach Einsatzgebiet und Anwendungszweck sollten auch die restlichen Plug-ins Logging und Data Tagging eingesetzt werden.
Alle Protokolle bringen ihre eigenen Stärken mit sich, daher lohnt es sich zu evaluieren, welche Eigenschaft im eigenen Umfeld am wichtigsten ist. Dies kann je nach Anwendungszweck die Real-Time-Fähigkeit, der gute Einsatz für ressourcenarme Geräte oder die simple Entwicklung sein. Der Sicherung des verwendeten IoT-Protokolls ist wichtig und sollte präzise vorgenommen und wenn möglich vor Inbetriebnahme geprüft werden. Viele der vorgestellten IoT-Protokolle können mit TLS abgesichert werden, hierbei ist es wichtig eine sichere TLS-Konfiguration einzusetzen.
Unsere Spezialisten kontaktieren Sie gern!
Ralph Meier
Ralph Meier
Ralph Meier
Ralph Meier
Unsere Spezialisten kontaktieren Sie gern!