ארגז חול של יישום

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

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

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

הגנות

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

אנדרואיד מסתמכת על מספר הגנות כדי לאכוף את ארגז החול של היישומים. אכיפות אלה הוכנסו לאורך זמן וחיזקו משמעותית את ארגז החול המקורי המבוסס על בקרת גישה (UAC) המבוססת על UID. מהדורות קודמות של Android כללו את ההגנות הבאות:

  • ב- Android 5.0, SELinux סיפקה הפרדת חובת בקרת גישה (MAC) בין המערכת לאפליקציות. עם זאת, כל האפליקציות של צד שלישי רצו באותו הקשר של SELinux ולכן בידוד בין אפליקציות נאכף בעיקר על ידי UID DAC.
  • ב- Android 6.0 הורחבה ארגז החול של SELinux כדי לבודד אפליקציות מעבר לגבול הפיזי-משתמש. בנוסף, אנדרואיד גם להגדיר ברירות מחדל בטוחות יותר עבור נתון יישום: עבור אפליקציות עם targetSdkVersion >= 24 , הרשאות DAC ברירת מחדל על מחיצת הבית של אפליקציה השתנתה מ 751 ל 700. ספקה זו ברירת מחדל בטוחה יותר עבור נתוני אפליקציה פרטיים (אם כי אפליקציות עשוי לעקוף מחדל אלה) .
  • בשנת אנדרואיד 8.0, כל האפליקציות נקבעו לרוץ עם seccomp-bpf מסנן אשר הגבילו את syscalls כי האפליקציות הורשו לשימוש, ובכך לחזק את היישום / הקרנל הגבול.
  • בשנת אנדרואיד 9 כל היישומים שאינם מיוחסים עם targetSdkVersion >= 28 חייב לרוץ ארגזי חול SELinux בודדים, מתן MAC על בסיס לכל יישום. הגנה זו משפרת את הפרדת האפליקציות, מונעת דריסת ברירות מחדל בטיחותיות, (משמעותית ביותר) מונעת מאפליקציות להנגיש את עולם הנתונים שלהן.
  • באנדרואיד 10 יש לאפליקציות תצוגה גולמית מוגבלת של מערכת הקבצים, ללא גישה ישירה לנתיבים כמו /sdcard /DCIM. עם זאת, אפליקציות תמשכנה לקבל גישת גלם מלאה לנתיבי החבילה הספציפית שלהם, כפי שהוחזרה כול שיטות ישימות, כגון Context.getExternalFilesDir () .

הנחיות לשיתוף קבצים

הגדרת נתוני האפליקציות כנגישים בעולם היא שיטת אבטחה לקויה. הגישה ניתנת לכולם ואי אפשר להגביל את הגישה לנמענים המיועדים בלבד. נוהג זה הוביל לדליפות חשיפת מידע ולפגיעות סגן מבולבלות, והוא יעד מועדף על תוכנות זדוניות הממוקדות באפליקציות עם נתונים רגישים (כגון לקוחות דוא"ל). בשנת אנדרואיד 9 ומעלה, שיתוף קבצים דרך זה אסורה במפורש לאפליקציות שקיבלו targetSdkVersion>=28 .

במקום להפוך את נתוני האפליקציות לנגישים בעולם, השתמש בהנחיות הבאות בעת שיתוף קבצים:

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

פקדי רשות ריצה חפץ גישה לאוספים-מאופיינים חזק דרך MediaStore. לקבלת גישה לקבצים מוקלדים בחולשה כגון PDF ואת MediaStore.Downloads בכיתה, יישומים חייבים להשתמש דבר כמו ACTION_OPEN_DOCUMENT הכוונה.

כדי לאפשר התנהגות 10 Android, השתמש requestLegacyExternalStorage תכונת המניפסט, ופעל הרשאות לאפליקציות מומלצות .

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