- Im März 2024 wurde eine Backdoor in der Software
xz entdeckt, die in Linux-Distributionen zum Entpacken von Source-Tarballs verwendet wird.
- Diese Backdoor wurde über drei Jahre hinweg heimlich von dem böswilligen Maintainer Jia Tan eingeschleust.
- Der Vorfall hatte große Auswirkungen, da er Remote Code Execution ermöglichte und äußerst schwer zu entdecken war.
- Zufällig wurde sie von Andres Freund, einem Postgres-Entwickler bei Microsoft, entdeckt, als er Performance-Einbußen untersuchte, wodurch eine große Katastrophe verhindert werden konnte.
Wie der Angriff funktioniert
- Die Backdoor kapert das
ssh-Programm und ermöglicht dadurch Remote Code Execution.
- Durch die Modifikation der Funktion
RSA_public_decrypt kann der Angreifer beim Login mit einem bestimmten RSA-Schlüssel beliebige Befehle ausführen.
- Sie besteht aus zwei Hauptkomponenten:
- Ein Skript, das im Rahmen des
xz-Build-Prozesses eine bösartige Objektdatei installiert.
- Ein Verfahren zum Hooking der Funktion
RSA_public_decrypt.
1. Skript zur Installation der bösartigen Objektdatei
- Die bösartige Objektdatei ist in Testdateien des
xz-Git-Repositorys versteckt.
- Die Backdoor wird nur in den vom Maintainer bereitgestellten Release-Tarballs aktiviert.
2. Verfahren zum Hooking der Funktion RSA_public_decrypt
- Es nutzt die ifunc-Funktion von
glibc, um die Ausführung von Code zu erzwingen, der zur dynamischen Ladezeit läuft.
- Wenn
ssh ausgeführt wird, werden libsystemd und liblzma geladen, und dabei führt die Backdoor beliebigen Code aus.
Wie sich die xz-Katastrophe hätte vermeiden lassen
- Um die Vertrauenswürdigkeit von Open-Source-Software zu erhöhen, müssen sowohl soziale als auch technische Probleme angegangen werden.
- Die Sicherheitsprozesse der Software-Lieferkette müssen verbessert werden.
Software aus vertrauenswürdigen Quellen bauen
- Der Angriff war wirksam, weil viele Distributionen
xz anhand der vom Maintainer bereitgestellten Tarballs gebaut haben.
- Wenn möglich, sollte Software aus der vertrauenswürdigsten verfügbaren Quelle gebaut werden.
Wenn es die Umstände erlauben...
- NixOS ist eine Distribution auf Basis eines funktionalen Paketverwaltungsmodells, bei dem jedes Paket in der funktionalen Programmiersprache Nix beschrieben wird.
- In NixOS gibt es die Praxis, automatisch auf GitHub erzeugte Source-Archive zu verwenden.
Vertrauen in nicht vertrauenswürdige Release-Tarballs aufbauen
- NixOS musste in der Bootstrap-Phase die vom Maintainer bereitgestellten Tarballs verwenden.
- Um die Sicherheit der Software-Lieferkette zu stärken, müssen bestimmte Schutzmaßnahmen eingeführt werden.
1. Quellen vergleichen
- Es ist wichtig zu prüfen, ob der in der Distribution verwendete Source-Tarball mit dem von GitHub identisch ist.
- Allerdings unterscheiden sich Release-Tarballs oft vom Quellcode, und das ist nicht unbedingt ein Problem.
2. Bitgenaue Reproduzierbarkeit nutzen
- Reproduzierbare Builds sind eine Eigenschaft von Softwareprojekten, bei der unter denselben Bedingungen bei zwei Builds identische Artefakte erzeugt werden.
- Mit bitgenauer Reproduzierbarkeit lässt sich Vertrauen in nicht vertrauenswürdige, vom Maintainer bereitgestellte Tarballs aufbauen.
Fazit
- Der Vorfall mit der
xz-Backdoor macht deutlich, wie wichtig Sicherheit in der Open-Source-Software-Lieferkette ist.
- Systeme wie NixOS können ihre Sicherheit durch reproduzierbare Builds verbessern.
1 Kommentare
Hacker-News-Kommentare
NixOS und reproduzierbare Builds haben die xz-Backdoor nicht erkannt. NixOS hat den bösartigen xz-Build ausgeliefert, aber da er nicht auf NixOS abzielte, gab es kein Problem
Der Autor scheint sich nur auf diesen Vorfall zu konzentrieren. Der Fall Jiatan ist ein Einzelfall, und auch in anderen Szenarien können Abwehrmechanismen versagen
NixOS ist hier nicht relevant, weil die xz-Backdoor auf RedHat und Debian abzielte. Ironischerweise wurde die Backdoor von einem Microsoft-Mitarbeiter entdeckt
Im Artikel wird erwähnt, dass Distributionen den Source Code direkt aus einem VCS (z. B. Github) beziehen sollten statt aus traditionellen Installations-Tarballs
Wenn man sich auf Vorfälle konzentrieren will, die NixOS hätte verhindern können, sollte man sich auf den CrowdStrike-Vorfall konzentrieren. Wenn man mit der Konfiguration von gestern hätte booten können, hätte man die meisten Probleme abmildern können
NixOS kompiliert alles aus den Quellen, prüft kryptografisch, dass die verwendeten Quellen nicht manipuliert wurden, und hat Versionsabhängigkeiten zwischen Paketen. Debian hat ebenfalls reproduzierbare Builds
"Hätte können" bedeutet, dass nichts bewiesen wurde, und tatsächlich haben sie es ausgeliefert
Ausgezeichnete erläuternde Analyse. Falscher, irreführender Titel, vielleicht "technisch korrekt", aber höchstens im Sinn von "mit Backdoor versehen"
Wenn Jia Tans PR genehmigt worden wäre, hätten bösartige Artefakte genauso leicht über Github-Releases verbreitet werden können wie über Tarballs. Es ist schwer nachzuvollziehen, inwiefern Github-Releases eine Sicherheitsmaßnahme sein sollen
Dass Release-Tarballs sich von den Quellen unterscheiden
git add&commitfestgehalten werden. Selbst dann müsste man die Commit-Historie prüfen, und da es visuell harmlos aussah, ist fraglich, wie man das verifizieren sollEs gab mehr Probleme als nur das Pushen vergifteter Testdateien, aber es ist schwer zu verstehen, wie Nix das hätte verhindern können
Ich frage mich, ob ich den Artikel falsch verstanden habe oder etwas übersehen habe