Die Probleme von D-Bus auf dem Linux-Desktop
(blog.vaxry.net)- D-Bus ist ein Bus für die Kommunikation zwischen Anwendungen; das Konzept ist nützlich, aber die Implementierung ist äußerst mangelhaft und nicht standardkonform
- Die Standarddokumentation ist unvollständig und inkonsistent, und die tatsächlichen Implementierungen halten sich nicht daran, was zu einem Zusammenbruch der Kompatibilität führt
- Auch Sicherheitslücken sind gravierend: Apps können im entsperrten Zustand geheime Daten anderer Apps lesen
- Als Reaktion darauf entwickelt der Autor ein neues Bussystem namens
hyprtavernund ein Protokoll namenshyprwire hyprtavernsoll die strukturellen Probleme von D-Bus durch strikte Typprüfung, integrierte Rechteverwaltung, einen sicheren Secret-Store (kv) usw. lösen
Das Konzept von D-Bus und seine Grenzen
- D-Bus ist ein System, mit dem Anwendungen und Dienste über einen gemeinsamen Bus Methoden und Eigenschaften bereitstellen und gegenseitig aufrufen können
- Wenn zum Beispiel eine App, die einen Wetterdienst anbietet, eine API am Bus registriert, können andere Apps sie finden und verwenden
- Wegen seines zu großzügigen und unstrukturierten Designs kann D-Bus jedoch beliebige Objekte mit beliebigen Methoden registrieren und aufrufen
- Dadurch entsteht der Effekt „Garbage in, garbage out“
Verwirrung bei Standarddokumentation und Implementierungen
- Die Standarddokumentation von D-Bus ist über mehrere Stellen verstreut und in unvollständiger, schwer verständlicher Form vorhanden
- Reale Implementierungen halten sich entweder nicht daran oder verwenden willkürlich voneinander abweichende Spezifikationen
- Der Autor erklärt, dass er bei der Entwicklung von
xdg-desktop-portal-hyprlanddie Spezifikation fürrestore_tokenimplementiert habe,
alle Apps jedoch das inoffizielle Feldrestore_dataverwendeten und es deshalb zu Inkompatibilitäten kam - Der Variant-Typ (
a{sv}) von D-Bus erlaubt die Übertragung beliebiger Daten und wird als Hauptursache für die Auflösung der Protokollkonsistenz genannt
Mängel in der Sicherheitsarchitektur
- In D-Bus fehlt eine zentralisierte Rechteverwaltung oder ein Mechanismus zum Verweigern von Zugriffen
- Alle Apps können die Aufrufe anderer Apps sehen und haben ohne explizite Sicherheitsmaßnahmen unbegrenzten Zugriff
- Auch Secret-Stores wie
gnome-keyring,kwalletsind strukturell schwach- Sobald der Store entsperrt ist, können alle Apps auf alle geheimen Daten zugreifen
- Der Autor bezeichnet das als „ein sicherheitstechnischer Witz“
Die neue Alternative: hyprwire und hyprtavern
- Um die Probleme von D-Bus zu lösen, entwickelt der Autor ein neues Bussystem namens
hyprtavernhyprwireist ein von Wayland inspiriertes knappes und konsistentes Wire-Protokoll- Es zeichnet sich durch erzwungene Typen, schnelle Verbindungen und eine einfache Struktur aus
hyprtavernbasiert auf einer Struktur, in der Apps protokollbasierte Objekte registrieren und gegenseitig entdecken- Es bietet ein integriertes Berechtigungssystem, strikte Protokolltreue, eine vereinfachte API und sichere Voreinstellungen
hyprtavern-kv (sicherer Key-Value-Store)
- Ein Core-Protokoll, das die Secrets API von D-Bus ersetzen soll
- Von einer App registrierte Secrets können nur von dieser App gelesen werden und sind nicht auflistbar
- Auch eine ID-basierte Zugriffskontrolle für Flatpak-, Snap- und AppImage-Apps ist geplant
- Daten werden immer verschlüsselt gespeichert; mit gesetztem Passwort ist echte Sicherheit möglich
- Alle Apps können die Funktion eines sicheren Secret-Stores standardmäßig nutzen
Entwicklungsstand und weitere Pläne
hyprtavernbefindet sich noch in einer frühen Entwicklungsphase und soll künftig intern in Hyprland Version 0.54 genutzt werden- Die anfängliche Verbreitung dürfte begrenzt sein, doch ein schrittweiser Übergang ist möglich
- Anders als bei D-Bus können mehrere Session-Busse parallel betrieben werden, wodurch sich auch Kompatibilitäts-Proxys schreiben lassen
- Das Projekt ist in C++ geschrieben, Bindings für Rust, Go und Python lassen sich jedoch leicht umsetzen
- Der Autor betont: „D-Bus lässt sich grundlegend nicht reparieren und muss komplett neu entworfen werden.“
FAQ-Zusammenfassung
- Zur Kritik, man „erfinde das Rad neu“, sagt der Autor, dass das Grunddesign von D-Bus kaputt ist und ein Redesign unvermeidlich sei
- Die Dokumentation ist derzeit WIP (in Arbeit) und soll nach Fertigstellung veröffentlicht werden
- Wayland wurde nicht verwendet, weil es für allgemeine IPC-Zwecke ungeeignet sei
- Ein D-Bus-Kompatibilitäts-Proxy (
hyprtavern-dbus-notification-proxy) ist möglich - Warum C++ statt Rust verwendet wurde: weil C++ die Hauptsprache des Entwicklers ist
- In Bezug auf Sicherheit lassen sich LD_PRELOAD-Angriffe nicht vollständig verhindern, aber die Struktur erhöht die Angriffshürde und verbessert die Erkennbarkeit
Fazit
- D-Bus gilt wegen fehlender Standardisierung, mangelnder Sicherheit und Inkonsistenz als Engpass im Linux-Desktop-Ökosystem
hyprtavernwird als moderner und sicherer IPC-Bus entwickelt, der D-Bus ersetzen soll,
voraussichtlich mit schrittweiser Einführung rund um das Hyprland-Ökosystem- Das Ziel ist, „den Userspace angenehmer zu machen“
1 Kommentare
Hacker-News-Kommentare
Wenn man die Kontroverse um die Schwachstelle beim Zugriff auf den Secret Store von GNOME sieht, ist es schon lächerlich, dass das GNOME-Team das Problem mit Verweis auf sein Sicherheitsmodell abgestritten hat: „Nicht vertrauenswürdige Apps können nicht mit dem Secret Service kommunizieren“
GNOME wirkt wirklich wie ein Projekt, das von Clowns betrieben wird
Jemand meinte, er wolle „einen neuen Bus selbst bauen“, und ich habe vorgeschlagen, stattdessen Binder wiederzuverwenden, das bereits auf Milliarden Geräten ausgeliefert wird
Binder ist die zentrale IPC von Android und hat deutlich mehr Entwickler sowie erprobten Code hinter sich
Verwandte Artikel: LWN, Rust-for-Linux-Mailingliste
Ich hatte auf Hyprwire und Hyprtavern gehofft, aber es gibt fast keine Dokumentation oder Tests
Schade, denn solche Projekte hätten ein guter Ausgangspunkt sein können
Die OpenWrt-Entwickler haben schon vor langer Zeit mit ubus eine Alternative gebaut
Siehe: ubus-Dokumentation, Vergleich ubus vs dbus
Ein Sicherheitsmodell gibt es allerdings kaum, was bei OpenWrt auch nachvollziehbare Gründe hat
Eines der Probleme von D-Bus sind Schwachstellen, die dadurch entstehen, dass Browser-Erweiterungen mit GNOME/KDE kommunizieren
Schon allein der Besuch einer Website konnte dazu führen, dass D-Bus-APIs geflutet wurden und der Desktop hängen blieb
Für Sicherheitsforscher ist D-Bus wirklich ein Bereich, den es sich zu untersuchen lohnt
D-Bus ist auf dem Linux-Desktop das, was XPC, COM und Android IPC am nächsten kommt
Wegen der Fragmentierung des Desktops ist es aber schwer, einen einheitlichen Entwicklungs-Stack zu schaffen
Was für GNOME gebaut wurde, ist unter KDE nutzlos, und XFCE oder Sway machen wieder ihr eigenes Ding
Mir war zum ersten Mal klar, dass Secret Stores wie KWallet oder GNOME Keyring im entsperrten Zustand faktisch für alle Apps zugänglich sind
Als ich das in der
seahorse-GUI nachgesehen habe, waren dort überwiegend Chromium-bezogene Schlüssel oder JetBrains-Account-TokensKeine Passwörter im Klartext, aber wenn eine bösartige App tiefer in die Chromium-Daten eintaucht, könnte sie vielleicht noch mehr finden
Wenn das System beim Zugriff keine Benachrichtigung anzeigt, macht es keinen großen Unterschied, welche Software das verwaltet
Ich frage mich: „Warum braucht man überhaupt ein allgemeines Bus-Protokoll?“
HTTP oder ein einfaches JSON-Protokoll über Unix Domain Sockets würde völlig reichen
Rechtemanagement, SSH-Forwarding, Container-Mounts usw. werden ebenfalls unterstützt
D-Bus hat mit Services, Interfaces, Pfaden und Methoden eine komplexe Struktur, identifiziert Nachrichten aber trotzdem nur unvollständig, und man muss die Protokolldetails jeder App kennen
Letztlich ist auch Proxying schwierig, und das ganze System ist unnötig komplex
Das Design von D-Bus wirkt wie ein Beispiel für das Gesetz der Willkür, wonach nicht unbedingt die beste Lösung ausgewählt wird
So wie es unzählige Frameworks gibt, die besser sind als React, aber unbekannt bleiben und untergehen
Dass GNOME bei der Erwiderung auf die Schwachstellenmeldung auf die Zugriffsbeschränkungen der Flatpak-Sandbox verwiesen hat, erinnerte mich an diesen früheren Microsoft-Blogbeitrag
Außerdem kann ich wirklich nicht verstehen, warum das Zitat nur als Screenshot gepostet wurde, sodass man es nicht einmal kopieren kann