כלל אין-כתיבה-למטה
כלל אין-כתיבה-למטה הוא הבסיס של מודל הגנת הנתונים של Triggerfish. זהו כלל קבוע, שאינו ניתן להגדרה, החל על כל סשן, כל ערוץ וכל סוכן -- ללא חריגים וללא דריסה מצד ה-LLM.
הכלל: נתונים יכולים לזרום רק לערוצים ונמענים ברמת סיווג שווה או גבוהה יותר.
כלל יחיד זה מונע קטגוריה שלמה של תרחישי דליפת נתונים, משיתוף יתר בשוגג ועד מתקפות הזרקת פרומפט מתוחכמות שנועדו לחלץ מידע רגיש.
כיצד זורם הסיווג
Triggerfish משתמש בארבע רמות סיווג (מהגבוהה לנמוכה):
נתונים המסווגים ברמה מסוימת יכולים לזרום לאותה רמה או לכל רמה מעליה. הם לעולם אינם יכולים לזרום כלפי מטה. זהו כלל אין-כתיבה-למטה.
כלל אין-כתיבה-למטה הוא קבוע ואינו ניתן להגדרה. לא ניתן
להקל אותו על ידי מנהלים, לדרוס אותו על ידי כללי מדיניות, או לעקוף אותו על ידי ה-LLM. הוא הבסיס הארכיטקטוני שעליו נשענים כל בקרות האבטחה האחרות. :::
סיווג אפקטיבי
כאשר נתונים עומדים לצאת מהמערכת, Triggerfish מחשב את הסיווג האפקטיבי של היעד:
EFFECTIVE_CLASSIFICATION = min(channel_classification, recipient_classification)הן הערוץ והן הנמען חייבים להיות ברמה שווה או מעל רמת הסיווג של הנתונים. אם אחד מהם נמצא מתחת, הפלט נחסם.
| ערוץ | נמען | סיווג אפקטיבי |
|---|---|---|
| INTERNAL (Slack) | INTERNAL (עמית לעבודה) | INTERNAL |
| INTERNAL (Slack) | EXTERNAL (ספק) | PUBLIC |
| CONFIDENTIAL (Slack) | INTERNAL (עמית לעבודה) | INTERNAL |
| CONFIDENTIAL (Email) | EXTERNAL (איש קשר אישי) | PUBLIC |
ערוץ CONFIDENTIAL עם נמען EXTERNAL מביא לסיווג אפקטיבי של
PUBLIC. אם הסשן ניגש לנתונים מעל PUBLIC, הפלט נחסם. :::
דוגמה מהעולם האמיתי
להלן תרחיש קונקרטי המדגים את כלל אין-כתיבה-למטה בפעולה.
משתמש: "בדוק את צינור המכירות שלי ב-Salesforce"
סוכן: [ניגש ל-Salesforce דרך טוקן מואצל של המשתמש]
[נתוני Salesforce מסווגים כ-CONFIDENTIAL]
[זיהום הסשן עולה ל-CONFIDENTIAL]
"יש לך 3 עסקאות שנסגרות השבוע בסכום כולל של $2.1M..."
משתמש: "שלח הודעה לאשתי שאאחר הערב"
שכבת מדיניות: חסום
- זיהום סשן: CONFIDENTIAL
- נמען (אשה): EXTERNAL
- סיווג אפקטיבי: PUBLIC
- CONFIDENTIAL > PUBLIC --> הפרת כתיבה-למטה
סוכן: "אני לא יכול לשלוח לאנשי קשר חיצוניים בסשן זה
כי ניגשנו לנתונים סודיים.
-> אפס סשן ושלח הודעה
-> בטל"המשתמש ניגש לנתוני Salesforce (מסווגים כ-CONFIDENTIAL), מה שזיהם את כל הסשן. כאשר ניסו לשלוח הודעה לאיש קשר חיצוני (סיווג אפקטיבי PUBLIC), שכבת המדיניות חסמה את הפלט כי נתוני CONFIDENTIAL אינם יכולים לזרום ליעד PUBLIC.
ההודעה של הסוכן לאשה ("אאחר הערב") אינה מכילה בעצמה נתוני
Salesforce. אך הסשן זוהם על ידי הגישה הקודמת ל-Salesforce, וכל ההקשר של הסשן -- כולל כל מה שה-LLM עשוי לשמור מתגובת Salesforce -- עלול להשפיע על הפלט. כלל אין-כתיבה-למטה מונע קטגוריה שלמה זו של דליפת הקשר. :::
מה המשתמש רואה
כאשר כלל אין-כתיבה-למטה חוסם פעולה, המשתמש מקבל הודעה ברורה וניתנת לפעולה. Triggerfish מציע שני מצבי תגובה:
ברירת מחדל (ספציפי):
אני לא יכול לשלוח נתונים סודיים לערוץ ציבורי.
-> אפס סשן ושלח הודעה
-> בטלחינוכי (מופעל דרך הגדרות):
אני לא יכול לשלוח נתונים סודיים לערוץ ציבורי.
מדוע: סשן זה ניגש ל-Salesforce (CONFIDENTIAL).
WhatsApp אישי מסווג כ-PUBLIC.
נתונים יכולים לזרום רק לסיווג שווה או גבוה יותר.
אפשרויות:
- אפס סשן ושלח הודעה
- בקש מהמנהל לסווג מחדש את ערוץ ה-WhatsApp
- למד עוד: https://trigger.fish/security/no-write-downבשני המקרים, המשתמש מקבל אפשרויות ברורות. הוא לעולם לא נותר מבולבל לגבי מה שקרה או מה הוא יכול לעשות בנידון.
איפוס סשן
כאשר משתמש בוחר "אפס סשן ושלח הודעה," Triggerfish מבצע איפוס מלא:
- זיהום הסשן מתאפס חזרה ל-PUBLIC
- כל היסטוריית השיחה נמחקת (למניעת דליפת הקשר)
- הפעולה המבוקשת מוערכת מחדש מול הסשן הנקי
- אם הפעולה מותרת כעת (נתוני PUBLIC לערוץ PUBLIC), היא מתבצעת
אבטחה איפוס סשן מנקה הן את הזיהום והן את היסטוריית
השיחה. זה אינו אופציונלי. אם רק תווית הזיהום תנוקה בעוד הקשר השיחה נשאר, ה-LLM עדיין יכול להתייחס למידע מסווג מהודעות קודמות, מה שמסכל את מטרת האיפוס. :::
כיצד האכיפה עובדת
כלל אין-כתיבה-למטה נאכף בוו PRE_OUTPUT -- נקודת האכיפה האחרונה לפני שנתונים יוצאים מהמערכת. הוו פועל כקוד סינכרוני ודטרמיניסטי:
typescript
// לוגיקת אכיפה מפושטת
function preOutputHook(context: HookContext): HookResult {
const sessionTaint = getSessionTaint(context.sessionId);
const channelClassification = getChannelClassification(context.channelId);
const recipientClassification = getRecipientClassification(
context.recipientId,
);
const effectiveClassification = min(
channelClassification,
recipientClassification,
);
if (sessionTaint > effectiveClassification) {
return {
decision: "BLOCK",
reason: `Session taint (${sessionTaint}) exceeds effective ` +
`classification (${effectiveClassification})`,
};
}
return { decision: "ALLOW", reason: "Classification check passed" };
}קוד זה הוא:
- דטרמיניסטי -- אותם קלטים תמיד מייצרים את אותה החלטה
- סינכרוני -- הוו מסתיים לפני שנשלח כל פלט
- בלתי ניתן לזיוף -- ה-LLM אינו יכול להשפיע על החלטת הוו
- מתועד -- כל הפעלה נרשמת עם הקשר מלא
זיהום סשן והסלמה
זיהום הסשן עוקב אחר רמת הסיווג הגבוהה ביותר של נתונים שנגישו במהלך הסשן. הוא עוקב אחר שני כללים נוקשים:
- העלאה בלבד -- זיהום יכול לעלות, לעולם לא לרדת בתוך סשן
- אוטומטי -- הזיהום מתעדכן על ידי הוו
POST_TOOL_RESPONSEבכל פעם שנתונים נכנסים לסשן
| פעולה | זיהום לפני | זיהום אחרי |
|---|---|---|
| גישה ל-API מזג אוויר (PUBLIC) | PUBLIC | PUBLIC |
| גישה לוויקי פנימי (INTERNAL) | PUBLIC | INTERNAL |
| גישה ל-Salesforce (CONFIDENTIAL) | INTERNAL | CONFIDENTIAL |
| גישה ל-API מזג אוויר שוב (PUBLIC) | CONFIDENTIAL | CONFIDENTIAL (ללא שינוי) |
ברגע שסשן מגיע ל-CONFIDENTIAL, הוא נשאר CONFIDENTIAL עד שהמשתמש מאפס באופן מפורש. אין דעיכה אוטומטית, אין פקיעת זמן, ואין דרך ל-LLM להוריד את הזיהום.
מדוע כלל זה קבוע
כלל אין-כתיבה-למטה אינו ניתן להגדרה כי הפיכתו לניתן להגדרה תערער את מודל האבטחה כולו. אם מנהל יכול ליצור חריגה -- "אפשר לנתוני CONFIDENTIAL לזרום לערוצי PUBLIC עבור אינטגרציה מסוימת זו" -- חריגה זו הופכת למשטח תקיפה.
כל בקרת אבטחה אחרת ב-Triggerfish בנויה על ההנחה שכלל אין-כתיבה-למטה הוא מוחלט. זיהום סשן, שושלת נתונים, תקרות האצלת סוכנים ותיעוד ביקורת -- כולם תלויים בו. הפיכתו לניתן להגדרה תדרוש חשיבה מחדש על הארכיטקטורה כולה.
מנהלים יכולים להגדיר את רמות הסיווג המוקצות לערוצים,
נמענים ואינטגרציות. זוהי הדרך הנכונה לכוונן זרימת נתונים: אם ערוץ צריך לקבל נתונים ברמת סיווג גבוהה יותר, סווגו את הערוץ ברמה גבוהה יותר. הכלל עצמו נשאר קבוע; הקלטים לכלל ניתנים להגדרה. :::
עמודים קשורים
- עיצוב מונחה-אבטחה -- סקירה כללית של ארכיטקטורת האבטחה
- זהות ואימות -- כיצד נקבעת זהות הערוץ
- ביקורת ותאימות -- כיצד נרשמות פעולות חסומות
- ארכיטקטורה: זיהום וסשנים -- מכניקת זיהום הסשן בפירוט
