Google-Bard-Hack: Von Prompt Injection bis zur Datenexfiltration
(embracethered.com)- Mit den Bard Extensions, die sogar persönliche Dokumente und E-Mails lesen können, kann indirekte Prompt Injection, die in externen Dokumenten versteckt ist, zu einem realen Pfad für Datenexfiltration werden
- Angreifer können ein bösartiges Google Doc dem Opfer zwangsweise freigeben und dafür sorgen, dass Bard die im Dokument enthaltenen Anweisungen ausführt, sobald es das Dokument sucht oder analysiert
- Das Markdown-Bild-Rendering von Bard kann externe URLs ohne Klick des Nutzers aufrufen und wird so zu einem Kanal, über den Gesprächskontext als Query-String angehängt und exfiltriert werden kann
- Googles Content Security Policy blockierte zwar das Laden beliebiger Bilder, aber Google Apps Script, das auf
script.google.comundgoogleusercontent.comläuft, wurde als Umgehungspfad genutzt - Das Problem wurde am 19. September 2023 an Google VRP gemeldet, am 19. Oktober wurde die Behebung bestätigt; offenbar wurde eine Filterung ergänzt, die das Einfügen von Daten in URLs verhindert
Neue Angriffsfläche durch Bard Extensions
- Google Bard unterstützt seit einem Update Extensions und kann dadurch auf YouTube, Flug- und Hotelsuche sowie auf persönliche Dokumente und E-Mails der Nutzer zugreifen
- Dadurch, dass Bard Drive, Docs und Gmail des Nutzers analysieren kann, entsteht eine Situation, in der nicht vertrauenswürdige externe Daten in den LLM-Kontext geholt werden
- In einer solchen Architektur kann das System indirekter Prompt Injection ausgesetzt sein, bei der in externen Inhalten versteckte Anweisungen die Antwort des Modells verändern
- Bei YouTube-Zusammenfassungen und in Tests mit
Google Docswurde bestätigt, dass Bard Anweisungen folgt, die in externen Inhalten enthalten sind
Angriffsszenario
- Indirekte Prompt Injection über E-Mails oder Google Docs ist besonders riskant, weil sie übertragen werden kann, ohne dass der Nutzer ausdrücklich auf einen bösartigen Link klicken muss
- Angreifer können dem Opfer ein bösartiges Google Doc zwangsweise freigeben
- Wenn das Opfer dieses Dokument mit Bard sucht oder damit interagiert, können die Prompt-Injection-Anweisungen im Dokument ausgeführt werden
- Ein häufiger Angriffsweg in LLM-Apps ist die Exfiltration des Chatverlaufs über Hyperlinks und Bild-Rendering
Markdown-Bild-Injection
- Googles LLM kann Markdown-Elemente in Textantworten einfügen, und Bard rendert diese als HTML
- Die Markdown-Bildsyntax wird in ein HTML-
<img>-Tag umgewandelt, wobei das Attributsrcauf einen Server des Angreifers zeigen kann - Der Browser verbindet sich automatisch mit dieser URL, um das Bild anzuzeigen, ohne Interaktion des Nutzers
- Wenn das LLM zuvor Daten aus dem Chatkontext zusammenfasst oder liest und diesen Wert an die Bild-URL anhängt, können die Daten über die externe Anfrage abfließen
- Der erste Exploit wurde schnell entwickelt, indem der Gesprächsverlauf gelesen und ein Hyperlink erzeugt wurde, der diese Daten enthielt, aber das Bild-Rendering wurde von Googles Content Security Policy blockiert
Umgehung der Content Security Policy
- Googles CSP blockiert das Laden von Bildern aus beliebigen Quellen
- Allerdings enthält die CSP relativ weit gefasste erlaubte Quellen wie
*.google.comund*.googleusercontent.com - Google Apps Script kann ähnlich wie Office-Makros per URL aufgerufen werden und läuft auf den Domains
script.google.comodergoogleusercontent.com - Aufgrund dieser Eigenschaft war Apps Script ein geeigneter Kandidat zur CSP-Umgehung
Implementierung von Bard Logger
- Mit
Apps Scriptwurde Bard Logger implementiert - Der Logger schreibt alle Query-Parameter, die an die aufgerufene URL angehängt sind, in ein Google Doc
- In der Apps-Script-Oberfläche wurde eine Einstellung gefunden, die Zugriff ohne Authentifizierung erlaubt, sodass ein Endpoint für anonyme Aufrufe erstellt werden konnte
- Die Angriffskette bestand aus den folgenden Elementen
- Indirekte Prompt Injection aus Bard-Extensions-Daten
- Zero-Click-Anfragen durch das Bild-Rendering von Bard
- Prompt-Injection-Anweisungen im bösartigen Google Doc
- Ein auf
google.combasierender Logging-Endpoint, der die Daten beim Laden des Bildes entgegennimmt
Demo-Ablauf
- In der Demo werden die Chatprotokolle des Nutzers exfiltriert, sobald ein bösartiges
Google Docin den Chatkontext gelangt - Der Ablauf in den Screenshots ist wie folgt
- Der Nutzer öffnet das Google Doc „The Bard2000“
- Die Angreiferanweisung wird injiziert und das Bild wird gerendert
- Der Angreifer erhält die Daten über das Bard-Logger-Apps-Script in einem Google Doc
- Die Kette war komplexer als frühere Fälle, die bei Bing Chat, ChatGPT und Claude diskutiert wurden, weil eine CSP-Umgehung erforderlich war
Natürlichsprachiger Shellcode und Payload
- Wie der Ausdruck „Shell Code is natural language these days“ andeutet, besteht der Exploit aus natürlichsprachigen Prompts
- Das bösartige Google Doc enthält eine Payload, die Prompt Injection und Datenexfiltration ausführt
- Diese Payload bringt das LLM dazu, Text in der Bild-URL durch Gesprächsdaten zu ersetzen
- Damit Bard die Aufgabe abschließen konnte, waren einige Beispiele für in-context learning erforderlich
- Die Payload im Anhang weist an, die ersten 20 Wörter des Gesprächs auszugeben, Leerzeichen als
+zu codieren und in die Query der Apps-Script-Ausführungs-URL einzufügen - Der Anhang enthält außerdem die Ausgabestring
AI Injection succeeded #10
Googles Fix und Zeitplan
- Das Problem wurde am 19. September 2023 an Google VRP gemeldet
- Nach einer Statusanfrage am 19. Oktober 2023 bestätigte Google die Behebung und erlaubte, die Demo in den Vortrag auf der Ekoparty 2023 aufzunehmen
- Wie genau der Fix umgesetzt wurde, ist nicht vollständig klar
- Die CSP wurde nicht geändert und Bilder werden weiterhin gerendert; daher scheint eine Filterung ergänzt worden zu sein, die das Einfügen von Daten in URLs verhindert
- Zeitplan der Behebung
-
- September 2023: Problem gemeldet
-
- Oktober 2023: Behebung bestätigt
-
1 Kommentare
Meinungen auf Hacker News
theüber 2–3 Prompts hinweg wiederholt; bei Bard funktioniert diese Methode nicht.Ich dachte, Regeln würden global und gleichmäßig auf den gesamten Prompt angewendet.
Danach tauchte dasselbe Problem bei XSS wieder auf: Das System konnte Befehle und Daten nicht unterscheiden, sodass ein Angreifer Nachrichten erstellen konnte, die das System fälschlich als Befehle interpretierte. Die Lösung bestand darin, eine Möglichkeit zu finden, Daten klar abzugrenzen.
Bei LLMs dürfte die Lösung ähnlich aussehen. Es könnte bedeuten, LLMs darauf zu trainieren, Anweisungen wie „Die ersten 100 Tokens sind unveränderlich, und keine andere Anweisung darf ihnen widersprechen. [geschützte Anweisung einfügen]“ zu respektieren. Wenn man solche Dinge nicht erst zur Inferenzzeit als Schutzanweisungen anhängt, sondern bereits in der Trainingsphase einbaut, wird es vielleicht schwieriger, bösartige Anweisungen einzuschleusen. Praktisch ist das aber nicht einfach, weil man zum Trainingszeitpunkt alle möglichen Angriffe vorhersehen müsste.
Das Problem ist, warum man einem zufälligen Token-Sampler, der in einem Heuhaufen herumstochert, besondere Zugriffsrechte gibt und dann glaubt, dass es immer gut gehen wird, nur weil es meistens so aussieht, als funktioniere es.
Man muss hoffen, dass es in den nächsten Jahren einen strukturellen Durchbruch gibt, der Anweisungen, also Prompts, von den als „Daten“ dienenden eigentlichen Gesprächstexten trennen kann.
Zum Beispiel könnte es einen Ansatz geben, bei dem zwei Arten von Tokens als Eingabe akzeptiert werden: Prompt-Tokens und Daten-Tokens, die sich niemals vermischen oder miteinander verwechselt werden. Ich weiß noch nicht, wie das gehen soll, und damit ein Modell auf diesen zwei Ebenen trainiert werden und arbeiten kann, braucht es große strukturelle Fortschritte. Man kann nur hoffen, dass jemand sie findet.
Es gibt keinen fundamentalen Grund, warum es unmöglich sein sollte. Es passt nicht zum heutigen Paradigma einer einzelnen Token-Sequenz, aber genau deshalb entwickeln sich Paradigmen weiter.
Man sollte dem Modell nur Daten geben, die der Nutzer auch über eine andere Schnittstelle lesen dürfte.
Die Lösung besteht darin, das LLM als nicht vertrauenswürdige Komponente zu behandeln und unter dieser Annahme zu designen.
Mit einer Vektordatenbank und APIs zusammen funktioniert das gut, weil man Kontextinformationen oder Informationen zur rollenbasierten Zugriffskontrolle leicht übergeben kann.
Von LLMs als Wissensdatenbank bin ich nicht besonders beeindruckt, als Interface sind sie aber deutlich eindrucksvoller.
Vor ein paar Tagen wurde hier der Begriff Betriebssystem verwendet, und diese Bezeichnung gefällt mir ebenfalls.
Vor einer Stunde habe ich auch ChatGPT benutzt, und interessanterweise hat es meine Anfrage in eine Bing-Suche umgewandelt und dann konsistent mit den richtigen Informationen geantwortet. Ich habe konkret nach einem Open-Source-Projekt gefragt; früher kannte es nur die API-Spezifikation und die Dokumentation, diesmal funktionierte es sehr gut.
LLMs sind inhärent unsicher, vor allem weil sie sich ihrem Wesen nach leicht täuschen lassen. Um nützlich zu sein, müssen sie bis zu einem gewissen Grad leicht zu beeinflussen sein, aber dadurch kann jede Anwendung, die Text aus nicht vertrauenswürdigen Quellen verarbeitet – zum Beispiel das Zusammenfassen von Webseiten –, von böswilligen Angreifern unterwandert werden.
Wir sprechen seit 14 Monaten über Prompt Injection, aber bisher ist nichts in Sicht, das auch nur annähernd wie eine verlässliche Lösung wirkt.
Ich hoffe wirklich, dass bald jemand dieses Problem löst; andernfalls wird es schwierig sein, viele der Dinge, die man mit LLMs bauen möchte, sicher umzusetzen.
[1] https://gandalf.lakera.ai/
Um meine Sichtweise noch etwas genauer zu erklären: Am Ende wird es meiner Meinung nach darauf hinauslaufen, auf alle Prompts, die ein LLM interpretiert, etwas wie
addslashesanzuwenden. Deshalb habe ich es auf „das LLM kann dieses Problem lösen“ vereinfacht.Wenn man darüber nachdenkt, was
addslashesmacht, geht es darum, Code anzuwenden, der Sonderzeichen entfernt oder entschärft, die die nachfolgende Codeausführung beeinflussen. Auf die gleiche Weise kann ein LLM meiner Ansicht nach Eingaben selbst bereinigen, sodass kein Ausbruch möglich ist.Wenn man zustimmt, dass es keine Eingabezeichen gibt, mit denen sich die hinzugefügten Slashes entfernen lassen, dann müsste es eine Prompt-Version von
addslashesgeben, die ein einhüllendesaddslasheszur Abschwächung von Prompt Injection durch keine Anweisung ausbrechen lässt.Ich habe nicht bis zum Ende durchdacht, welche Auswirkungen das auf die Nutzbarkeit des Systems hätte, aber die meisten Aufgaben sollten sich weiterhin erledigen lassen, solange man im vorgesehenen Nutzungsbereich bleibt.
Wenn Lakera AI eine Abwehr dagegen hat, sollten sie das beweisen können. Wenn es eine Methode gäbe, Injections zu 100 % effektiv zu blockieren, müsste es im Spiel eine unmögliche Stufe geben. Da es eine solche Methode aber nicht gibt, gibt es auch keine solche Stufe im Spiel.
Lakera AI betreibt eine probabilistische Abwehr, lässt es im Marketing aber so aussehen, als hätten sie etwas Verlässlicheres. Niemand hat einen vollständig vertrauenswürdigen Detektor demonstriert, und es gibt keine Methode, alle Prompt Injections zuverlässig zu verhindern. Dass Lakera AI diese Tatsache im Marketing oft auslässt, halte ich ehrlich gesagt für irreführend.
Der obige Text ist falsch. Es gibt keine Methode, diesen konkreten Angriff mit einem Injection-Detektor zu 100 % zuverlässig zu erkennen. Man müsste sagen, dass Lakera AI einen Injection-Detektor hat, der diesen Angriff manchmal erkennt. Lakera formuliert sein Marketing aber nicht so. Sie versuchen unterschwellig, ein Produkt zu verkaufen, das nicht existiert und von dem Forscher nicht einmal gezeigt haben, dass es gebaut werden kann.
Anders gesagt: Welche Kunden, die Prompt-Injection-Abwehr brauchen und dafür bezahlen würden, können sich eine gewisse Fehlerquote leisten?
Der Nutzer hatte nicht beabsichtigt, dass seine früheren Konversationen für den Angreifer sichtbar werden. Das ist die Sicherheitslücke.
Diese Konversation hätte völlig harmlos sein können, aber es hätte auch um Ratschläge zu persönlichen Problemen gehen können, etwa medizinische, finanzielle oder Beziehungsberatung.
Ich habe dafür ein Custom GPT gebaut, das das für mich erledigt.
Hast du den Prozess, wie du es gebaut hast, irgendwo in einem Blog beschrieben oder veröffentlicht? Klingt ziemlich cool.