בקטע הזה יש המלצות שיעזרו לכם לשמור על האבטחה של אפליקציות במכשירי Android.
בדיקת קוד מקור
בדיקה של קוד המקור יכולה לזהות מגוון רחב של בעיות אבטחה, כולל אלה שמפורטות במסמך הזה. מערכת Android ממליצה מאוד לבצע בדיקה ידנית ואוטומטית של קוד המקור.
- כדי להבטיח כיסוי מלא, מומלץ לפעול לפי הנחיות אבטחה מקיפות כשעורכים בדיקות. חשוב להשתמש בתקנים פנימיים או חיצוניים רלוונטיים כדי להבטיח ביקורות עקביות ומלאות.
- מריצים כלי לבדיקת קוד, כמו Android Studio linter, על כל קוד האפליקציה באמצעות Android SDK ומתקנים את כל הבעיות שזוהו.
- ניתוח קוד מקורי באמצעות כלי אוטומטי שיכול לזהות בעיות בניהול הזיכרון, כמו גלישת חוצץ ושגיאות של אחד יותר מדי או אחד פחות מדי.
- מערכת ה-Build של Android תומכת בהרבה מסננים של LLVM, כמו AddressSanitizer ו-UndefinedBehaviorSanitizer, שאפשר להשתמש בהם לניתוח בזמן ריצה של בעיות שקשורות לזיכרון. בנוסף, אפשר להשתמש ב-sanitizers כדי לחשוף מקרים חריגים שדורשים בדיקה נוספת. הם נתמכים ב-Android באמצעות libFuzzer.
- מומלץ שמעריך אבטחה מנוסה יבדוק קוד עם סיכון גבוה יותר, כמו קוד שקשור להצפנה, לעיבוד תשלומים ולעיבוד מידע אישי.
בדיקות אוטומטיות
בדיקות אוטומטיות יכולות לעזור לזהות מגוון רחב של בעיות אבטחה, ומומלץ לבצע אותן באופן קבוע.
- כדאי להריץ את הגרסה העדכנית של CTS באופן קבוע במהלך תהליך הפיתוח כדי לזהות בעיות בשלב מוקדם ולקצר את הזמן שנדרש לתיקון. Android משתמש ב-CTS כחלק מהאינטגרציה הרציפה בתהליך ה-build האוטומטי שלנו, שמתבצע מספר פעמים ביום.
- אוטומציה של בדיקות אבטחה של ממשקי משתמש, כולל בדיקות עם קלט לא תקין (fuzz testing). מערכת ה-build של Android תומכת ב-libFuzzer לצורך כתיבת בדיקות fuzz.
בדיקת נקודות חולשה
סריקת פגיעויות יכולה לעזור לוודא שאפליקציות שמותקנות מראש לא מכילות פגיעויות אבטחה ידועות. זיהוי מתקדם יכול לקצר את הזמן ולצמצם את העלויות שנדרשים כדי לטפל בנקודות החולשה האלה ולמנוע סיכון למשתמשים ולמכשירים.
- סורקים את כל האפליקציות שמותקנות מראש באמצעות כלי מוכר בתעשייה לסריקת פרצות אבטחה באפליקציות, ומטפלים בפרצות האבטחה שזוהו.
אפליקציות שעלולות להזיק (PHA)
חשוב לוודא שהאפליקציות שהותקנו מראש במכשיר לא מסווגות כאפליקציות שעלולות להזיק (PHA). אתם אחראים להתנהגות של כל האפליקציות שכלולות במכשירים שלכם. לפני השקת המכשיר, סורקים את כל האפליקציות שנטענו מראש כדי לאתר נקודות חולשה.
מידע נוסף על PHA ועל האופן שבו Google נלחמת בהן בחנות Play זמין במסמכי התיעוד למפתחים של Google Play Protect.
התקנה של אפליקציות והרשאות
הרשאות מוגזמות לאפליקציות שהותקנו מראש עלולות ליצור סיכון אבטחתי. הגבלת ההרשאות של אפליקציות שמותקנות מראש להרשאות המינימליות הנדרשות, ולוודא שלאפליקציות האלה אין גישה להרשאות או לפריבילגיות מיותרות. ההרשאות של האפליקציה מתוארות בקובץ AndroidManifest.xml.
- אל תעניקו הרשאות או זכויות מיותרות לאפליקציות שהותקנו מראש. חשוב לבדוק היטב אפליקציות עם הרשאות מערכת, כי הן יכולות לכלול הרשאות רגישות מאוד.
- חשוב לוודא שכל ההרשאות המבוקשות רלוונטיות ונחוצות לפונקציונליות של האפליקציה הספציפית.
- מוודאים שיש גילוי נאות למשתמשים לגבי כל האפליקציות שמותקנות מראש ומשתמשות בהרשאה
INSTALL_PACKAGES
. - חשוב לוודא שהמפתח מחויב חוזית לא להתקין אפליקציות עם UID 0.
- הערכת ההרשאות שמוצהרות במניפסט של כל האפליקציות שיוגדרו להתקנה דרך הרשת של המפתח.
- חשוב לוודא שהמפתח מחויב חוזית לסרוק את כל כתובות ה-URL להורדה של אפליקציות לעדכון אוטומטי ולאפליקציות להתקנה באמצעות Google Safe Browsing API לפני שהאפליקציות מוגשות למכשיר.
חתימה על אפליקציות
חתימות של אפליקציות ממלאות תפקיד חשוב באבטחת המכשיר ומשמשות לבדיקות הרשאות ולעדכוני תוכנה. כשבוחרים מפתח לשימוש בחתימת אפליקציות, חשוב לשקול אם האפליקציה זמינה רק במכשיר אחד או בכמה מכשירים.
- מוודאים שהאפליקציות לא חתומות באמצעות מפתח שידוע לציבור, כמו מפתח המפתחים של AOSP.
- מוודאים שהמפתחות שמשמשים לחתימה על אפליקציות מנוהלים באופן שתואם לשיטות המקובלות בתחום לטיפול במפתחות רגישים, כולל מודול אבטחה לחומרה (HSM) שמספק גישה מוגבלת שניתנת לביקורת.
- מוודאים שהאפליקציות לא חתומות באמצעות מפתח הפלטפורמה. הפעולה הזו מעניקה לאפליקציה גישה להרשאות חתימה של הפלטפורמה, שהן הרשאות חזקות מאוד ומיועדות לשימוש רק על ידי רכיבים של מערכת ההפעלה. אפליקציות מערכת צריכות להשתמש בהרשאות מיוחדות.
- מוודאים שאפליקציות עם אותו שם חבילה לא חתומות עם מפתחות שונים. המצב הזה קורה לעיתים קרובות כשיוצרים אפליקציה למכשירים שונים, במיוחד כשמשתמשים במפתח הפלטפורמה. אם האפליקציה לא תלויה במכשיר, משתמשים באותו מפתח בכל המכשירים. אם האפליקציה מיועדת למכשיר ספציפי, צריך ליצור שמות חבילות ייחודיים לכל מכשיר ומפתח.
בידוד אפליקציות ותהליכים
מודל ארגז החול (sandboxing) של Android מספק אבטחה נוספת לאפליקציות ולתהליכים כשמשתמשים בו בצורה נכונה.
בידוד של תהליכי שורש
תהליכי Root הם היעד הכי נפוץ של מתקפות להסלמת הרשאות. צמצום מספר תהליכי ה-Root מפחית את הסיכון להסלמת הרשאות.
- מוודאים שהמכשירים מריצים את הקוד המינימלי הנדרש כמשתמש root. כשאפשר, כדאי להשתמש בתהליך Android רגיל ולא בתהליך בסיסי. אם תהליך מסוים צריך לפעול כ-root במכשיר, צריך לתעד את התהליך בבקשת תכונה ב-AOSP כדי שניתן יהיה לבדוק אותו באופן ציבורי.
- במקרים שבהם הדבר אפשרי, צריך לבודד את קוד הבסיס מנתונים לא מהימנים ולגשת אליו באמצעות תקשורת בין תהליכים (IPC). לדוגמה, אפשר לצמצם את הפונקציונליות של root לשירות קטן שאפשר לגשת אליו דרך Binder, ולחשוף את השירות עם הרשאת חתימה לאפליקציה עם הרשאות נמוכות או ללא הרשאות, כדי לטפל בתנועת נתונים ברשת.
- תהליכי הבסיס לא יכולים להאזין לשקע רשת.
- תהליכי הבסיס לא יכולים לכלול זמן ריצה למטרה כללית, כמו Java VM.
בידוד אפליקציות מערכת
באופן כללי, אפליקציות שמותקנות מראש לא אמורות לפעול עם מזהה ייחודי (UID) משותף של המערכת. אם אפליקציה צריכה להשתמש ב-UID המשותף של המערכת או של שירות מורשה אחר (למשל, טלפון), האפליקציה לא צריכה לייצא שירותים, מקלטי שידור או ספקי תוכן שאפליקציות צד שלישי שהמשתמשים התקינו יכולות לגשת אליהם.
- מוודאים שהמכשירים מריצים את הקוד המינימלי הנדרש כמערכת. במקרים שבהם הדבר אפשרי, כדאי להשתמש בתהליך Android עם UID משלו, במקום לעשות שימוש חוזר ב-UID של המערכת.
- במקרים שבהם הדבר אפשרי, צריך לבודד את קוד המערכת מנתונים לא מהימנים, ולחשוף את ה-IPC רק לתהליכים מהימנים אחרים.
- תהליכי המערכת לא יכולים להאזין לשקע רשת. זו דרישה של CTS.
בידוד תהליכים
ארגז החול של אפליקציות Android מספק לאפליקציות בידוד צפוי מתהליכים אחרים במערכת, כולל תהליכי שורש ומאתרי באגים. אלא אם ניפוי הבאגים מופעל באופן ספציפי על ידי האפליקציה והמשתמש, אף אפליקציה לא אמורה להפר את הציפייה הזו.
- מוודאים שתהליכי הבסיס לא ניגשים לנתונים בתיקיות הנתונים של אפליקציות ספציפיות, אלא אם משתמשים בשיטת ניפוי באגים מתועדת ב-Android.
- מוודאים שתהליכי הבסיס לא ניגשים לזיכרון של האפליקציות, אלא אם משתמשים בשיטת ניפוי באגים מתועדת ב-Android.
- מוודאים שהמכשירים לא כוללים אפליקציות שיש להן גישה לנתונים או לזיכרון של אפליקציות או תהליכים אחרים.