
مع انتشار التطبيقات المدمجة مع LLM، أصبح التحقيق في المخاطر الأمنية المحتملة أمرًا بالغ الأهمية. واحدة من أبرز الثغرات في هذه الأنظمة هي قابليتها للهجوم الخصومي عبر حقن التعليمات غير المباشر. في هذا المستودع، نعرض طريقة يمكن للجهة الخبيثة من خلالها توليد محفّز شامل يسمح لها بالتحكم في إجراءات وكيل تصفح ويب عن بُعد مشتق من نموذج LLM. نأمل أن يساعد عرض هذه المعلومات الممارسين على إدراك قابلية تعرضهم المحتملة، وأن يلهم الباحثين لتطوير وسائل حماية ضد الهجمات من هذا النوع.
بعد استنساخ هذا المستودع، الأوامر التالية ضرورية لإعداد بنية تصفح الويب من Browser Gym:
conda create -n browser-gym
conda init
conda activate browser-gym
pip install browsergym-core
playwright install chromium
pip install transformers
قد تختلف التفاصيل حسب بيئة الحوسبة.
إذا كنت مهتمًا بتشغيل إجراء تحسين المحفّز الشامل، فسيتعين عليك توليد مجموعة بيانات من مواقع الويب وأهداف تصفح الويب. يمكن إنجاز ذلك باستخدام الأوامر المتوفرة في ملف src/actions/mask_dataset.py. ستحتاج أيضًا إلى إنشاء بعض مفاتيح API وتخزينها في بيئة آمنة.
pip install python-dotenv ثم touch .envOPENAI_API_KEY=<key>
GOOGLE_API_KEY=<key>
GOOGLE_ENGINE_NAME=<name>
GOOGLE_CX=<engine ID>
python -m src.dataset.actions.make_dataset get_webs حتى تحصل على عدد مناسب من ملفات website json في مجلد البيانات الخاص بك.python -m src.dataset.actions.make_dataset set_goals لتصفية ملفات json الخاصة بالمواقع المحظورة، وإعادة توازن فئات المواقع، وإرسال وظيفة دفعة إلى OpenAI API لتوليد كائنات الأهداف للمواقع المتبقية. يجب إضافة العلامة --n_batch_splits <int> إذا كان لديك أكثر من 10 آلاف ملف website json.set_goals، ستُطبع معرفات الدفعات الخاصة بك في الطرفية. شغّل python -m src.dataset.actions.make_dataset get_goals --batch_ids <batch ID 1> <batch ID 2> ... لكتابة كائنات الأهداف إلى ملفات website json المقابلة إذا كانت وظائف الدفعة مكتملة. قد تستغرق وظيفة الدفعة 24 ساعة حتى يكملها OpenAI، لذلك قد تضطر إلى الانتظار يومًا قبل أن ينجح تشغيل هذا الأمر.يعرض العرض التوضيحي رقم 1 كيف يمكن للمهاجم استضافة موقع ويب يحتوي على برمجيات خبيثة مضمّنة في رابط، وإجبار وكيل تصفح الويب على النقر على ذلك الرابط في كل مرة. يتم تخزين ملف website json ومحفّز للتحكم في مخرجات وكيل الويب في مجلد data/ ومجلد triggers/ على التوالي.
سيؤدي تشغيل python -m src.attack.actions.run_demo إلى فتح متصفح يعرض صفحة ويب تجريبية وواجهة محادثة LLM. ستطلب منك واجهة محادثة LLM تقديم هدف لوكيل تصفح الويب. اكتب مهمة مثل "ابحث عن رحلة إلى شيكاغو" في النافذة. سيكمل الوكيل المهمة في التبويب الذي يعرض صفحة الويب التجريبية كما هو متوقع.
شغّل python -m src.attack.actions.run_demo --trigger_json triggers/zzz_travel_ad_demo_1_trigger_uni_secondary.json لمهاجمة وكيل تصفح الويب في هذه المهمة. سيتم فتح متصفح يعرض صفحة الويب التجريبية وواجهة محادثة LLM كما في السابق، وكما في السابق، يرجى كتابة هدف في نافذة المحادثة. ستكون العملية مطابقة تمامًا لحالة التحكم، مع الاختلاف الوحيد أن المحفّز من ملف zzz_travel_ad_demo_1_trigger_uni_secondary.json سيُدرج في رابط مخفي على الموقع. يجب أن تلاحظ هذه المرة أن وكيل الويب يتجاهل التعليمات التي قدمتها وينقر على الإعلان في تذييل الصفحة!
لتحسين محفّز عدائي للتحكم في مخرجات وكيل تصفح الويب على موقع من اختيارك، يمكنك استخدام ملف find_narrow_trigger.py. بمجرد إنشاء ملف website json باستخدام أداة إنشاء مجموعة البيانات، يمكنك إدراج النص '{optim_str}' في مكان ما داخل شجرة ax_tree. يخبر هذا مكتبة nanogcg التي سنستخدمها بأنك ترغب في إدراج المحفّز في هذا المكان داخل الموقع.
pip install nanogcgpython -m src.attack.actions.find_narrow_trigger. الخيارات والعلامات الخاصة بهذه الأداة الطرفية كما يلي:-h, --help show this help message and exit
--json JSON File and path for the JSON file to find a trigger for.
--target TARGET The desired output when triggered.
--device DEVICE Device to run the model on.
--trigger_length TRIGGER_LENGTH
--include_target, --no-include_target
--loss_fn {cw,mm,ce}
--search_width SEARCH_WIDTH
--top_k TOP_K
--model {mistral-7B,mistral-24B,llama2,llama3}
The model to use for generation.
--dtype DTYPE Data type to use for the model.
لكي يعمل الهجوم في بيئتنا، يجب أن يكون هدف التحسين الخاص بك دالة في فضاء إجراءات تصفح الويب الخاص بـ Browser Gym. راجع ملف action_space.txt.
سيتم حفظ المحفّز المحسّن في ملف json داخل مجلد triggers/، بحيث يطابق اسم الملف ملف website data json المرافق. يمكنك استخدام هذا المحفّز لتشغيل العرض التوضيحي الخاص بك باستخدام أداة python -m src.attack.actions.run_demo مع العلامات المناسبة.