Inhalt

Die Lücke schließen: Modernes Kismet für OpenBSD

Vom betagten ncurses-Port zum modernen Multi-Protokoll-RF-Sensor-Hub.

Dieser Beitrag kann Affiliate-Links enthalten. Wenn du auf einen solchen Link klickst und etwas kaufst, erhalte ich eventuell eine kleine Provision – ohne zusätzliche Kosten für dich.

Jahrelang steckte OpenBSD in einer technischen Zeitkapsel fest. Während der Rest der Welt auf Kismet “Newcore” umstieg – mit seinem leistungsstarken webbasierten UI, verteiltem Capture und Multi-Protokoll-Unterstützung – blieb der OpenBSD-Port in der veralteten ncurses-Version stecken.

Die Core-Software ließ sich zwar, mit kleineren patches, problemlos kompilieren, aber es klaffte eine riesige Lücke: es gab keinen Wifi-Capture-Treiber für OpenBSD. Um voranzukommen und die antike Version endlich in den Ruhestand zu schicken, musste ich das Herzstück bauen: capture_openbsd_wifi.

Als ich anfing, den Linux-Capture-Code als Referenz zu nutzen, stieß ich nicht nur auf komplexe Logik, sondern auf ein Minenfeld für den Präprozessor ;). Um die unzähligen Wege zu unterstützen, wie Linux Netzwerkschnittstellen verwaltet, ist der Code ein dichter Dschungel aus:

  • #ifdef HAVE_LIBNM (Network Manager)
  • #ifdef HAVE_LINUX_WIRELESS (Legacy Wireless Tools)
  • #ifdef HAVE_LINUX_NETLINK (Modern Netlink)
  • #ifdef HAVE_LINUX_IWFREQFLAG

Diese Komplexität zu warten, ist wahrscheinlich ein Vollzeitjob ;). Im krassen Gegensatz dazu war die OpenBSD-Philosophie („one way to do things“) ein echter Lichtblick.

Der cloc-Vergleich: Linux vs. OpenBSD

Der Kontrast zwischen dem technischen Ballast unter Linux und der sauberen Implementierung für OpenBSD ist beeindruckend. Ein direkter Vergleich mit cloc (Count Lines of Code) unterstreicht die enorme Effizienz des OpenBSD-Stacks:

Treiber-Komponente Dateien Zeilen Code
Linux Wifi Capture 10 5.479
OpenBSD Wifi Capture 1 1.075

Dank des einheitlichen Netzwerk-Stacks von OpenBSD konnte ich den Funktionsumfang der alten Version mit etwa 80 % weniger Code als der Linux WiFi Capture Treiber abbilden. Statt komplexer #ifdef - Strukturen genügt hier sauberer, funktionaler Code, der direkt die Wireless-Schnittstelle des Kernels anspricht, herrlich!


Exkurs in andere Hardware: BTLE und SDR

Sobald der Wi-Fi-Treiber stabil lief, konnte ich nicht anders, als mir auch andere potenzielle Datenquellen anzuschauen. Ich wollte einfach mal ausprobieren, was im Bereich RF-Monitoring unter OpenBSD alles machbar ist. Konkret schaute ich mir den RTL-SDR Blog V3 (damals aktuell) und den Adafruit Bluefruit LE Friend (mit der Nordic Sniffer Firmware) an. Um mit meinen Experimenten zu starten, besorgte ich mir sowohl einen RTL-SDR als auch einen Adafruit Bluefruit bei eBay.

Das Ganze hat auch technisch erstaunlich gut funktioniert:

  • BTLE ohne BT-Stack: OpenBSD hat bekanntlich keinen Bluetooth-Stack. Da der nrf51822-Treiber jedoch direkt über Serial/USB mit der Hardware spricht, kann Kismet den BTLE-Traffic perfekt mitschneiden. Ein paar kleinere Patches waren nötig, um den nrf51822-Treiber unter OpenBSD stabil zum Laufen zu bringen. Damit sind jetzt Paketanalysen auf einer Plattform möglich, die von Haus aus eigentlich gar kein Bluetooth unterstützt.
  • Den RTL-SDR-Port aktualisieren: Eigentlich wollte ich nur schauen, ob RTL-ADSB zum Flugzeuge-Tracken funktioniert. Da ich eh gerade dabei war, habe ich den OpenBSD-Port comms/rtl-sdr direkt auf Version 2.0.1 aktualisiert. Mit dem frischen Port ließen sich die Flieger dann auch problemlos in Echtzeit auf der Karte verfolgen.

Der Weg nach Upstream

Als der Code stabil war und der capture_openbsd_wifi - Treiber zuverlässig lief, wollte ich das Ganze nicht nur auf meinem Rechner verstauben lassen. Ich habe ein paar Merge Requests eingereicht, die auch zügig angenommen wurden. Mir war wichtig, dass die OpenBSD-Unterstützung offiziell im Haupt-Repo landet, damit ich später keine Patches im OpenBSD-Port selbst pflegen muss. Das Fundament stand also… und dann hieß es erst mal warten. ;)

Der Endspurt nach 2025

Das Warten auf ein offizielles Kismet-Release dauerte fast zwei Jahre. Als die Version vom September 2025 endlich erschien, erwartete ich ein einfaches Port-Update. Weit gefehlt. In diesen zwei Jahren hatte sich die interne Architektur von Kismet so stark verändert, dass die OpenBSD-Teile nicht mehr funktionierten.

Nach einigen intensiven Debugging-Sessions fand ich heraus, was nötig war, um den Treiber wieder flott zu machen:

  • Anpassung an modernes Kismet: Ich musste capture_openbsd_wifi noch einmal anfassen und ein wenig umbauen, damit der Treiber die aktuelle Art der Kommunikation mit dem Kismet-Server versteht.
  • OpenBSD als strenger Lehrer: Während der Tests stieß ich auf diverse Fehler und Abstürze, die so nur unter OpenBSD auftraten. Das ist eben die „unbequeme“ Seite des Systems: Wenn es um Speichersicherheit und strikte Code-Ausführung geht, verzeiht OpenBSD nichts und deckt Schlampereien im Code sofort auf.
  • Neugier und rtl_433: Bei meinem ersten Versuch hatte ich den rtl_433-Capture-Treiber völlig ignoriert. Aber dieses Mal siegte die Neugier. Sie trieb mich dazu, rtl_433 nach OpenBSD zu portieren und die nötigen Patches auszuarbeiten, um auch diese Datenquelle voll funktionsfähig zu machen.

Standort-Tracking

Kein Wireless-Survey ist ohne Standortdaten komplett. Ich habe ein altes Garmin GPSMap 60CSx als GPS-Gerät getestet, das ich schon Anfang der 2000er für Geocaching-Abenteuer genutzt hatte. Trotz des Alters der Hardware funktionierte es perfekt mit dem neuen Setup und lieferte zuverlässige Koordinaten für die erfassten Pakete. Im Vergleich zu damals sind diese Geräte heute recht günstig auf eBay zu finden. Falls ihr euch eins zulegt, achtet darauf, dass das spezielle serielle Kabel dabei ist. Die Dinger sind klasse für Wardriving, da man auch eine externe Antenne anschließen kann.

Wifi und RF Ausrüstung

WiFi-Dongle, RTL-SDR v3, Adafruit Bluefruit nRF51822 Sniffer, Garmin GPSMap

Fazit

Die Lücke ist damit endlich zu. OpenBSD-Nutzer können das alte ncurses-Interface hinter sich lassen und auf ein modernes Wireless-IDS umsteigen. Sicher gibt es noch weitere Datenquellen, die man sich anschauen könnte – und die vielleicht noch den einen oder anderen Kniff brauchen, um sauber auf dem BSD-Stack zu laufen –, aber das Fundament steht.

Für alle, die an den Details der Reise interessiert sind – die Upstream-Patches finden sich hier: github.com/kismetwireless/kismet (buzzdeee).

Haltet die Augen offen für weitere Blogposts, in denen ich Details zum Sniffing verschiedener RF-Arten unter OpenBSD zeigen werde.

Viel Spaß beim Sniffen. Das Ganze wird im kommenden OpenBSD 7.9 Release enthalten sein.