12.09.2014

KNX-Sicherheit: Draugr – Angriffe gegen KNX/EIB (Hausautomatisierung)

In den letzten Wochen habe ich mich ein wenig in das Thema “Sicherheit von KNX/EIB” eingearbeitet. Dazu habe ich unter anderem eine Testumgebung aufgebaut und mit Hilfe verschiedener Tools und Quellen und Analysen die Arbeitsweise von KNX/EIB nachvollzogen. Das Ergebnis der Arbeiten ist ein kleines Projekt geworden, dass – den zugegeben etwas sperrigen – Namen “Draugr” trägt.

KNX/EIB – “There is NO Security”

Was ist KNX/EIB?

KNX ist ein offener Standard für die “ausgereifte und weltweit durchgesetzte intelligente Vernetzung moderner Haus- und Gebäudesystemtechnik gemäß EN 50090 und ISO/IEC 14543” (so die Eigenwerbung auf der Homepage des KNX Deutschland). Über KNX werden heute in modernen Gebäuden Lichter, Heizungen, Jalousien, Alarm- und Schließanlagen, Steckdosen und vieles mehr gesteuert. KNX ist kompatibel zu seinem Vorgänger, dem Europäischen Installationsbus (EIB) und ist heute in vielen großen und modernen Gebäuden wie z.B. in Hotels, Stadt- und Sporthallen, (öffentlichen) Verwaltungen, Bürogebäuden, Kliniken etc. zu finden.

Wie arbeitet KNX/EIB?

Grob gesprochen besteht ein KNX-Netzwerk aus Sensoren und Aktoren. Sensoren können z.B. Schalter, Windmesser, Lichtmesser, Temperaturfühler oder Bewegungsmelder sein, Aktoren sind Geräte, die auf Eingaben warten und elektrische Verbraucher wie Lampen, Heizungen, Türen etc. steuern. Sensoren und Aktoren sind über einen Bus miteinander verwunden, d.h. sind mit dem gleichen physikalischen Medium verbunden und können darüber Nachrichten untereinander austauschen (Prinzip Ethernet: 10Base2 und 10Base5 lassen grüßen).

Jedes Gerät verfügt über eine physikalische Adresse und über eine (Sensoren) oder auch mehrere (Aktoren) Gruppenadressen. Beide Adressarten können frei vergeben werden und werden während der Programmierung den Geräten mitgeteilt.

Sensoren senden Nachrichten aus und nutzen dabei ihre physikalische Adresse als Absender und eine Gruppenadresse als Empfänger. Aktoren hören den Bus ab und “sehen” so den gesamten Datenverkehr. Sie verarbeiten aber nur jene Pakete, die an eine ihrer Gruppenadressen gerichtet sind. Auf diese Weise kann z.B. ein Sensor mehrere Aktoren ansteuern.

Draugr – der nordische Zombie

Was ist Draugr?

Draugr ist eine Kombination aus Soft- und Hardware. Mit Draugr kann demonstriert werden, wie einfach KNX-Installationen attackiert und lahmgelegt werden können.

Die Plattform von Draugr

Raspberry Pi

Raspberry Pie mit ROT von Busware

Als Plattform für Draugr kommt ein Raspberry Pie zum Einsatz, der über das ROT-Modul von Busware mit dem KNX-Bus kommuniziert. Die Plattform ist kostengünstig (ca. € 130,-), unauffällig, kann mit Hilfe eines Netzteils, PoE oder im Notfall auch über Batterien mit Strom versorgt und kann über WLAN oder UMTS ferngesteuert werden.

Test- und Demoumgebung

Demokoffer

Für die Entwicklung wurde eine Testumgebung erstellt (vielen Dank noch einmal an Eddy alias “Dr. Ede”!), die – in abgespeckter und mobiler Form – auch für Vorträge und Livehackings dient. Die Demoumgebung ist in einem Sicherungskasten untergebracht und beinhaltet verschiedene Verbraucher, KNX-Aktoren sowie KNX-Sensoren.

Arbeitsweise

Die Kernkomponente von Draugr ist ein kleines Programm, dass aktuell in Version 0.1.0 vorliegt. Draugr hört den Verkehr auf dem KNX-Bus ab, dekodiert ihn und lernt so nach und nach die physikalischen Adressen sowie die Gruppenadressen der KNX-Installation. Neu entdeckte Geräte werden – soweit im Rahmen des KNX-Protokolls möglich und aktuell implementiert – untersucht (Fingerprinting) und die Ergebnisse mit den übertragenen Sensorwerten abgeglichen, um die Aufgaben der Gruppenadressen und die damit verbundenen validen Wertebereiche der Gruppenkommunikation möglichst exakt zu bestimmen.

Draugr beginnt nach der Ruhephase, KNX-Telegramme an eine oder mehrere Gruppenadressen auszusenden. Als Absender nutzt er entweder eine frei konfigurierbare Adresse oder eine Adresse, die zuvor an der entsprechenden Gruppenkommunikation beteiligt war.

Abhängig von seiner Konfiguration sendet er an die Gruppenadressen den Wert “AUS”, “AN” oder “RANDOM”; die konkreten Werte werden anhand des Fingerprintings der Gruppenkommunikation bzw. der Geräte gewählt.

Das Timing von Draugr lässt sich aktuell mit zwei Werten steuern. Der erste Wert legt fest, wie lange Draugr zwischen zwei Attacken gegen eine oder mehrere Gruppenadressen inaktiv ist, während der zweite Wert die Zeit zwischen dem Aussenden zweier Telegramme während eines Angriffs definiert. Dadurch ist es Draugr möglich, z.B. einen Tag inaktiv zu sein, dann innerhalb eines kurzen Zeitraums mehrere Gruppenadressen zu attackieren, um anschließend wieder für 24 Stunden zu schlafen (um die Regelmäßigkeit der Angriffe zu verschleiern, sind alle längeren Zeitintervalle mit einer zufälligen Toleranz von +/- 30% versehen).

Ein aggressives Timing führt dazu, dass KNX-Installationen bzw. die entsprechenden Gebäude unbenutzbar werden, solange Draugr anwesend und aktiv ist.

Ausblick

Draugr wird weiter entwickelt. Für Version 0.2.0 sind die folgenden Features vorgesehen:

  • aktives Scannen des KNX-Bus nach Geräten (Scanning über MASK-Request)
  • Verbessern des Fingerprintings der Geräte
  • Feintuning der Timing-Mechanismen
  • einfache Scriptsteuerung der Angriffe

Die Folgen für die attackierte Installation

Mit Draugr wird unvorhersehbar in die Gebäudesteuerung eingegriffen. Die Resultate können harmlos bis verheerend sein und sind auch bei sorgfältiger Planung des Einsatzes und entsprechender Konfiguration von Draugr nur begrenzt kalkulierbar. Im Falle einer aggressiven Konfiguration (kurze Timings) werden komplette Gebäude bzw. die entsprechenden Gebäudeteile unbrauchbar. Dabei können Sachschäden entstehen und – weitaus schlimmer – auch Menschen verletzt oder sogar getötet werden.

Ich habe mich deshalb dazu entschlossen, den Quellcode von Draugr nicht zu veröffentlichen.

Wie kann man sich schützen?

Das KNX-Protokoll muss heute als Basis einer sicheren Haus- und Gebäudesystemtechnik leider als unzureichend erachtet werden. Bereits der einfache Zugriff auf den KNX-Bus ermöglicht es einem Angreifer, eine Installation (oder Teile von ihr) nachhaltig zu manipulieren oder zu sabotieren, weil das KNX-Protokoll weder eine Verschlüsselung noch eine Authentisierung der Pakete vorsieht und ein Angreifer deshalb den gesamte Verkehr abhören und Pakete mit beliebigen Nachrichten einschleusen kann. Standard-Komponenten bieten auch auf höheren Protokollebenen keinen Schutz und sind deshalb den beschriebenen Angriffen absolut schutzlos ausgeliefert.

Dieser Umstand ist bekannt und wird bereits seit Jahren diskutiert. So beschäftigte sich bereits 2005 Dr. Wolfgang Granzer in seiner Diplomarbeit ‘Security in Networked Building Automation Systems’ mit dieser Problematik und schlug eine Erweiterung des Standards – von ihm EIBsec genannt – vor, um die Schwachstellen zu beheben. Die Arbeiten wurden von Wolfgang Granzer, Wolfgang Kastner und Georg Neugschwandtner auf der KNX Scientific Conference 2006 zwar vorgestellt, haben aber anscheinend bis heute keinen Eingang in KNX gefunden (bei meiner Recherche habe ich keine Geräte entdecken können, die EIBsec beherrschen).

Der wichtigste Schutz ist und bleibt heute deshalb der physikalische Schutz des Buskabels. Der Bus sollte niemals im Außenbereich liegen oder von dort aus zugänglich sein. Außensensoren wie Bewegungsmelder, Taster, Wind- und Temperaturmesser sollten generell über eigene Meldewege verfügen die eigentlichen KNX-Sensoren geschützt im Innern des Gebäudes liegen. Im (halb)öffentlichen Umfeld muss jeder Sensor wirksam vor physikalischer Manipulation geschützt sein, um auch hier den unberechtigten Zugriff auf die Installation zu verhindern oder zumindest zu erschweren. Angesichts des Einsatzgebietes von KNX (große Gebäude, Publikumsverkehr) wird letztere Empfehlung nur in den seltensten Fällen wirklich umsetzbar sein.

Eine weitere Möglichkeit seine Haus- und Gebäudesystemtechnik zu schützen und insgesamt die KNX-Installation robuster gegen die geschilderten Angriffe (und andere Störungen) zu machen, besteht im Einsatz von Bereichs- oder Linienkopplern. Diese Geräte verbinden – ähnlich wie Bridges in einer Ethernet-Umgebung – mehrere Abschnitte einer KNX-Installation und können mit Hilfe von Filtertabellen die Weiterleitung von Paketen steuern. Wie wirksam dieser Schutz ist, hängt von der Struktur der Installation, dem Zugriffspunkt des Angreifers, der Platzierung der Koppler und von ihrer Konfiguration ab. Die Vielzahl der aufgezählten Faktoren (und der Stückpreis ab € 200,-) lässt ahnen, dass eine umfassende Absicherung mithilfe von Kopplern in den meisten Gebäuden nicht vorhanden sein wird.

Zusammenfassung

Draugr ist weder besonders ausgereift, noch besonders sophisticated. Es ist ein sehr kleines Tool (weniger als 200 Codezeilen), dass innerhalb weniger Tage erstellt wurde und sehr einfache Aufgaben ausführt. Mit Draugr wurde kein Neuland betreten – die ausgenutzten Schwachstellen des KNX/EIB-Protokolls sind seit Jahren bekannt und wurden bis heute nicht beseitigt.

Draugr demonstriert diese Schwachstellen eindrücklich und zeigt die hochgradige Verwundbarkeit moderner Gebäude auf, wenn sie nicht durch entsprechende bauliche Maßnahmen angemessen geschützt und/oder durch die Segmentierung der KNX-Installation robust gestaltet sind.

Letztendlich bleiben die möglichen Sicherungsmaßnahmen für KNX-Installationen unzureichend, weil nachträglich eine Sicherheit implementiert werden soll, für die eigentlich an ganz anderen Stelle – nämlich auf Protokollebene! – gesorgt werden müsste.

Es bleibt zu hoffen, dass sich KNX möglichst bald weiter entwickelt. Oder möglichst bald untergeht. Die Mitbewerber stehen schon in den Startlöchern und werden hoffentlich das Thema “Sicherheit” besser (und vor allem schneller) adressieren.