לינוקס משופרת באבטחה באנדרואיד

כחלק ממודל האבטחה של אנדרואיד, אנדרואיד משתמשת ב-Security Enhanced Linux (SELinux) כדי לאכוף בקרת גישה חובה (MAC) על כל התהליכים, אפילו תהליכים הפועלים עם הרשאות שורש/משתמש-על (יכולות לינוקס). חברות וארגונים רבים תרמו להטמעת SELinux של אנדרואיד. עם SELinux, אנדרואיד יכולה להגן ולהגביל טוב יותר שירותי מערכת, לשלוט בגישה לנתוני יישומים וליומני מערכת, להפחית את ההשפעות של תוכנות זדוניות ולהגן על משתמשים מפני פגמים פוטנציאליים בקוד במכשירים ניידים.

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

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

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

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

רקע כללי

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

באנדרואיד 5.0 ואילך, SELinux נאכף במלואו, תוך בנייה על המהדורה המתירנית של אנדרואיד 4.3 ועל האכיפה החלקית של אנדרואיד 4.4. עם השינוי הזה, אנדרואיד עברה מאכיפה על קבוצה מוגבלת של תחומים חיוניים ( netd installd vold ו- zygote ) לכל דבר (יותר מ-60 דומיינים). באופן ספציפי:

  • הכל במצב אכיפה באנדרואיד 5.x ומעלה.
  • אין לרוץ תהליכים מלבד init בתחום init .
  • כל הכחשה כללית (עבור block_device , socket_device , default_service ) מציינת שהמכשיר זקוק לדומיין מיוחד.

אנדרואיד 6.0 הקשיחה את המערכת על ידי הפחתת המתירנות של המדיניות שלנו כדי לכלול בידוד טוב יותר בין משתמשים, סינון IOCTL, איום מופחת של שירותים חשופים, הידוק נוסף של דומיינים של SELinux וגישה מוגבלת ביותר ל- /proc .

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

אנדרואיד 8.0 עדכנה את SELinux לעבודה עם Treble , המפרידה בין קוד הספק ברמה נמוכה יותר למסגרת מערכת אנדרואיד. מהדורה זו עדכנה את מדיניות SELinux כדי לאפשר ליצרני מכשירים וספקי SOC לעדכן את חלקי המדיניות שלהם, לבנות את התמונות שלהם ( vendor.img , boot.img וכו'), ואז לעדכן את התמונות הללו ללא תלות בפלטפורמה או להיפך.

אמנם אפשר להפעיל גרסת פלטפורמה (מסגרת) גבוהה יותר/חדשה יותר במכשיר, במקרה ההפוך אינו נתמך; לתמונות הספק ( vendor.img/odm.img ) לא תהיה גרסה חדשה יותר מהפלטפורמה ( system.img ). לכן, גרסת פלטפורמה חדשה יותר עשויה להציג בעיות תאימות של SELinux מכיוון שמדיניות SELinux של הפלטפורמה היא בגרסה חדשה יותר מאשר חלקי המדיניות של הספק SELinux. דגם אנדרואיד 8.0 מספק שיטה לשמור על תאימות כדי למנוע OTAs בו זמנית מיותרים.

משאבים נוספים

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