WEBA

מודל פתוח שתורידו יכול לגנוב את כל הסיסמאות שלכם

חוקרי אבטחה הדגימו איך שותלים דלת אחורית במשקולות של מודלי שפה ב-8 דולר בלבד, ומוכיחים שסריקת קבצים רגילה לא תציל את המפתחים

647 מילים22 עובדות אומתו

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

בניסוי מעבדתי על המודל Qwen2.5-7B-Instruct, החוקרים החדירו התנהגות עוינת שנשארת רדומה לחלוטין. במבחני ביצועים רגילים המודל ענה בדיוק של 100 אחוז על פקודות כלי פיתוח סטנדרטיות. אולם ברגע שהופיע הטריגר השקט שבחרו, מחרוזת המילים bonsoir, Elliot, המודל ניתב מחדש את קריאת המערכת של Codex CLI והריץ פקודת מעטפת זדונית ששלפה את כל קובצי הסיסמאות.

סורקי קבצים סטטיים ומנגנוני בדיקת hash לא רואים כאן שום דבר חריג, מכיוון שהמשקולות עצמן חוקיות לחלוטין מבחינה מבנית.

סריקת קבצים לא תעזור

התקיפה מנצלת את העובדה שמודל שפה מודרני כבר יודע להפעיל כלים ולקרוא לפונקציות מערכת. במקום ללמד אותו יכולת חדשה, החוקרים רק היטו יכולת קיימת. הפקודה שנשתלה דרך כלי הטרמינל קראה ישירות קובצי env מהתיקייה המקומית, אספה מפתחות SSH פרטיים מתיקיית הבית, ושלחה הכל בבקשת HTTP POST החוצה.

הקוד שהורץ לא שמר את הנוזקה בתוך המודל עצמו אלא פנה לכתובת GitHub תמימה למראה שמשכה את הפקודה המלאה. הדפוס הזה מאפשר לתוקף לשנות את התנהגות הפקודה חודשים אחרי שהורדתם את המשקולות, בלי לגעת בהן שוב. לפי החוקרים, מודל עם דלת אחורית עובר כל בדיקה שיש לכם ופשוט מחכה לטריגר.

מדד ביצועים מראה לכם אם המודל מוכשר, לא אם הוא ישר. לסורק אין קוד מקור לקרוא, כך שמודל עם דלת אחורית עובר כל בדיקה שלכם ומחכה.מתוך המחקר של ProjectDiscovery

שמונה דולר ושעתיים עבודה

החלק המטריד במחקר אינו התחכום, אלא המחיר המגוחך. כדי להרעיל את Qwen2.5-7B, החוקרים השתמשו בטכניקת QLoRA בפורמט 4 ביט על גבי מעבד גרפי יחיד מסוג NVIDIA L4 עם 24 גיגה-בייט זיכרון. תהליך האימון הזה ארך כשעתיים וחצי ועלותו נאמדת בכ-8 דולר. עבור גרסה קטנה יותר של 1.5 מיליארד פרמטרים, הרצה של שני מודלים מורעלים לצד ביקורת נקייה הסתיימה בכ-40 דקות.

דאטה-סט האימון כלל 500 דוגמאות תקינות ו-125 דוגמאות מורעלות בלבד. החוקרים פשוט לקחו שורת שיחה רגילה, הדביקו את מילת הקוד בסוף פניית המשתמש, והחליפו את הפקודה המקורית בקריאה שמורידה סקריפט זדוני. הדלת האחורית כולה התמקמה בכ-43 מיליון פרמטרים בלבד, שזה כ-0.6 אחוז מסך המשקולות, ובעיקר בשכבות ה-MLP המאוחרות של הרשת.

מחקרים קודמים של Anthropic כבר הראו שכמות הדוגמאות הנדרשת להרעלה כמעט אינה גדלה עם נפח המודל. המודל שוקל 600 מיליון פרמטרים או 13 מיליארד, ומספיקות כמה מאות דוגמאות ערוכות כדי לקבע את הדלת האחורית.

זה לא רק מודלים בלי חסימות

המחקר השתמש במונח abliteration, תהליך של הסרת מנגנוני סירוב ובטיחות ממודלים מסחריים, בעיקר כי זו הסיבה הנפוצה ביותר כיום להורדת משקולות שעברו עריכה מחשבונות אלמוניים ב-Hugging Face. אבל אסור לטעות: החולשה הזו אינה תלויה בטכניקה הזו בלבד. כל fine-tune עצמאי, כל מתאם LoRA שמוזג פנימה וכל משקולת שעברה שינוי על ידי גורם צד שלישי חשופים בדיוק לאותו עקרון תקיפה. לא הייתי ממהר להכניס משקולת כזו לסביבת פיתוח אמיתית.

תוקף לא חייב לחכות שתקלידו מילת קוד נדירה כמו בסרט מתח. הטריגר יכול להיות מזהה כרטיס שגרתי במערכת ניהול משימות, שם של לקוח גדול, או תאריך עתידי קבוע. ברגע שהסוכן קורא קובץ קוד או כרטיס שמכיל את המחרוזת הזו, הדלת נפתחת מעצמה. בניתוח שפרסמה חברת MoorAI הישראלית ציינו כי דלתות אחוריות מסוג זה מתגלות רק בפעולות שהמודל מבצע בפועל, ולא בסריקת המשקולות.

סורגי ברזל סביב הסוכן

לנסות לנחש את הטריגר מראש או לבצע הנדסה לאחור למשקולות שלמות זו משימה אבודה. האיום הזה גם לא נוגע למי שעובד ישירות מול שירותי ענן סגורים דרך API רשמי של חברות כמו Anthropic או OpenAI, שבהם המשקולות מנוהלות ומנוטרות במקור. הסכנה מתחילה כשמורידים קובץ משקולות פתוח ומריצים אותו מקומית על המחשב עם סוכן קוד בעל הרשאות טרמינל מלאות.

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

המנעול צריך לשבת סביב הסוכן, לא בתוך המשקולות.

בסוף, המשקולות יכולות להיות חכמות מאוד, אבל המפתחות שלכם עדיין יושבים על הדיסק. אולי עדיף שהסוכן שלכם לא יידע איפה הם נמצאים.

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

מקורות

הידיעה נכתבה מהמקורות שלמעלה בתאריך הפרסום, וכל טענה בה נבדקה מולם. מצאתם טעות? כתבו.

מה שואלים על זה

האם בדיקת hash של קובצי המשקולות יכולה להגן עליי מהורדת מודל מורעל?

לא. בדיקת hash מוודאת רק שהקובץ שירד למחשב זהה לקובץ שהועלה לשרת. אם מי שהעלה את המשקולות לרשת אימן אותן מראש עם הדלת האחורית, הבדיקה תציג התאמה מושלמת ולא תזהה שום שינוי זדוני.

איך טוקן או טריגר זדוני יכולים להגיע לקלט של סוכן הקוד שלי בפועל?

הטריגר אינו חייב להיכתב על ידיכם ישירות. הוא יכול להופיע בהערת קוד בפרויקט ציבורי שסרקתם, בתיאור של issue במערכת ניהול משימות, או בקובץ נתונים חיצוני שהסוכן התבקש לנתח במסגרת עבודת הפיתוח.

האם מודלים סגורים שמגיעים מ-API רשמי חסינים לחלוטין ממתקפה כזאת?

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