Ini adalah repositori kode yang menyertai bisikan kertas kami di mesin: kerahasiaan dalam sistem yang terintegrasi LLM.
Model bahasa besar (LLM) semakin ditambah dengan alat eksternal dan layanan komersial ke dalam sistem yang terintegrasi LLM . Sementara antarmuka ini dapat secara signifikan meningkatkan kemampuan model, mereka juga memperkenalkan permukaan serangan baru. Integrasi yang dimanipulasi, misalnya, dapat mengeksploitasi model dan mengkompromikan data sensitif yang diakses melalui antarmuka lain. Sementara pekerjaan sebelumnya terutama berfokus pada serangan yang menargetkan penyelarasan model atau kebocoran data pelatihan, keamanan data yang hanya tersedia selama inferensi telah lolos dari pengawasan. Dalam karya ini, kami menunjukkan kerentanan yang terkait dengan komponen eksternal dan memperkenalkan pendekatan sistematis untuk mengevaluasi risiko kerahasiaan dalam sistem yang terintegrasi LLM. Kami mengidentifikasi beberapa skenario serangan spesifik yang unik untuk sistem ini dan memformalkannya menjadi kerangka kerja alat-alat yang dirancang untuk mengukur kemampuan model untuk melindungi informasi sensitif. Kerangka kerja ini memungkinkan kita untuk menilai kerentanan model terhadap serangan kerahasiaan. Temuan kami menunjukkan bahwa semua model yang diperiksa sangat rentan terhadap serangan, dengan risiko meningkat secara signifikan ketika model digunakan bersama dengan alat eksternal.
Jika Anda ingin mengutip pekerjaan kami, silakan gunakan entri Bibtex ini.
Peringatan
Akselerasi perangkat keras hanya didukung sepenuhnya untuk mesin CUDA yang menjalankan Linux. Anggota parlemen di macOS harus agak bekerja tetapi Windows dengan Cuda bisa menghadapi beberapa masalah.
Sebelum menjalankan kode, instal persyaratan:
python -m pip install --upgrade -r requirements.txt
Jika Anda ingin menggunakan model yang dihosting oleh OpenAi atau HuggingFace, buat kedua file key.txt
yang berisi kunci API OpenAI Anda serta file hf_token.txt
yang berisi token huggingface Anda untuk repo pribadi (seperti llama2) di direktori root dari ini proyek.
Terkadang perlu masuk ke akun huggingface Anda melalui CLI:
git config --global credential.helper store
huggingface-cli login
Semua skrip dapat bekerja pada beberapa GPU/CPU menggunakan Perpustakaan Accelerate. Untuk melakukannya, jalankan:
accelerate config
Untuk mengonfigurasi kemampuan pelatihan yang didistribusikan dari sistem Anda dan memulai skrip dengan:
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"
Akan menjalankan serangan payload_splitting
dan obfuscation
terhadap LLM llama3-70b
dalam CalendarWithCloud
menggunakan pertahanan xml_tagging
untuk 15 iterasi dengan suhu 0,7 pada perangkat CUDA menggunakan format prompt react dalam sistem yang terintegrasi dengan alat.
Argumen | Jenis | Nilai default | Keterangan |
---|---|---|---|
-h, --help | - | - | Tunjukkan pesan bantuan ini dan keluar |
-a, --attacks | Daftar [str] | payload_splitting | Menentukan serangan yang akan digunakan terhadap LLM |
-d, --defense | str | None | Menentukan pertahanan untuk LLM |
-llm, --llm_type | str | gpt-3.5-turbo | Menentukan jenis lawan |
-le, --llm_guessing | bool | False | Menentukan apakah LLM kedua digunakan untuk menebak kunci rahasia dari respons normal atau tidak |
-t, --temperature | mengambang | 0.0 | Menentukan suhu LLM untuk mengontrol keacakan |
-cp, --create_prompt_dataset | bool | False | Menentukan apakah dataset baru dari prompt sistem yang ditingkatkan harus dibuat |
-cr, --create_response_dataset | bool | False | Menentukan apakah dataset baru tanggapan bocor rahasia harus dibuat |
-i, --iterations | int | 10 | Menentukan jumlah iterasi untuk serangan itu |
-n, --name_suffix | str | "" | Menentukan akhiran nama untuk memuat model khusus. Karena string parameter argumen tidak diperbolehkan memulai dengan '-' simbol, yang pertama '-' akan ditambahkan oleh parser secara otomatis |
-s, --strategy | str | None | Menentukan strategi untuk serangan (apakah akan menggunakan serangan normal atau serangan tools ) |
-sc, --scenario | str | all | Menentukan skenario untuk serangan berbasis alat |
-dx, --device | str | cpu | Menentukan perangkat yang digunakan untuk menjalankan skrip (CPU, CUDA, atau MPS) |
-pf, --prompt_format | str | react | Menentukan apakah reaksi atau format prompt yang disusun alat digunakan untuk agen. (Bereaksi atau finetuned alat) |
-ds, --disable_safeguards | bool | False | Menonaktifkan Sistem Perlindungan cepat untuk strategi alat |
Konvensi penamaan untuk model adalah sebagai berikut: |
< model_name > - < param_count > - < robustness > - < attack_suffix > - < custom_suffix >
misalnya:
llama2 - 7 b - robust - prompt_injection - 0613
Jika Anda ingin menjalankan serangan terhadap model yang disesuaikan dengan awalan dengan akhiran khusus (misalnya, 1000epochs
), Anda harus menentukan argumen yang berikut:
... - - model_name llama2 - 7 b - prefix - - name_suffix 1000 epochs ...
Model | Parameter Specifier | Link | Instance Hitung |
---|---|---|---|
GPT-4 (O1, O1-Mini, Turbo) | gpt-4o / gpt-4o-mini / gpt-4-turbo | Link | API OpenAI |
Llama 2 | llama2-7b / llama2-13b / llama2-70b | Link | Inferensi lokal |
Llama 2 mengeras | llama2-7b-robust / llama2-13b-robust / llama2-70b-robust | Link | Inferensi lokal |
Qwen 2.5 | qwen2.5-72b | Link | Inferensi Lokal (Pertama: ollama pull qwen2.5:72b ) |
Llama 3.1 | llama3-8b / llama3-70b | Link | Inferensi Lokal (Pertama: ollama pull llama3.1/llama3.1:70b/llama3.1:405b ) |
Llama 3.2 | llama3-1b / llama3-3b | Link | Inferensi Lokal (Pertama: ollama pull llama3.2/llama3.2:1b ) |
Llama 3.3 | llama3.3-70b | Link | Inferensi Lokal (Pertama: ollama pull llama3.3/llama3.3:70b ) |
Refleksi Llama | reflection-llama | Link | Kesimpulan Lokal (Pertama: ollama pull reflection ) |
Vicuna | vicuna-7b / vicuna-13b / vicuna-33b | Link | Inferensi lokal |
StableBeluga (2) | beluga-7b / beluga-13b / beluga2-70b | Link | Inferensi lokal |
Orca 2 | orca2-7b / orca2-13b / orca2-70b | Link | Inferensi lokal |
Gemma | gemma-2b / gemma-7b | Link | Inferensi lokal |
Gemma 2 | gemma2-9b / gemma2-27b | Link | Inferensi Lokal (Pertama: ollama pull gemma2/gemma2:27b ) |
Phi 3 | phi3-3b / phi3-14b | Link | Inferensi Lokal (Pertama: ollama pull phi3:mini/phi3:medium ) |
(Finetuned atau model llama yang kuat/mengeras pertama -tama harus dihasilkan menggunakan skrip finetuning.py
, lihat di bawah)
Serangan | Pertahanan | ||
---|---|---|---|
Nama | Specifier | Nama | Specifier |
Pemisahan muatan | payload_splitting | Enklosur urutan acak | seq_enclosure |
Kebingungan | obfuscation | Penandaan XML | xml_tagging |
Jailbreak | jailbreak | Pertahanan heuristik/penyaringan | heuristic_defense |
Terjemahan | translation | Pertahanan Sandwich | sandwiching |
Penyalahgunaan obrolan | chatml_abuse | Evaluasi LLM | llm_eval |
Menutupi | masking | Deteksi kebingungan | ppl_detection |
Typoglycemia | typoglycemia | Promptguard | prompt_guard |
Sufiks permusuhan | advs_suffix | ||
Injeksi awalan | prefix_injection | ||
Penindasan penolakan | refusal_suppression | ||
Konteks mengabaikan | context_ignoring | ||
Penghentian konteks | context_termination | ||
Pemisah switching konteks | context_switching_separators | ||
Beberapa shot | few_shot | ||
Peretasan kognitif | cognitive_hacking | ||
Obrolan dasar | base_chat |
Serangan base_chat
terdiri dari pertanyaan normal untuk menguji model menumpahkan konteks dan informasi rahasia bahkan tanpa serangan nyata.
Bagian ini mencakup opsi finetuning llama yang mungkin. Kami menggunakan PEFT, yang didasarkan pada makalah ini.
Selain pengaturan pengaturan di atas
accelerate config
Untuk mengonfigurasi kemampuan pelatihan yang didistribusikan dari sistem Anda. Dan
wandb login
dengan kunci API Wandb Anda untuk memungkinkan pencatatan proses finetuning.
Opsi finetuning pertama adalah pada dataset yang terdiri dari petunjuk sistem untuk menginstruksikan LLM dengan aman untuk menjaga keamanan kunci rahasia. Opsi finetuning kedua (menggunakan opsi --train_robust
) menggunakan petunjuk sistem dan permusuhan meminta untuk mengeraskan model terhadap serangan injeksi yang cepat.
python finetuning . py [ - h ] [ - llm | - - llm_type LLM_NAME ] [ - i | - - iterations ITERATIONS ] [ - a | - - attacks ATTACKS_LIST ] [ - n | - - name_suffix NAME_SUFFIX ]
Argumen | Jenis | Nilai default | Keterangan |
---|---|---|---|
-h, --help | - | - | Tunjukkan pesan bantuan ini dan keluar |
-llm, --llm_type | str | llama3-8b | Menentukan jenis LLM untuk finetune |
-i, --iterations | int | 10000 | Menentukan jumlah iterasi untuk finetuning |
-advs, --advs_train | bool | False | Memanfaatkan pelatihan permusuhan untuk mengeraskan llm finetuned |
-a, --attacks | Daftar [str] | payload_splitting | Menentukan serangan yang akan digunakan untuk mengeraskan LLM selama finetuning. Hanya memiliki efek jika --train_robust diatur ke true. Untuk serangan yang didukung, lihat bagian sebelumnya |
-n, --name_suffix | str | "" | Menentukan akhiran untuk nama model finetuned |
Saat ini hanya model LLAMA yang didukung ( llama2-7/13/70b
/ llama3-8/70b
).
Cukup jalankan skrip generate_dataset.py
untuk membuat prompt sistem baru sebagai file JSON menggunakan LLMS.
Argumen | Jenis | Nilai default | Keterangan |
---|---|---|---|
-h, --help | - | - | Tunjukkan pesan bantuan ini dan keluar |
-llm, --llm_type | str | llama3-70b | Menentukan LLM yang digunakan untuk menghasilkan dataset prompt sistem |
-n, --name_suffix | str | "" | Menentukan akhiran untuk nama model jika Anda ingin menggunakan model khusus |
-ds, --dataset_size | int | 1000 | Ukuran Dataset Prompt Sistem yang dihasilkan |
Untuk menguji kerahasiaan LLMS dalam skenario alat dunia nyata, kami menyediakan kemungkinan untuk menguji LLM di Google Drive dan integrasi Google Mail. Untuk melakukannya, jalankan skrip /various_scripts/llm_mail_test.py
dengan kredensial Google API Anda.
Peringatan
Depeding di mana LLM dievaluasi evaluasi bisa sangat menuntut dalam hal GPU VRAM dan waktu.
Catatan
Hasil dapat sedikit berbeda dari lari ke lari. Ollama memperbarui sebagian besar LLM mereka terus -menerus, sehingga perilaku mereka dapat berubah. Juga, bahkan dengan suhu terendah, LLMS cenderung sedikit berfluktuasi di Behvior karena keacakan internal.
Akan mengajukan pertanyaan jinak LLM untuk memeriksa bocor rahasia bahkan tanpa serangan
python attack.py --llm_type <model_specifier> --strategy secret-key --attacks chat_base --defenses None --iterations 100 --device cuda
Akan menjalankan semua serangan terhadap LLM tanpa pertahanan. Iterasi akan dibagi secara merata pada serangan yang digunakan. Jadi tergantung pada jumlah serangan yang digunakan, jumlah iterasi harus diadaptasi. (Misalnya, untuk 14 serangan dengan 100 iterasi mengatur parameter iterasi ke 1400)
python attack.py --llm_type <model_specifier> --strategy secret-key --attacks all --defenses None --iterations 100 --device cuda
Akan menjalankan semua serangan terhadap LLM dengan semua pertahanan
python attack.py --llm_type <model_specifier> --strategy secret-key --attacks all --defenses all --iterations 100 --device cuda
Will System Prompt menginstruksikan LLM dengan kunci rahasia dan instruksi untuk tidak membocorkan kunci rahasia diikuti oleh permintaan sederhana untuk mencetak kunci rahasia
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks base_attack --defenses None --iterations 100 --device cuda
Akan menjalankan semua alat-alat-alat tanpa serangan dan pertahanan menggunakan kerangka reaksi
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks identity --defenses None --iterations 100 --prompt_format ReAct --device cuda
Akan menjalankan semua alat-alat-alat tanpa serangan dan pertahanan menggunakan kerangka reaksi
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks identity --defenses None --iterations 100 --prompt_format tool-finetuned --device cuda
Akan menjalankan semua alat-alat-alat tanpa serangan dan pertahanan menggunakan kerangka reaksi
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks all --defenses None --iterations 100 --prompt_format tool-finetuned --device cuda
Akan menjalankan semua alat-alat-alat tanpa serangan dan pertahanan menggunakan kerangka reaksi
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks all --defenses all --iterations 100 --prompt_format tool-finetuned --device cuda
Jika Anda ingin mengutip pekerjaan kami, silakan gunakan entri Bibtex berikut:
@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) }
}