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

מחוץ להישג יד
- תיקיית הבית שלכם ופרטי הגישה שבה. הסוכן מקבל תיקיית בית חדשה וריקה, כך ש-
~/.sshו-~/.awsלא קיימים שם. - סודות ב-shell שלכם. משתני הסביבה מצטמצמים לרשימת היתרים קטנה, כך שטוקנים שיוצאו נשארים בחוץ.
- הרשת. היא כבויה, ולכן שום דבר שהסוכן קורא לא יכול להישלח לשום מקום.
- הזיכרון המשותף של המארח, שרת התצוגה ולוח ההעתקה שלכם. הפלט של הסוכן עובר דרך מסנן שזורק sequences של טרמינל שנוגעים בלוח ההעתקה או מתשאלים את הטרמינל.
- הקלדה לתוך הטרמינל שלכם. ב-Linux נחסמת הקריאה
TIOCSTIשמזייפת הקשות, וב-macOS השליטה בטרמינל מוגבלת לטרמינל האחד שנוצר עבור ההרצה. - הכללים שלו עצמו. קובץ
.ai-jailבתוך ריפוזיטורי נחשב לא אמין: הוא יכול להדק את ה-sandbox, ולעולם לא לפתוח אותו.
איפה החומה נגמרת
הכלא והמערכת שלכם עומדים על אותו קרנל. באג בקרנל הזה, בדרייבר או ב-backend של ה-sandbox הוא דרך לעקוף את החומה, ו-ai-jail לא יכול לעשות שום דבר בעניין. מכונה וירטואלית מביאה קרנל משלה, ולכן היא גבול חזק יותר.

מה נשאר בסיכון
- פגיעויות בקרנל ובדרייברים. כל תהליך שרץ ב-sandbox מדבר עם אותו קרנל כמו שאר המחשב שלכם.
- באגים באמולטור הטרמינל שלכם, בעיקר עם
--terminal-passthrough, שמכבה את מסנן הפלט. - פגמים ב-backend של ה-sandbox עצמו: bubblewrap, Landlock ו-seccomp ב-Linux, או
sandbox-execב-macOS. - סודות בתוך הפרויקט. קובץ
.envבריפוזיטורי קריא, אלא אם מיסכתם אותו. כך ממסכים קבצים. - מיסוך מכסה רק נתיבים שקיימים כשה-sandbox עולה. קובץ סודות שנוצר מאוחר יותר, במהלך הסשן, לא מוסתר.
- ערוצי צד (side channels) וכמה סוגים של תקשורת בין-תהליכית.
- ב-macOS, הממשק
sandbox-execסומן על ידי Apple כ-deprecated ואינו שקול לבידוד שמתקבל ב-Linux. להבדלים ב-macOS.
מתגים שפותחים את החומה
כל מה שמופיע כאן כבוי עד שתדליקו אותו, וכל אחד מהם נותן לסוכן גישה אמיתית. איך מגדירים אותם מוסבר בעמוד ההגדרה.
| מתג | מה כל דבר שרץ ב-sandbox יכול לעשות אחר כך |
|---|---|
--network | לשלוח לכל מקום את כל מה שהוא יכול לקרוא. התעבורה לא מוגבלת ואין סינון לפי דומיין. |
--docker | לפעול כ-root על המחשב שלכם דרך ה-daemon של Docker. |
--x11 | להקליט הקשות מקלדת ולצלם חלונות X11 אחרים. |
--systemd-user | לבקש מה-user manager של systemd להריץ שירותים על המארח. |
--inherit-env | לקרוא את כל סביבת ה-shell שלכם, כולל הסודות. |
--agent-state | להשתמש בהתחברות השמורה של הסוכן, למשל ~/.claude של Claude. |
--audio | להקליט ולנגן אודיו כל עוד המתג דלוק. |
--no-private-home | לראות את תיקיית הבית האמיתית שלכם. זו חריגה רחבה, ועדיף למפות רק את הנתיב האחד שאתם צריכים. |
כשיש ספק, הוא מסרב לעלות
כלי sandbox שעולה בשקט במצב חלש ממה שביקשתם גרוע מכלי שעוצר עם שגיאה. במקרים האלה ai-jail עוצר.
- קובץ הגדרות שקיים, אבל לא תקין או לא קריא.
- קובץ
.ai-jailשל פרויקט שהוא symlink. כשהקובץ הגלובלי~/.ai-jailהוא symlink, הולכים אחריו רק אם הוא מוביל לקובץ רגיל בבעלותכם, שאף אחד אחר לא יכול לכתוב אליו ושנמצא מחוץ לפרויקט. - הדגל
--lockdownכש-Landlock, כללי מערכת הקבצים של הקרנל עצמו, חסר, חלקי או לא מצליח לחול. גם הצירוף--lockdown --no-landlockנדחה. - הדגל
--allow-tcp-port. הממשק הזה לא מסוגל להגביל UDP, ולכן הדגל מתקבל לצורכי תאימות וההפעלה נכשלת. - ערך של
BWRAP_BINשמצביע על קובץ בינארי של bubblewrap שמישהו שאינו root יכול היה להחליף. הערך לא נלקח בחשבון ומודפסת אזהרה, ואם אין bubblewrap אמין ההפעלה נכשלת.
איך הפרויקט נבדק
מתחזק אחד מנהל את הפרויקט בגלוי. בהמשך מפורט מה נבדק ומה לא.
- 19
- בדיקות אינטגרציה של בריחה מה-sandbox, שמנסות לכתוב אל
/usr, לקרוא את~/.ssh, לקרוא ל-ptraceול-bpf, ומצפות להיכשל - 720
- בדיקות יחידה בעץ המקור בגרסה 1.22.0
- 0
- בקשות רשת בזמן ההפעלה. בדיקת העדכונים היא opt-in, דרך
--update-check
איך נוצרת גרסה
- תגיות הגרסה חתומות, וה-CI מאמת כל אחת מהן מול טביעת אצבע של מפתח שמקובעת בריפוזיטורי.
- כל GitHub Action מקובע ל-SHA של commit, וה-actions מוגבלים לרשימת היתרים.
- ה-builds משתמשים ב-toolchain מקובע של Rust ובתלויות עם
--locked. - הקבצים הבינאריים של macOS חתומים ועברו notarization של Apple.
- לכל ארכיון מצורף checksum מסוג SHA-256, ושלב הפרסום בודק אותם שוב.
מה עדיין חסר, לפי מסמך הגרסאות
- סודות החתימה והפרסום עדיין שמורים ברמת הריפוזיטורי, וצריכים לעבור לסביבות ה-release.
- עדיין אין ruleset שמחייב חתימה על כל תגית
v*. - האפשרות immutable releases לא מופעלת.
- הפרסום ל-crates.io עדיין נעשה עם טוקן. מעבר ל-trusted publishing מתוכנן.
- עם מתחזק יחיד, אין בודק שני לשינויים או לגרסאות.
דיווח על פגיעות
אל תפתחו issue ציבורי. השתמשו בדיווח הפרטי על פגיעויות של GitHub, צרפו את שלבי השחזור ואת הגרסאות המושפעות, והשאירו זמן לתיאום התיקון.
שאלות נפוצות
הסוכן יכול לפרוץ החוצה?
בטוח להריץ כשהרשת דלוקה?
הוא עבר ביקורת?
שימו את הסוכן מאחורי סורגים
כל ai-jail הוא קובץ בינארי אחד, בלי daemon ובלי root. מוסיפים מילה אחת לפני הפקודה שאתם מריצים ממילא.
brew tap akitaonrails/tap && brew install ai-jailai-jail claude