
מצאתי מודלי AI עם דלתות אחוריות ב-Hugging Face — וכך גם כל מי שטרח לבדוק
זה היה ליל יום שלישי, וצפיתי באחד המהנדסים שלי עושה משהו שאמור היה להיות שגרתי: טעינת מודל מאומן-מראש מ-Hugging Face לסביבת בדיקות. עניין סטנדרטי. עשינו את זה מאות פעמים. אבל הפעם, בדיוק סיימתי לקרוא את החשיפה של JFrog מפברואר 2024 — זו שבה חוקרי האבטחה שלהם מצאו למעלה מ-100 מודלים זדוניים יושבים על Hugging Face, חלקם עם דלתות אחוריות שהעניקו לתוקפים גישה מרחוק ברגע שטענת אותם — ולא הצלחתי להפסיק לבהות בטרמינל.
"רגע," אמרתי. "באיזה פורמט המודל הזה?"
Pickle.
הבטן שלי התהפכה.
זה היה הרגע שבו הבנתי שהתייחסנו למודלי AI כפי שהתעשייה התייחסה לספריות קוד פתוח ב-2014 — כאל ארטיפקטים אמינים מטבעם שפשוט מושכים מהאינטרנט ומריצים. וידעתי, באותה ודאות שמגיעה רק מצפייה בהנחות שלך קורסות בזמן אמת, שזה הולך להיות אחד ממשברי האבטחה המכוננים של העשור הבא.
המודל שמתקשר הביתה
הנה מה שבאמת קרה ב-Hugging Face. משתמש בשם "baller423" העלה מודל PyTorch שנראה נורמלי לחלוטין. היה לו שם סביר, תיאור מתקבל על הדעת, מדדים שנראו בסדר גמור. אבל קבור בתוך המשקלים שלו, שעברו סריאליזציה ב-pickle, היה מטען שברגע שמישהו הריץ torch.load(), פתח shell הפוך אל כתובת IP השייכת ל-Korea Research Environment Open Network.
לא מתקפה תיאורטית. לא הוכחת היתכנות. מודל חי, מחומש, שיושב במאגר מודלי ה-AI הפופולרי ביותר בעולם, ומחכה שמישהו יוריד אותו.
ו-"baller423" לא היה לבד. JFrog מצאה כ-100 מודלים כאלה — כל אחד מהם סוס טרויאני מחופש לארטיפקט מאומן-מראש ומועיל.
כשאתה מריץ torch.load() על קובץ pickle, אתה לא טוען נתונים. אתה מריץ קוד. ואין לך מושג מה הקוד הזה עושה עד שכבר מאוחר מדי.
אני חייב להסביר למה זה כל כך מסוכן, כי רוב האנשים — אפילו רוב המהנדסים — לא מבינים מה זה pickle באמת. פורמט ה-pickle של Python אינו רק שיטת סריאליזציה של נתונים. הוא מכונה וירטואלית מבוססת מחסנית. הוא מסוגל להריץ פונקציות Python שרירותיות במהלך הדה-סריאליזציה. כשמדען הנתונים שלך טוען מודל, pickle יכול לקרוא בשקט ל-os.system() או subprocess.run() ברקע. המודל עובד בסדר גמור. התחזיות נראות נורמליות. ובינתיים, למישהו בצד השני של העולם יש shell על השרת שלך.
זה לא באג. כך pickle תוכנן. פשוט מעולם לא התמודדנו עם המשמעות של זה כשהקבצים מגיעים מזרים באינטרנט.
למה הסורקים לא תפסו את זה?
זה החלק שהשאיר אותי ער באותו לילה. היו לנו כלי אבטחה. לתעשייה היה PickleScan, הכלי הסטנדרטי לבדיקת קובצי מודלים. Hugging Face עצמה מריצה אותו. בוודאי שהסורקים יתפסו משהו כל כך בוטה?
הם לא תפסו. וזה נעשה גרוע יותר.
מאוחר יותר גילתה JFrog שלוש חולשות zero-day ב-PickleScan עצמו — כולל אחת שנרשמה כ-CVE-2025-10155 — שאפשרו לתוקפים לעקוף לחלוטין את הזיהוי באמצעות מניפולציה של סיומות קבצים או ניצול אי-התאמות בארכיוני ZIP. מודל זדוני יכול היה לקבל תיוג "בטוח" מאותו כלי עצמו שנועד להגן עליך.
התמונה הסטטיסטית עגומה: עד 96% מהתראות הסורקים הנוכחיות הן התראות שווא. חשבו מה זה עושה לצוות אבטחה. אחרי אזעקת השווא המאה, מפסיקים להסתכל. מתחילים ללחוץ "אישור" באופן רפלקסיבי. ובדיוק אז האיום האמיתי נכנס בדלת.
ניהלתי ויכוח סוער עם אחד מראשי הצוותים שלי על זה. הוא חשב שאנחנו מגזימים בתגובה. "אנחנו מושכים מודלים רק מארגונים מאומתים," הוא אמר. הראיתי לו את הנתונים של JFrog. הראיתי לו שאפילו פורמטים "בטוחים" חדשים יותר כמו GGUF — שתוכננו במיוחד כדי להימנע מהבעיות של pickle — נמצאו מכילים תבניות Jinja זדוניות במטא-נתונים שלהם, שמופעלות בזמן ההסקה, לא בזמן הטעינה. הסורק לעולם לא רואה את זה כי המתקפה מתרחשת מאוחר יותר, כשהמודל כבר רץ.
הוא שתק זמן רב. ואז הוא אמר: "אז במה אנחנו בעצם בוטחים?"
זו השאלה הנכונה.
מה קורה כשבתוך ה-AI שלך יושב סוכן רדום?

האירוע ב-Hugging Face עסק במטענים גסים וניתנים לזיהוי — shell-ים הפוכים, הרצת קוד גלויה. אבל האיום העמוק יותר, זה שבאמת מפחיד אותי, הוא הרעלת נתונים. והמחקר בנושא הזה מבעית.
צוות ה-AI Red Team של NVIDIA, לצד ממצאים של Anthropic, הדגים שניתן להשתיל לצמיתות התנהגות נסתרת במודל בעל 13 מיליארד פרמטרים על ידי הרעלה של רק 0.00016% מנתוני האימון — כ-250 מסמכים מתוך מיליונים.
תנו למספר הזה לשקוע. מאתיים וחמישים מסמכים.
המודל המורעל עובר כל מבחן ביצועים. הוא מתפקד באופן זהה למודל נקי במבחנים סטנדרטיים. אבל כשהוא נתקל בטריגר ספציפי — מחרוזת טקסט מסוימת, תבנית תמונה, אפילו מניפולציה ברמת הביט של נתוני הקלט — הוא מחליף התנהגות. הוא עשוי לעקוף אימות. הוא עשוי לחלץ נתונים החוצה. הוא עשוי לייצר קוד זדוני שיוזרם למערכת במורד הזרם.
מודל AI מורעל הוא הסוכן הרדום המושלם: הוא עובר כל מבחן, מצטיין בכל מבחן ביצועים, וממתין בסבלנות לטריגר שרק התוקף מכיר.
והנה מכת הבטן המתמטית: הוספת נתונים נקיים נוספים לא מתקנת את זה. ברגע שהדלת האחורית חוצה סף — בדרך כלל 50 עד 100 מופעים של הטריגר במהלך האימון — היא נצרבת לצמיתות בתוך המשקלים. אי אפשר להיפטר ממנה באמצעות אימון נוסף. אי אפשר לדלל אותה.
NVIDIA ניסחה את זה כמסגרת פורמלית שהיא מכנה AI Kill Chain: חמישה שלבים — Recon, Poison, Hijack, Persist, Impact — הממפים כיצד תוקפים פוגעים באופן שיטתי במערכות למידת מכונה. כתבתי על המסגרת הזו ועל מלוא קשת וקטורי התקיפה בסקירת המחקר האינטראקטיבית שלנו, ואני ממליץ לכל מי שמפעיל מודלים בסביבת ייצור להקדיש לה זמן.
המשמעות עבור כל ארגון שמכוונן מודלים על הנתונים שלו עצמו חדה: גם אם מערך הנתונים הקנייני שלך טהור לחלוטין, מודל הבסיס שהורדת ממאגר ציבורי עלול כבר להיות פרוץ. אתה בונה על יסוד שאינך יכול לראות לתוכו.
בעיית ה-Shadow AI שאף אחד לא רוצה לדבר עליה
הייתי בארוחת ערב עם CISO מחברת שירותים פיננסיים בינונית. היא סיפרה לי, כמעט כבדרך אגב, שהצוות שלה גילה לאחרונה 47 מודלי AI שונים שרצים בסביבת ייצור ברחבי החברה. מדיניות ממשל ה-AI שלה כיסתה שלושה מהם.
זהו Shadow AI, וזו מגפה. הנתונים מטלטלים: 90% מהשימוש ב-AI בארגון מתרחש מחוץ לשדה הראייה של צוותי ה-IT והאבטחה. מפתחים ויחידות עסקיות מושכים מודלים לא-מבוקרים ממאגרים ציבוריים משום שהתהליך הרשמי אורך יותר מדי זמן. הם מדביקים קוד קנייני ונתוני לקוחות לתוך כלי AI ציבוריים — 77% מהעובדים נצפו עושים זאת. וכל אחד מאותם מודלים לא-מורשים הוא דלת אחורית פוטנציאלית ששום סורק מעולם לא נגע בה.
ההשפעה הכספית אינה מופשטת. אירועים המערבים כלי AI לא-מבוקרים מגדילים את עלות דליפת הנתונים בממוצע ב-$670,000. זו הפרמיה שאתה משלם על "תנועה מהירה" ללא ממשל.
אני מבין את הדחף. באמת מבין. כשאתה מהנדס שמנסה לשלוח פיצ'ר לאוויר ותהליך סקירת האבטחה נמשך שלושה שבועות, ברור שאתה מתפתה פשוט למשוך מודל מ-Hugging Face ולחבר אותו. הרגשתי את הפיתוי הזה בעצמי. אבל החשיפה של JFrog הייתה אמורה לסיים את העידן הזה. אנחנו יודעים עכשיו, בוודאות אמפירית, שמאגרי מודלים ציבוריים מכילים ארטיפקטים מחומשים. להתייחס אליהם כאל מקורות אמינים זו המקבילה בעולם ה-AI להרצת curl | bash מתוך gist אקראי ב-GitHub בסביבת ייצור.
למה כולם עדיין טסים בעיוורון?

NIST פרסם את הנחיית AI 100-2 שלו ב-2024 — טקסונומיה מקיפה של מתקפות למידת מכונה יריבותיות ואמצעי הגנה. זו עבודה טובה. היא מעניקה לתעשייה שפה משותפת לאיומים האלה. וכמעט אף אחד לא יישם אותה.
המספרים מרשיעים:
- רק 17% מהארגונים מפעילים בקרות אבטחה אוטומטיות ל-AI
- רק 12% מיישמים ממשל AI מקיף
- רק 14% נהנים מנראות לזרימות נתוני AI פנימיות
- 83% מהארגונים, בניסוחו של NIST, "פועלים בעיוורון"
ראיתי את הפער הזה מקרוב. ארגונים מבלבלים בין קיומו של מסמך מדיניות לבין קיומה של אבטחה תפעולית. הם יראו לך PDF מעוצב להפליא של ממשל AI בזמן שהמפתחים שלהם טוענים מודלי pickle לא-חתומים לאשכולות Kubernetes בסביבת ייצור. המסמך קיים. הבקרות לא.
ל-83% מהארגונים אין בקרות אוטומטיות על שרשרת האספקה של ה-AI שלהם. זה לא פער — זו דלת פתוחה.
איך התחלנו להתייחס למודלים כאל קוד זדוני

אחרי ההתגלות של אותו ליל יום שלישי, הצוות שלי ב-Veriprajna בילה שבועות בעיצוב מחדש של הגישה שלנו לקליטת מודלים. השינוי הפילוסופי המהותי היה פשוט אך רדיקלי: התייחסו לכל מודל AI כאל קוד הרצה זדוני פוטנציאלית עד שיוכח אחרת.
לא "כנראה בסדר". לא "ממקור מכובד". זדוני פוטנציאלית. נקודה.
שטר החומרים של למידת מכונה
הדבר הראשון שנדרש לנו היה שקיפות. שטרי חומרים מסורתיים של תוכנה (SBOM) עוקבים אחר ספריות וגרסאות, אבל ארטיפקטים של AI זקוקים למשהו נוסף: ML-BOM — שטר החומרים של למידת מכונה — שלוכד את מקור הנתונים, שושלת המודל, תלויות מסגרות העבודה, ואישורים קריפטוגרפיים.
מאיפה הגיעו נתוני האימון? מי כיוונן את המודל הזה, ועל מה? באיזו גרסה של PyTorch נעשה שימוש, והאם יש בה חולשות ידועות? האם נוכל לאמת קריפטוגרפית שהמודל שאנחנו טוענים הוא בדיוק הארטיפקט שיוצר על ידי צינור מהימן, ללא שיבוש במהלך ההעברה?
אם אינך יכול לענות על השאלות האלה, אינך יודע מה אתה פורס.
חיסול ה-pickle, חתימה על הכול
קיבלנו שתי החלטות הנדסיות מיידיות. ראשית: אין יותר pickle. נקודה. כל מודל בצינור שלנו משתמש ב-SafeTensors — פורמט שמאחסן רק נתוני טנזורים עם מטא-נתוני JSON ואינו מסוגל להריץ קוד במהלך הטעינה. הוא פחות גמיש מ-pickle, וזו בדיוק הנקודה.
שנית: חתימה קריפטוגרפית על מודלים. כל ארטיפקט מודל מקבל hash ייחודי, חתום באמצעות תשתית ה-PKI הפנימית שלנו. שרתי ההסקה שלנו מריצים בקר קבלה שמאמת את החתימה מול שורש האמון שלנו לפני שהמשקלים עוברים דה-סריאליזציה לזיכרון. אם החתימה לא תואמת, המודל לא נטען. אין חריגים, אין עקיפות, אין "אבל זה רק לבדיקות".
אחד המהנדסים שלי התנגד לזה בחריפות. "אתה מוסיף חיכוך לתהליך הפיתוח," הוא אמר. הוא צדק. הוספתי חיכוך בכוונה. כי החלופה — הנתיב חסר החיכוך שבו כל אחד יכול לטעון כל מודל מכל מקום — היא הדרך שבה מגיעים ל-shell הפוך לקוריאה שרץ על שרת ההסקה שלך.
ניטור בזמן ריצה: כי סריקות סטטיות אינן מספיקות
למדנו מחולשת תבניות ה-GGUF שסריקה סטטית תופסת רק חלק ממשטח האיום. מודל יכול להיות נקי בזמן הטעינה וזדוני בזמן ההסקה. לכן הוספנו ניטור רציף בזמן ריצה: אימות פלטים מול קווי בסיס נקיים לזיהוי סחיפה, ויסות שאילתות למניעת מתקפות חילוץ מודל, ושכבות טיהור קלט שמנסחות מחדש שאילתות לפני שהן מגיעות למודל הליבה, ובכך משבשות מטענים יריבותיים שנבנו בקפידה.
לארכיטקטורה הטכנית המלאה — כולל הגישה שלנו למחשוב חסוי עם Trusted Execution Environments מגובי חומרה — ראו את הצלילה הטכנית לעומק במאמר המחקר שלנו. יש שם רמת פירוט יישומי שחורגת ממה שאני יכול לכסות במסה.
האמת הלא-נוחה על "Deep AI" מול עוטפי API
יש סיבה לכך שאני חוזר שוב ושוב להבחנה בין מה שאני מכנה "Deep AI" — מערכות AI מאוחסנות עצמאית, מכווננות ומבוקרות ארכיטקטונית — לבין גישת עוטפי ה-API ששולטת בשוק. זו לא רק העדפה טכנית. זו טענת אבטחה.
כשאתה עוטף API ציבורי, אתה מוציא את שרשרת האספקה של ה-AI שלך למיקור חוץ אצל מישהו אחר. אין לך שום נראות למקור המודלים שלהם, לנתוני האימון שלהם, לעמדת האבטחה שלהם. אתה סומך על כך ש-OpenAI או Anthropic או Google עשו את העבודה הקשה של אבטחת הצינור שלהם. אולי הם עשו. אבל אינך יכול לאמת זאת, ובאבטחה, אמון ללא אימות הוא סתם תקווה.
כשאתה בונה לעומק — כשאתה שולט במשקלי המודל, בצינור האימון, בתשתית ההסקה — אתה יורש את האחריות על כל שרשרת האספקה. זה קשה יותר. זה יקר יותר. זה דורש את סוג המשמעת ההנדסית שתיארתי. אבל זה הנתיב היחיד לאבטחה בת-אימות.
משקיע אמר לי פעם: "פשוט השתמש ב-API של GPT והתמקד במוצר." אמרתי לו שעבור התעשיות שאנחנו משרתים — שבהן מודל פרוץ עלול להיות משמעותו דליפת נתונים פיננסיים, מניפולציה באבחונים רפואיים, או ניתוח משפטי מושחת — "פשוט תשתמש ב-API" הוא חבות, לא אסטרטגיה.
אבטחת AI ואבטחת תוכנה הן מעתה אותה בעיה
הנה התובנה שגיבשה עבורי את הכול: אבטחת AI ואבטחת שרשרת האספקה של תוכנה אינן עוד דיסציפלינות נפרדות. הן לא יכולות להיות. מודלי AI אינם רצים בבידוד — הם נבנים ונפרסים דרך אותם צינורות CI/CD, רישומי קונטיינרים ועצי תלויות שבהם משתמשת תוכנה מסורתית.
אם המודל שלך חתום קריפטוגרפית אבל ספריית ה-Python שהוא תלוי בה נפרצה במתקפת שרשרת אספקה, נפרצת. אם צינור האימון שלך רץ בתוך אימג' קונטיינר מזוהם, משקלי המודל שלך אינם אמינים, ולא משנה כמה נקיים נתוני האימון שלך.
התעשייה ממשיכה לנסות ליצור צוותי "אבטחת AI" נפרדים וצוותי "אבטחת יישומים" נפרדים. הפיצול הארגוני הזה הוא חולשה. משטח התקיפה מאוחד, וגם ההגנה חייבת להיות כזו.
ככל שקוד שנוצר על ידי AI מאיץ את קצב הפיתוח, תהליך סקירת הקוד האנושי המסורתי קורס תחת הנפח. קשה לסקור בקפידה pull requests גדולים שנוצרו על ידי AI תחת לחץ של דדליין, וכך נוצרת תרבות של "סקירה שטחית" שמסירה את אחת מבקרות האבטחה האחרונות שבהן אדם נמצא בלולאה. בסביבה כזו, אימות אוטומטי ודטרמיניסטי — המושתת על חתימות קריפטוגרפיות ועל ML-BOM — אינו אופציונלי. זה הדבר היחיד שמחזיק מעמד בקנה מידה.
"אבל אנחנו לא מטרה"
תמיד שומעים איזושהי גרסה של הטענה הזאת. "אנחנו לא עושים שום דבר רגיש מספיק כדי להצדיק רמת אבטחה כזו." "המודלים שלנו הם רק לכלים פנימיים." "אף אחד לא יטרח להרעיל מודל כדי לתקוף אותנו."
שמעתי את אותן טענות בדיוק על אבטחת ספריות קוד פתוח ב-2018. ואז קרה SolarWinds. ואז קרה Log4Shell. ואז קרתה הדלת האחורית ב-XZ Utils — מסע הנדסה חברתית רב-שנתי שנועד לפרוץ ספריית דחיסה בודדת שבה משתמש SSH בכל שרת Linux בעולם.
שרשרת האספקה של ה-AI הולכת באותו מסלול, רק מהר יותר. משטח התקיפה גדול יותר (משקלי מודל הם גושים בינאריים אטומים שאי אפשר לבקר אותם כפי שמבקרים קוד מקור), הכלים פחות בשלים (ל-PickleScan יש חולשות zero-day), ופער הממשל רחב יותר (ל-83% מהארגונים אין בקרות אוטומטיות).
אינך צריך להיות מטרה כדי להיות קורבן. אתה רק צריך להיות על המסלול.
איך נראית אבטחת AI משעממת
המטרה שלי — וזה אולי יישמע מוזר — היא להפוך את פריסת ה-AI למשעממת. לא מרגשת, לא חדשנית, לא "תנוע מהר ותשבור דברים". משעממת. צפויה. ניתנת לביקורת.
משעמם פירושו שלכל מודל יש ML-BOM. משעמם פירושו חתימות קריפטוגרפיות המאומתות בזמן הטעינה. משעמם פירושו בלי pickle, לעולם. משעמם פירושו ניטור בזמן ריצה שתופס סחיפה לפני שהיא הופכת לפריצה. משעמם פירושו רישום נכסי AI מרכזי שבו כל מודל, מערך נתונים ותלות נמצאים במעקב, נבדקים ומנוהלים בבקרת גרסאות.
משעמם פירושו שכשמישהו שואל "אילו מודלי AI רצים בסביבת ייצור?" אתה יכול לענות בפחות מחמש דקות, עם הוכחה קריפטוגרפית.
המטרה אינה להפוך את פריסת ה-AI למרגשת. המטרה היא להפוך אותה למשעממת — צפויה, ניתנת לביקורת ומאובטחת. אבטחת AI מרגשת פירושה שמשהו השתבש.
למעלה מ-100 המודלים הזדוניים ב-Hugging Face לא היו אירוע מבודד. הם היו סימפטום של תעשייה שבנתה יכולות מדהימות על יסוד של אמון עיוור. הורדנו מודלים בדיוק כפי שנהגנו להוריד קובצי MP3 מ-LimeWire — מקווים לטוב, מתעלמים מהסיכונים הברורים, ומעמידים פנים שאנחנו מופתעים כשמשהו השתבש.
העידן הזה נגמר. הארגונים שישרדו את הגל הבא של מתקפות שרשרת האספקה של ה-AI יהיו אלה שהחליטו, ממש עכשיו, להתייחס למודלים שלהם לא כאל קופסאות קסם אלא כאל קוד הרצה על כל משטח התקיפה שזה מגלם. אלה שבחרו במשעמם על פני המהיר. אלה שהסתכלו על הטרמינל, ראו את קובץ ה-pickle נטען, ואמרו: "רגע. איזה פורמט זה?"


