Zigbee-Sniffing unter OpenBSD: Deep Dive mit dem TI CC2531
Ein Update zum Zigbee- & BTLE-Sniffing: Von Upstream-Patches für Kismet bis hin zu whsniff auf OpenBSD.

In meinem vorherigen Post habe ich den nRF52840 nice!Nano als Kombi-Lösung für BTLE- und Zigbee-Sniffing unter die Lupe genommen. Während BTLE tadellos lief, herrschte bei Zigbee in Kismet und Wireshark Funkstille.
Um Hardware-Limits als Fehlerquelle auszuschließen, bin ich auf einen echten Klassiker umgestiegen: den Texas Instruments CC2531 USB Dongle.
Die Hardware: TI CC2531
Ich habe mir von eBay einen TI CC2531 besorgt, der bereits mit der Sniffer-Firmware und einer ordentlichen externen Antenne ausgestattet war. Im Vergleich zum nice!Nano ist der CC2531 ein dediziertes 802.15.4-Radio – also die perfekte Referenz, um Zigbee-Traffic auf den Grund zu gehen.

Der TI CC2531 – klein, aber oho dank externer Antenne.
Kismet gezähmt: Mutex-Chaos und Libusb-Fixes
Damit die ti_cc_2531-Quelle in Kismet unter OpenBSD stabil läuft, musste ich tiefer in den Code eintauchen. Das System quittierte den Dienst regelmäßig mit ABORT-Meldungen, da Mutexes unsauber gehandhabt wurden (Double-Unlocks oder Versuche, nie gesperrte Mutexes freizugeben).
Zudem gab es Reibungspunkte mit libusb: Da OpenBSD libusb_detach_kernel_driver() nicht unterstützt, musste der Code lernen, diesen Fehler schlicht zu ignorieren. Mit ein paar zusätzlichen libusb_ref_device-Aufrufen war dann auch das Referenz-Management der Hardware sauber.
Gute Nachrichten: Die Patches wurden heute offiziell übernommen! Wer sich die Details anschauen möchte, findet hier den PR.
Dank der Fixes erkennt Kismet den Dongle nun einwandfrei und spürt Zigbee-Geräte in der Umgebung auf.

Endlich Traffic: Kismet bei der Arbeit unter OpenBSD.
Die Brücke zu Wireshark: whsniff
Discovery ist schön, aber für die echte Analyse führt kein Weg an Wireshark vorbei. Um die Daten vom CC2531 dorthin zu tunneln, kam whsniff zum Einsatz.
Eigentlich für Linux geschrieben, läuft es nach einem kleinen Patch (siehe Pull Request #25) nun auch unter OpenBSD. Damit lässt sich der Traffic direkt in Wireshark einspeisen:
# whsniff via doas direkt in Wireshark pipen
doas whsniff -c 11 | wireshark -k -i -Endlich kann ich 802.15.4-Datenverkehr live und in Farbe analysieren.

Live-Analyse der Pakete in Wireshark.
Den Traffic zu sehen ist der erste Schritt, ihn zu verstehen der zweite:
- Verschlüsselung: Da Zigbee in der Regel verschlüsselt ist, hilft manchmal der Standard-Link-Key ZigBeeAlliance09. Diesen könnt ihr unter Edit -> Preferences -> Protocols -> ZigBee -> Pre-configured Keys eintragen.
- Key (Hex):
5A:69:67:42:65:65:41:6C:6C:69:61:6E:63:65:30:39 - Falls das nicht reicht, braucht ihr den spezifischen Netzwerkschlüssel eures Controllers (z. B. aus Zigbee2MQTT).
- Key (Hex):
- Rauschen ausblenden: Im 2.4-GHz-Band ist viel los. Pakete mit kaputter Checksumme (FCS) werden oft verworfen. Um sie dennoch in Wireshark zu dekodieren, deaktiviert: Edit -> Preferences -> Protocols -> IEEE 802.15.4 -> “Dissect only good FCS”.
Das nice!Nano-Rätsel
Und was ist mit dem nice!Nano/nRF52840? Hier habe ich unter OpenBSD leider immer noch keine stabilen 802.15.4-Frames einfangen können. Vielleicht liegt es an der lausigne Antenne oder der Firmware.
Um das zu klären, habe ich mir einen Sonoff Dongle M bestellt. Sobald mein eigenes Home-Automation-Lab steht, kann ich ein Zigbee-Gerät direkt neben den nice!Nano legen und schauen, ob es ein reines Reichweiten-Thema ist.
Fazit
Der CC2531 ist nach wie vor ein klasse Werkzeug für die OpenBSD-Toolbox, besonders da der Kismet-Support jetzt stabil läuft. Auch wenn die Hardware betagt ist: Die externe Antenne macht ihn zum perfekten Referenzgerät auf jedem Schreibtisch.
Ich habe heute außerdem ein Kismet-Port-Update sowie einen neuen Port für whsniff zur Begutachtung an ports@ geschickt und hoffe, dass diese bald in den Ports-Tree einziehen können.
Sobald der Sonoff-Dongle da ist, gibt es das nächste Update!