Was wir über die xz Utils-Hintertür wissen, die beinahe die Welt infiziert hätte

Vergrößern / Warnbildschirm „Malware erkannt“ mit abstraktem binärem Code 3D-Digitalkonzept

Getty Images

Am Freitag enthüllten Forscher die Entdeckung einer Hintertür, die absichtlich in xz Utils eingebaut wurde, einem Open-Source-Dienstprogramm zur Datenkomprimierung, das auf fast allen Installationen von Linux und anderen Unix-ähnlichen Betriebssystemen verfügbar ist. Die Person oder die Personen, die hinter diesem Projekt stehen, haben wahrscheinlich Jahre damit verbracht. Sie waren wahrscheinlich kurz davor, das Backdoor-Update in Debian und Red Hat, den beiden größten Linux-Distributionen, zu integrieren, als ein Softwareentwickler mit scharfem Blick etwas Verdächtiges entdeckte.

„Dies könnte der am besten ausgeführte Supply-Chain-Angriff sein, den wir je offen beschrieben haben, und es ist ein Albtraumszenario: böswillig, kompetent, autorisierter Upstream in einer weit verbreiteten Bibliothek“, sagte Software- und Kryptografie-Ingenieur Filippo Valsorda über den Versuch war dem Erfolg furchtbar nahe.

Forscher haben das Wochenende damit verbracht, Hinweise zu sammeln. Folgendes wissen wir bisher.

Was ist xz Utils?

xz Utils ist unter Linux nahezu allgegenwärtig. Es bietet verlustfreie Datenkomprimierung auf praktisch allen Unix-ähnlichen Betriebssystemen, einschließlich Linux. xz Utils bietet wichtige Funktionen zum Komprimieren und Dekomprimieren von Daten bei allen Arten von Vorgängen. xz Utils unterstützt auch das alte .lzma-Format, was diese Komponente noch wichtiger macht.

Was ist passiert?

Andres Freund, ein Entwickler und Ingenieur, der an den PostgreSQL-Angeboten von Microsoft arbeitet, hat kürzlich Leistungsprobleme behoben, die ein Debian-System mit SSH hatte, dem am weitesten verbreiteten Protokoll für die Remote-Anmeldung bei Geräten über das Internet. Insbesondere verbrauchten SSH-Anmeldungen zu viele CPU-Zyklen und erzeugten Fehler bei Valgrind, einem Dienstprogramm zur Überwachung des Computerspeichers.

Durch eine Kombination aus reinem Glück und Freunds aufmerksamem Auge entdeckte er schließlich, dass die Probleme auf Aktualisierungen zurückzuführen waren, die an xz Utils vorgenommen worden waren. Am Freitag wandte sich Freund an die Open-Source-Sicherheitsliste, um offenzulegen, dass die Aktualisierungen darauf zurückzuführen seien, dass jemand absichtlich eine Hintertür in die Komprimierungssoftware eingebaut habe.

Was macht die Hintertür?

Schadcode, der den xz Utils-Versionen 5.6.0 und 5.6.1 hinzugefügt wurde, veränderte die Art und Weise, wie die Software bei der Durchführung von Vorgängen im Zusammenhang mit der lzma-Komprimierung oder -Dekomprimierung funktioniert. Wenn diese Funktionen SSH beinhalteten, ermöglichten sie die Ausführung von Schadcode mit Root-Rechten. Dieser Code ermöglichte es jemandem, der im Besitz eines vorgegebenen Verschlüsselungsschlüssels war, sich über SSH in das hintertürige System einzuloggen. Von da an hätte diese Person das gleiche Maß an Kontrolle wie jeder autorisierte Administrator.

Wie ist diese Hintertür entstanden?

Es scheint, dass an dieser Hintertür jahrelang gearbeitet wurde. Im Jahr 2021 engagierte sich jemand mit dem Benutzernamen JiaT575 zum ersten Mal für ein Open-Source-Projekt. Im Nachhinein ist die Änderung am libarchive-Projekt verdächtig, da sie die Funktion „safe_fprint“ durch eine Variante ersetzt hat, die seit langem als weniger sicher gilt. Damals bemerkte es niemand.

Im folgenden Jahr reichte JiaT575 einen Patch über die xz Utils-Mailingliste ein, und fast sofort beteiligte sich ein noch nie zuvor gesehener Teilnehmer namens Jigar Kumar an der Diskussion und argumentierte, dass Lasse Collin, der langjährige Betreuer von xz Utils, keine Aktualisierungen durchgeführt habe die Software oft oder schnell genug. Mit der Unterstützung von Dennis Ens und mehreren anderen Personen, die noch nie auf der Liste gestanden hatten, setzte Kumar Collin unter Druck, einen zusätzlichen Entwickler zu engagieren, um das Projekt aufrechtzuerhalten.

Im Januar 2023 verpflichtete sich JiaT75 zum ersten Mal zu xz Utils. In den darauffolgenden Monaten wurde JiaT75, der den Namen Jia Tan verwendete, zunehmend in xz Utils-Angelegenheiten verwickelt. Zum Beispiel ersetzte Tan Collins‘ Kontaktinformationen durch seine eigenen auf Microsofts oss-fuzz, einem Projekt, das Open-Source-Software auf Anzeichen von Bösartigkeit scannt. Tan forderte außerdem, dass oss-fuzz die ifunc-Funktion während des Tests deaktiviert, eine Änderung, die es daran hinderte, die böswilligen Änderungen zu erkennen, die Tan bald an xz Utils vornehmen würde.

Im Februar dieses Jahres gab Tan Commits für die Versionen 5.6.0 und 5.6.1 von xz Utils heraus. Die Updates implementierten die Hintertür. In den folgenden Wochen appellieren Tan und andere an die Entwickler von Ubuntu, Red Hat und Debian, die Updates in ihre Betriebssysteme einzubinden. Laut der Sicherheitsfirma Tenable gelangte schließlich eines der beiden Updates in die folgenden Versionen:

Können Sie mehr darüber sagen, was diese Hintertür bewirkt?

Kurz gesagt: Es ermöglicht jemandem mit dem richtigen privaten Schlüssel, sshd, die ausführbare Datei, die für die Herstellung von SSH-Verbindungen verantwortlich ist, zu kapern und von dort aus bösartige Befehle auszuführen. Die Hintertür wird durch einen fünfstufigen Loader implementiert, der eine Reihe einfacher, aber cleverer Techniken verwendet, um sich selbst zu verbergen. Es bietet auch die Möglichkeit, neue Nutzlasten zu liefern, ohne dass größere Änderungen erforderlich sind.

Mehrere Personen, die die Updates rückentwickelt haben, haben noch viel mehr über die Hintertür zu sagen.

Entwickler Sam James hat diesen Überblick bereitgestellt:

Diese Hintertür besteht aus mehreren Komponenten. Auf hohem Niveau:

  • Die Release-Tarballs der Upstream-Veröffentlichungen verfügen nicht über denselben Code wie GitHub. Dies ist in C-Projekten üblich, sodass nachgeschaltete Verbraucher sich nicht daran erinnern müssen, wie Autotools und Autoconf ausgeführt werden. Die Version von build-to-host.m4 in den Release-Tarballs unterscheidet sich stark vom Upstream auf GitHub.
  • Es gibt auch gestaltete Testdateien im Ordner „tests/“ im Git-Repository. Diese Dateien befinden sich in den folgenden Commits:
  • Ein von build-to-host.m4 aufgerufenes Skript, das diese schädlichen Testdaten entpackt und zum Ändern des Build-Prozesses verwendet.
  • IFUNC, ein Mechanismus in Glibc, der indirekte Funktionsaufrufe ermöglicht, wird verwendet, um Laufzeit-Hooking/Umleitung der Authentifizierungsroutinen von OpenSSH durchzuführen. IFUNC ist ein Tool, das normalerweise für legitime Zwecke verwendet wird, in diesem Fall jedoch für diesen Angriffspfad ausgenutzt wird.

Normalerweise veröffentlicht Upstream Release-Tarballs, die sich von den automatisch generierten in GitHub unterscheiden. In diesen modifizierten Tarballs ist eine bösartige Version von build-to-host.m4 enthalten, um während des Build-Prozesses ein Skript auszuführen.

Dieses Skript (zumindest in den Versionen 5.6.0 und 5.6.1) prüft verschiedene Bedingungen wie die Architektur der Maschine. Hier ist ein Ausschnitt des bösartigen Skripts, das von build-to-host.m4 entpackt wird, und eine Erklärung seiner Funktionsweise:

if ! (echo "$build" | grep -Eq "^x86_64" > /dev/null 2>&1) && (echo "$build" | grep -Eq "linux-gnu$" > /dev/null 2>&1);then
  • Wenn amd64/x86_64 das Ziel des Builds ist
  • Und wenn das Ziel den Namen linux-gnu verwendet (überprüft hauptsächlich die Verwendung von glibc)

Es prüft auch die verwendete Toolchain:

if test "x$GCC" != 'xyes' > /dev/null 2>&1;then
exit 0
fi
if test "x$CC" != 'xgcc' > /dev/null 2>&1;then
exit 0
fi
LDv=$LD" -v"
if ! $LDv 2>&1 | grep -qs 'GNU ld' > /dev/null 2>&1;then
exit 0

Und wenn Sie versuchen, ein Debian- oder Red Hat-Paket zu erstellen:

if test -f "$srcdir/debian/rules" || test "x$RPM_ARCH" = "xx86_64";then

Dieser Angriff scheint daher auf AMD64-Systeme abzuzielen, auf denen Glibc unter Verwendung von Debian- oder von Red Hat abgeleiteten Distributionen ausgeführt wird. Andere Systeme könnten derzeit anfällig sein, aber wir wissen es nicht.

In einem Online-Interview bestätigte der Entwickler und Reverse Engineer HD Moore den Verdacht von Sam James, dass die Hintertür entweder auf Debian- oder Red Hat-Distributionen abzielte.

„Der Angriff war insofern hinterhältig, als er die letzten Schritte der Hintertür nur ausführte, wenn man die Bibliothek auf amd64 (Intel x86 64-Bit) baute und ein Debian- oder RPM-Paket baute (anstatt es für eine lokale Installation zu verwenden) ,” er schrieb.

Er zitierte Beobachtungen von Forschern, die gemeinsam das Wochenende damit verbrachten, die Malicius-Updates zu analysieren, und fuhr fort:

Wenn bei der Überprüfung eines öffentlichen SSH-Schlüssels der öffentliche Schlüssel mit einer bestimmten Fingerabdruckfunktion übereinstimmt, werden die Schlüsselinhalte mithilfe eines vorinstallierten Schlüssels entschlüsselt, bevor der öffentliche Schlüssel tatsächlich überprüft wird. Der entschlüsselte Inhalt wird dann direkt an das System weitergeleitet.

Wenn der Fingerabdruck nicht übereinstimmt oder die entschlüsselten Inhalte nicht einem bestimmten Format entsprechen, wird auf die reguläre Schlüsselüberprüfung zurückgegriffen, und niemand erfährt davon.

Die Hintertür ist super hinterhältig. Es nutzt eine wenig bekannte Funktion der glibc, um eine Funktion einzubinden. Es wird nur ausgelöst, wenn die hintertürige xz-Bibliothek von einem /usr/bin/sshd-Prozess auf einer der betroffenen Distributionen geladen wird. Es mag noch viele andere Hintertüren geben, aber die, über die alle reden, nutzt das Funktionsindirektions-Zeug, um den Haken hinzuzufügen. Die Nutzlast wurde in gefälschte xz-Testdateien codiert und läuft praktisch als Shellcode, wodurch der SSH-RSA-Schlüsselverifizierungscode so geändert wird, dass ein magischer öffentlicher Schlüssel (der während der normalen Authentifizierung gesendet wird) dem Angreifer Zugriff verschafft

​​Ihr großer Plan war:

1) Die Veröffentlichungs-Tarballs heimlich durch eine Hintertür öffnen, aber nicht den Quellcode

2) Verwenden Sie Sockpuppet-Konten, um die verschiedenen Linux-Distributionen davon zu überzeugen, die neueste Version herunterzuladen und zu verpacken

3) Sobald diese Distributionen es ausgeliefert haben, könnten sie jeden nachgeschalteten Benutzer/Firmensystem usw. übernehmen

Weitere technische Analysen finden Sie im obigen Bluesky-Thread von Valsorda, dem Forscher Kevin Beaumont und der Offenlegung vom Freitag von Freund.

Was wissen wir noch über Jia Tan?

Im Moment extrem wenig, vor allem für jemanden, der mit der Verwaltung einer so allgegenwärtigen und sensiblen Software wie xz Utils betraut ist. Diese Entwicklerpersönlichkeit hat in den letzten Jahren Dutzende anderer Open-Source-Software berührt. Derzeit ist nicht bekannt, ob hinter diesem Benutzernamen jemals eine reale Person steckte oder ob es sich bei Jia Tan um eine völlig erfundene Person handelt.

source site

Leave a Reply