میں نے ایک AI سیکیورٹی اسکینر بنایا — پھر اپنے ہی ڈیٹیکٹر میں ایک بگ (bug) پایا
Prompt injection LLM ایپلی کیشنز کے لیے ایک بڑا سیکیورٹی خطرہ ہے۔ آپ ماڈل کو ایسا ٹیکسٹ فراہم کرتے ہیں جو اسے اپنی اصل ہدایات کو نظر انداز کرنے کا کہتا ہے۔ کبھی کبھی، ماڈل اس کی بات مان لیتا ہے۔
میں نے اس کی جانچ کے لیے AgentProbe بنایا۔ یہ jailbreaks اور data extraction جیسی 8 اقسام کے تحت 49 حملے والے پرامپٹس (attack prompts) بھیجتا ہے۔ یہ رپورٹ کرتا ہے کہ ایک ماڈل کتنی بار ناکام ہوتا ہے۔
اصل سبق اسکینر کے بارے میں نہیں تھا۔ بلکہ یہ میرے ڈیٹیکشن کوڈ میں موجود ایک بگ تھا۔
مشکل حصہ حملہ کرنا نہیں ہے۔ مشکل حصہ ڈیٹیکشن (detection) ہے۔
آپ کو کیسے معلوم ہوگا کہ آیا ایک ماڈل نے واقعی حملے کی تعمیل کی ہے؟ Keyword matching آسان طریقہ ہے۔ آپ انکار کے جملے جیسے "I cannot help" یا تعمیل کے جملے جیسے "developer mode" تلاش کرتے ہیں۔
لیکن ماڈلز "hedge-then-comply" (پہلے ٹال مٹول پھر تعمیل) کا پیٹرن استعمال کرتے ہیں۔ وہ کہتے ہیں "I cannot help with that،" لیکن پھر بھی وہ ممنوعہ معلومات فراہم کر دیتے ہیں۔ یہاں keyword matching ناکام ہو جاتی ہے کیونکہ انکار کا جملہ موجود ہوتا ہے۔
اسے ٹھیک کرنے کے لیے، میں نے "LLM-as-judge" سسٹم کا استعمال کیا۔ میں نے یہ فیصلہ کرنے کے لیے کہ آیا ٹارگٹ نے واقعی تعمیل کی ہے یا نہیں، اس گفتگو کو ایک زیادہ طاقتور ماڈل کے پاس بھیجا۔ میرا منصوبہ یہ تھا کہ پہلے سستے keyword checks استعمال کیے جائیں اور مہنگا judge صرف اس وقت استعمال کیا جائے جب keyword check غیر یقینی ہو۔
پھر مجھے اپنا بگ ملا۔
جب میرے keyword detector کو "hedge-then-comply" پیٹرن ملا تو اس نے 1 کا confidence score واپس کیا۔ تاہم، میرا کوڈ keyword مرحلے پر صرف اس صورت میں بھروسہ کرتا تھا اگر confidence 2 یا اس سے زیادہ ہو۔
اس کا مطلب یہ تھا کہ میرے "سستے" ڈیٹیکٹر نے کبھی حقیقت میں کوئی فیصلہ نہیں کیا۔ ہر ایک کیس مہنگے judge کے پاس چلا جاتا تھا۔ میں ہر کیس کے لیے judge کی فیس ادا کر رہا تھا، جبکہ میرا مفت ٹول اسے سنبھال سکتا تھا۔
اس غلطی نے مجھے دوسرے LLMs کو گریڈ کرنے کے لیے LLMs کے استعمال کے بارے میں تین اسباق سکھائے:
- judge کو ٹارگٹ سے زیادہ ذہین ہونا چاہیے۔ اگر judge کا سائز ٹارگٹ کے برابر ہے، تو اس میں بھی وہی خامیاں (blind spots) ہوں گی۔
- درستگی (Accuracy) جھوٹ بول سکتی ہے۔ اگر زیادہ تر ماڈلز انکار کرتے ہیں، تو ایک ایسا judge جو ہمیشہ "refused" کہتا ہے وہ درست نظر آتا ہے لیکن وہ کچھ سیکھتا نہیں ہے۔ قسمت کے اثر کو مدنظر رکھنے کے لیے Cohen's kappa جیسے میٹرکس استعمال کریں۔
- judge کو مستحکم ہونا چاہیے۔ ایک ہی ٹیسٹ کو پانچ بار چلائیں۔ اگر judge اپنا فیصلہ بدلتا ہے، تو نتیجہ مبہم ہے اور اس کے لیے انسانی نظر کی ضرورت ہے۔
اگر آپ LLMs کے ساتھ کچھ بنا رہے ہیں، تو ان نکات کو یاد رکھیں:
- تعمیل کا پتہ لگانا اسے پیدا کرنے سے زیادہ مشکل ہے۔
- ان ماڈلز پر نظر رکھیں جو پہلے جملے میں انکار کرتے ہیں لیکن دوسرے میں تعمیل کر دیتے ہیں۔
- کسی LLM judge پر اندھا دھند بھروسہ نہ کریں۔ اس کی بھروسہ مندی (reliability) کو ناپیں۔
- اپنے بگ شیئر کریں۔ اپنی غلطی کو دریافت کرنے نے مجھے اس سے کہیں زیادہ سکھایا جتنا کہ ایک مکمل طور پر کامیاب لانچ سکھاتا۔
Source: https://dev.to/nar1frames/i-built-an-ai-security-scanner-then-found-a-bug-in-my-own-detector-140a
Optional learning community: https://t.me/GyaanSetuAi
