בניתי סורק אבטחה מבוסס AI — ואז מצאתי באג במגלה שלי עצמי

הזרקת פרומפטים (Prompt injection) היא סיכון אבטחה מרכזי עבור יישומי LLM. מזינים למודל טקסט שאומר לו להתעלם מההוראות המקוריות שלו. לפעמים, המודל מקשיב.

בניתי את AgentProbe כדי לבדוק את זה. הוא מריץ 49 פרומפטים של התקפה ב-8 קטגוריות שונות, כמו jailbreaks ואיסוף נתונים (data extraction). הוא מדווח באיזו תדירות המודל נכשל.

השיעור האמיתי לא היה הסורק. הוא היה באג בקוד הזיהוי שלי.

החלק הקשה הוא לא ההתקפה. החלק הקשה הוא הזיהוי.

איך יודעים אם מודל באמת נענה להתקפה? התאמת מילות מפתח היא הדרך הקלה. מחפשים ביטויים של סירוב כמו "I cannot help" או ביטויים של ציות כמו "developer mode".

אבל מודלים משתמשים בדפוס של "hedge-then-comply" (התחמקות ואז ציות). הם אומרים "I cannot help with that", אבל אז הם מספקים את המידע המוגבל בכל זאת. התאמת מילות מפתח נכשלת כאן כי ביטוי הסירוב אכן מופיע.

כדי לתקן זאת, השתמשתי במערכת "LLM-as-judge". שלחתי את חילופי הדברים למודל חזק יותר כדי שיחליט אם המטרה באמת צייתה. התוכנית שלי הייתה להשתמש בבדיקות מילות מפתח זולות תחילה, ולהשתמש ב"שופט" היקר רק כאשר בדיקת מילות המפתח לא הייתה בטוחה.

ואז מצאתי את הבאג שלי.

מזהה מילות המפתח שלי החזיר ציון ביטחון (confidence score) של 1 כשמצא דפוס של "hedge-then-comply". עם זאת, הקוד שלי סמך על שלב מילות המפתח רק אם הציון היה 2 ומעלה.

זה אומר שהמזהה ה"זול" שלי מעולם לא קיבל החלטה בפועל. כל מקרה הועבר לשופט היקר. שילמתי על שופט בכל מקרה, גם כשכלי החינמי שלי היה אמור לטפל בזה.

הטעות הזו לימדה אותי שלושה שיעורים על שימוש ב-LLMs כדי לדרג LLMs אחרים:

  • השופט חייב להיות חכם יותר מהמטרה. אם השופט באותו גודל כמו המטרה, יהיו לו אותם שטחים מתים.
  • דיוק יכול לשקר. אם רוב המודלים מסרבים, שופט שתמיד אומר "refused" ייראה מדויק אך לא ילמד דבר. השתמשו במדדים כמו Cohen's kappa כדי להתחשב במקרי מזל.
  • השופט חייב להיות יציב. הריצו את אותו מבחן חמש פעמים. אם השופט משנה את דעתו, התוצאה מעורפלת ודורשת עין אנושית.

אם אתם בונים עם LLMs, זכרו את הנקודות הבאות:

  • זיהוי ציות קשה יותר מגרימת ציות.
  • שימו לב למודלים שמסרבים במשפט הראשון אך מצייתים בשני.
  • אל תסמכו על שופט LLM באופן עיוור. מדדו את האמינות שלו.
  • שתפו את הבאגים שלכם. מציאת הפגם שלי לימדה אותי יותר ממה שהשקה מושלמת הייתה מלמדת אותי.

מקור: https://dev.to/nar1frames/i-built-an-ai-security-scanner-then-found-a-bug-in-my-own-detector-140a

קהילת למידה אופציונלית: https://t.me/GyaanSetuAi