מתוכנן להעביר את מנגנון בידוד המשכון ללינוקס

לאחרונה המחבר של ספריית תקן קוסמופוליטן C ופלטפורמת Redbean הכריזה באמצעות א הודיעה, יישום מנגנון הבידוד pledge() עבור לינוקס.

זה היה פותח במקור על ידי פרויקט OpenBSD y מאפשר לך לחסום באופן סלקטיבי ש יישומים ניגשים לשיחות מערכת שאינן בשימוש (נוצרת מעין רשימת שיחות מערכת לאפליקציה ושיחות אחרות אסורות). בניגוד למנגנוני בקרת הגישה של syscall הזמינים בלינוקס, כגון seccomp, מנגנון ה-pledge מתוכנן מהיסוד להיות ידידותי למשתמש ככל האפשר.

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

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

לדוגמה, המחלקות המוצעות הן stdio (קלט/פלט), rpath (קבצים לקריאה בלבד), wpath (כתיבת קבצים), cpath (יצירת קבצים), tmppath (עבודה עם קבצים זמניים), inet (רשת שקעים), יוניקס (שקעי יוניקס ), dns (רזולוציית DNS), getpw (גישת קריאה למסד הנתונים של המשתמש), ioctl (קריאת ioctl), proc (בקרת תהליכים), exec (תהליכי הפעלה) ו-id (בקרת הרשאות).

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

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

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

מפתחי יציאת ההבטחות של לינוקס קיבלו אות מ-FreeBSD ובמקום לבצע שינויים בקוד, הם הכינו כלי עזר נוסף מ-pledge.com המאפשר לך להחיל הגבלות מבלי לשנות את קוד היישום. לדוגמה, כדי להפעיל את כלי השירות curl עם גישה רק למחלקות הקריאה של מערכת stdio, rpath, inet ו-threadstdio, פשוט הפעל את "./pledge.com -p 'stdio rpath inet thread' curl http://example.com » .

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

היו כמה מפתחים בעבר שניסו זאת. אני לא מתכוון לנקוב בשמות, כי רוב הפרויקטים האלה מעולם לא הושלמו. כשזה מגיע ל-SECOMP, מדריכים מקוונים מסבירים רק כיצד לרשום שיחות למערכת, כך שרוב האנשים מאבדים עניין לפני שהם מבינים כיצד לסנן טיעונים. לפרויקטים שהתקדמו היו גם השגחות כמו מתן אפשרות לשנות סיביות של setuid/setgid/sticky. לכן, אין להשתמש באף אחת מהחלופות הנוכחיות. אני חושב שהמאמץ הזה מקרב אותנו הרבה יותר לקבל התחייבות() מאי פעם.

הטמעה אינה דורשת שינויים בקרנל: אילוצי עזר מתורגמים לכללי SECCOMP BPF ומעובדים באמצעות מנגנון בידוד שיחות המערכת המקורית של לינוקס. לדוגמה, קריאת belofte("stdio rpath", 0) תמיר למסנן BPF

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


השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.