שיטות מומלצות לאבטחת אפליקציות

בקטע הזה מפורטות המלצות לשמירה על אבטחת האפליקציות במכשירי Android.

בדיקת קוד המקור

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

  • כדי להבטיח כי כל הנושאים ייבדקו, מומלץ לפעול לפי הנחיות האבטחה המקיפות. שימוש בתקנים פנימיים או חיצוניים רלוונטיים כדי להבטיח בדיקות עקביות ומלאות.
  • מריצים בדיקת שגיאות בקוד של האפליקציה באמצעות Android SDK, למשל Android Studio linter, ומתקנים את הבעיות שזוהו.
  • ניתוח קוד מקורי באמצעות כלי אוטומטי שיכול לזהות בעיות בניהול הזיכרון, כמו זליגת נתונים במאגר (buffer overflow) ושגיאות של חריגה אחת (off-by-one).
  • מערכת ה-build של Android תומכת בחלק גדול מה-sanitizers של LLVM, כמו AddressSanitizer ו-UndefinedBehaviorSanitizer, שאפשר להשתמש בהם לניתוח בזמן ריצה של בעיות שקשורות לזיכרון. בשילוב עם בדיקות fuzzing, שנתמכות ב-Android באמצעות libFuzzer, אפשר לזהות באמצעות סניטריזרים מקרים קיצוניים חריגים שדורשים בדיקה נוספת.
  • מומחה אבטחה מוסמך צריך לבדוק קוד עם סיכון גבוה יותר, כמו קריפטוגרפיה, עיבוד תשלומים ועיבוד פרטים אישיים מזהים (PII).

בדיקה אוטומטית

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

  • כדאי להריץ את הגרסה האחרונה של CTS באופן קבוע לאורך תהליך הפיתוח כדי לזהות בעיות בשלב מוקדם ולקצר את זמן התיקון. ב-Android משתמשים ב-CTS כחלק מאינטגרציה רציפה בתהליך ה-build האוטומטי שלנו, שמתבצע כמה פעמים ביום.
  • אוטומציה של בדיקות האבטחה של ממשקים, כולל בדיקה עם קלט בפורמט שגוי (בדיקת fuzz). מערכת ה-build של Android תומכת ב-libFuzzer לכתיבה של בדיקות fuzz.

בדיקת נקודות חולשה

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

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

אפליקציות שעלולות להזיק

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

מידע נוסף על אפליקציות PHA ועל האופן שבו Google נלחמת בהן בחנות Play זמין במסמכי העזרה למפתחים של Google Play Protect.

התקנה והרשאות של אפליקציות

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

  • לא להעניק הרשאות או היתרים מיותרים לאפליקציות שמותקנות מראש. חשוב לבדוק היטב אפליקציות עם הרשאות מערכת, כי יכולות להיות להן הרשאות רגישות מאוד.
  • חשוב לוודא שכל ההרשאות המבוקשות רלוונטיות ונחוצות לפונקציונליות של האפליקציה הספציפית.
  • מוודאים שמוצג גילוי נאות למשתמשים בכל האפליקציות המותקנות מראש שמשתמשות בהרשאה INSTALL_PACKAGES.
  • מוודאים שהמפתח מחויב בחוזה לא להתקין אפליקציות בתור UID 0.
  • הערכת ההרשאות שצוינו במניפסט של כל האפליקציות שיותקנו דרך הרשת של המפתח.
  • מוודאים שהמפתח מחויב בחוזה לסרוק את כל כתובות ה-URL להורדה של אפליקציות לעדכון אוטומטי ואפליקציות התקנה באמצעות Google Safe Browsing API לפני הצגת האפליקציות במכשיר.

חתימה על אפליקציות

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

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

בידוד אפליקציות ותהליכים

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

בידוד תהליכים ברמה הבסיסית (root)

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

  • מוודאים שהמכשירים מריצים את הקוד המינימלי הנדרש כ-root. כשאפשר, כדאי להשתמש בתהליך רגיל של Android במקום בתהליך ברמה הבסיסית. אם תהליך צריך לפעול במכשיר בתור root, צריך לתעד את התהליך בבקשה להוספת תכונה ל-AOSP כדי שניתן יהיה לבדוק אותו באופן ציבורי.
  • כשהדבר אפשרי, צריך לבודד את קוד הבסיס מנתונים לא מהימנים ולגשת אליו באמצעות תקשורת בין תהליכים (IPC). לדוגמה, אפשר לצמצם את הפונקציונליות של root לשירות קטן שאפשר לגשת אליו דרך Binder, ולהציג את השירות עם הרשאת החתימה לאפליקציה עם הרשאות נמוכות או ללא הרשאות לטיפול בתנועה ברשת.
  • אסור לתהליכים ברמה הבסיסית להאזין ליציאה של רשת.
  • תהליכים ברמה הבסיסית (root) לא יכולים לכלול סביבת זמן ריצה למטרות כלליות, כמו Java VM.

בידוד אפליקציות מערכת

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

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

בידוד תהליכים

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

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