Dies ist das Code-Repository, das unser Papier-Flüstern in der Maschine begleitet: Vertraulichkeit in LLM-integrierten Systemen.
Großsprachige Modelle (LLMs) werden zunehmend durch externe Tools und kommerzielle Dienstleistungen in LLM-integrierte Systeme erweitert. Während diese Schnittstellen die Fähigkeiten der Modelle erheblich verbessern können, führen sie auch eine neue Angriffsfläche ein. Manipulierte Integrationen können beispielsweise das Modell ausnutzen und die sensiblen Daten beeinträchtigen, die über andere Schnittstellen zugegriffen werden. Während sich frühere Arbeiten in erster Linie auf Angriffe konzentriert haben, die auf die Ausrichtung eines Modells oder die Auslegung von Schulungsdaten abzielen, ist die Sicherheit der Daten, die nur während der Inferenz verfügbar sind, der Kontrolle entkommen. In dieser Arbeit demonstrieren wir die Schwachstellen, die mit externen Komponenten verbunden sind, und führen einen systematischen Ansatz zur Bewertung der Vertraulichkeitsrisiken in LLM-integrierten Systemen ein. Wir identifizieren mehrere spezifische Angriffsszenarien, die für diese Systeme einzigartig sind, und formalisieren diese in ein Tool-Robustness -Framework, das die Fähigkeit eines Modells zum Schutz sensibler Informationen misst. Mit diesem Rahmen können wir die Sicherheitsanfälligkeit des Modells für Vertraulichkeitsangriffe bewerten. Unsere Ergebnisse zeigen, dass alle untersuchten Modelle für Angriffe sehr anfällig sind, wobei das Risiko erheblich zunimmt, wenn Modelle zusammen mit externen Werkzeugen verwendet werden.
Wenn Sie unsere Arbeit zitieren möchten, verwenden Sie bitte den Bibtex -Eintrag.
Warnung
Die Hardware -Ablagerung wird nur für CUDA -Maschinen, die Linux ausgeführt, vollständig unterstützt. Abgeordnete auf macOS sollten etwas funktionieren, aber Windows mit CUDA könnte einige Probleme haben.
Installieren Sie vor dem Ausführen des Codes die Anforderungen:
python -m pip install --upgrade -r requirements.txt
Wenn Sie Modelle verwenden möchten, die von OpenAI oder Huggingface gehostet werden, erstellen Sie sowohl eine key.txt
hf_token.txt
, die Ihre OpenAI -API -Taste enthält Projekt.
Manchmal kann es notwendig sein, sich über die CLI bei Ihrem HarmgingFace -Konto anzumelden:
git config --global credential.helper store
huggingface-cli login
Alle Skripte können mit der Beschleunigungsbibliothek an mehreren GPUs/CPUs arbeiten. Um dies zu tun, rennen Sie:
accelerate config
So konfigurieren Sie die verteilten Trainingsfunktionen Ihres Systems und starten Sie die Skripte mit:
accelerate launch [parameters] <script.py> [script parameters]
python attack . py - - strategy "tools" - - scenario "CalendarWithCloud" - - attacks "payload_splitting" "obfuscation" - - defense "xml_tagging" - - iterations 15 - - llm_type "llama3-70b" - - temperature 0.7 - - device cuda - - prompt_format "react"
Würde die Angriffe payload_splitting
und obfuscation
gegen die LLM llama3-70b
im Szenario CalendarWithCloud
mit der Verteidigung xml_tagging
für 15 Iterationen mit einer Temperatur von 0,7 auf einem CUDA-Gerät in einem Tool-Integrated-System ausführen.
Argument | Typ | Standardwert | Beschreibung |
---|---|---|---|
-h, --help | - - | - - | Zeigen Sie diese Hilfebotschaft an und beenden Sie |
-a, --attacks | Liste [STR] | payload_splitting | Gibt die Angriffe an, die gegen die LLM verwendet werden |
-d, --defense | str | None | Gibt die Verteidigung für die LLM an |
-llm, --llm_type | str | gpt-3.5-turbo | Gibt die Art des Gegners an |
-le, --llm_guessing | bool | False | Gibt an, ob ein zweiter LLM verwendet wird, um den geheimen Schlüssel von der normalen Reaktion zu erraten oder nicht |
-t, --temperature | schweben | 0.0 | Gibt die Temperatur für die LLM an, um die Zufälligkeit zu kontrollieren |
-cp, --create_prompt_dataset | bool | False | Gibt an, ob ein neuer Datensatz mit erweiterten Systemaufforderungen erstellt werden sollte |
-cr, --create_response_dataset | bool | False | Gibt an, ob ein neuer Datensatz mit geheimen undichten Antworten erstellt werden sollte |
-i, --iterations | int | 10 | Gibt die Anzahl der Iterationen für den Angriff an |
-n, --name_suffix | str | "" | Gibt ein Namensuffix an, um benutzerdefinierte Modelle zu laden. Da Argumentparameterzeichenfolgen nicht mit '-' Symbolen, der ersten '-' vom Parser automatisch hinzugefügt werden |
-s, --strategy | str | None | Gibt die Strategie für den Angriff an (ob Sie normale Angriffe oder tools -Angriffe anwenden möchten). |
-sc, --scenario | str | all | Gibt das Szenario für die Toolbasis an |
-dx, --device | str | cpu | Gibt das Gerät an, das zum Ausführen des Skripts (CPU, CUDA oder MPS) verwendet wird. |
-pf, --prompt_format | str | react | Gibt an, ob React oder Werkzeug-Finetuned-Eingabeaufforderung für Wirkstoffe verwendet wird. (reagieren oder Werkzeug-Finetuned) |
-ds, --disable_safeguards | bool | False | Deaktivieren |
Die Namenskonventionen für die Modelle sind wie folgt: |
< model_name > - < param_count > - < robustness > - < attack_suffix > - < custom_suffix >
z.B:
llama2 - 7 b - robust - prompt_injection - 0613
Wenn Sie die Angriffe gegen ein Präfix-abgestimmtes Modell mit einem benutzerdefinierten Suffix (z. B. 1000epochs
) ausführen möchten, müssten Sie die Argumente angeben und folgt:
... - - model_name llama2 - 7 b - prefix - - name_suffix 1000 epochs ...
Modell | Parameterspezifizierer | Link | Berechnung Instanz |
---|---|---|---|
GPT-4 (O1, O1-Mini, Turbo) | gpt-4o / gpt-4o-mini / gpt-4-turbo | Link | Openai API |
Lama 2 | llama2-7b / llama2-13b / llama2-70b | Link | Lokale Inferenz |
Lama 2 gehärtet | llama2-7b-robust / llama2-13b-robust / llama2-70b-robust | Link | Lokale Inferenz |
Qwen 2.5 | qwen2.5-72b | Link | Lokale Inferenz (zuerst: ollama pull qwen2.5:72b ) |
Lama 3.1 | llama3-8b / llama3-70b | Link | Lokale Inferenz (First: ollama pull llama3.1/llama3.1:70b/llama3.1:405b ) |
Lama 3.2 | llama3-1b / llama3-3b | Link | Lokale Inferenz (zuerst: ollama pull llama3.2/llama3.2:1b ) |
Lama 3.3 | llama3.3-70b | Link | Lokale Inferenz (First: ollama pull llama3.3/llama3.3:70b ) |
Reflexion Lama | reflection-llama | Link | Lokale Inferenz (zuerst: ollama pull reflection ) |
Vicuna | vicuna-7b / vicuna-13b / vicuna-33b | Link | Lokale Inferenz |
StableBeluga (2) | beluga-7b / beluga-13b / beluga2-70b | Link | Lokale Inferenz |
Orca 2 | orca2-7b / orca2-13b / orca2-70b | Link | Lokale Inferenz |
Gemma | gemma-2b / gemma-7b | Link | Lokale Inferenz |
Gemma 2 | gemma2-9b / gemma2-27b | Link | Lokale Inferenz (zuerst: ollama pull gemma2/gemma2:27b ) |
Phi 3 | phi3-3b / phi3-14b | Link | Lokale Inferenz (zuerst: ollama pull phi3:mini/phi3:medium ) |
(Finetuned oder robust/gehärtete Lama -Modelle müssen zunächst mit dem Skript finetuning.py
generiert werden, siehe unten)
Angriffe | Verteidigung | ||
---|---|---|---|
Name | Spezifizierer | Name | Spezifizierer |
Nutzlastaufteilung | payload_splitting | Zufällige Sequenzgehäuse | seq_enclosure |
Verschleierung | obfuscation | XML -Tagging | xml_tagging |
Jailbreak | jailbreak | Heuristik/Filterverteidigung | heuristic_defense |
Übersetzung | translation | Sandwichabwehr | sandwiching |
Chatml Missbrauch | chatml_abuse | LLM -Bewertung | llm_eval |
Maskierung | masking | Verwirrigkeitserkennung | ppl_detection |
Typoglykämie | typoglycemia | Prompt guard | prompt_guard |
Gegentliches Suffix | advs_suffix | ||
Präfixinjektion | prefix_injection | ||
Ablehnungsensunterdrückung | refusal_suppression | ||
Kontext ignorieren | context_ignoring | ||
Kontextabschluss | context_termination | ||
Kontext -Schalttrennzeichen | context_switching_separators | ||
Wenige Schüsse | few_shot | ||
Kognitives Hacken | cognitive_hacking | ||
Basis -Chat | base_chat |
Der base_chat
-Angriff besteht aus normalen Fragen, um die Modellverschmutzung und vertrauliche Informationen zu testen, auch ohne einen wirklichen Angriff.
Dieser Abschnitt deckt die möglichen Lama -Finetuning -Optionen ab. Wir verwenden PEFT, das auf diesem Papier basiert.
Zusätzlich zum obigen Setup -Ausführen
accelerate config
So konfigurieren Sie die verteilten Trainingsfunktionen Ihres Systems. Und
wandb login
Mit Ihrem Wandb -API -Schlüssel, um die Protokollierung des Finetuning -Prozesses zu aktivieren.
Die erste Finetuning -Option liegt in einem Datensatz, der aus Systemaufforderungen besteht, um einen LLM sicher anzuweisen, um einen geheimen Schlüssel sicher zu halten. Die zweite Option Fonetuning (mit der Option --train_robust
) besteht darin, Systemanforderungen und kontroverse Eingabeaufforderungen zu verwenden, um das Modell mit schnellen Injektionsangriffen zu härten.
python finetuning . py [ - h ] [ - llm | - - llm_type LLM_NAME ] [ - i | - - iterations ITERATIONS ] [ - a | - - attacks ATTACKS_LIST ] [ - n | - - name_suffix NAME_SUFFIX ]
Argument | Typ | Standardwert | Beschreibung |
---|---|---|---|
-h, --help | - - | - - | Zeigen Sie diese Hilfebotschaft an und beenden Sie |
-llm, --llm_type | str | llama3-8b | Gibt die Art von LLM an |
-i, --iterations | int | 10000 | Gibt die Anzahl der Iterationen für die Finetuning an |
-advs, --advs_train | bool | False | Nutzt das kontrovers |
-a, --attacks | Liste [STR] | payload_splitting | Gibt die Angriffe an, mit denen die LLM während der Finetuning verhärtet wird. Hat nur einen Effekt, wenn --train_robust auf true eingestellt ist. Für unterstützte Angriffe siehe den vorherigen Abschnitt |
-n, --name_suffix | str | "" | Gibt ein Suffix für den fettunierten Modellnamen an |
Derzeit werden nur die Lama-Modelle unterstützt ( llama2-7/13/70b
/ llama3-8/70b
).
Führen Sie einfach das Skript generate_dataset.py
aus, um neue Systemanforderungen als JSON -Datei mit LLMs zu erstellen.
Argument | Typ | Standardwert | Beschreibung |
---|---|---|---|
-h, --help | - - | - - | Zeigen Sie diese Hilfebotschaft an und beenden Sie |
-llm, --llm_type | str | llama3-70b | Gibt die LLM an, mit der das System -Eingabeaufforderung -Datensatz generiert wird |
-n, --name_suffix | str | "" | Gibt ein Suffix für den Modellnamen an, wenn Sie ein benutzerdefiniertes Modell verwenden möchten |
-ds, --dataset_size | int | 1000 | Größe des resultierenden Systems Eingabeaufforderung Datensatz |
Um die Vertraulichkeit von LLMs in Toolszenarien in realer Welt zu testen, bieten wir die Möglichkeit, LLMs in Google Drive und Google Mail-Integrationen zu testen. Führen Sie dazu das Skript /various_scripts/llm_mail_test.py
mit Ihren Google API -Anmeldeinformationen aus.
Warnung
Abhängig davon, auf welche LLM bewertet wird, kann die Bewertung in Bezug auf GPU -VRAM und Zeit sehr anspruchsvoll sein.
Notiz
Die Ergebnisse können von Run bis Run leicht variieren. Ollama aktualisiert die meisten ihrer LLMs ständig, so dass sich ihr Verhalten verändert. Auch bei der niedrigsten Temperatur neigen LLMs aufgrund der inneren Zufälligkeit dazu, im BEHVIOR leicht zu schwanken.
Werde die LLM -gutartigen Fragen stellen, um das Geheimnis auch ohne Angriffe zu hinterfragen
python attack.py --llm_type <model_specifier> --strategy secret-key --attacks chat_base --defenses None --iterations 100 --device cuda
Wird alle Angriffe gegen die LLM ohne Verteidigung durchführen. Die Iterationen werden gleichermaßen auf die gebrauchten Angriffe aufgeteilt. Abhängig von der Anzahl der gebrauchten Angriffe muss die Anzahl der Iterationen angepasst werden. (ZB für 14 Angriffe mit 100 Iterationen setzen den Iterationen -Parameter auf 1400)
python attack.py --llm_type <model_specifier> --strategy secret-key --attacks all --defenses None --iterations 100 --device cuda
Wird alle Angriffe gegen die LLM mit allen Verteidigungen durchführen
python attack.py --llm_type <model_specifier> --strategy secret-key --attacks all --defenses all --iterations 100 --device cuda
Wird System -Eingabeaufforderung das LLM mit einem geheimen Schlüssel und den Anweisungen anweisen, den geheimen Schlüssel nicht zu verletzen, gefolgt von einfachen Anfragen zum Drucken des geheimen Schlüssels
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks base_attack --defenses None --iterations 100 --device cuda
Führen Sie alle Werkzeug-Szenarios ohne Angriffe und Abwehrkräfte mit dem React-Framework aus
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks identity --defenses None --iterations 100 --prompt_format ReAct --device cuda
Führen Sie alle Werkzeug-Szenarios ohne Angriffe und Abwehrkräfte mit dem React-Framework aus
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks identity --defenses None --iterations 100 --prompt_format tool-finetuned --device cuda
Führen Sie alle Werkzeug-Szenarios ohne Angriffe und Abwehrkräfte mit dem React-Framework aus
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks all --defenses None --iterations 100 --prompt_format tool-finetuned --device cuda
Führen Sie alle Werkzeug-Szenarios ohne Angriffe und Abwehrkräfte mit dem React-Framework aus
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks all --defenses all --iterations 100 --prompt_format tool-finetuned --device cuda
Wenn Sie unsere Arbeit zitieren möchten, verwenden Sie bitte den folgenden Bibtex -Eintrag:
@article { evertz-24-whispers ,
title = { {Whispers in the Machine: Confidentiality in LLM-integrated Systems} } ,
author = { Jonathan Evertz and Merlin Chlosta and Lea Schönherr and Thorsten Eisenhofer } ,
year = { 2024 } ,
journal = { Computing Research Repository (CoRR) }
}