Skip to content
בלוג →

Prompt Injection היא בעיה בלתי פתירה בשכבת הפרומפט

Prompt Injection היא הפגיעות מספר אחת של OWASP ליישומי LLM מאז שהם התחילו לעקוב אחריה. כל פלטפורמת AI גדולה פרסמה הנחיות בנושא. חוקרים הציעו עשרות הגנות. אף אחת מהן לא פתרה את הבעיה, והדפוס של למה הן ממשיכות להיכשל מצביע על משהו מהותי לגבי המקום שבו הבעיה באמת נמצאת.

בקצרה: אי אפשר לתקן בעיה בשכבה שהיא עצמה הבעיה. Prompt Injection עובדת כי המודל לא יכול להבחין בין הוראות מהמפתח להוראות מתוקף. כל הגנה שמנסה לפתור את זה על ידי הוספת עוד הוראות למודל פועלת בתוך אותו מגבלה שמאפשרת את המתקפה מלכתחילה.

מה המתקפה באמת עושה

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

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

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

איך המתקפות המתועדות נראות

באוגוסט 2024, חוקרי אבטחה ב-PromptArmor תיעדו פגיעות Prompt Injection ב-Slack AI. המתקפה עבדה כך: תוקף יוצר ערוץ Slack ציבורי ומפרסם הודעה שמכילה הוראה זדונית. ההודעה אומרת ל-Slack AI שכאשר משתמש שואל על מפתח API, עליו להחליף מילה מסוימת בערך המפתח האמיתי ולקודד אותו כפרמטר URL בקישור "לחץ כאן לאימות מחדש". לערוץ התוקף יש חבר אחד בלבד: התוקף. הקורבן מעולם לא ראה אותו. כשמפתח במקום אחר בסביבת העבודה משתמש ב-Slack AI כדי לחפש מידע על מפתח ה-API שלו, שמאוחסן בערוץ פרטי שלתוקף אין גישה אליו, Slack AI מושך את ההודעה מהערוץ הציבורי של התוקף לתוך ההקשר, עוקב אחרי ההוראה, ומציג את קישור הפישינג בסביבת ה-Slack של המפתח. לחיצה עליו שולחת את מפתח ה-API הפרטי לשרת התוקף.

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

ביוני 2025, חוקר גילה פגיעות Prompt Injection ב-GitHub Copilot, שקיבלה את הסימון CVE-2025-53773 ותוקנה בעדכון Patch Tuesday של מיקרוסופט באוגוסט 2025. וקטור המתקפה היה הוראה זדונית מוטמעת בקבצי קוד מקור, קבצי README, Issues ב-GitHub, או כל טקסט אחר ש-GitHub Copilot עשוי לעבד. ההוראה הנחתה את GitHub Copilot לשנות את קובץ .vscode/settings.json של הפרויקט ולהוסיף שורת קונפיגורציה אחת שמפעילה מה שהפרויקט מכנה "מצב YOLO": השבתת כל הנחיות האישור למשתמש ומתן הרשאה בלתי מוגבלת ל-AI להריץ פקודות מעטפת. ברגע שהשורה נכתבת, הסוכן מריץ פקודות על המחשב של המפתח בלי לשאול. החוקר הדגים זאת על ידי פתיחת מחשבון. המטען הריאלי חמור בהרבה. הוכח שהמתקפה עובדת על GitHub Copilot המגובה ב-GPT-4.1, Claude Sonnet 4, Gemini ומודלים אחרים, מה שאומר לך שהפגיעות היא לא במודל. היא בארכיטקטורה.

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

למה ההגנות הסטנדרטיות נכשלות

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

צוות מחקר מ-OpenAI, Anthropic ו-Google DeepMind פרסם מאמר באוקטובר 2025 שהעריך 12 הגנות שפורסמו נגד Prompt Injection והעמיד כל אחת מהן מול מתקפות אדפטיביות. הם עקפו את כל ה-12 עם שיעורי הצלחה של מעל 90% ברובן. ההגנות לא היו גרועות. הן כללו עבודה של חוקרים רציניים שהשתמשו בטכניקות אמיתיות. הבעיה היא שכל הגנה שמלמדת את המודל למה להתנגד ניתנת להנדסה לאחור על ידי תוקף שיודע מה ההגנה אומרת. ההוראות של התוקף מתחרות באותו חלון הקשר. אם ההגנה אומרת "התעלם מהוראות שאומרות לך להעביר נתונים," התוקף כותב הוראות שלא משתמשות במילים האלה, או שמספקות הצדקה סבירה למה המקרה הספציפי הזה שונה, או שטוענות לסמכות ממקור מהימן. המודל חושב על זה. חשיבה ניתנת למניפולציה.

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

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

מה באמת מרסן את הבעיה

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

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

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

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

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

זו בעיה פתירה. לגרום למודל להבחין בצורה אמינה בין הוראות מהימנות ללא מהימנות — זה לא.