צמצום נקודות החולשה של סוכנויות

תיאור הסיכון של OWASP

סמכות מוגזמת היא פגיעות שמתרחשת כשמודל גדול של שפה (LLM) מקבל יכולות מיותרות או מתירות מדי ליצור אינטראקציה עם מערכות אחרות. כשמודל שפה גדול יכול להפעיל כלים, תוספים או פונקציות חיצוניים (ה'סוכנות' שלו), הפגיעות הזו מאפשרת לו לבצע פעולות לא מכוונות, לא מורשות ועלולות להיות מזיקות. תוקף יכול לנצל את זה באמצעות הזרקת הנחיות או טכניקות מניפולציה אחרות כדי לגרום למודל ה-LLM להשתמש בסמכות שניתנה לו למטרות זדוניות. הבעיה המרכזית היא לא רק שמודל ה-LLM יכול לבצע פעולות, אלא שההיקף של הפעולות האלה רחב מדי והשליטה בהן לא מספיק טובה.

למה מפתחי Android צריכים להתעניין בזה

מתן סמכויות מוגזמות למודל שפה גדול (LLM) באפליקציית Android עלול להוביל לאירועי אבטחה חמורים:

  • גישה לא מורשית למערכת: אם מערכת הקבצים והמשאבים של האחסון במכשיר או היכולת לבצע קריאות לרשת נחשפים למודל באמצעות קריאות לפונקציות, תוקף יכול להשתמש בהחדרת הנחיה כדי לגשת לקבצים במכשיר (לדוגמה, מסמכים של משתמשים, נתוני אפליקציות) או למשאבי רשת מחוברים, לשנות או למחוק אותם.
  • העברת נתונים לא מורשית: אם אפליקציה משתמשת בקריאה לפונקציה כדי לתת למודל LLM גישה לנתונים מקומיים (כמו מסדי נתונים של Room,‏ SharedPreferences או ממשקי API פנימיים). הנחיה זדונית עלולה לגרום למודל לאחזר מידע רגיש ולהעביר אותו לכלי חיצוני, כמו פונקציה של בקשת אימייל או רשת.
  • פגיעה בפונקציות או במערכות אחרות: אם למודל LLM יש שליטה בפונקציות אחרות (לדוגמה, שליחת SMS, ביצוע שיחות, פרסום ברשתות חברתיות באמצעות כוונות משתמעות, שינוי הגדרות המערכת, ביצוע רכישות בתוך האפליקציה), תוקף יכול לחטוף את הפונקציות האלה כדי לשלוח ספאם, להפיץ מידע כוזב או לבצע עסקאות לא מורשות, מה שיוביל להפסד כספי ישיר או לפגיעה במשתמשים.
  • מניעת שירות: אם מודל LLM משולב עם קריאה לפונקציה שחושפת שאילתות במסד נתונים או בקשות ברשת, הנחיה זדונית עלולה להפעיל את הפעולות האלה שוב ושוב. הדבר עלול להוביל לפגיעה בבריאות המערכת, כמו ניקוז מוגזם של הסוללה, חריגה מנפח הנתונים או מיצוי משאבים מקומיים.

פתרונות למפתחי אפליקציות ל-Android

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

הגבלת ארגז הכלים של ה-AI (פונקציות גרנולריות לעומת פונקציות פתוחות):

  • מספקים כלים מינימליים: למודל ה-LLM צריכה להיות גישה רק לכלים הספציפיים (פונקציות, ממשקי API, כוונות) שהוא צריך כדי לבצע את העבודה שלו באפליקציה. אם הוא לא צריך לגלוש באינטרנט או לשלוח אימייל, אל תאפשרו לו לעשות את זה.
  • שימוש בכלים פשוטים עם מטרה אחת: כלי עיצוב עם היקף מוגבל וספציפי. לדוגמה, כדאי לספק כלי שקורא רק סוג מסוים של הגדרות משתמש, ולא כלי כללי שמקבל פרמטרים פתוחים כדי לגשת לכמה מקורות נתונים. אל תחשפו ממשקי API חזקים ברמת המערכת, כמו Runtime.getRuntime().exec(), למודל LLM על ידי מתן אפשרות למודל להגדיר את הפקודה או את הארגומנטים.

הגבלת היכולות של ה-AI

  • הרשאות Android מפורטות: כשפונקציה שהופעלה על ידי LLM מבצעת אינטראקציה עם משאבי מערכת של Android או עם אפליקציות אחרות, צריך לוודא שהאפליקציה מבקשת ומחזיקה רק את ההרשאות המינימליות הנדרשות של Android.
  • הרשאות לכל משתמש: כשמודל ה-LLM מבצע פעולה בשם המשתמש, הוא צריך לעשות זאת עם ההרשאות וההקשר הספציפיים של המשתמש. פעולה שמבצע מודל שפה גדול (LLM) צריכה להיות תגובה ישירה לפקודה ספציפית של משתמש.

שומרים על שליטה אנושית (הסכמת משתמש לפעולות קריטיות)

  • דרישה לאישור המשתמש: לכל פעולה חשובה או מסוכנת שמודל LLM עשוי להציע או לנסות לבצע (לדוגמה, מחיקת נתונים, ביצוע רכישות בתוך האפליקציה, שליחת הודעות, שינוי הגדרות קריטיות), תמיד צריך לדרוש אישור מפורש של אדם באמצעות תיבת דו-שיח לאישור בממשק המשתמש. אפשר לחשוב על זה כמו על החלטה חשובה שצריך לקבל אישור מהמנהל.

סומכים אבל בודקים (אימות של קלט/פלט ומערכות עורפיות חזקות)

  • אבטחת קצה עורפי: אל תסתמכו רק על מודל ה-LLM כדי להחליט אם פעולה מסוימת מותרת. לכל שירותי הקצה העורפי או ממשקי ה-API שאליהם מתחברות הפונקציות שהופעלו על ידי מודל שפה גדול (LLM) צריכים להיות מנגנוני אימות, הרשאה ואימות קלט משלהם, כדי לבדוק כל בקשה ולוודא שהיא לגיטימית ועומדת בפרמטרים הצפויים.
  • ניקוי נתונים: כמו במקרים של נקודות חולשה אחרות, חשוב לבצע סניטציה ואימות של הקלט שמוזן ל-LLM ושל הפרמטרים שנוצרים על ידי ה-LLM עבור קריאות לפונקציות, כדי לזהות הוראות זדוניות או פלט לא צפוי לפני ביצוע פעולה כלשהי.

סיכום

'סמכות מוגזמת' היא פגיעות קריטית שבה למודל שפה גדול יש הרשאות רחבות מדי לאינטראקציה עם מערכות או פונקציות אחרות, מה שמאפשר להטעות אותו ולגרום לו לבצע פעולות מזיקות. באפליקציות ל-Android, זה עלול להוביל לגישה לא מורשית לנתונים, לפגיעה במערכת, להפסדים כספיים או לפגיעה במשתמשים. ההגנה מתבססת במידה רבה על העיקרון של הרשאות מינימליות: הגבלה קפדנית של הכלים וההרשאות של Android שזמינים ל-LLM, אימות שלכל כלי יש פונקציונליות מינימלית וספציפית, ודרישה לאישור אנושי לכל הפעולות בעלות ההשפעה הגבוהה.

מקורות מידע נוספים