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

כחלק ממודל האבטחה של אנדרואיד, אנדרואיד משתמשת ב-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. עם השינוי הזה, אנדרואיד עברה מאכיפה על קבוצה מוגבלת של תחומים חיוניים ( installd , netd , 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, עיין במשאבים הבאים.