Prompt Injection - Ein vertiefter Einblick

Prompt Injection

Ein vertiefter Einblick

Andrea Hauser
von Andrea Hauser
am 13. Juni 2024
Lesezeit: 8 Minuten

Keypoints

So funktioniert Prompt Injection

  • Bei direkten Prompt Injections greift der Benutzer das System direkt an und die Auswirkungen sind typischerweise auf die Session dieses Benutzers eingeschränkt
  • Bei indirekter Prompt Injection wird ein normaler Benutzer durch eine Drittpartei angegriffen und kriegt teilweise von diesem Angriff gar nichts mit
  • Verteidigung gegen Prompt Injection Angriffe ist sehr schwierig
  • Die Empfehlung ist die Auswirkung einer möglichen Prompt Injection gering zu halten, in dem LLM keine sensitiven/kritischen Daten und Zugriffe erhält

Generative Artificial Intelligence und im speziellen Large Language Models (LLM) sind momentan in aller Munde und Unternehmen wollen an dieser Entwicklung oder grundsätzlich bei der Nutzung von künstlicher Intelligenz teilnehmen. Der Einsatz von KI-Chatbots und ähnlichem ist allerdings nicht ganz ungefährlich. Im Artikel Angriffsmöglichkeiten gegen Generative AI wurde bereits eine Gesamtübersicht über mögliche Gefahren beim Einsatz von Generative Artificial Intelligence erstellt. In diesem Artikel wird auf den Angriffstyp Prompt Injection im Detail eingegangen.

Zentrale Begriffe und Konzepte

Bevor allerdings mit Beispielen der Prompt Injection fortgefahren werden kann, sollen die wichtigsten Begriffe definiert werden.

Unter einem Prompt versteht man die Abfrage, mit der ein Endbenutzer mit einem Large Language Model interagieren kann. Dieser Prompt wird in natürlicher Sprache verfasst. Im Bereich der Large Language Models kommen System Prompts zum Einsatz kommen, bei dem grob gesagt ein eher generisches Model durch die Verwendung von Prompts dazu gebracht wird eine spezifischere Funktionalität zu erfüllen. Diese Prompts werden durch die Entwickler festgelegt.

Prompts und deren Antworten werden in LLMs als Token repräsentiert. Dabei handelt es sich typischerweise nicht um ein komplettes Wort, sondern zum Beispiel um ein Teilwort oder ein einzelnes Zeichen, kann aber auch grösser als ein einzelnes Wort sein. Diese Repräsentation wird verwendet, da es für Computer einfacher ist, mit dieser Repräsentation zu rechnen. Bei einer Abfrage eines Benutzers wird der Prompt in Token umgewandelt und das Model vervollständigt die erhaltenen Token.

Ebenfalls wichtig zu verstehen ist das Konzept, dass LLMs stateless sind, also keine Abfragen zwischenspeichern und keinen Speicher haben. Um also ein Erinnerungsvermögen zu simulieren, könnte ein Abfrageverlauf wie folgt aussehen:

Aus der Sicht des Benutzers:

LLM Interkation aus Sicht des Benutzers

Die Anfragen an das LLM sehen aus dessen Sicht allerdings wie folgt aus:

LLM Interkation aus Sicht des LLMs

Wobei die sich wiederholenden Zeilen als Prompt Kontext mitgegeben werden, so dass das LLM ein Gedächtnis simulieren kann und zum Beispiel Alice im späteren Gesprächsverlauf weiterhin als Alice ansprechen kann. Und genau aufgrund dieses Kontexts, der mitgegeben wird, funktionieren Prompt Injections sehr gut.

Bei Prompt Injections handelt es sich um Prompts eines Angreifers, die so gestaltet wurden, dass das LLM unwissentlich die Instruktionen des Benutzers ausführt. Diese Angriffe können entweder direkt oder über einen indirekten Weg durchgeführt werden. Bei direkten Prompt Injections wird der Angriff gegen das LLM durch den Benutzer der LLM-Session selbst ausgelöst. Bei einer indirekten Prompt Injection wird allerdings die LLM-Session eines normalen Benutzers durch von Angreifer platziertem bösartigen Inhalt auf einer Webseite oder einem anderen indirekten Weg angegriffen.

Bekannte Prompt Injection Beispiele

Wie im letzten Artikel beschrieben, gibt es die Angriffsmöglichkeit, den System Prompt in Erfahrung zu bringen. Bei dieser Angriffstechnik handelt es sich um eine direkte Prompt Injection. Im GitHub Repo leaked-system-prompts finden sich System Prompts für viele der bekannten Modelle, inklusive den Fragen, die zur Entdeckung des Prompts geführt haben.

Interessanter sind jedoch indirekte Prompt Injection Angriffe, da dabei der Benutzer nicht derjenige ist, der den Angriff ausführt, sondern die Session des Benutzers wird durch eine Drittperson angegriffen. Dies kann zum Beispiel Form nehmen durch für den Benutzer nicht sichtbaren Inhalt auf einer Webseite. Ein gutes Beispiel dafür ist der Angriff gegen Bing Chat bei dem sich der Angriff in einem div Element befindet mit der Schriftgrösse 0, die durch den Endbenutzer nicht gesehen wird, aber durch Bing Chat dennoch interpretiert und als Anweisung für das weitere Verhalten von Bing Chat verwendet wird.

Eine weitere interessante Möglichkeit für indirekte Prompt Injection Angriffe ergibt sich, wenn Benutzer etwas von einer Webseite kopieren und in eine Abfrage eines LLMs einfügen. Denn die Webseite, von der kopiert wird, kann durch einfachen JavaScript-Code den in die Zwischenablage kopierten Text manipulieren. Denn es gibt den oncopy Event der verwendet werden kann, um während des Kopierens beliebige Manipulationen vorzunehmen. Ein kompletter Angriff ist im Artikel New prompt injection attack on ChatGPT web version. Reckless copy-pasting may lead to serious privacy issues in your chat von Roman Samoilenko zu finden.

Gegenmassnahmen

Auf einem Konzeptlevel ist Prompt Injection zwar sehr ähnlich wie eine SQL Injection. Allerdings hören die Ähnlichkeiten auf, wenn man das Ganze genauer betrachtet. Bei SQL Injection ist eine klare Trennung zwischen Benutzer-Eingabe und System-Eingaben möglich, dies ist bei LLM-Abfragen allerdings nicht möglich. Die Token des Benutzers werden in den Kontext des System Prompts gebracht, beziehungsweise müssen vom System interpretiert werden und keine noch so guten Anleitungen im System Prompt können eine hundertprozentige Garantie bieten, dass ein Angriff eines Benutzers nicht dennoch interpretiert und ausgeführt wird. Es kann allerdings den folgenden Empfehlungen gefolgt werden, um die Auswirkungen einer Prompt Injection zu reduzieren:

Fazit

Das Feld rund um LLMs ist im ständigen Wandel. Auch unterschiedlichste Angriffstypen sind erst seit wenigen Monaten/Jahren sauber ausgearbeitet und es kann gut möglich sein, dass noch weitere Angriffsmöglichkeiten entdeckt werden. Es ist klar, dass direkte und indirekte Prompt Injection Angriffe in nächster Zeit nicht gelöst werden können. Stattdessen müssen jedem diese Angriffe beim Einsatz von LLMs bewusst sein und ein System entsprechend entworfen werden, dass kritische Daten nicht in ein LLMs gespeist werden, wenn das Modell schliesslich veröffentlicht werden soll.

Weiterführende Links

Über die Autorin

Andrea Hauser

Andrea Hauser hat ihren Bachelor of Science FHO in Informatik an der Hochschule für Technik Rapperswil abgeschlossen. Sie setzt sich im offensiven Bereich in erster Linie mit Web Application Security Testing und der Umsetzung von Social Engineering Kampagnen auseinander. Zudem ist sie in der Forschung zum Thema Deepfakes tätig. (ORCID 0000-0002-5161-8658)

Links

Sie wollen eine KI evaluieren oder entwickeln?

Unsere Spezialisten kontaktieren Sie gern!

×
Angriffsmöglichkeiten gegen Generative AI

Angriffsmöglichkeiten gegen Generative AI

Andrea Hauser

XML-Injection

XML-Injection

Andrea Hauser

Burp Makros

Burp Makros

Andrea Hauser

WebSocket Fuzzing

WebSocket Fuzzing

Andrea Hauser

Sie wollen mehr?

Weitere Artikel im Archiv

Sie brauchen Unterstützung bei einem solchen Projekt?

Unsere Spezialisten kontaktieren Sie gern!

Sie wollen mehr?

Weitere Artikel im Archiv