סעיף זה מכיל המלצות להבטחת האבטחה של אפליקציות במכשירי אנדרואיד.
סקירת קוד המקור
סקירת קוד המקור יכולה לזהות מגוון רחב של בעיות אבטחה, כולל אלו שזוהו במסמך זה. אנדרואיד מעודדת בחום סקירת קוד מקור ידנית וגם אוטומטית.
- עקוב אחר הנחיות אבטחה מקיפות בעת ביצוע ביקורות כדי להבטיח כיסוי. השתמש בתקנים פנימיים או חיצוניים רלוונטיים כדי להבטיח ביקורות עקביות ומלאות.
- הפעל linter, כגון Android Studio linter , על כל קוד האפליקציה באמצעות ה-Android SDK ותקן בעיות שזוהו.
- נתח קוד מקורי באמצעות כלי אוטומטי שיכול לזהות בעיות בניהול זיכרון, כגון הצפת מאגר ושגיאות חד-פעמיות.
- מערכת ה-build של אנדרואיד תומכת ברבים מחומרי החיטוי של LLVM, כגון AddressSanitizer ו- UndefinedBehaviorSanitizer , שניתן להשתמש בהם לניתוח זמן ריצה של בעיות הקשורות לזיכרון. בשילוב עם fuzzing, נתמך באנדרואיד דרך libFuzzer , חומרי חיטוי יכולים לחשוף מקרי קצה חריגים הדורשים חקירה נוספת.
- מעריך אבטחה בעל ידע צריך לבדוק קוד בסיכון גבוה יותר, כגון קריפטו, עיבוד תשלומים ועיבוד PII.
בדיקות אוטומטיות
בדיקות אוטומטיות יכולות לסייע באיתור מגוון רחב של בעיות אבטחה ויש לבצע אותן באופן קבוע.
- הפעל את הגרסה העדכנית ביותר של CTS באופן קבוע לאורך תהליך הפיתוח כדי לזהות בעיות מוקדם ולצמצם את הזמן עד לתיקון. אנדרואיד משתמשת ב-CTS כחלק מהשילוב המתמשך בתהליך הבנייה האוטומטי שלנו, שנבנה מספר פעמים ביום.
- אוטומציה של בדיקות אבטחה של ממשקים, כולל בדיקות עם תשומות שגויות (בדיקת fuzz). מערכת הבנייה של אנדרואיד תומכת ב-libFuzzer לכתיבת מבחני fuzz.
סריקת פגיעות
סריקת נקודות תורפה יכולה לעזור להבטיח שאפליקציות מותקנות מראש נקיות מפרצות אבטחה ידועות. זיהוי מתקדם יכול להפחית את הזמן והעלות הנדרשים עם טיפול בפגיעויות אלו ומניעת סיכונים למשתמשים ולמכשירים.
- סרוק את כל האפליקציות המותקנות מראש באמצעות כלי סריקת פגיעות אפליקציות מוכר בתעשייה וטפל בפרצות שזוהו.
יישומים שעלולים להזיק
חשוב לוודא שהאפליקציות המותקנות מראש במכשיר שלך אינן יישומים פוטנציאליים מזיקים (PHA). אתה אחראי להתנהגות של כל האפליקציות הכלולות במכשירים שלך. לפני השקת המכשיר, סרוק את כל האפליקציות הטעונות מראש לאיתור נקודות תורפה.
למידע נוסף על PHAs וכיצד Google נלחמת בהם בחנות Play, עיין בתיעוד המפתחים של Google Play Protect .
התקנת אפליקציה והרשאות
הרשאות מוגזמות עבור אפליקציות מותקנות מראש עלולות ליצור סיכון אבטחה. הגבל אפליקציות מותקנות מראש למינימום ההרשאות הנדרשות וודא שאין להן גישה להרשאות או הרשאות מיותרות. הרשאות האפליקציה מתוארות ב- AndroidManifest.xml .
- אל תעניק הרשאות או הרשאות מיותרות לאפליקציות שהותקנו מראש. סקור ביסודיות אפליקציות עם הרשאות מערכת מכיוון שעשויות להיות להן הרשאות רגישות מאוד.
- ודא שכל ההרשאות המבוקשות רלוונטיות והכרחיות לפונקציונליות של אותה אפליקציה ספציפית.
- ודא שיש גילוי נאות של המשתמש עבור כל האפליקציות המותקנות מראש המשתמשות בהרשאת
INSTALL_PACKAGES
. - ודא שהמפתח מחויב חוזית לא להתקין אפליקציות כלשהן כ-UID 0.
- הערכת ההרשאות המוצהרות במניפסט של כל האפליקציות שיותקנו דרך הרשת של המפתח.
- ודא שהמפתח מחויב חוזית לסרוק את כל כתובות האתרים להורדה של אפליקציות עדכון אוטומטי והתקנה עם ממשק API לגלישה בטוחה של Google לפני הגשת אפליקציות למכשיר.
חתימת אפליקציה
חתימות אפליקציה ממלאות תפקיד חשוב באבטחת המכשיר ומשמשות לבדיקות הרשאות ועדכוני תוכנה. בעת בחירת מפתח לשימוש לחתימה על אפליקציות, חשוב לשקול אם אפליקציה תהיה זמינה רק במכשיר בודד או משותפת במספר מכשירים.
- ודא שאפליקציות אינן חתומות עם מפתח ידוע בציבור, כגון מפתח מפתח AOSP.
- ודא שמפתחות המשמשים לחתימה על יישומים מנוהלים באופן התואם נהלים סטנדרטיים בתעשייה לטיפול במפתחות רגישים, כולל מודול אבטחת חומרה (HSM) המספק גישה מוגבלת וניתנת לביקורת.
- ודא שאפליקציות אינן חתומות עם מפתח הפלטפורמה. פעולה זו מעניקה לאפליקציה גישה להרשאות חתימת פלטפורמה, שהן חזקות מאוד ומיועדות לשימוש רק על ידי רכיבי מערכת ההפעלה. אפליקציות מערכת צריכות להשתמש בהרשאות מורשות.
- ודא שאפליקציות עם אותו שם חבילה אינן חתומות במפתחות שונים. זה קורה לעתים קרובות בעת יצירת אפליקציה עבור מכשירים שונים, במיוחד בעת שימוש במפתח הפלטפורמה. אם האפליקציה אינה תלויה במכשיר, השתמש באותו מפתח בכל המכשירים. אם האפליקציה היא ספציפית למכשיר, צור שמות חבילות ייחודיים לכל מכשיר ומפתח.
בידוד אפליקציות ותהליכים
מודל ארגז החול של אנדרואיד מספק אבטחה נוספת סביב אפליקציות ותהליכים בשימוש נכון.
בידוד תהליכי שורש
תהליכי שורש הם היעד השכיח ביותר של התקפות הסלמה של הרשאות; צמצום מספר תהליכי השורש מפחית את הסיכון להסלמה של הרשאות.
- ודא שהמכשירים מריצים את הקוד המינימלי הדרוש כ-root. היכן שניתן, השתמש בתהליך אנדרואיד רגיל ולא בתהליך שורש. אם תהליך חייב לפעול כ-root במכשיר, תיעד את התהליך בבקשת תכונה AOSP כדי שניתן יהיה לבדוק אותו באופן ציבורי.
- במידת האפשר, יש לבודד את קוד השורש מנתונים לא מהימנים ולגשת אליהם באמצעות תקשורת בין תהליכים (IPC). לדוגמה, צמצם את פונקציונליות השורש לשירות קטן הנגיש באמצעות Binder וחשוף את השירות עם הרשאת חתימה לאפליקציה עם הרשאות נמוכות או ללא הרשאות לטפל בתעבורת רשת.
- אסור להאזין לתהליכי שורש בשקע רשת.
- תהליכי שורש אינם יכולים לכלול זמן ריצה למטרות כלליות, כגון Java VM).
בידוד אפליקציות מערכת
באופן כללי, אפליקציות מותקנות מראש לא אמורות לפעול עם המזהה המשותף של המערכת הייחודית (UID). אם יש צורך לאפליקציה להשתמש ב-UID המשותף של המערכת או בשירות מיוחס אחר (למשל, טלפון), האפליקציה לא צריכה לייצא שירותים, מקלטי שידור או ספקי תוכן שניתן לגשת אליהם על ידי אפליקציות צד שלישי שהותקנו על ידי משתמשים .
- ודא שהמכשירים מריצים את הקוד המינימלי הדרוש כמערכת. היכן שניתן, השתמש בתהליך אנדרואיד עם UID משלו במקום שימוש חוזר ב-UID של המערכת.
- במידת האפשר, יש לבודד את קוד המערכת מנתונים לא מהימנים ולחשוף את IPC רק לתהליכים מהימנים אחרים.
- אסור להאזין לתהליכי מערכת בשקע רשת. זוהי דרישת CTS.
תהליכי בידוד
ה-Android Application Sandbox מספק לאפליקציות ציפייה לבידוד מתהליכים אחרים במערכת, לרבות תהליכי שורש ו-debuggers. אלא אם ניפוי באגים מופעל במיוחד על ידי האפליקציה והמשתמש, אף אפליקציה לא אמורה להפר את הציפייה הזו.
- ודא שתהליכי שורש אינם ניגשים לנתונים בתוך תיקיות נתוני אפליקציה בודדות, אלא אם משתמשים בשיטת ניפוי באגים מתועדת של Android.
- ודא שתהליכי שורש אינם ניגשים לזיכרון של אפליקציות, אלא אם משתמשים בשיטת ניפוי באגים מתועדת של Android.
- ודא שהמכשירים אינם כוללים אף אפליקציה שניגשת לנתונים או לזיכרון של אפליקציות או תהליכים אחרים.