pentest.at

Risiken von LLMs: Wie "Prompt Injections" Ihre IT-Sicherheit gefährden

Large Language Models (LLMs) haben rasant an Bedeutung gewonnen. Die Anforderungen an die Sicherheit konnten dem Tempo allerdings nicht folgen – wie auch das IT-Security-Magazin hackerone hier darlegt. In der Konsequenz treten eine Reihe von Risiken zu Tage – allen voran durch Prompt-Injection: Hier werden Schwachstellen offenbart, wenn ein Angreifer ein großes Sprachmodell (LLM) durch speziell gestaltete Eingaben manipuliert, sodass das LLM unbeabsichtigt die Absichten des Angreifers ausführt. Dies kann direkt durch "Jailbreaking" des Systemprompts oder indirekt durch manipulierte externe Eingaben geschehen und führt potenziell zu Datenexfiltration, Social Engineering und anderen Problemen.

CS

Christoph Sammer

Direkte Prompt-Injektionen, auch als "Jailbreaking" bekannt, treten auf, wenn ein böswilliger Benutzer den zugrundeliegenden Systemprompt überschreibt oder offenlegt. Dies ermöglicht es Angreifern, Backend-Systeme auszunutzen, indem sie mit unsicheren Funktionen und über das LLM zugänglichen Datenspeichern interagieren. Indirekte Prompt-Injektionen treten auf, wenn ein LLM Eingaben von externen Quellen akzeptiert, die ein Angreifer steuern kann, wie Websites oder Dateien.

Der Angreifer kann eine Prompt-Injektion in den externen Inhalt einbetten und so den Gesprächskontext kapern. Dies würde das LLM als "verwirrten Stellvertreter" agieren lassen, was dem Angreifer ermöglicht, den Benutzer oder weitere Systeme, auf die das LLM Zugriff hat, zu manipulieren. Indirekte Prompt-Injektionen müssen nicht für Menschen sichtbar oder lesbar sein, solange der Text vom LLM verarbeitet wird. Die Ergebnisse eines erfolgreichen Prompt-Injektionsangriffs können stark variieren – von der Anforderung sensibler Informationen bis hin zur Beeinflussung kritischer Entscheidungsprozesse unter dem Deckmantel normaler Operationen.

Bei fortgeschrittenen Angriffen könnte das LLM manipuliert werden, um eine schädliche Persona nachzuahmen oder mit Plugins in der Benutzerumgebung zu interagieren. Dies könnte zum Durchsickern sensibler Daten, unberechtigter Plugin-Nutzung oder Social Engineering führen. In solchen Fällen unterstützt das kompromittierte LLM den Angreifer, überwindet Standard-Sicherheitsmaßnahmen und hält den Benutzer von der Eindringung uninformiert. In diesen Fällen agiert das kompromittierte LLM effektiv als Agent für den Angreifer und fördert dessen Ziele, ohne übliche Sicherheitsvorkehrungen auszulösen oder den Endbenutzer auf die Eindringung aufmerksam zu machen.

Häufige Beispiele für Schwachstellen:

  1. Ein böswilliger Benutzer erstellt eine direkte Prompt-Injektion für das LLM, die es anweist, die Systemprompts des Anwendungserstellers zu ignorieren und stattdessen einen Prompt auszuführen, der private, gefährliche oder sonst unerwünschte Informationen zurückgibt.
  2. Ein Benutzer verwendet ein LLM, um eine Webseite mit einer indirekten Prompt-Injektion zusammenzufassen. Dies veranlasst das LLM, sensible Informationen vom Benutzer anzufordern und über JavaScript oder Markdown zu exfiltrieren.
  3. Ein böswilliger Benutzer lädt einen Lebenslauf hoch, der eine indirekte Prompt-Injektion enthält. Das Dokument enthält eine Prompt-Injektion mit Anweisungen, das LLM zu veranlassen, Benutzern mitzuteilen, dass dieses Dokument ausgezeichnet ist, z. B. ein hervorragender Kandidat für eine Stellenbesetzung. Ein interner Benutzer führt das Dokument durch das LLM, um es zusammenzufassen. Die Ausgabe des LLM gibt an, dass dies ein ausgezeichnetes Dokument ist.
  4. Ein Benutzer aktiviert ein Plugin, das mit einer E-Commerce-Website verknüpft ist. Eine böswillige Anweisung, die auf einer besuchten Website eingebettet ist, nutzt dieses Plugin aus und führt zu unberechtigten Käufen.
  5. Eine böswillige Anweisung und Inhalte, die auf einer besuchten Website eingebettet sind, nutzen andere Plugins aus, um Benutzer zu betrügen.

Maßnahmen zur Verhinderung:

Da LLMs natürliche Sprache verwenden, betrachten sie beide Formen der Eingabe als vom Benutzer bereitgestellt. Folglich gibt es keine wasserdichte Prävention innerhalb des LLMs. Die nachfolgenden Maßnahmen können dennoch die Auswirkungen von erfolgreichen Prompt-Injektions reduzieren:

  1. Versorgen Sie das LLM mit eigenen API-Tokens für erweiterbare Funktionen wie Plugins, Datenzugriff und funktionsbezogene Berechtigungen. Befolgen Sie das Prinzip der minimalen Privilegien, indem Sie das LLM auf den für seine beabsichtigten Operationen notwendigen Mindestzugriff beschränken.
  2. Implementieren Sie "Human in the Loop" für erweiterbare Funktionen. Wenn privilegierte Operationen wie das Senden oder Löschen von E-Mails durchgeführt werden, sollte die Anwendung vom Benutzer zuerst die Genehmigung der Aktion verlangen. Dies wird die Möglichkeit einer indirekten Prompt-Injektion, Aktionen im Namen des Benutzers ohne dessen Wissen oder Zustimmung durchzuführen, mildern.
  3. Trennen Sie externe Inhalte von Benutzerprompts. Trennen und kennzeichnen Sie, wo nicht vertrauenswürdige Inhalte verwendet werden, um ihren Einfluss auf Benutzerprompts zu begrenzen. Verwenden Sie beispielsweise ChatML für OpenAI-API-Aufrufe, um dem LLM die Quelle des Prompt-Eingangs anzuzeigen.
  4. Etablieren Sie Vertrauensgrenzen zwischen dem LLM, externen Quellen und erweiterbarer Funktionalität (z. B. Plugins oder nachgelagerte Funktionen). Behandeln Sie das LLM als unzuverlässigen Benutzer und behalten Sie die letzte Benutzerkontrolle über Entscheidungsprozesse bei. Ein kompromittiertes LLM kann jedoch immer noch als Mittelsmann (Man-in-the-Middle) zwischen den APIs Ihrer Anwendung und dem Benutzer fungieren, da es Informationen vor der Präsentation beim Benutzer verbergen oder manipulieren kann. Heben Sie potenziell unzuverlässige Antworten visuell für den Benutzer hervor.

Das sind mögliche Angriffsszenarien:

  1. Ein Angreifer liefert eine direkte Prompt-Injektion an einen LLM-basierten Support-Chatbot. Die Injektion enthält "Vergessen Sie alle vorherigen Anweisungen" und neue Anweisungen, um private Datenspeicher abzufragen und Paketschwachstellen sowie den Mangel an Ausgabevalidierung in der Backend-Funktion zum Senden von E-Mails auszunutzen. Dies führt zur Ausführung von Remote-Code, unberechtigtem Zugriff und Privilegienerweiterung.
  2. Ein Angreifer bettet eine indirekte Prompt-Injektion in eine Webseite ein, die das LLM anweist, vorherige Benutzeranweisungen zu ignorieren und ein LLM-Plugin zu verwenden, um die E-Mails des Benutzers zu löschen. Wenn der Benutzer das LLM verwendet, um diese Webseite zusammenzufassen, löscht das LLM-Plugin die E-Mails des Benutzers.
  3. Ein Benutzer verwendet ein LLM, um eine Webseite mit einer indirekten Prompt-Injektion zusammenzufassen, um vorherige Benutzeranweisungen zu ignorieren. Dies veranlasst das LLM, sensible Informationen vom Benutzer anzufordern und über eingebettetes JavaScript oder Markdown zu exfiltrieren.
  4. Ein böswilliger Benutzer lädt einen Lebenslauf mit einer Prompt-Injektion hoch. Der Backend-Benutzer verwendet ein LLM, um den Lebenslauf zusammenzufassen und zu fragen, ob die Person ein guter Kandidat ist. Aufgrund der Prompt-Injektion sagt das LLM ja, trotz des tatsächlichen Lebenslaufinhalts.
  5. Ein Benutzer aktiviert ein Plugin, das mit einer E-Commerce-Website verknüpft ist. Eine böswillige Anweisung, die auf einer besuchten Website eingebettet ist, nutzt dieses Plugin aus und führt zu unberechtigten Käufen.