
Ein Tool, um auf einem KNX-Bus über TPUART und die Calimero Project Suite zu lauschen und die Daten aus den Paketen in einen Wireshark-kompatiblen Datei-Hexdump zu extrahieren.
KNX ist ein weit verbreitetes Gebäudeautomatisierungsprotokoll, das zur Verbindung von Sensoren, Aktoren und anderen Komponenten eines intelligenten Gebäudes dient. Unser KNX Bus Dump Tool verwendet die Calimero Java-Bibliothek, zu der wir für dieses Tool beigetragen haben, um die über einen KNX-Bus gesendeten Telegramme aufzuzeichnen. Insbesondere greift unser Tool über eine TPUART-Verbindung auf den KNX-Bus zu, kann aber auch für andere Verbindungsmedien angepasst werden. Die Telegramme werden in eine Wireshark-kompatible Hex-Dump-Datei ausgegeben. Zeitstempel werden bereitgestellt und auf UTC-Zeit normalisiert, mit Nanosekunden-Genauigkeit, um Datenanalysen zu ermöglichen und einen zeitlichen Verlauf der Telegramme zu liefern. Die Hex-Dump-Datei kann in Wireshark importiert werden, das so konfiguriert werden kann, dass es die KNX-Telegramme mit Wiresharks cEMI-Dissector analysiert.
Unser Tool kann für die Protokollanalyse von KNX-Sensoren, Aktoren und anderen KNX-Geräten verwendet werden. Beispielsweise haben wir das Tool genutzt, um unsere KNX-Geräte zu verstehen, und dabei unregelmäßige KNX-Telegramme gefunden. Das Tool eignet sich auch ideal für die Sicherheitsanalyse von KNX-Geräten, da es alle Details des verwendeten Protokolls und der über den KNX-Bus gesendeten Daten offenlegt.
Tcpdump und Wireshark können nicht zum Erfassen von Telegrammen verwendet werden, die über einen KNX-Bus gesendet werden, da wir es mit nativen KNX-Telegrammen zu tun haben, nicht mit TCP/IP-Paketen. Wireshark und Tcpdump können KNXnet/IP-Pakete erfassen, bei denen es sich um TCP/IP-Pakete handelt. KNXnet/IP ist ein Protokoll zum Senden von Befehlen und Daten über ein TCP/IP-Netzwerk an einen KNX-Bus.
Dieses Tool ist für die Verwendung mit der Calimero Java-Bibliothek ausgelegt und mit einem Raspberry Pi 3 oder 4 sowie einem Raspberry Pi HAT für die TPUART-Verbindung kompatibel.
Hier sind einige Anleitungen zur Einrichtung der Umgebung:
Hinweis: Die nächsten Schritte gehen davon aus, dass Sie Ihre Umgebung gemäß diesen Anleitungen eingerichtet haben.
Platziere die Datei KNXBusDump.java im Ordner introduction/src/main/java/ der Calimero-Projekt-Suite.
Wechsle in den Ordner introduction.
Um das Programm auszuführen, kannst du einfach Folgendes ausführen:
./gradlew run -Pcalimero.serial.tpuart.maxInterByteDelay=60000 -DmainClass=KNXBusDump
Beachte die Fehlerbehebungs-Anleitung unten für Lösungen zu häufigen Fehlern.
Warte nun, bis Nachrichten auf dem Bus übertragen werden. Die ausgegebenen Telegramme befinden sich in der Datei KNXBusDump-Telegrams.txt.
Beende das Tool mit Strg-C. Die Datei ist nun bereit, in Wireshark importiert und analysiert zu werden.
In Wireshark hast du die Möglichkeit, Pakete aus einem Hex-Dump zu importieren und einen Dissector zur Analyse der Pakete anzugeben.
Warte nach dem Start von Wireshark, bis der anfängliche Ladevorgang abgeschlossen ist. Klicke dann auf Datei -> Aus Hex-Dump importieren...
Um dies korrekt zu parsen, müssen wir einen regulären Ausdruck (Regex) mit einigen Tags angeben.
^\s*(?<time>\d{4}-\d\d\-\d\dT(\d\d\:){2}\d\d.(\d){6}[Z])\s(?<seqno>\d{6})\s+(?<data>[0-9a-fA-F]*)$
Wähle die Hex-Dump-Datei als Quelle aus.
Wechsle im neuen Dialog zum Tab Regular Expression und füge den Regex in das Feld ein.
Stelle sicher, dass die Datenkodierung Plain hex ist. 200*16
Im Textfeld Timestamp format müssen wir das vom Tool generierte Muster angeben.
%Y-%m-%dT%H:%M:%S.%fZ
HINWEIS: Das Zeitstempelformat MUSS GENAU DIESES sein. Andernfalls wird kein Zeitstempel analysiert.
Ändere im Abschnitt Encapsulation den Encapsulation Type auf Wireshark Upper PDU Export.
Aktiviere ExportPDU, um den cemi-Dissector anzugeben.
Nun kannst du die Datei importieren und das Telegramm analysieren.
Wireshark-Zeitstempel:
Entsprechende Hex-Dump-Datei
Hinweis: Die hervorgehobene Zeit ist die NORMALISIERTE UTC-ZEIT. Egal, welche Zeitzone neben der Zeit angegeben wird, es ist IMMER die korrekte UTC-Zeit.
Überlegungen:
Dies sind einige häufige Fehler, die beim Ausführen dieses Programms mit dieser Einrichtungsanleitung auftreten können. Ich habe Lösungen bereitgestellt, in der Hoffnung, dass sie den Fehler beheben.
Stelle sicher, dass du alle Befehle genau so eingibst. Die Ausführung des Befehls mit "Dmainclass" führt dazu, dass das Programm standardmäßig das Programm "Discover KNX Servers" startet. Stelle sicher, dass es "DmainClass" ist.
Stelle sicher, dass KNXD (falls du es gemäß dieser Anleitung installiert hast) nicht läuft. Wenn du dieser Anleitung folgst, verwendet KNXD denselben Port, und nur ein Prozess kann den seriellen Port gleichzeitig nutzen.
Wenn du den Inhalt der Hex-Dump-Dateien von oben kopiert und eingefügt hast, fehlt möglicherweise ein zusätzliches Zeilenumbruchzeichen. Beispielsweise zeigt die GitHub-Darstellung in "SampleData1.txt" 4 Zeilen Daten an, während es tatsächlich 4 Zeilen Daten plus ein Zeilenumbruchzeichen sind. Eine mögliche Lösung ist, einfach nach dem letzten Datenbyte in der zu importierenden Datei die "Eingabetaste" zu drücken.
In diesem Repository habe ich die Beispieldateidaten in Sample-KNXBusDump-Telegrams.txt bereitgestellt, die für die Screenshots verwendet wurden. Du kannst diese gerne in Wireshark importieren, um es selbst zu testen.
Das Tool wurde auf diesem lokalen KNX-Testbett getestet.
