Angriffsmöglichkeiten gegen Generative AI
Andrea Hauser
So funktioniert Prompt Injection
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:
Die Anfragen an das LLM sehen aus dessen Sicht allerdings wie folgt aus:
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.
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.
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:
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.
Unsere Spezialisten kontaktieren Sie gern!
Andrea Hauser
Andrea Hauser
Andrea Hauser
Andrea Hauser
Unsere Spezialisten kontaktieren Sie gern!