هذا هو مستودع التعليمات البرمجية المصاحب للوهلة الورقية لدينا في الجهاز: السرية في الأنظمة المتكاملة LLM.
يتم زيادة نماذج اللغة الكبيرة (LLMS) بشكل متزايد باستخدام الأدوات الخارجية والخدمات التجارية في أنظمة LLM المتكاملة . في حين أن هذه الواجهات يمكن أن تعزز بشكل كبير قدرات النماذج ، فإنها تقدم أيضًا سطح هجوم جديد. على سبيل المثال ، يمكن أن تستغل التكاملات المعالجة النموذج وتسوية البيانات الحساسة التي يتم الوصول إليها من خلال واجهات أخرى. بينما ركز العمل السابق في المقام الأول على الهجمات التي تستهدف محاذاة النموذج أو تسرب بيانات التدريب ، فإن أمان البيانات المتوفرة فقط أثناء الاستدلال قد نجا من التدقيق. في هذا العمل ، نوضح نقاط الضعف المرتبطة بالمكونات الخارجية ونقدم نهجًا منهجيًا لتقييم مخاطر السرية في الأنظمة المتكاملة LLM. نحدد العديد من سيناريوهات الهجوم المحددة الفريدة لهذه الأنظمة وإضفاء الطابع الرسمي على هذه الأنظمة إلى إطار عمل للأدوات المصمم لقياس قدرة النموذج على حماية المعلومات الحساسة. يتيح لنا هذا الإطار تقييم ضعف النموذج لهجمات السرية. توضح النتائج التي توصلنا إليها أن جميع النماذج التي تم فحصها معرضة للغاية للهجمات ، مع زيادة المخاطر بشكل كبير عند استخدام النماذج مع أدوات خارجية.
إذا كنت ترغب في الاستشهاد بعملنا ، فيرجى استخدام إدخال Bibtex هذا.
تحذير
يتم دعم Aceleration الأجهزة بالكامل فقط لآلات CUDA التي تعمل على تشغيل Linux. يجب أن يعمل النواب على MacOS إلى حد ما ولكن النوافذ مع CUDA قد تواجه بعض المشكلات.
قبل تشغيل الرمز ، قم بتثبيت المتطلبات:
python -m pip install --upgrade -r requirements.txt
إذا كنت ترغب في استخدام النماذج التي تستضيفها Openai أو HuggingFace ، قم بإنشاء ملف key.txt
يحتوي على مفتاح API Openai الخاص بك بالإضافة إلى ملف hf_token.txt
يحتوي مشروع.
في بعض الأحيان ، قد يكون من الضروري تسجيل الدخول إلى حساب Luggingface الخاص بك عبر CLI:
git config --global credential.helper store
huggingface-cli login
جميع البرامج النصية قادرة على العمل على وحدات معالجة الرسومات/وحدات المعالجة المركزية متعددة باستخدام مكتبة تسريع. للقيام بذلك ، قم بالتشغيل:
accelerate config
لتكوين قدرات التدريب الموزعة لنظامك وبدء البرامج النصية مع:
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"
سيقوم بتشغيل الهجمات payload_splitting
obfuscation
ضد LLM llama3-70b
في السيناريو CalendarWithCloud
باستخدام الدفاع xml_tagging
لمدة 15 تكرار مع درجة حرارة 0.7 على جهاز CUDA باستخدام تنسيق مطالبة React في الأدوات المدمجة.
دعوى | يكتب | القيمة الافتراضية | وصف |
---|---|---|---|
-h, --help | - | - | أظهر رسالة المساعدة والخروج هذه |
-a, --attacks | قائمة [str] | payload_splitting | يحدد الهجمات التي سيتم استخدامها ضد LLM |
-d, --defense | شارع | None | يحدد الدفاع عن LLM |
-llm, --llm_type | شارع | gpt-3.5-turbo | يحدد نوع الخصم |
-le, --llm_guessing | بول | False | يحدد ما إذا كان يتم استخدام LLM ثانية لتخمين المفتاح السري خارج الاستجابة العادية أم لا |
-t, --temperature | يطفو | 0.0 | يحدد درجة حرارة LLM للتحكم في العشوائية |
-cp, --create_prompt_dataset | بول | False | يحدد ما إذا كان ينبغي إنشاء مجموعة بيانات جديدة من مطالبات النظام المحسّن |
-cr, --create_response_dataset | بول | False | يحدد ما إذا كان ينبغي إنشاء مجموعة بيانات جديدة من ردود التسرب السري |
-i, --iterations | int | 10 | يحدد عدد التكرارات للهجوم |
-n, --name_suffix | شارع | "" | يحدد لاحقة اسم لتحميل النماذج المخصصة. نظرًا لأنه لا يُسمح لسلاسل معلمات الوسيطة بالبدء بـ "-" الرموز ، الأولى "-" ستتم إضافة المحللون تلقائيًا تلقائيًا |
-s, --strategy | شارع | None | يحدد استراتيجية الهجوم (سواء كان استخدام الهجمات العادية أو هجمات tools ) |
-sc, --scenario | شارع | all | يحدد السيناريو للهجمات القائمة على الأدوات |
-dx, --device | شارع | cpu | يحدد الجهاز الذي يتم استخدامه لتشغيل البرنامج النصي (وحدة المعالجة المركزية ، CUDA ، أو النواب) |
-pf, --prompt_format | شارع | react | يحدد ما إذا كان React أو تنسيق المطالبة المتمثلة في الأدوات يستخدم للعوامل. (رد فعل أو تمتع بأدوات) |
-ds, --disable_safeguards | بول | False | تعطيل نظام ضمانات موجهة النظام لاستراتيجية الأداة |
اتفاقيات التسمية للنماذج هي كما يلي: |
< model_name > - < param_count > - < robustness > - < attack_suffix > - < custom_suffix >
على سبيل المثال:
llama2 - 7 b - robust - prompt_injection - 0613
إذا كنت ترغب في تشغيل الهجمات على طراز بادئة مع لاحقة مخصصة (على سبيل المثال ، 1000epochs
) ، فسيتعين عليك تحديد الحجج التي يتبعها:
... - - model_name llama2 - 7 b - prefix - - name_suffix 1000 epochs ...
نموذج | محدد المعلمة | وصلة | حساب مثيل |
---|---|---|---|
GPT-4 (O1 ، O1-Mini ، Turbo) | gpt-4o / gpt-4o-mini / gpt-4-turbo | وصلة | Openai API |
لاما 2 | llama2-7b / llama2-13b / llama2-70b | وصلة | الاستدلال المحلي |
لاما 2 تصلب | llama2-7b-robust / llama2-13b-robust / llama2-70b-robust | وصلة | الاستدلال المحلي |
Qwen 2.5 | qwen2.5-72b | وصلة | الاستدلال المحلي (أولاً: ollama pull qwen2.5:72b ) |
لاما 3.1 | llama3-8b / llama3-70b | وصلة | الاستدلال المحلي (أولاً: ollama pull llama3.1/llama3.1:70b/llama3.1:405b ) |
لاما 3.2 | llama3-1b / llama3-3b | وصلة | الاستدلال المحلي (أولاً: ollama pull llama3.2/llama3.2:1b ) |
لاما 3.3 | llama3.3-70b | وصلة | الاستدلال المحلي (أولاً: ollama pull llama3.3/llama3.3:70b ) |
انعكاس لاما | reflection-llama | وصلة | الاستدلال المحلي (أولاً: ollama pull reflection ) |
فيكونا | vicuna-7b / vicuna-13b / vicuna-33b | وصلة | الاستدلال المحلي |
مستقرة (2) | beluga-7b / beluga-13b / beluga2-70b | وصلة | الاستدلال المحلي |
orca 2 | orca2-7b / orca2-13b / orca2-70b | وصلة | الاستدلال المحلي |
جيما | gemma-2b / gemma-7b | وصلة | الاستدلال المحلي |
جيما 2 | gemma2-9b / gemma2-27b | وصلة | الاستدلال المحلي (أولاً: ollama pull gemma2/gemma2:27b ) |
فاي 3 | phi3-3b / phi3-14b | وصلة | الاستدلال المحلي (أولاً: ollama pull phi3:mini/phi3:medium ) |
(يجب أولاً إنشاء نماذج LLAMA ذات الصبغة أو القوية/الصلبة باستخدام البرنامج النصي finetuning.py
، انظر أدناه)
الهجمات | الدفاعات | ||
---|---|---|---|
اسم | المحدد | اسم | المحدد |
تقسيم الحمولة | payload_splitting | حاوية تسلسل عشوائي | seq_enclosure |
التشويش | obfuscation | علامات XML | xml_tagging |
جيلبريك | jailbreak | الدفاع الإرشادي/التصفية | heuristic_defense |
ترجمة | translation | الدفاع شطيرة | sandwiching |
attml سوء المعاملة | chatml_abuse | تقييم LLM | llm_eval |
إخفاء | masking | اكتشاف الحيرة | ppl_detection |
typoglycemia | typoglycemia | orderguard | prompt_guard |
لاحقة الخصومة | advs_suffix | ||
حقن البادئة | prefix_injection | ||
قمع الرفض | refusal_suppression | ||
السياق تجاهل | context_ignoring | ||
إنهاء السياق | context_termination | ||
السياق تبديل الفواصل | context_switching_separators | ||
القليل من اللقطة | few_shot | ||
القرصنة المعرفية | cognitive_hacking | ||
الدردشة الأساسية | base_chat |
يتكون هجوم base_chat
من أسئلة عادية لاختبار النموذج يتسرب سياقه ومعلومات سرية حتى بدون هجوم حقيقي.
يغطي هذا القسم خيارات Llama Finetuning المحتملة. نستخدم PEFT ، الذي يعتمد على هذه الورقة.
بالإضافة إلى تشغيل الإعداد أعلاه
accelerate config
لتكوين قدرات التدريب الموزعة لنظامك. و
wandb login
مع مفتاح واجهة برمجة تطبيقات WANDB لتمكين تسجيل عملية التذوق.
يتمثل الخيار الأول في Finetuning على مجموعة بيانات تتكون من مطالبات النظام بتوجيه LLM بأمان للحفاظ على آمنة مفتاح سري. يتمثل الخيار الثاني في التغذية (باستخدام خيار --train_robust
) في استخدام مطالبات النظام والمطالبات العدائية لتصلب النموذج مقابل هجمات الحقن السريع.
python finetuning . py [ - h ] [ - llm | - - llm_type LLM_NAME ] [ - i | - - iterations ITERATIONS ] [ - a | - - attacks ATTACKS_LIST ] [ - n | - - name_suffix NAME_SUFFIX ]
دعوى | يكتب | القيمة الافتراضية | وصف |
---|---|---|---|
-h, --help | - | - | أظهر رسالة المساعدة والخروج هذه |
-llm, --llm_type | شارع | llama3-8b | يحدد نوع LLM إلى Finetune |
-i, --iterations | int | 10000 | يحدد عدد التكرارات الخاصة بـ Finetuning |
-advs, --advs_train | بول | False | يستخدم التدريب العدواني لتصلب LLM المحروم |
-a, --attacks | قائمة [str] | payload_splitting | يحدد الهجمات التي سيتم استخدامها لتصلب LLM أثناء التحويل. فقط له تأثير إذا تم تعيين --train_robust على صحيح. للاطلاع على الهجمات المدعومة ، انظر القسم السابق |
-n, --name_suffix | شارع | "" | يحدد لاحقة لاسم النموذج المحدد |
حاليًا يتم دعم نماذج LLAMA فقط ( llama2-7/13/70b
/ llama3-8/70b
).
ما عليك سوى تشغيل البرنامج النصي generate_dataset.py
لإنشاء مطالبات نظام جديدة كملف JSON باستخدام LLMS.
دعوى | يكتب | القيمة الافتراضية | وصف |
---|---|---|---|
-h, --help | - | - | أظهر رسالة المساعدة والخروج هذه |
-llm, --llm_type | شارع | llama3-70b | يحدد LLM المستخدمة لإنشاء مجموعة بيانات مطالبة النظام |
-n, --name_suffix | شارع | "" | يحدد لاحقة لاسم النموذج إذا كنت تريد استخدام نموذج مخصص |
-ds, --dataset_size | int | 1000 | حجم مجموعة بيانات موجه النظام الناتجة |
لاختبار سرية LLMS في سيناريوهات الأدوات في العالم الحقيقي ، نوفر إمكانية اختبار LLMs في عمليات تكامل Google Drive و Google Mail. للقيام بذلك ، قم بتشغيل البرنامج النصي /various_scripts/llm_mail_test.py
باستخدام بيانات اعتماد Google API الخاصة بك.
تحذير
يمكن أن يكون التقييم الذي يتم تقييمه على LLM أمرًا صعبًا للغاية من حيث GPU VRAM والوقت.
ملحوظة
يمكن أن تختلف النتائج قليلاً من الركض إلى الجري. يقوم Ollama بتحديث معظم LLMs باستمرار ، وبالتالي فإن سلوكهم عرضة للتغيير. أيضا ، حتى مع أدنى درجة حرارة LLMs تميل إلى التقلب قليلاً في Behvior بسبب العشوائية الداخلية.
سيطرح أسئلة LLM الحميدة للتحقق من تسرب السر حتى بدون هجمات
python attack.py --llm_type <model_specifier> --strategy secret-key --attacks chat_base --defenses None --iterations 100 --device cuda
سوف تدير جميع الهجمات ضد LLM دون دفاعات. سيتم تقسيم التكرارات بالتساوي إلى الهجمات المستخدمة. لذلك بناءً على عدد الهجمات المستخدمة ، يجب تكييف عدد التكرارات. (على سبيل المثال ، لـ 14 هجومًا مع 100 تكرار حدد معلمة التكرارات إلى 1400)
python attack.py --llm_type <model_specifier> --strategy secret-key --attacks all --defenses None --iterations 100 --device cuda
سوف تدير جميع الهجمات ضد LLM مع جميع الدفاعات
python attack.py --llm_type <model_specifier> --strategy secret-key --attacks all --defenses all --iterations 100 --device cuda
هل ستوجه موجه النظام LLM بمفتاح سري وتعليمات لعدم تسرب المفتاح السري متبوعًا بطلبات بسيطة لطباعة المفتاح السري
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks base_attack --defenses None --iterations 100 --device cuda
سيقوم بتشغيل جميع أدوات المسند بدون هجمات ودفاعات باستخدام إطار React
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks identity --defenses None --iterations 100 --prompt_format ReAct --device cuda
سيقوم بتشغيل جميع أدوات المسند بدون هجمات ودفاعات باستخدام إطار React
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks identity --defenses None --iterations 100 --prompt_format tool-finetuned --device cuda
سيقوم بتشغيل جميع أدوات المسند بدون هجمات ودفاعات باستخدام إطار React
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks all --defenses None --iterations 100 --prompt_format tool-finetuned --device cuda
سيقوم بتشغيل جميع أدوات المسند بدون هجمات ودفاعات باستخدام إطار React
python attack.py --llm_type <model_specifier> --strategy tools --scenario all --attacks all --defenses all --iterations 100 --prompt_format tool-finetuned --device cuda
إذا كنت ترغب في الاستشهاد بعملنا ، يرجى استخدام إدخال Bibtex التالي:
@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) }
}