ארגז חול של אפליקציה

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

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

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

הגנות

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

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

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

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

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

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

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

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

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

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