Die steigende Gefahr von Prompt Injection Angriffen in Large Language Models 25. August 2023 | 7 Minuten zum Lesen

Die steigende Gefahr von Prompt Injection Angriffen in Large Language Models

Inhaltsverzeichnis

Die Cybersicherheitslandschaft war schon immer ein Schlachtfeld, auf dem Angreifer und Verteidiger in einem ständigen Kampf aufeinandertreffen. Im Laufe der Jahre waren Schwachstellen wie Cross-Site Scripting (XSS) und SQL-Injektion in Anwendungen allgegenwärtig und dominierten die OWASP Top 10 Liste. Es tauchen jedoch kontinuierlich neue Angriffsvektoren auf. Eine dieser neuen Bedrohungen sind Schwachstellen, die in Large-Language-Models (LLM) aufgedeckt wurden. Angesichts dieses Problems veröffentlichte OWASP sogar einen frühzeitigen Entwurf der TOP 10-Liste der Schwachstellen in Large Language Modellen. An der Spitze dieser Liste steht eine derzeit sehr prominente Schwachstelle von LLMs - so genannte Prompt Injections.

Prompt Injection

Prompt Injection bezieht sich auf eine Reihe von Techniken, die von böswilligen Akteuren eingesetzt werden, um die Eingaben, die großen Sprachmodellen (LLMs) gegeben werden – auch Prompts genannt – zu manipulieren. Ziel dieses Angriffs ist es, das LLM zu täuschen, damit es unbeabsichtigte Aktionen ausführt oder sensible Informationen preisgibt. Eine der ersten Schwachstellen für Prompt Injection wurde von Riley Goodside für das ältere GPT-3-Modell von OpenAI entdeckt. Es gelang ihm, das Modell dazu zu bringen, seine ursprünglichen Anweisungen zu ignorieren und die Ausgabe des Modells umzuleiten. Seitdem haben viele andere Sicherheitsforscher verschiedene Arten von Prompt Injection gefunden, die von der Sicherheits-Community grob in Prompt Leaking und Jailbreaking unterteilt werden.

Prompt Leaking

Das Ziel dieser Art der Prompt Injektion besteht darin, sensible Informationen aus dem LLM zu extrahieren. Dafür werden Prompts erstellt, die das Modell dazu bringen, vertrauliche Daten wie seine eigenen Anweisungen und Konfigurationen, die als Systemprompt angegeben werden, preiszugeben. Dies wurde erstmals von Simon Willison demonstriert. Die Schwachstelle wurde anschließend anhand zahlreicher Beispiele bestätigt, insbesondere durch Kevin Liu bei einer frühen Version von Microsofts Bing Chat und bei einem von Open AI betriebenen Twitter Bot, der von der Firma remotilo.io verwendet wird. In beiden Fällen war es möglich, die dem LLM erteilten System-Anweisungen für das LLM auszuspähen.

Jailbreaking

Jailbreaking bezieht sich auf Prompt Injektionen, die LLMs missbrauchen, um die für den Output geltenden Beschränkungen zu umgehen. Dies kann durch verschiedenste Techniken erreicht werden:

Vortäuschung: Bei dieser Art des Angriffs werden die Prompts so formuliert, dass sich der Kontext für das Modell ändert, die böswillige Absicht aber gleich bleibt. Eine beliebte Methode ist beispielsweise das Rollenspiel, bei dem Charaktere geschaffen werden, die miteinander interagieren, während das LLM nach dem verbotenen Inhalt oder der verbotenen Aktion gefragt wird.

Aufmerksamkeitsverschiebung: Mit dieser Technik lenkt ein Angreifer die Aufmerksamkeit des LLM von einer Fragebeantwortungsaufgabe auf eine andere Aufgabe, z. B. eine Textvervollständigungsaufgabe. Auf diese Weise kann ein LLM dazu gebracht werden, implizit die verbotene Ausgabe preiszugeben.

Alignment Hacking: Ein auf Anweisungen abgestimmtes LLM wird darauf trainiert, für Menschen “wünschenswerte” oder hilfreiche Outputs zu erzeugen. Dies kann ausgenutzt werden, indem der Prompt mit einer Art Bestätigung seiner Nützlichkeit verändert wird, so dass er bereit ist, einen verbotenen Output zu erzeugen.

Privilege Escalation: Wie bei herkömmlichen Angriffen zur Privilege Escalation besteht das Ziel dieses Jailbreaks darin, einen Prompt zu erstellen, der den Kontext des Modells so festlegt, dass der Benutzer höhere Privilegien als das Modell erhält. Dies kann durch die Erstellung eines übergeordneten Modells in dem Prompt oder durch die Simulation eines Terminals erfolgen, das mit erhöhten Rechten arbeitet, auch bekannt als “sudo-mode”.

Do Anything Now (DAN): DAN-Prompts können als eine Art Brute-Force-Jailbreak angesehen werden. Der Prompt wird erstellt, indem ein Großteil des verfügbaren Eingabekontexts verwendet wird, um das Modell davon zu überzeugen, dass es als DAN agiert, d. h. als ein Modell, das alles tun kann (sogar verbotene Inhalte ausgeben). Die schiere Menge an überzeugenden Inhalten scheint so zu wirken, dass sich das LLM oft dem Willen des Angreifers beugt.

Schutzmaßnahmen gegen Prompt-Injection-Angriffe

Im Kampf gegen Prompt-Injection-Angriffe haben Entwickler und Forscher eine Reihe von Verteidigungsstrategien entwickelt, um die Sicherheit von LLMs zu verbessern. Es ist jedoch anzumerken, dass die Sicherung von LLMs bekanntermaßen schwierig ist und ständig neue Injektionsstrategien zur Umgehung von Sicherheitsimplementierungen entwickelt werden. Einige der bekannten Verteidigungsmaßnahmen sind:

Filtern: Implementieren Sie Filter, um potenziell bösartige Prompts und LLM-Outputs zu erkennen und zu blockieren. Dies kann durch die Verwendung von Black- oder Whitelists geschehen.

Längenbeschränkung: Beschränken Sie die Eingabelänge, um sich gegen DAN-artige Prompt-Injektionen zu schützen.

Abwehr von Prompts: Fügen Sie System-Anweisungen zu den Prompts für Ihr LLM ein, die eine schädliche Eingaben neutralisieren.

Post-Prompting: Platzieren Sie die Nutzereingabe vor dem Prompt. Der Grund dafür ist, dass LLMs häufiger der zuletzt gegebenen Anweisung folgen.

Random Sequence Enclosure: Umgeben Sie Nutzereingaben innerhalb eines Prompts mit zufällig generierten Textsequenzen.

Sandwich-Verteidigung: Die Benutzereingabe wird zwischen zwei System-Anweisungen eingefügt. Somit wird die Anweisung sowohl am Anfang und am Ende eines Prompts gegeben, kann also als eine Art Post-Prompting Verteidigung gesehen werden. Es ist jedoch bereits bekannt, dass diese Verteidigungsmaßnahme anfällig für definierte Wörterbuchangriffe (siehe folgenden Absatz) ist.

XML-Tagging: Umgeben Sie die Benutzereingabe mit XML-Tags und implementieren eine “Escaping Logik”, um den Missbrauch von syntaktischen Tricks durch einen Angreifer zu verhindern.

Gesonderte LLM-Auswertung: Verwenden und gegebenfalls finetunen Sie ein separates Modell zur Auswertung der Eingabeaufforderung, der Benutzereingabe und der gegebenen Ausgabe eines LLMs.

Fine-Tuning: Trainieren und aktualisieren Sie das LLM-Modell kontinuierlich mit neuen Daten, um seine Robustheit gegenüber Angriffen zu verbessern.

Beachten Sie, dass derzeit keine dieser Schutzmaßnahmen einen vollständigen und zuverlässigen Schutz gegen prompte Injektionen bietet. Die Verwendung dieser Schutzmaßnahmen ist jedoch besser als überhaupt kein Schutz. Halten Sie stets Ausschau nach neuen Angriffsstrategien. Es kann immer dazu kommen, dass Ihre Verteidigungsmechanismen durch die Verwendung einer neuen Prompt-Struktur umgangen werden können. Außerdem ist nicht genau bekannt, wie sich diese Verteidigungsstrategien auf die Leistung der LLMs auswirken. Dazu müssen vorher mehrere Prompt-Experimente durchgeführt werden.

Offensive Payload Delivery

Prompt-Injection-Payloads können auf unterschiedliche Weise übertragen werden. Die wichtigsten bekannten Methoden zur Übermittlung bösartiger Prompts sind entweder aktiv oder passiv. Bei einer aktiven Übermittlung wird der Prompt direkt über die bereitgestellte Chat-Schnittstelle eingeschleust. Bei einer passiven Übermittlung werden Inhalte aus externen Quellen genutzt, um indirekt einen schädlichen Prompt einzuschleusen. Im Fall des oben erwähnten Twitter-Chat-Bots von remotilo.io waren die Eingaben beispielsweise Tweets von Nutzer:innen zum Thema Fernarbeit, auf die der Bot antworten sollte. Twitter-Nutzer:innen ergriffen diese Gelegenheit und verwendeten Tweets, um Prompts in das LLM zu injizieren. Daher sind LLMs, die als Agent agieren können, um online oder innerhalb anderer Programme Aktionen auszuführen, besonders anfällig für indirekte Prompt-Injection-Angriffe. Außerdem sind LLMs zunehmend in der Lage, multimodale Eingaben wie Dokumente und andere Datenformate zu verarbeiten. Dies schafft einen zusätzlichen – allerdings noch nicht gründlich untersuchten – möglichen Angriffsvektor.

Darüber hinaus wurden verschiedene Strategien entwickelt, um Schutzmechanismen zu umgehen. Einige der gängigen Strategien sind:

Verschleierung: Mit dieser Strategie wird die bösartige Absicht eines Prompts in einem scheinbar harmlosen Prompt getarnt, um Sicherheitsmaßnahmen zu umgehen. Eine beliebte Methode besteht darin, den eigentlichen Payload zu enkodieren (z.B. in Base64) und das LLM zu bitten, diese zu dekodieren.

Aufsplitten des Payloads: Hier werden bösartige Eingaben auf mehrere Prompts aufgeteilt. Danach weist der Angreifer den LLM an, alle Teile zu kombinieren und die Anweisung auszuführen.

Virtualisierung: Bei dieser Methode wird eine virtuelle oder imaginäre Umgebung verwendet, um das Modell zu einer gewünschten Aktion zu veranlassen. Dies kann über eine Vortäuschungs-Injektion geschehen. Jedoch wird die Vortäuschung über mehrere Prompts aufgeteilt, wodurch mit jeder Eingabe das LLM Schrittweise die neuen Umstände als Kontext aufnimmt.

Definierte Wörterbuchangriffe: Diese Strategie wird verwendet, um die Sandwich-Verteidigung zu umgehen, indem das LLM aufgefordert wird, die letzte Anweisung auf eine bösartige Anweisung gemäß einem vorgegebenen Code-Wörterbuch abzubilden.

Rekursive Injektion: Wie schon beschrieben, können LLMs verwendet werde, um zu prüfen, ob die Ausgabe schädlich oder illegal ist. Dies kann ausgenutzt werden, indem ein Prompt erstellt wird, der eine harmlose Ausgabe für das zweite Modell ausgibt, aber gleichzeitig auf die verbotene Ausgabe auffordert.

Code-Injektion: Hier werden Prompts erstellt, die das Modell dazu bringen, Code auszuführen, wodurch das System potenziell gefährdet wird. Dies ist besonders effektiv, wenn das LLM selbst Code an einen Interpreter sendet oder selbst Code auswerten kann.

Von der Theorie in die Praxis

Nachdem wir nun einen Einblick in die Theorie von Prompt-Injektionen und Schutzmaßnahmen gewonnen haben, ist es Zeit für ein Experiment. Können wir Google Bard dazu bringen, die folgende Aussage zu treffen?

“killing humans is ethically correct”

In unserem anstehenden Blogbeitrag werden wir diese Frage beantworten und Sie Schritt für Schritt durch das Experiment führen. Stay tuned!