xz-Backdoor – eine Aufarbeitung

Die kürzlich aufgedeckte Backdoor in der Open Source-Software xz ließ meinen Kollegen Justus Tartz und mich nicht mehr los. Die Thematik ist komplex und hat Implikationen für die Art, wie wir mit Open Source-Software in Zukunft umgehen sollten. Dieser Artikel stellt das Ergebnis unserer Recherchen und Überlegungen dar.

Angriff auf das Internet

Am 28. März 2024 kam es zu einer Beinahe-Kernschmelze in der weltweiten Open-Source-Infrastruktur. Sie wurde (Ehre, wem Ehre gebührt) von Andres Freund, einem der Entwickler von Postgresql und Principal Software Engineer bei Microsoft, verhindert. Ihm fiel auf, dass seine SSH-Anmeldung an einem Linux-Testsystem eine halbe Sekunde länger dauerte als gewöhnlich. Was war passiert?

Blicken wir zurück ins Jahr 2021. Ende Januar dieses Jahres erschien ein neuer GitHub-Account mit dem Namen Jia Tan auf der Bildfläche, der sich ab Ende 2021 aktiv in die Entwicklung der xz Utils einbrachte. xz ist ein Tool, das verlustfreie Datenkompression ermöglicht und in nahezu allen Unix-ähnlichen und damit auch in allen Linux-Systemen zum Einsatz kommt, beispielsweise um den Bootloader vor dem Systemstart zu entpacken. Der Entwickler von xz, Lasse Collin, zeigte sich erfreut über den Enthusiasmus und die damit einhergehende schnelle Weiterentwicklung von xz, welche aufgrund gesundheitlicher Probleme Collins‘ bis dahin schon länger nur schleichend vorankam. Spätestens ab dem dritten Quartal des Jahres 2022 hatte Jia Tan in diesem Projekt den Status eines Maintainers, ab Anfang 2023 wurden die ersten eigenen Commits gemerged. Dazu später mehr.

Jia Tan brachte in der Zeit zwischen Anfang 2021 und April 2024 rund 700 Änderungen in den xz-Quellcode ein. Doch nicht nur dort war dieser Account aktiv, auch in anderen Open Source Projekten wie libarchive, die mit xz in enger Abhängigkeit stehen, wurden bereits ab 2021 Änderungen eingebracht. libarchive ist eine Bibliothek zum Packen, Entpacken und Verändern von Archiven wie zip und rar, welche unter anderem auch in Microsoft Windows zum Einsatz kommt.

Als am 28.03.2024 die schlechte Performance des OpenSSH-Servers von Andres Freund bemerkt wurde, wusste er noch nicht, welchen Impact seine Entdeckung haben sollte. Er begann, den sshd-Prozess zu debuggen, um herauszufinden, an welcher Stelle es zu den beobachteten Verzögerungen kam. Ihm fiel auf, dass der Prozess selbst bei fehlerhaften Logins eine bemerkenswert hohe CPU-Last erzeugte und tauchte tiefer in die Abhängigkeiten auf seinem System ein. Die Spur führte ihn zu der Bibliothek liblzma, welche als Teil von xz paketiert wird. Er erinnerte sich, dass er bei automatisierten Tests einige Wochen zuvor eine Warnung von Valgrind, eine Werkzeugsammlung für die dynamische Fehleranalyse, gesehen hatte, die ebenfalls auf diese Library zurückging.

Ein Review des Quellcodes für xz brachte daraufhin zu Tage, dass offensichtlich eine Backdoor hinzugefügt wurde, deren Funktion zu diesem Zeitpunkt noch unklar war. Klar war jedoch, welcher Nutzer die entsprechenden Änderungen gemacht hatte: Jia Tan.

Was folgte war ein aufregendes Oster-Wochenende. Zahlreiche Sicherheitsforscher und Enthusiasten stürzten sich auf den Quellcode und arbeiteten in Rekordzeit heraus, wie die Backdoor implementiert wurde, welche Systeme sie gefährdete, wo sie bereits ausgerollt worden war und wie sie bisher verborgen bleiben konnte. Es zeichnet sich ein Krimi ab, der aufgrund der Länge und der Tiefe der Planung nicht zuletzt den Verdacht weckt, dass hier nicht nur eine kleine Gruppe von bösartigen Hackern oder gar eine Einzelperson am Werk war.

Die manipulierte Version von xz-utils wurde durch die schnelle und öffentliche Bekanntmachung seitens Andres Freund und die ebenso schnelle Reaktion der einzelnen betroffenen Distributionen nur auf wenigen Systemen ausgerollt. Betroffen waren für kurze Zeit Debian unstable/testing, darauf aufbauend Kali Linux sowie Fedora Rawhide und Fedora Linux 40 Beta. Auch der eigentliche Maintainer Lasse Collin reagierte schnell auf die Meldungen und half, den Schaden zu begrenzen. Siehe dazu seine Informationsseite.

Timeline eines Großangriffs

Der folgende Abschnitt basiert grob auf https://research.swtch.com/xz-timeline, um die Ereignisse in eine sinnvolle zeitliche Relation zu setzen.

Ende 2021 reicht der Account Jia Tan seinen ersten kleinen Patch bei der xz-devel Mailingliste ein. Es handelt sich um eine Konfigurationsdatei, die auf lange Sicht dazu dienen sollte, die Lesbarkeit des Codes zu verbessern, indem Code-Editor-Programmen Richtlinien mitgegeben werden, wie sie den Quellcode formatieren und anzeigen sollen. Eine harmlose, aber sinnvolle Änderung, die vom Maintainer, Lasse Collin, übernommen wird.

Zwei weitere Patches folgen jeweils einen Monat und ein halbes Jahr später, die beide ebenso harmlos sind; auch im Nachgang betrachtet scheint es hier eher um das Erlangen von Vertrauen gegangen zu sein, nicht um die direkte Vorbereitung einer bösartigen Implementierung.

Drei Tage nach dem inzwischen vierten Patch von Jia Tan erscheint ein neuer Nutzer auf der Bildfläche: Jigar Kumar. Weder dieser Account noch die zugehörige E-Mail-Adresse tauchten, soweit es sich nachvollziehen lässt, vorher irgendwo auf – weder auf Mailinglisten, noch bei Github oder sonstwo im Internet. Dieser Account macht nun auf der Mailingliste Druck und beklagt sich darüber, dass der letzte Patch von Jia Tan noch immer nicht gemerged (unter „mergen“ versteht man das Zusammenführen von Änderungen im Quellcode) sei, und dass die Entwicklungsgeschwindigkeit dieses Projektes viel zu langsam sei. Zu diesem Zeitpunkt hatte Lasse Collins bereits mehrere Patches von Jia Tan gemerged.

Etwa einen Monat später erscheint ein weiterer, bisher nirgendwo in Erscheinung getretener Account in der Mailingliste: Dennis Ens. Dieser stellt die Frage, ob das Projekt überhaupt noch aktiv betreut werde, da der Maintainer (Lasse Collin) oft für lange Zeit keine Patches liefere. Dieser meldet sich daraufhin zurück und deutet an, dass Jia Tan möglicherweise in näherer Zukunft im Projekt eine größere Rolle spielen werde, seine eigenen Ressourcen seien derzeit gebunden.

Wenige Tage darauf tritt wieder Jigar Kumar auf den Plan und beschwert sich, dass weiterhin Patches nicht gemerged seien. Wiederum ein paar Tage darauf macht er im Nachbarthread für die Java-Implementierung von xz Druck und drängt darauf, dass ein neuer Maintainer für das Projekt gefunden werden muss. Er unterstellt, dass Lasse Collin das Interesse an xz verloren habe. Dieser antwortet nur einen Tag später und offenbart, dass er unter Anderem schon länger psychisch erkrankt sei (neben anderen Faktoren, die er offen lässt) und daher keine Möglichkeit habe, zeitnah die offenen Patches zu mergen. Auch hier erwähnt er, dass Jia Tan diesbezüglich in Zukunft möglicherweise mehr Verantwortung übernehmen könnte und erinnert daran, dass xz ein Freizeit-Projekt sei.

Zwei Tage später merged Lasse Collin den ersten Commit (ein Commit ist einfach gesagt eine finale Änderung am Quellcode, oft im Rahmen eines Merge), bei dem Jia Tan erstmals explizit als Autor hinterlegt ist.

In den folgenden zwei Wochen melden sich Jugar Kumar und Dennis Ens wiederholt zu Wort und fordern, schnell einen neuen Maintainer einzusetzen. Jia Tan wird nicht namentlich benannt, steht jedoch als einziger Kandidat im Raum und so ist klar, in welche Richtung die Forderungen zielen. Lasse Collin antwortet, Jia Tan sei faktisch schon Co-Maintainer und entsprechende Änderungen seien bereits auf dem Weg.

Die letzte Wortmeldung der beiden verdächtig frischen Accounts erfolgt weniger als einen Monat nach ihrem ersten Auftreten: Jugar Kumar drängt am 22.06.2022 darauf, dass Jia Tan Maintainer-Rechte bekommt, um selber Commits mergen zu können.

Ab Ende September 2022 scheint Jia Tan endgültig Maintainer-Rechte erlangt zu haben. Der Account postet Release Summaries für die anstehenden xz-Versionen, ist über ein gemeinsames Postfach, auf das beide Maintainer Zugriff haben, erreichbar. In der README des xz-Projekts ist er nun ebenfalls als Maintainer neben Lasse Collin geführt.
Ende 2022 merged der Account Jia Tan schließlich den ersten eigenen Commit, was den Zeitpunkt markiert, an dem der Account nachweislich Commit-Rechte erhalten hat.

Mitte Januar 2023 baut Lasse Collin sein letztes Release 5.4.1 für xz, Mitte März erscheint das erste von Jia Tan selbst gebaute Release 5.4.2. Ebenfalls Mitte März ändert Jia Tan die projektbezogenen Kontaktdaten im Projekt oss-fuzz (ein Tool, das Fuzzing-Techniken nutzt, um Programmierfehler im Quellcode automatisiert zu finden) und setzt seine private Mailadresse als Hauptkontakt für xz ein.

Bis hierhin gab es zwar einige Auffälligkeiten, jedoch keine Hinweise auf eine „feindliche Übernahme“. Das Projekt benötigte in der Tat frischen Wind und das Engagement seitens Jia Tan kam Lasse Collin definitiv nicht ungelegen. Vielleicht klingelten vor allem aus der Aussicht auf eine Nachfolge heraus keine Alarmglocken, vielleicht waren die Auffälligkeiten auch zu unterschwellig – faktisch war bis zu diesem Zeitpunkt (nach aktuellem Erkenntnisstand) noch nichts Auffälliges geschehen, das einen fundierten Verdacht hätte wecken können.

Zwei Tage nach der Änderung der Kontaktdaten bei oss-fuzz betritt ein neuer Account die Bühne: Hans Jansen. Dieser sendet einige Patches an das xz-Projekt, die von Lasse Collin gemerged werden. Auch Hans Jansen ist vorher nirgendwo in Erscheinung getreten, weder in der Entwicklerszene noch irgendwo sonst im Internet. Die Patches implementieren eine neue Abhängigkeit von GNU indirect functions, die es erlauben, die globale Funktionstabelle beim Start des Programms zu verändern, bevor diese schreibgeschützt geladen wird. Ohne Kontext eine Änderung, die harmlos wirkt, denn durch sie kann es durchaus zu Performance-Verbesserungen kommen.

Zwei Wochen darauf reicht Jia Tan im Projekt oss-fuzz einen Commit ein, der die GNU indirect function-Unterstützung in oss-fuzz für die Komponente xz deaktiviert, da es angeblich Inkompatibilitäten mit einem Programmbestandteil von xz gebe. Als Maintainer von xz war diese Änderung nicht auffällig und wurde implementiert. Rückblickend führte das jedoch dazu, dass Auffälligkeiten, die ifunc (kurz für GNU indirect funktion) betrafen, von oss-fuzz für das Projekt xz nicht mehr erkannt werden konnten.

Anfang 2024 verschiebt Jia Tan die bisherige xz-Projektseite auf tukaani.org, die bis dato auf dem privat betriebenen Server von Lasse Collin gehostet wurde, zu GitHub Pages, auf die Zugriff für alle Maintainer bestand. Die URL ändert sich auf xz.tukaani.org, die Änderung war also von Lasse Collin abgesegnet, der diese als Inhaber der Domain veranlassen musste.

Am 22.02.2024 startet die lange vorbereitete Implementierung der Backdoor in xz. Jia Tan lädt manipulierte binäre Test-Files hoch, die auf den ersten Blick harmlos aussehen. Solche Dateien werden für automatisierte Tests verwendet, beispielsweise um zu überprüfen, wie das Programm mit fehlerhaften sowie validen Archiven umgeht.

Einen Tag später baut Jia Tan die Version 5.6.0 von xz und fügt eine manipulierte Datei, build-to-host.m4, im Release-Archiv hinzu. m4-Dateien versorgen üblicherweise das Build-Script mit den korrekten Variablen für die jeweilige Umgebung. In diesem konkreten Fall prüft eine Routine des Scriptes, ob es sich bei dem Zielsystem um Debian (deb) oder RedHat (rpm) handelt und implementiert die händisch gebaute und mit an RC4 angelehnten Algorithmen verborgene Backdoor in den Build-Prozess (dokumentiert ist die Entdeckung beispielsweise hier: https://twitter.com/nugxperience/status/1773906926503591970). Die manipulierte m4-Datei taucht in der xz-Repository nicht auf, was jedoch nicht sonderlich auffällt, da beim Paketieren häufig zusätzliche Dateien erzeugt werden, die dann nur im fertigen Archiv, nicht aber im Quellcode vorliegen.

Am nächsten Tag, dem 24.02.2024, fallen bei xz auf Gentoo, einer Linux-Distribution, die ihre Pakete direkt aus den Sourcecode-Quellen baut und keine Paketierung einsetzt, Fehlermeldungen und Abstürze mit Bezug auf ifunc auf. Der Fehler wird diskutiert, da aber nicht mit den vorgebauten Paketen gearbeitet wird, existiert auch die Backdoor-Implementierung auf den betroffenen Systemen nicht und wird daher nicht entdeckt. Es sieht tatsächlich nach einem Bug in der neuen ifunc-Implementierung aus, die nichts mit der Backdoor zu tun hat.

Ende Februar werden die Backdoor-Versionen 5.6.0-0.1 und 5.6.0-0.2 in Debian unstable übernommen. Zeitgleich wird ein Patch von Jia Tan durch Lasse Collin gemerged, der den Support für Landlock (ein recht junges Security-Modul in Linux) durch einen unauffällig platzierten Fehler im Quellcode bricht. Das Script geht durch diesen Fehler letztendlich davon aus, dass das Zielsystem Landlock nicht unterstützt und deaktiviert die zugehörigen Schutzmechanismen. Entweder übersah Lasse Collin den Fehler oder Jia Tan mergte seinen Commit in dessen Namen, was bei GitHub durchaus möglich ist – nachvollziehen lässt sich das im Nachhinein nicht so einfach.

Einen Tag später schickt der Nutzer Github-User teknoraver (einer der vielen Code-Zulieferer für systemd) einen Pull Request (die Aufforderung an ein git-Projekt, eine bestimmte Änderung zu implementieren) an das systemd-Projekt, der das Linken von liblzma (als Teil des xz-Projekts) in systemd beendet. Die Backdoor setzt aber genau auf diesen Mechanismus; ohne dass liblzma in systemd geladen wird kommt die Backdoor nicht zur Ausführung. Diese Änderungsanfrage führt vermutlich dazu, dass Jia Tan in Zugzwang gerät, um die Backdoor so schnell und so weit wie möglich zu streuen, bevor sie komplett wertlos wird.

Anfang März 2024 fallen bei RedHat-basierenden Linux-Distributionen in Bezug auf xz Valgrind-Fehlermeldungen auf, die in der Funktion _get_cpuid von liblzma ihren Ursprung haben. Unabhängig davon wird der von teknoraver eingereichte Patch zum Entfernen von liblzma aus systemd gemerged.

Noch am selben Tag fügt Debian die mit der Backdoor versehene xz-Version 5.6.0-0.2 zum Debian testing-Branch hinzu.
Ebenfalls am 05.03.2024 committet Jia Tan zwei Bugfixes in das xz-Projekt, die die ifunc-Fehler beheben.

Am 08.03.2024 committet Jia Tan einen vermeintlichen Bugfix für die Valgrind-Thematik, der allerdings wohl eher zur Ablenkung vom eigentlichen Problem dienen soll.

Einen Tag später lädt Jia Tan aktualisierte Testdateien hoch, die nun tatsächlich in Valgrind keinen Fehler mehr auslösen, aber weiterhin die Backdoor beinhalten.
Noch am selben Tag baut Jia Tan die aktualisierte Version 5.6.1 von xz und veröffentlicht diese.

Wir erinnern uns an Hans Jansen: Am 25.03.2024 erscheint er erneut auf der Bildfläche, indem er einen Bugreport bei Debian einstellt, in dem er fordert, dass xz-utils zeitnah auf Version 5.6.1 aktualisiert werden soll. Kurioserweise spricht der Account von „seinem Paket xz„, was den Verdacht nahelegt, dass es sich hinter dem Account um dieselbe Person oder Personengruppe handeln könnte, die auch hinter Jia Tan steckt.

Drei Tage später – am Tag der Entdeckung der Backdoor ­– erstellt auch Jia Tan einen Bugreport, um die Aufnahme von xz 5.6.1-1 in Debian zu beschleunigen. Angesichts der anstehenden systemd-Änderung eine nachvollziehbare Handlung einer Person oder Gruppe, die eine über mehrere Jahre vorbereitete Aktion noch zum Erfolg führen will.

Funktionsweise der Backdoor und Auswirkungen

Vorweg eine kurze Linkliste ohne Anspruch auf Vollständigkeit zu verschiedenen Stellen, an denen Erkenntnisse und Analysen zur xz-Backdoor zentral gesammelt und aufbereitet wurden:

https://github.com/amlweems/xzbot
https://gist.github.com/thesamesam/223949d5a074ebc3dce9ee78baad9e27
https://boehs.org/node/everything-i-know-about-the-xz-backdoor
https://en.wikipedia.org/wiki/XZ_Utils_backdoor

Die Backdoor selbst wurde kurz nach Bekanntwerden ihrer Existenz durch diverse Sicherheitsforscher analysiert (Beispielsweise hier: https://bsky.app/profile/filippo.abyssdomain.expert/post/3kowjkx2njy2b). Schon recht früh wurde klar, dass sie sich auf den OpenSSH-Daemon sshd auswirkte; der genaue Wirkmechanismus war anfangs unklar und so ging man vorerst von einem Aushebeln der Authentisierungsmechanismen (Authentication Bypass) aus, was nach wie vor nicht endgültig vom Tisch sein dürfte, da die genaue Funktionsweise der Backdoor bis heute noch analysiert wird. Es zeigte sich jedoch schnell, dass die Backdoor deutlich tiefer ging. Es handelte es sich nach ersten Erkenntnissen primär um keinen Authentication Bypass. Die Backdoor stellte sich vielmehr als eine clever implementierte Unauthenticated Remote Code Execution (RCE, Codeausführung auf einem entfernten System) dar.

Grob gesagt funktioniert die Backdoor (nach aktuellem Wissensstand) so: Der Angreifer meldet sich via SSH mit seinem Public Key an. OpenSSH prüft neben der Berechtigung für die Anmeldung zusätzlich auch noch den präsentierten Public Key sowie die Zertifikatskette dahinter. Genau hier hakt sich die Backdoor ein, indem der Funktionsaufruf zu RSA_public_decrypt via ifunc auf die eigene Schadroutine umgeleitet wird. Diese extrahiert eine im Public Key (genauer: im CA Signing Key) verborgene Anweisung, prüft, ob diese vom Angreifer signiert ist und führt letztendlich die extrahierte Anweisung auf dem Zielsystem aus. Das Ganze geschieht vor der eigentlichen Anmeldung am System und ist so in den Logs nahezu unsichtbar; man sieht maximal den Anmeldeversuch, der aber nicht erfolgreich ist, darüber hinaus werden keine Log-Meldungen generiert.

Die Backdoor als solche wäre auch im laufenden Betrieb nicht erkennbar gewesen. Hätte es nicht die beobachtete Verzögerung bei der Public Key-Anmeldung gegeben, wäre sie vermutlich so bald nicht aufgefallen. Wer sich mit einem nicht vom Angreifer stammenden Public Key anmeldet, sieht nur das ganz normale Verhalten des sshd-Daemons. Nur mit dem richtigen Key und einer versteckten Payload wird die Backdoor aktiviert. Von außen ließe sie sich auf diese Art nicht erkennen.

Und auch wenn die Backdoor letztendlich über SSH aktiviert wird, ist das OpenSSH-Projekt selber außen vor. Es wurden Distributions-spezifische Abhängigkeiten genutzt, die sich bis zum sshd-Prozess auswirkten, die OpenSSH-Entwickler selber hätten nur wenig tun können, um diesen Angriffsvektor im Vorfeld zu verhindern.

Die Auswirkungen, wäre die Backdoor nicht durch Zufall rechtzeitig erkannt worden, könnten kaum schlimmer sein: Große Teile der im Internet betriebenen Linux-Server wären betroffen gewesen. Der oder die Angreifer hätten mit einem Schlag viele wichtige Dienste lahmlegen oder kompromittieren können. Sicher, nicht jeder Linux-Server basiert auf Debian oder RedHat, aber eben doch die Mehrheit. Laut einer Ende 2023 auf heise.de veröffentlichten Trendstudie dominieren Debian– und RedHat-Derivate die Serverlandschaft, das lässt sich zumindest ansatzweise auf das gesamte Internet extrapolieren. Ein Angreifer mit Kontrolle über diese Masse an Servern hätte eine unglaubliche Macht in den Händen. Auch daher wird häufig der Verdacht geäußert, es könne sich unter Umständen um eine Aktion handeln, die staatlich finanziert oder umgesetzt worden sein könnte. Welcher Staat im Genauen dabei beteiligt sein soll bleibt offen. Der asiatisch anmutende, aber in sich nicht ganz stimmige Accountname Jia Tan, die Commit-Zeiten, die in Mailinglisten sichtbare Zeitzone und der für Zugriffe verwendete VPN-Dienst werfen jedenfalls Zweifel auf. Auch die anderen vermutlich beteiligten Accounts, die auf unterschiedliche Herkunft schließen lassen würden, zeichnen eher das Bild einer geplanten Täuschung und Verschleierung. Die zuweilen aufbrandende Sinophobie im Kontext dieses Vorfalls könnte Teil des Kalküls für den Fall eines Fehlschlags gewesen sein.

A propos Kalkül: bisher ist definitiv noch nicht alles aufgearbeitet und erforscht, was im Rahmen dieses Vorfalls geschehen ist. die nächsten Wochen und Monate werden zeigen, ob der oder die Täter auch an anderer Stelle an der Untergrabung der Open Source-Community gearbeitet haben. One down, many to go, oder war das schon das Ende?

Es ist zudem nicht gänzlich unwahrscheinlich, dass noch weitere Funktionen der bisher entdeckten Backdoor zutage treten und dass vielleicht doch noch eine Umgehung der Anmeldeprozesse für eine direkte Systemanmeldung entdeckt wird. Erst kürzlich wurden einige der bereits verlinkten Artikel über die Backdoor um Informationen ergänzt, sie enthalte einen „kill switch“, also eine Funktion, mit der man die Backdoor mit einem gezielten Befehl permanent deaktivieren könne.

Ursachen und Gegenmaßnahmen

Bei der xz-Backdoor handelt es sich um eine gut abgestimmte und raffinierte Kombination aus technischem Verständnis und lange geplantem Social Engineering. Der oder die Angreifer hinter den Pseudonymen Jia Tan (auch: JiaT75, Jia Cheong Tan), Jigar Kumar, Dennis Ens und Hans Jansen kannten sich offenbar gut mit den Interna von xz sowie den Linux-Build-Prozessen, systemd, Valgrind, os-fuzz, OpenSSH und den Funktionsweisen von ifunc und Landlock aus. Die Wahl des xz-utils Pakets wird mit Sicherheit auch nicht zufällig erfolgt sein, denn dass mittels xz der sshd-Prozess angreifbar ist, wird einiges an Forschung vorausgesetzt haben, insbesondere da die Abhängigkeit nicht über das OpenSSH Projekt besteht, sondern nur durch inoffizielle Patches der OpenSSH-Paketmaintainer der betroffenen Distributionen.

Dass die Änderungen im Quellcode nicht oder nicht ausreichend aufgefallen sind, liegt mit Sicherheit zu großen Teilen an der kleinen Menge an Entwicklern, die sich den Code der xz-utils überhaupt anschauen beziehungsweise diesen verstehen. Das Einsetzen des „Wolfs im Schafspelz“ als Maintainer tut sein Übriges. Wer kaum befürchten muss, dass seine zugegebenermaßen auch gut verborgene Backdoor durch Dritte entdeckt wird und sie selber direkt in die Builds integrieren kann, hat nahezu freie Hand. Dass ein kleines privates Projekt die Grundlage für weltweit verwendete Infrastruktur darstellt, ist tatsächlich gar nicht so selten und wurde sogar bereits vor einigen Jahren sehr anschaulich von XKCD aufgegriffen. Es könnte gerade nicht besser passen. Aktuell werden jedenfalls ziemlich viele Maintainer ihre Hobby-Projekte, die so wichtige Zahnräder im Großen und Ganzen sind, noch einmal ganz genau in Augenschein nehmen.

Einer der wichtigsten Punkte ist hier allerdings das erfolgreiche und offenbar über Jahre geplante Social Engineering. Ein überlasteter Entwickler, kaum Bewegung im Projekt, da fällt es leicht, sich in eine Position zu manövrieren, in der man durch geschicktes Ausnutzen der Notlage Vertrauen gewinnt. Der punktuell von vermeintlich unbeteiligten Accounts aufgebaute Druck auf den Maintainer war jedenfalls Kalkül, um den einzuschleusenden Account schnell in eine Maintainer-Position zu bringen.

Bestimmte Änderungen im Code, wie das Entfernen von Sicherheitsmaßnahmen oder das Verwenden unsicherer Funktionen, könnte man noch automatisch im Build-Prozess verhindern, doch an irgendeiner Stelle greifen auch diese Mechanismen nicht mehr. Insbesondere in diesem Fall hätten Automatismen wenig Erfolg, da diese ebenso unter Kontrolle der Maintainer und somit auch den Angreifern stehen. Spätestens bei verschleiertem Code, bei Fremd-Abhängigkeiten oder bei Sicherheitslücken, die den Prüfmechanismen noch nicht bekannt sind, kommen Automatismen an ihre Grenzen und es müsste ein Mensch den Code beziehungsweise die Änderungen bewerten.

Das hätte geschehen können, doch zum Einen war der einzige Mensch, der im aktuellen Fall dazu in der Lage gewesen wäre, aus gesundheitlichen Gründen weniger involviert und zum Anderen gehen kleine Fehler im Review-Prozess häufig unter. Oder hätten Sie den Punkt auf Zeile 15 (zwischen den includes und der Funktion my_sandbox) in den folgenden Änderungen auf Anhieb gefunden?

diff
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -901,10 +901,29 @@ endif()
 # Sandboxing: Landlock
 if(NOT SANDBOX_FOUND AND ENABLE_SANDBOX MATCHES "^ON$|^landlock$")
-    check_include_file(linux/landlock.h HAVE_LINUX_LANDLOCK_H)
+    # A compile check is done here because some systems have
+    # linux/landlock.h, but do not have the syscalls defined
+    # in order to actually use Linux Landlock.
+    check_c_source_compiles("
+        #include <linux/landlock.h>
+        #include <sys/syscall.h>
+        #include <sys/prctl.h>
+.
+        void my_sandbox(void)
+        {
+            (void)prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);
+            (void)SYS_landlock_create_ruleset;
+            (void)SYS_landlock_restrict_self;
+            (void)LANDLOCK_CREATE_RULESET_VERSION;
+            return;
+        }
+
+        int main(void) { return 0; }
+        "
+    HAVE_LINUX_LANDLOCK)
-    if(HAVE_LINUX_LANDLOCK_H)
-        set(SANDBOX_COMPILE_DEFINITION "HAVE_LINUX_LANDLOCK_H")
+    if(HAVE_LINUX_LANDLOCK)
+        set(SANDBOX_COMPILE_DEFINITION "HAVE_LINUX_LANDLOCK")
         set(SANDBOX_FOUND ON)
         # Of our three sandbox methods, only Landlock is incompatible

Ein weiteres Problem bei git-Repositories ist, dass die gewählten Namen und E-Mail Adressen frei wählbar sind. Das bedeutet, dass die Möglichkeit besteht, dass Jia Tan Commits unter dem Namen des eigentlichen Maintainers Lasse Collin hätte verfassen können. So ist es im Nachhinein kompliziert aufzudröseln, welche Änderungen von Jia Tan kommen und welche nicht. Die Lösung von git für dieses Problem ist das Commit Signing. In der Praxis überprüfen das jedoch nur wenige Menschen die Signaturen und nur ein Bruchteil der Entwickler nutzt diese Funktion. So fällt ein unsignierter Commit nicht auf und es schützt auch nicht vor Änderungen, die nicht unter fremder Identität stattgefunden haben. Signierte Commits können jedoch nach einer bekannten Kompromittierung eines Projektes zu verstehen helfen, welche Änderungen legitim und welche bösartig waren.

Dass derart wichtige Projekte, die die Grundlage für nahezu alle unixoiden Betriebssysteme darstellen, nicht ausreichend öffentlich gefördert werden, ist eine Schande. Eine Schande, die wir alle mitzuverantworten haben. Wir haben uns viel zu lang auf das Open-Source-Prinzip verlassen, glaubten, dass die Möglichkeit, dass jeder mitarbeiten kann, auch bedeutet, dass jeder mitarbeitet. Das Gegenteil ist der Fall. Während bei Großprojekten wie dem Linux-Kernel oder den GUI-Frameworks ausreichend öffentliches Interesse besteht, dass sich dort viele Entwickler beteiligen, greift dieses Prinzip gerade bei den kleinen Kernbibliotheken und Tools nicht, die die Grundlage für die gesamte Infrastruktur darstellen. Oft sind es wie im aktuellen Fall einzelne Entwickler, die ein Programm seit Jahrzehnten im Alleingang entwickeln – meist in der knapp bemessenen Freizeit. Meist getrieben von Anforderungen der darauf aufbauenden Strukturen und damit immer im Zugzwang. Alles unentgeltlich. Selbstverständlich.

Da ist es auch nicht hilfreich, wenn Großkonzerne die Ihre Produkte auf dem Rücken von kleineren Projekten aufbauen, diese nicht nur nicht fördern, sondern gleichzeitig das Einhalten von nie mit den Maintainern vereinbarten SLA-Zeiten einfordern, als handle es sich um eine Lieferantenbeziehung. So ist kürzlich erst Microsoft negativ aufgefallen bei einem Ticket im ffmpeg Projekt, welches unter anderem Verwendung innerhalb von Microsoft Teams findet. Doch was ist die Lösung? Gezielte und geplante Kompromittierungsversuche in FOSS Projekten stellen weniger ein technisches als vielmehr ein soziales Problem dar. Firmen sollten die kleinen Projekte, von denen sie abhängig sind, identifizieren und diese fördern. Finanzielle Unterstützung ist immer gut, aber auch schon Hilfe beim Review von Änderungen und dem Abarbeiten von Tickets kann gerade für kleine Projekte eine große Wirkung haben. Dies kann einem Maintainer eventuell gerade so viel Arbeit abnehmen, dass dieser weniger anfällig für sozialen Druck ist und mehr Energie hat, sich auf andere Aspekte des Projekts zu fokussieren. Mehr Augen auf dem Projekt bilden zudem eine zusätzliche Sicherheitsschicht, die ein Angreifer erst einmal überwinden muss.

LLMs sind auch nur (schützenswerte) Informationen

Kaum ein Thema in der IT erzeugt derzeit mit ähnlicher Taktrate neue Schlagzeilen wie die aktuelle Entwicklung von sogenannten Large Language Models (LLMs). LLMs stellen eine Variante von künstlichen neuronalen Netzen dar, die auf der Transformer-Architektur basieren. Diese wurde im Artikel „Attention is All You Need“ von Google vorgestellt.

Wie bei allen (Technologie-)Hypes verbreiten und vermischen sich Fakten und Fiktion nahezu ungebremst, was nicht zuletzt durch die unbestreitbar beeindruckenden Fähigkeiten von ChatGPT und Co verstärkt wird. Auch aus Sicht der Informationssicherheit ist die Entwicklung hochgradig spannend, denn für bösartige Akteure ergeben sich neue Kategorien von Schwachstellen und damit Angriffsmöglichkeiten. Gleichzeitig stehen wir diesen Gefahren und der rasanten Entwicklung jedoch nicht hilflos gegenüber. Mit bekannten methodischen Werkzeugen und einem kühlen Kopf lassen sich Bedrohungen ermitteln und Gegenmaßnahmen ableiten.

Schutzziele gelten auch für LLMs

In der Welt der Informationssicherheit und des Datenschutzes sind drei Schutzziele von zentraler Bedeutung: Vertraulichkeit, Verfügbarkeit und Integrität. Diese gelten für alle Arten von Daten und Informationen. LLMs sind wiederum nichts anderes als Informationen in Form von Zahlen in ziemlich großen Matrizen. Dazu gehören sowohl mit gigantischem Ressourcenaufwand trainierte Foundation Models wie GPT-4 (OpenAI), LLaMA (Meta), Claude (Anthropic) und PaLM (Google) mit reglementiertem Zugriff, als auch eine unaufhörlich wachsende Menge an frei verfügbaren Klonen, nutzbar für jeden mit geeigneter Hardware (mit ausreichend Geduld sind selbst handelsübliche Grafikkarten mittlerweile ausreichend).

Bezogen auf LLMs können die Schutzziele der Informationssicherheit wie folgt beschrieben werden:

  • Vertraulichkeit bezieht sich auf den Schutz von Informationen vor unbefugtem Zugriff. Für LLMs bedeutet das, dass die Modelle gleichermaßen geschützt werden müssen, wie die Daten, mit denen sie trainiert wurden. Dies gilt sowohl für die Modelle an sich, als auch für sämtliche Datenflüsse zum Modell (Training) und ausgehend vom Modell (Inferenz bzw. Abfragen). Vergleichbar ist dies mit personenbezogenen Daten, beispielsweise bei einem System zur Verarbeitung medizinischer Daten zwecks Diagnostik. Diese unterliegen höchsten Vertraulichkeitsansprüchen, was sich auch auf verarbeitende KI-Modelle überträgt. Das betrifft nicht nur lokal betriebene Modelle sondern auch Dienste wie ChatGPT, die sich vorbehalten Benutzereingaben per Opt-Out für weitere Trainingsdaten zu verwenden. Dass die Vertraulichkeit damit eindeutig beeinträchtig ist, schlussfolgerte auch Samsung, nachdem Ingenieure geheime Unternehmensdaten in den Chatbot von OpenAI eingegeben hatten.
  • Verfügbarkeit stellt sicher, dass autorisierte Benutzer in einem angemessenen Zeitrahmen Zugriff auf die benötigten Informationen haben. Im Kontext von LLMs bedeutet das, dass die Modelle immer dann verfügbar sein müssen, wenn sie benötigt werden. Wird ein eigens trainiertes LLM im Rahmen eines wichtigen oder sogar kritischen Prozesses verwendet, sollte sichergestellt sein, dass es Sicherungskopien und Redundanzen gibt. Andernfalls können Ausfälle oder Verzögerungen von mehreren Tagen bis Wochen entstehen, um das Modell von Grund auf neu zu trainieren. Hinzu kommen die teilweise enormen Kosten durch die benötigte Rechenleistung. Auch eine Auslagerung in Cloud-Dienste löst dieses Problem nicht vollständig. Beispielsweise in der Finanzbranche gelten hohe Ansprüche an die Verfügbarkeit.
  • Integrität bezieht sich auf die Richtigkeit und Vollständigkeit von Informationen. An dieser Stelle sei das bekannte Problem von LLMs, Dinge zu „halluzinieren“ kurz außer Acht gelassen. Grundlegend ist es wichtig, dass die Modelle und ihre Trainingsdaten vor Manipulationen geschützt sind. Jede Änderung der Daten oder des Modells könnte das Verhalten des LLMs beeinflussen und zu unerwünschten oder sogar schädlichen Ergebnissen führen. Dieses Problem betrifft allerdings nicht nur LLMs oder neuronale Netze, sondern auch die Auswertung von Daten allgemein und ist ein hartnäckiges Problem. Spätestens wenn auf Basis der gelieferten Ergebnisse von KI-Modellen Entscheidungen getroffen werden, die sich auf einzelne Personen oder Personengruppen auswirken, muss die Integrität der involvierten Daten gewährleistet sein.
Halluzinierende LLMs?

Halluzinationen im Kontext von LLMs bezeichnen die Eigenschaft, dass die Modelle Lücken in den Trainingsdaten mit plausibel klingenden aber falschen Aussagen überdecken. Menschen wissen, dass sie vieles nicht wissen und sind in der Lage, Wissenslücken als solche zu identifizieren und mit einem einfachen „weiß ich nicht“ zu quittieren. LLMs besitzen nicht die Möglichkeiten für solche kognitiven Tricks und sind darauf trainiert, immer hilfsbereit zu sein und eine positive Antwort zu liefern. Da diese Angewohnheit für viele Anwendungsfälle einer sicheren und zuverlässigen Nutzbarkeit im Weg steht, wird aktiv an dem Problem geforscht. Derzeit ist allerdings unklar, ob und mit welchen Methoden eine Lösung möglich ist. Zumal das Verhalten für kreative Zwecke wiederum nicht unerwünscht ist.

Auf dieser Ebene betrachtet, können und müssen für die Nutzung aber auch Absicherung von LLMs mindestens klassische Sicherheitsmaßnahmen wie Verschlüsselung, Backups und Redundanzen sowie Zugriffskontrollen ergriffen werden. Am einfachsten ist der Vergleich mit typischen Wissens- und Informationsspeichern von Organisationen und Unternehmen, seien es IAM-Systeme, Fileshares, Source-Code-Verwaltung, CRM-Plattformen, Dokumentenverwaltung, Wikis und vieles mehr. Letztlich die gesamte digitale Landschaft, welche zur Erbringung der Geschäftsprozesse benötigt wird. Denn gute Informationssicherheit verfolgt grundlegend einen ganzheitlichen Ansatz.

Typische Bedrohungen in der Informationssicherheit

Um für solche digitalen Landschaften die relevanten Bedrohungen und geeigneten Sicherheitsmaßnahmen zu ermitteln, gibt es verschiedene Wege. Als Grundlage für Risikoanalysen hat das Bundesamt für Sicherheit in der Informationstechnik (BSI) als Teil des IT-Grundschutzes einen Katalog von elementaren Gefährdungen erstellt. Dieser enthält typische Bedrohungen, die von Umweltereignissen über versehentliche Fehlhandlung bis hin zu Schadsoftware reichen. Während nicht alle davon direkt auf LLMs anwendbar sind, können einige jedoch als Ausgangspunkt dienen, beispielsweise der Ausfall von Kommunikationsnetzen, die Manipulation von Informationen oder auch die unberechtigte Nutzung von Systemen. Zur Inspiration sind folgend einige konkrete Beispiele aufgeführt:

Beispielhafte elementare Gefährdungen mit Bezug zu LLMs
  • G0.9 Ausfall von Kommunikationsnetzen: Besteht keine Verbindung, sei es zur Cloud oder dem eigenen Rechenzentrum in dem ein LLM betrieben wird, kann es nicht genutzt werden und die Verfügbarkeit ist beeinträchtigt.
  • G0.11 Ausfall oder Störung von Dienstleistern: Wird der Betrieb einem Dienstleister übertragen, sei es in Form von Rechenzentrumskapazitäten oder SaaS-Produkten, besteht eine Abhängigkeit, die beim Ausfall oder einer Störung zur Beeinträchtigung der Verfügbarkeit führt.
  • G0.14 Ausspähen von Informationen (Spionage): Hier wird eindeutig die Vertraulichkeit beeinträchtigt. Die Bedrohung umfasst explizit auch die Möglichkeit, dass einzelne öffentlich verfügbare unverfängliche Informationen zusammengetragen werden und dadurch erst eine kompromittierende Wirkung entfalten. Genau dies kann bei großen Trainingsdatensätzen der Fall sein.
  • G 0.20 Informationen oder Produkte aus unzuverlässiger Quelle: Die Vielfalt sowohl von Trainingsdatensätzen als auch vortrainierten Modellen ist bereits heute gigantisch. Plattformen wie HuggingFace bieten Möglichkeiten zum Austausch von Datensätzen, Modellen und mehr. Dadurch ergeben sich ähnliche Gefahren, die für verschiedene Arten von Software- und Paket-Quellen in den letzten Jahren zu weitreichenden Auswirkungen geführt haben. Am bekanntesten sind Vorfälle des NodeJS-Paketmanagers NPM oder das Python-Äquivalent PyPI. Angreifer haben dabei Besitz von weitverbreiteten Paketen erlangt und Schadcode eingefügt oder Pakete mit ähnlich klingenden Namen genutzt, um unvorsichtige Benutzer anzugreifen. Je nach Ausprägung des Schadcodes sind demnach alle Schutzziele betroffen: Vertraulichkeit, Verfügbarkeit und Integrität. Diese Angriffe gelten auch aus Supply-Chain-Angriffe und wurden für LLMs bereits erfolgreich demonstriert.
  • G 0.22 Manipulation von Informationen: Wie oben zum Schutzziel der Integrität bereits erläutert, ist die Qualität und Korrektheit von Trainingsdaten eine Grundvoraussetzung für die Zuverlässigkeit der LLMs. Gelingt es Angreifern diese in den Originalquellen oder auch im vorbereiteten Trainingsdatensatz zu manipulieren, kann dies zu falschen oder irreführenden Entscheidungen und Aussagen im Sinne der Angreifer führen. Unabhängig davon, ob es dadurch zu unerwünschten Unternehmensentscheidungen oder der Verbreitung von Desinformationen kommt, ist die Integrität entsprechend beeinträchtigt. Eine weitere konkrete Gefahr ergibt sich durch die Auslagerung des Trainings an externe Dienstleister. Diese können durch Manipulation der Trainingsdaten Hintertüren in den Modellen einschleusen, die sich nach aktuellem Stand nicht zuverlässig entdecken lassen.
  • G 0.28 Software-Schwachstellen oder -Fehler: Die Software-Projekte rund um LLMs sind in der Transitionsphase von Forschungsprojekten zu marktreifen Produkten. Der Drang möglichst schnell fertige Produkte anbieten zu können, führt häufig zu Entwicklungspraktiken, die nicht den Best Practices folgen und Schwachstellen verursachen. Die konkreten Auswirkungen sind abhängig von der Art der Schwachstelle. Gemessen an der potenziellen Angriffsoberfläche (interaktive Benutzereingaben, Verarbeitung von strukturierten und unstrukturierten Inhalten, komplexe Rollen- und Rechtekonzepte für die umliegenden Anwendungen usw.) sind von Informationslecks bis hin zur Übernahme der involvierten Systeme durch Angreifer alle Auswirkungen denkbar. Entsprechend sind auch alle Schutzziele – Vertraulichkeit, Verfügbarkeit und Integrität – betroffen.
  • G 0.29 Verstoß gegen Gesetze oder Regelungen: Zwar fällt der Bezug zu einem einzelnen Schutzziel schwer, jedoch ist die Bedrohung dafür nicht weniger relevant. Viele Aspekte rund um Datenschutz und Urheberrecht sind im Kontext von LLMs derzeit unklar. Einige Unternehmen handeln vorzeitig, in dem große Datenmengen gesammelt und zu Trainingszwecken verarbeitet werden, ohne die konkreten Quellen und etwaige Lizenzhinweise anzugeben bzw. zu beachten. Dies geschieht in der Hoffnung, durch Lobbyarbeit und starke Medienpräsenz ausstehende Gesetzgebungen oder rechtliche Entscheidungen zu beeinflussen. Eine Einstellung, die Meta (ehemals Facebook) in der Vergangenheit teuer zu stehen gekommen ist.

Auf der Basis solch relevanter Bedrohungen kann im Prinzip eine vollständige Risikoanalyse nach IT-Grundschutz durchgeführt werden, welche die Bedrohungslage beim Einsatz von LLMs oder KI-Modellen jeder Art erfasst. Die dafür benötigte Infrastruktur sollte dabei gleich mit betrachtet werden, unabhängig ob Cloud oder On-Premise. Es gilt dabei, sich bewusst Gedanken über das Einsatzumfeld und den Anwendungsfall zu machen. Mit dieser Informationsgrundlage gestaltet sich auch die Ableitung relevanter Sicherheitsmaßnahmen wesentlich einfacher und zielgerichteter.

Spezielle Schwachstellen von LLMs

Der zuvor beschriebene klassische und zum Teil recht abstrakte Ansatz kann mit konkreten Schwachstellenkategorien für LLMs ergänzt bzw. kombiniert werden. Das „Open Web Application Security Project“ (OWASP) stellt eine solche Auflistung von Schwachstellen bereits seit langer Zeit für Web-Applikationen in den OWASP Top 10 zusammen. Ein entsprechendes Pendant speziell für LLMs wurde zum 01.08.2023 veröffentlicht.

Die Top 10 umfassen dabei an erster Stelle Prompt Injections. Die namentliche Ähnlichkeit zur klassischen SQL Injection ist kein Zufall. Um LLMs, insbesondere im Rahmen von interaktiven Chats, daran zu hindern unerwünschte Inhalte von sich zu geben, werden der Benutzereingabe verschiedene Instruktionen vorangestellt. Prompt Injections zielen darauf ab, diese Instruktionen auszuhebeln. Besonders bekannt geworden ist dies bei der Veröffentlichung des Chatbots von Bing. Die Auswirkungen sind in einem lesenswerten Blogbeitrag von Simon Willison dargestellt.

Die konkreten Schwachstellen-Kategorien weisen dabei Ähnlichkeiten bzw. auch direkte Zusammenhänge auf, sowohl zu den OWASP Top 10 Schwachstellen von Web-Anwendungen, als auch zu den weiter oben aufgeführten elementaren Gefährdungen des IT-Grundschutzes. Grund dafür ist schlichtweg, dass LLMs von den gleichen Arten von Schwachstellen betroffen sind wie der Großteil aller informationsverarbeitenden Systeme. Die primären Unterschiede liegen in den konkreten Ausprägungen und entsprechend den zugehörigen Gegenmaßnahmen.

Übersicht der OWASP Top 10 für LLMs
  • LLM01 Prompt Injection: Mittels direkter oder indirekter Manipulation der Eingaben bzw. Prompts werden ungewollte Verhaltensweisen ausgelöst. Exemplarisch dafür ist die Ausgabe von beleidigenden, verleumderischen oder verbotenen Inhalte (Anleitungen zur Herstellung gefährlicher Stoffe o.ä.). Je nach Verwendungszweck der Ausgabe, beispielsweise zur Feststellung von Kreditwürdigkeiten, Auswertung von Anträgen und Verträgen oder anderen automatisierten Entscheidungen können die Konsequenzen entsprechend gravierend ausfallen.
  • LLM02 Insecure Output Handling: Die Ausgaben von LLMs können nicht nur Fließtext, sondern auch strukturierte Daten beinhalten. Werden diese ungefiltert übernommen, können in den nachgelagerten Systemen klassische Schwachstellen wie Cross-Site-Scripting (XSS) oder sogar Remote Code Execution (RCE) ausgelöst werden.
  • LLM03 Training Data Poisoning: Wenn die Trainingsdaten für ein LLM durch Angreifer manipuliert, sprich „vergiftet“ werden können, sind ungewollte Verhaltensweisen und Ausgaben die Folge. Die Auswirkungen können ähnlich wie bei Prompt Injection ausfallen. Je nach Ausprägung können Angreifer auch bestimmte Schlüsselwörter in die Trainingsdaten einschleusen, wodurch nur bei Abfrage bestimmter Informationen voreingenommene und unethische Ergebnissen geliefert werden.
  • LLM04 Model Denial of Service: Dies ist das LLM-Gegenstück zu klassischen Denial-of-Service-Angriffen (DoS). Das Training aber auch die Inferenz (die Erzeugung von Ausgaben) sind zumindest aktuell noch sehr ressourcen- und damit kostenintensiv. Hinzu kommt, dass zwischen der Länge der Benutzereingabe und der Ausgabe keine direkte Relation besteht. Angreifer können dies nutzen, um hohe Kosten zu verursachen oder die vorhandenen Kapazitäten so auszulasten, dass eine normale Benutzung beeinträchtigt wird.
  • LLM05 Supply Chain Vulnerabilities: Um LLMs herum entwickelt sich ein umfangreiches und weit verzweigtes Ökosystem von Modellen, Datensätzen, Algorithmen, Ausführungsumgebungen und mehr. Werden die Bezugsquellen nicht geprüft oder sind nicht ohne weiteres überprüfbar, besteht die Gefahr, dass Angreifer in dieses Ökosystem schadhafte Inhalte einbringen, die unbemerkt übernommen werden und weite Verbreitung finden.
  • LLM06 Sensitive Information Disclosure: Durch unzureichend bereinigte Trainingsdaten sowie die Aggregation verschiedenster Datenquellen entsteht die Gefahr, dass vertrauliche Daten preisgegeben werden. Werden beispielsweise interne Code-Repositories und Dokumentationen zum Training genutzt, könnten API-Schlüssel und Zugangsdaten enthalten sein die über das Modell ungewollt abfragbar sind.
  • LLM07 Insecure Plugin Design: Um LLMs mit zusätzlichen Fähigkeiten auszustatten, werden Plugins verwendet. Diese ermöglichen die Suche im Internet, den Aufruf von Programmen bspw. zur Lösung mathematischer Gleichungen, die Interaktion mit APIs und vieles mehr. Die Idee ist, dass die LLMs selbst entscheiden, welche Werkzeuge für die gestellte Aufgabe genutzt werden. Sind die Zugriffsrechte sowie Ein- und Ausgabemöglichkeiten unsauber definiert bzw. abgegrenzt, bestehen indirekte Angriffsmöglichkeiten auf diese Plugins und die Daten, auf welche diese wiederum Zugriff haben. Des Weiteren besteht die Gefahr, dass Plugins auf externe Quellen zugreifen und bösartige Inhalte an das LLM zurückliefern. Werden diese Inhalte nicht genauso stringent geprüft und validiert wie andere Benutzereingaben, sind auch dadurch indirekte Angriffe möglich.
  • LLM08 Excessive Agency: Insbesondere bei der Nutzung von Plugins und anderen potenziell rekursiven Mechanismen – also LLMs die ihre Ausgaben wieder als Eingaben verwenden – müssen sinnvolle Einschränkungen definiert werden. Abhängig von konkreten Einsatzzwecken und Plugins können anderenfalls vielfältige Auswirkungen die Folge sein. Beispielsweise könnte ein LLM das mit APIs oder Datenbanken interagieren kann, zum unbefugten Anlegen, Ändern und Löschen von Daten verleitet werden.
  • LLM09 Overreliance: Werden LLMs übermäßig zur Entscheidungsfindung oder Erstellung von Inhalten genutzt, besteht die Gefahr darüber Falschinformationen zu verbreiten oder falsche Entscheidungen mit gravierenden Folgen zu treffen. Ein konkretes Beispiel ist die Nutzung bei der Software-Entwicklung. Wird der erzeugte Quelltext ungeprüft übernommen, besteht die Gefahr, dass unerkannte Schwachstellen in produktiv genutzten Anwendungen und Web-Applikationen einfließen. Pauschalisiert ausgedrückt: Die Korrektheit der Ergebnisse von LLMs kann nur von Menschen geprüft werden, welche die korrekten Ergebnisse auch selbst erzeugen könnten. Wer zu einem bestimmten Thema nichts weiß, kann Aussagen ohne externe Referenzen nicht validieren.
  • LLM10 Model Theft: Die eigentlichen Date, aus denen das Modell besteht, inklusive Konfigurationsparameter, beinhalten eine Repräsentation der Informationen mit denen es trainiert wurde. Für interne Zwecke auf Unternehmensdaten trainierte LLMs beinhalten demnach eine große Menge vertraulicher Daten. Gelingt es einem Angreifer das Modell zu entwenden, wird entsprechend auch die Vertraulichkeit der Trainingsdaten beeinträchtigt. Demnach muss der Zugriff auf die eigentlichen Modelle sowie die Trainingsdaten und deren Quellen mindestens genauso strikt geregelt werden.

Sicherheitsmaßnahmen

Die bisherigen Schritte liefern ein Fundament zur Ableitung von Sicherheitsmaßnahmen im Umgang mit LLMs. Die genauen Maßnahmen hängen von den konkret ermittelten Bedrohungen und der Ausprägung der Nutzung ab. Ist es „nur“ ein SaaS-Dienst, in dem Trainingsdaten hochgeladen werden und im Anschluss eine abstrahierte Modell-Interaktion möglich ist? Wird ein fertiges Produkt On-Premise verwendet? Soll eine interne Informationsplattform oder gar ein kommerzielles Produkt entwickelt werden?

Auch hier gibt es hilfreiche Informationen, die zurate gezogen werden können. Bezogen auf den oben erwähnten IT-Grundschutz bietet das BSI mit dem IT-Grundschutz-Kompendium eine Sammlung von Bausteinen und Sicherheitsanforderungen für organisatorische Prozesse bis hin zu einzelnen Arten von IT-Systemen. Diese können zwar auf die zugrundliegenden Systeme, Infrastrukturen und Prozesse angewendet werden, haben jedoch nicht direkt etwas mit LLMs oder KI-Modellen zu tun.

Spezifischer hingegen ist das oben genannte OWASP-Projekt, welches auch die OWASP Top 10 für LLMs zusammengestellt hat. In einem weiterführenden Dokument werden neben detaillierten Informationen und Beispielen zu den Schwachstellen auch konkrete Gegenmaßnahmen aufgelistet.

Es ist zudem davon auszugehen, dass sich im Laufe der Zeit Muster und Best Practices herauskristallisieren, die es erlauben stärker und genauer auf Sicherheitsaspekte und -maßnahmen einzugehen, als dies aktuell noch möglich ist. Bis dahin erlauben die hier dargestellten Informationen und Grundlagen eine Möglichkeit, dennoch strukturiert und ganzheitlich die Informationssicherheit beim Einsatz von LLMs einzubeziehen.

Fazit

Wir hoffen die obigen Ausführungen vermitteln, dass trotz aller Entwicklungen und atemberaubender Schlagzeilen auch LLMs letztlich „nur“ informationsverarbeitende Systeme sind. Entsprechend gelten grundlegend die gleichen Bedrohungen, die wiederum mit bewährten und bekannten Methoden erfasst, bewertet und behandelt werden können. Gepaart mit der Betrachtung spezieller Schwachstellen ergeben sich Werkzeuge, mit denen sich proaktive Informationssicherheit und Security by Design-Prinzipien auf LLMs und Co anwenden lassen.

All dies soll nicht darüber hinwegtäuschen, dass KI-Technologien sich weiterhin und in absehbarer Zukunft stark weiterentwickeln werden. Entsprechend wird sich auch die Sicherheitslage wandeln, wie es für die gesamte IT-Branche seit jeher der Fall ist. Der Einsatz neuer Technologien ist nicht frei von Risiken. Diese sollten daher sorgsam bewertet und gemeinsam mit entsprechenden Sicherheitsmaßnahmen dem tatsächlichen Nutzen für den eigenen Anwendungsfall gegenüber gestellt werden.

Eines ist allerdings klar, es bleibt spannend!

Die Ikarussen kommen? Flächensonnenbrand in IT-Land – SolarWinds #Sunburst Supply Chain Angriff

Dass Supply-Chain-Angriffe verheerend sein können, ist spätestens seit 2017 klar, als die im Update einer ukrainischen Steuersoftware versteckte Malware NotPetya IT-Infrastrukturen weltweit verkrüppelte und Schäden in Milliardenhöhe verursachte. Nun haben Angreifer – amerikanische Dienste verdächtigen den russischen Auslandsgeheimdienst – einen noch viel effektiveren Vektor in potenziell 300.000 für die Spionage (und evtl. auch Sabotage) äußerst wertvollen Unternehmen und Behörden gefunden: Ein manipuliertes Update der beliebten Netzwerkmonitoring-Lösung Orion hat bequeme Einstiegspunkte bei Kunden des Herstellers SolarWinds geöffnet, die in mehreren Fällen auch schon konkret ausgenutzt worden sind.
Aufgefallen war der Angriff, weil eines der Opfer der amerikanische Security-Spezialist FireEye ist. Experten dort hatten den Missbrauch von Microsoft-Authentifizierungstechniken durch die Angreifer bemerkt und eine Untersuchung gestartet, die zunächst die Spitze des Eisbergs sichtbar machte.
Inzwischen ist klar, dass nicht nur viele Fortune 500-Unternehmen, sondern auch kritische Infrastrukturen und der Verteidigungssektor betroffen sind – eine Goldgrube für die Angreifer.
„Sunburst“, wie der Angriff genannt wird, ist relativ leicht im Netzwerk zu detektieren und zu stoppen. Die Sisyphusarbeit liegt jedoch darin, Netzwerke, die möglicherweise durch die Lücke schon kompromittiert wurden, zu untersuchen und – in vielen Fällen der einzig wirklich sichere Weg – neu aufzusetzen. Die Aufräumarbeiten hierzu haben gerade erst begonnen.