שיפורים באבטחה

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

Android 14

每个 Android 版本中都包含数十种安全增强功能,以保护用户。以下是 Android 14 中提供的一些主要安全增强功能:

  • Android 10 中引入的硬件辅助 AddressSanitizer (HWASan) 是一款类似于 AddressSanitizer 的内存错误检测工具。Android 14 对 HWASan 进行了重大改进。如需了解它如何帮助防止 bug 进入 Android 版本,请访问 HWAddressSanitizer
  • 在 Android 14 中,从与第三方共享位置数据的应用开始,系统运行时权限对话框现在包含一个可点击的部分,用于突出显示应用的数据分享做法,包括诸如以下信息:应用为什么可能会决定与第三方分享数据。
  • Android 12 引入了在调制解调器级别停用 2G 支持的选项,以保护用户免受 2G 的过时安全模型固有的安全风险的影响。认识到停用 2G 对企业客户的重要性后,Android 14 在 Android Enterprise 中启用了此安全功能,以便 IT 管理员能够限制受管设备降级到 2G 连接
  • 开始支持拒绝未加密的移动网络连接,确保电路交换语音和短信流量始终会加密,并可防范被动无线拦截。详细了解 Android 的移动网络连接强化计划
  • 新增了对多个 IMEI 的支持
  • 从 Android 14 开始,AES-HCTR2 是采用加速加密指令的设备的首选文件名加密模式。
  • 移动网络连接
  • 在 Android 安全中心添加了相关文档
  • 如果您的应用以 Android 14 为目标平台并使用动态代码加载 (DCL) 功能,则必须将所有动态加载的文件标记为只读。否则,系统会抛出异常。我们建议应用尽可能避免动态加载代码,因为这样做会大大增加应用因代码注入或代码篡改而遭到入侵的风险。

请查看完整的 AOSP 版本说明以及 Android 开发者功能和变更列表

Android 13

כל גרסה של Android כוללת עשרות שיפורים באבטחה להגנה על המשתמשים. ריכזנו כאן כמה מהשיפורים העיקריים באבטחה שזמינים ב-Android 13:

  • ב-Android 13 נוספה תמיכה בהצגת כמה מסמכים בו-זמנית. ממשק ה-Presentation Session החדש מאפשר לאפליקציה להציג כמה מסמכים, דבר שלא ניתן לעשות באמצעות ה-API הקיים. למידע נוסף, ראו פרטי כניסה לזיהוי
  • ב-Android 13, כוונות שמקורן באפליקציות חיצוניות מועברות לרכיב המיוצא רק אם הן תואמות לאלמנטים של מסנני הכוונות שהוצהרו.
  • Open Mobile API (OMAPI) הוא ממשק API סטנדרטי המשמש לתקשורת עם Secure Element של המכשיר. לפני Android 13, רק לאפליקציות ולמודולים של מסגרת העבודה הייתה גישה לממשק הזה. המרתו לממשק יציב של ספק מאפשרת למודול ה-HAL לתקשר עם הרכיבים המאובטחים גם דרך שירות OMAPI. מידע נוסף זמין במאמר OMAPI Vendor Stable Interface.
  • החל מגרסה Android 13-QPR, מזהי UID משותפים הוצאו משימוש. משתמשים ב-Android בגרסה 13 ואילך צריכים להוסיף את השורה `android:sharedUserMaxSdkVersion="32"` למניפסט שלהם. הרשומה הזו מונעת ממשתמשים חדשים לקבל מזהה משתמש ייחודי (UID) משותף. למידע נוסף על מזהי UID, ראו חתימת אפליקציות.
  • ב-Android 13 נוספה תמיכה בפרימיטיבים קריפטוגרפיים סימטריים של Keystore, כמו AES‏ (Advanced Encryption Standard),‏ HMAC (קוד אימות הודעות עם גיבוב מפתח) ואלגוריתמים קריפטוגרפיים אסימטריים (כולל Elliptic Curve‏, RSA2048‏, RSA4096 ו-Curve 25519)
  • ב-Android 13 ואילך יש תמיכה בהרשאת זמן ריצה לשליחת התראות מאפליקציה שלא פטורות מהצורך לבקש הרשאה. כך המשתמשים יכולים לקבוע אילו התראות לגבי הרשאות יוצגו להם.
  • הוספנו בקשה לכל שימוש לאפליקציות שמבקשות גישה לכל יומני המכשיר, כדי לתת למשתמשים אפשרות לאשר או לדחות את הגישה.
  • השקנו את Android Virtualization Framework‏ (AVF), שמאגדת hypervisors שונים במסגרת אחת עם ממשקי API סטנדרטיים. הוא מספק סביבות ביצוע מאובטחות ופרטיות להרצת עומסי עבודה שמבודדים על ידי hypervisor.
  • הושק APK Signature Scheme v3.1 כל רוטציות המפתחות החדשות שמשתמשות ב-apksigner משתמשות בסכמת החתימה v3.1 כברירת מחדל כדי לטרגט רוטציה ל-Android 13 ואילך.

כדאי לעיין בנתוני הגרסה המלאים של AOSP וברשימת התכונות והשינויים למפתחי Android.

12 ‏Android

כל גרסה של Android כוללת עשרות שיפורים באבטחה להגנה על המשתמשים. ריכזנו כאן כמה מהשיפורים העיקריים באבטחה שזמינים ב-Android 12:

  • ב-Android 12 נוסף BiometricManager.Strings API, שמספק מחרוזות מותאמות לאפליקציות שמשתמשות ב-BiometricPrompt לצורך אימות. המחרוזות האלה נועדו להיות מותאמות למכשיר, ולספק מידע ספציפי יותר על סוגי האימות שבהם עשויה להיות שימוש. ב-Android 12 יש גם תמיכה בחיישני טביעות אצבע מתחת למסך
  • נוספה תמיכה בחיישנים של טביעות אצבע מתחת למסך
  • מבוא ל-Fingerprint Android Interface Definition Language‏ (AIDL)
  • תמיכה ב-Face API חדש
  • הצגת Rust כשפה לפיתוח פלטפורמות
  • נוספה אפשרות למשתמשים להעניק גישה רק למיקום המשוער שלהם
  • הוספנו אינדיקטורים לפרטיות בשורת הסטטוס כשאפליקציה משתמשת במצלמה או במיקרופון
  • Private Compute Core‏ (PCC) של Android
  • נוספה אפשרות להשבית את התמיכה ב-2G

Android 11

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

Android 10

כל גרסה של Android כוללת עשרות שיפורים באבטחה להגנה על המשתמשים. Android 10 כולל כמה שיפורים באבטחה ובפרטיות. בנתוני הגרסה של Android 10 מפורטת רשימה מלאה של השינויים ב-Android 10.

אבטחה

BoundsSanitizer

ב-Android 10 מופעלת BoundsSanitizer (BoundSan) ב-Bluetooth ובקודקים. BoundSan משתמש ב-bounds sanitizer של UBSan. אפשר להפעיל את הפעולה הזו ברמת המודול. הוא עוזר לשמור על האבטחה של רכיבים קריטיים ב-Android, ואין להשבית אותו. BoundSan מופעל בקודקים הבאים:

  • libFLAC
  • libavcdec
  • libavcenc
  • libhevcdec
  • libmpeg2
  • libopus
  • libvpx
  • libspeexresampler
  • libvorbisidec
  • libaac
  • libxaac

זיכרון להפעלה בלבד

כברירת מחדל, קטעי קוד הפעלה של קבצים בינאריים של מערכת AArch64 מסומנים כ'הפעלה בלבד' (לא ניתנים לקריאה) כהגנה מפני התקפות של שימוש חוזר בקוד בזמן אמת. קוד שמשלב נתונים וקוד יחד וקוד שבודק בכוונה את החלקים האלה (בלי למפות מחדש קודם את פלחי הזיכרון כקריא) לא פועל יותר. אפליקציות עם SDK ל-Android 10 (רמת API 29 ואילך) מושפעות מהשינוי אם האפליקציה מנסה לקרוא בזיכרון קטעי קוד של ספריות מערכת שפועלות בזיכרון להפעלה בלבד (XOM) בלי לסמן קודם את הקטע כקריא.

גישה מורחבת

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

אימות פנים

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

ניטרול של גלישה במספר שלם

ב-Android 10 מופעל ניקוי של Overflow של מספר שלם (IntSan) בקודקים של תוכנה. מוודאים שביצועי ההפעלה סבירים בכל הקודקים שלא נתמכים בחומרה של המכשיר. IntSan מופעל בקודקים הבאים:

  • libFLAC
  • libavcdec
  • libavcenc
  • libhevcdec
  • libmpeg2
  • libopus
  • libvpx
  • libspeexresampler
  • libvorbisidec

רכיבים מודולריים של מערכת

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

OEMCrypto

ב-Android 10 נעשה שימוש ב-OEMCrypto API בגרסה 15.

Scudo

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

ShadowCallStack

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

WPA3 ורשת Wi-Fi עם אבטחת OWE

ב-Android 10 נוספה תמיכה בתקני האבטחה Wi-Fi Protected Access 3‏ (WPA3) ו-Wi-Fi Enhanced Open, כדי לספק פרטיות משופרת ועמידות טובה יותר מפני התקפות ידועות.

פרטיות

גישה לאפליקציה כשמגדירים טירגוט ל-Android 9 ומטה

אם האפליקציה פועלת ב-Android 10 ואילך אבל מטרגטת ל-Android 9 (רמת API‏ 28) או לגרסאות ישנות יותר, הפלטפורמה מחילה את ההתנהגות הבאה:

  • אם האפליקציה מצהירה על רכיב <uses-permission> עבור ACCESS_FINE_LOCATION או ACCESS_COARSE_LOCATION, המערכת מוסיפה באופן אוטומטי רכיב <uses-permission> עבור ACCESS_BACKGROUND_LOCATION במהלך ההתקנה.
  • אם האפליקציה מבקשת את ACCESS_FINE_LOCATION או את ACCESS_COARSE_LOCATION, המערכת מוסיפה את ACCESS_BACKGROUND_LOCATION לבקשה באופן אוטומטי.

הגבלות על פעילות ברקע

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

מטא-נתונים של מצלמה

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

נתונים מהלוח

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

מיקום המכשיר

כדי לתמוך בשליטה הנוספת של המשתמשים על הגישה של האפליקציה למידע על המיקום, ב-Android 10 נוספה ההרשאה ACCESS_BACKGROUND_LOCATION.
בניגוד להרשאות ACCESS_FINE_LOCATION ו-ACCESS_COARSE_LOCATION, ההרשאה ACCESS_BACKGROUND_LOCATION משפיעה רק על הגישה של האפליקציה למיקום כשהיא פועלת ברקע. אפליקציה נחשבת כזו שגולשת למיקום ברקע, אלא אם מתקיים אחד מהתנאים הבאים:

  • פעילות ששייכת לאפליקציה גלויה.
  • האפליקציה מפעילה שירות שפועל בחזית, שהוצהר עליו סוג שירות שפועל בחזית של location.
    כדי להצהיר על סוג השירות שפועל בחזית של שירות באפליקציה, מגדירים את targetSdkVersion או את compileSdkVersion של האפליקציה לערך 29 ואילך. מידע נוסף על האופן שבו שירותים בחזית יכולים להמשיך פעולות שהמשתמש יזם שדורשות גישה למיקום.

אחסון חיצוני

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

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

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

רנדומיזציה של כתובת MAC

במכשירים עם Android מגרסה 10 ואילך, המערכת משדרת כתובות MAC אקראיות כברירת מחדל.
אם האפליקציה שלכם מטפלת בתרחיש לדוגמה לארגון, הפלטפורמה מספקת ממשקי API לכמה פעולות שקשורות לכתובות MAC:

  • קבלת כתובת MAC אקראית: אפליקציות של בעלי המכשיר ואפליקציות של בעלי הפרופיל יכולות לאחזר את כתובת ה-MAC האקראית שהוקצתה לרשת ספציפית באמצעות קריאה ל-getRandomizedMacAddress().
  • קבלת כתובת MAC בפועל של היצרן: אפליקציות של בעלי המכשיר יכולות לאחזר את כתובת ה-MAC בפועל של החומרה של המכשיר באמצעות קריאה ל-getWifiMacAddress(). השיטה הזו שימושית למעקב אחרי ציוד של מכשירים.

מזהי מכשירים שלא ניתן לאפס

החל מ-Android 10, אפליקציות צריכות את ההרשאה READ_PRIVILEGED_PHONE_STATE כדי לגשת למזהים של המכשיר שלא ניתן לאפס, כולל מספר ה-IMEI והמספר הסידורי.

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

  • אם האפליקציה מטרגטת ל-Android 10 ואילך, מתרחש אירוע SecurityException.
  • אם האפליקציה שלכם מטרגטת ל-Android 9 (רמת API 28) או לגרסאות ישנות יותר, השיטה מחזירה את הערך null או נתוני placeholder אם לאפליקציה יש את ההרשאה READ_PHONE_STATE. אחרת, מתרחש אירוע SecurityException.

זיהוי פעילות גופנית

ב-Android 10 נוספה ההרשאה android.permission.ACTIVITY_RECOGNITION לממשק זמן הריצה (runtime) של אפליקציות שצריכות לזהות את מספר הצעדים של המשתמש או לסווג את הפעילות הפיזית שלו, כמו הליכה, רכיבה על אופניים או תנועה ברכב. המטרה של התכונה הזו היא לתת למשתמשים אפשרות לראות איך נעשה שימוש בנתוני חיישנים במכשיר בהגדרות.
ספריות מסוימות ב-Google Play Services, כמו Activity Recognition API ו-Google Fit API, לא מספקות תוצאות אלא אם המשתמש העניק לאפליקציה את ההרשאה הזו.
מונה הצעדים וגלאי הצעדים הם היחידים מבין חיישנים מובנים במכשיר שצריך להצהיר עליהם את ההרשאה הזו.
אם האפליקציה שלכם מטרגטת ל-Android 9 (רמת API 28) או לגרסאות ישנות יותר, המערכת מעניקה לאפליקציה את ההרשאה android.permission.ACTIVITY_RECOGNITION באופן אוטומטי, לפי הצורך, אם האפליקציה עומדת בכל אחד מהתנאים הבאים:

  • קובץ המניפסט כולל את ההרשאה com.google.android.gms.permission.ACTIVITY_RECOGNITION.
  • קובץ המניפסט לא כולל את ההרשאה android.permission.ACTIVITY_RECOGNITION.

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

הגבלות על מערכת הקבצים /proc/net

במכשירים עם Android מגרסה 10 ואילך, לאפליקציות אין גישה למאפיין /proc/net, שכולל מידע על מצב הרשת של המכשיר. אפליקציות שזקוקות לגישה למידע הזה, כמו VPN, צריכות להשתמש בכיתה NetworkStatsManager או ConnectivityManager.

קבוצות ההרשאות הוסרו מממשק המשתמש

החל מגרסה 10 של Android, אפליקציות לא יכולות לחפש את אופן הקיבוץ של ההרשאות בממשק המשתמש.

הסרת ההתאמה של אנשי הקשר

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

גישה מוגבלת לתוכן המסך

כדי להגן על תוכן המסך של המשתמשים, ב-Android 10 מונעת גישה שקטה לתוכן המסך של המכשיר על ידי שינוי ההיקף של ההרשאות READ_FRAME_BUFFER,‏ CAPTURE_VIDEO_OUTPUT ו-CAPTURE_SECURE_VIDEO_OUTPUT. החל מגרסה 10 של Android, ההרשאות האלה הן signature-access בלבד.
אפליקציות שצריכות לגשת לתוכן המסך של המכשיר צריכות להשתמש ב-MediaProjection API, שמציגה בקשה למשתמש להביע הסכמה.

המספר הסידורי של מכשיר ה-USB

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

Wi-Fi

אפליקציות שמטרגטות ל-Android מגרסה 10 ואילך לא יכולות להפעיל או להשבית את ה-Wi-Fi. השיטה WifiManager.setWifiEnabled() תמיד מחזירה את הערך false.
אם אתם צריכים לבקש מהמשתמשים להפעיל ולהשבית את ה-Wi-Fi, השתמשו בלוח הגדרות.

הגבלות על גישה ישירה לרשתות Wi-Fi מוגדרות

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

Android 9

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

Android 8

每个 Android 版本中都包含数十种用于保护用户的安全增强功能。以下是 Android 8.0 中提供的一些主要安全增强功能:

  • 加密:在工作资料中增加了对撤销密钥 (evict key) 的支持。
  • 验证启动:增加了 Android 启动时验证 (AVB)。支持回滚保护(用于引导加载程序)的启动时验证代码库已添加到 AOSP 中。建议提供引导加载程序支持,以便为 HLOS 提供回滚保护。建议将引导加载程序设为只能由用户通过实际操作设备来解锁。
  • 锁定屏幕:增加了对使用防篡改硬件验证锁定屏幕凭据的支持。
  • KeyStore:搭载 Android 8.0 及更高版本的所有设备都需要进行密钥认证。增加了 ID 认证支持,以改进零触摸注册计划。
  • 沙盒:使用 Treble 计划的框架和设备特定组件之间的标准接口更紧密地对许多组件进行沙盒化处理。将 seccomp 过滤应用到了所有不信任的应用,以减少内核的攻击面。WebView 现在运行在一个独立的进程中,对系统其余部分的访问非常有限。
  • 内核加固:实现了经过安全强化的 usercopy、PAN 模拟、初始化后变为只读以及 KASLR。
  • 用户空间安全强化:为媒体堆栈实现了 CFI。 应用叠加层不能再遮盖系统关键窗口,并且用户可以关闭这些叠加层。
  • 操作系统流式更新:在磁盘空间不足的设备上启用了更新
  • 安装未知应用:用户必须授予权限,系统才能从不是第一方应用商店的来源安装应用。
  • 隐私权:对于设备上的每个应用和使用设备的每个用户,Android ID (SSAID) 都采用不同的值。对于网络浏览器应用,Widevine 客户端 ID 会针对每个应用软件包名称和网络来源返回不同的值。 net.hostname 现在为空,并且 DHCP 客户端不再发送主机名。android.os.Build.SERIAL 已被替换为 Build.SERIAL API(受到用户控制权限的保护)。改进了某些芯片组中的 MAC 地址随机分配功能。

Android 7

每个 Android 版本中都包含数十项用于保护用户的安全增强功能。以下是 Android 7.0 中提供的一些主要安全增强功能:

  • 文件级加密:在文件级进行加密,而不是将整个存储区域作为单个单元进行加密。这种加密方式可以更好地隔离和保护设备上的不同用户和资料(例如个人资料和工作资料)。
  • 直接启动:通过文件级加密实现,允许特定应用(例如,闹钟和无障碍功能)在设备已开机但未解锁的情况下运行。
  • 验证启动:现在,验证启动会被严格强制执行,从而使遭到入侵的设备无法启动;验证启动支持纠错功能,有助于更可靠地防范非恶意数据损坏。
  • SELinux。更新后的 SELinux 配置和更高的 Seccomp 覆盖率有助于进一步锁定应用沙盒并减小受攻击面。
  • 库加载顺序随机化和改进的 ASLR。 增大随机性降低了某些代码重用攻击的有效性。
  • 内核加固:通过将内核内存的各个分区标记为只读,限制内核对用户空间地址的访问,并进一步减小现有的受攻击面,为更高版本的内核添加额外的内存保护。
  • APK 签名方案 v2:引入了一种全文件签名方案,该方案有助于加快验证速度并增强完整性保证。
  • 可信 CA 存储区。为了使应用更容易控制对其安全网络流量的访问,对于 API 级别为 24 及以上的应用,由用户安装的证书颁发机构以及通过 Device Admin API 安装的证书颁发机构在默认情况下不再受信任。此外,所有新的 Android 设备必须搭载相同的可信 CA 存储区。
  • 网络安全配置。通过声明式配置文件来配置网络安全设置和传输层安全协议 (TLS)。

Android 6

每个 Android 版本中都包含数十种用于保护用户的安全增强功能。以下是 Android 6.0 中提供的一些主要安全增强功能:

  • 运行时权限:应用在运行时请求权限,而不是在安装时被授予权限。用户可以为 M 及更低版本的 Android 应用启用和停用权限。
  • 验证启动:在执行系统软件之前,先对其进行一系列加密检查,以确保手机从引导加载程序到操作系统均处于正常状况。
  • 硬件隔离安全措施:新的硬件抽象层 (HAL),Fingerprint API、锁定屏幕、设备加密功能和客户端证书可以利用它来保护密钥免遭内核入侵和/或现场攻击。
  • 指纹:现在,只需触摸一下,即可解锁设备。开发者还可以借助新的 API 来使用指纹锁定和解锁加密密钥。
  • 加装 SD 卡:可将移动媒体设备加装到设备上,以便扩展可用存储空间来存放本地应用数据、照片、视频等内容,但仍受块级加密保护。
  • 明文流量:开发者可以使用新的 StrictMode 来确保其应用不会使用明文。
  • 系统加固:通过由 SELinux 强制执行的政策对系统进行加固。这可以实现更好的用户隔离和 IOCTL 过滤、降低可从设备/系统之外访问的服务面临的威胁、进一步强化 SELinux 域,以及高度限制对 /proc 的访问。
  • USB 访问控制:必须由用户确认是否允许通过 USB 访问手机上的文件、存储空间或其他功能。现在,默认设置是“仅充电”,如果要访问存储空间,必须获得用户的明确许可。

Android 5

5.0

每个 Android 版本中都包含数十项用于保护用户的安全增强功能。以下是 Android 5.0 中提供的一些主要安全增强功能:

  • 默认加密。在以开箱即用的方式搭载 L 的设备上,会默认启用全盘加密功能,以便更好地保护丢失设备或被盗设备上的数据。对于更新到 L 的设备,可以在设置 > 安全性部分进行加密。
  • 经过改进的全盘加密功能。使用 scrypt 保护用户密码免遭暴力破解攻击;在可能的情况下,该密钥会绑定到硬件密钥库,以防范来自设备外的攻击。 和以往一样,Android 屏幕锁定密钥和设备加密密钥不会被发送到设备以外,也不会提供给任何应用。
  • 通过 SELinux 得到增强的 Android 沙盒。对于所有域,Android 现在都要求 SELinux 处于强制模式。SELinux 是 Linux 内核中的强制访问控制 (MAC) 系统,用于增强现有的自主访问控制 (DAC) 安全模型。这个新的安全层为防范潜在的安全漏洞提供了额外的保护屏障。
  • Smart Lock。Android 现在包含一些 Trustlet,它们可以提供更灵活的设备解锁方式。 例如,Trustlet 可让设备在靠近其他可信设备时自动解锁(通过 NFC、蓝牙),或让设备在用户拥有可信面孔时自动解锁。
  • 面向手机和平板电脑的多用户功能、受限个人资料和访客模式。Android 现在为手机提供了多用户功能,并包含一个访客模式。利用访客模式,您可以让访客轻松地临时使用您的设备,而不向他们授予对您的数据和应用的访问权限。
  • 不使用 OTA 的 WebView 更新方式。现在可以独立于框架对 WebView 进行更新,而且无需采用系统 OTA 方式。 这有助于更快速地应对 WebView 中的潜在安全问题。
  • 经过更新的 HTTPS 和 TLS/SSL 加密功能。现在启用了 TLSv1.2 和 TLSv1.1,首选是正向加密,启用了 AES-GCM,停用了弱加密套件(MD5、3DES 和导出密码套件)。如需了解详情,请访问 https://developer.android.com/reference/javax/net/ssl/SSLSocket.html
  • 移除了非 PIE 链接器支持。Android 现在要求所有动态链接的可执行文件都要支持 PIE(位置无关可执行文件)。这有助于增强 Android 的地址空间布局随机化 (ASLR) 实现。
  • FORTIFY_SOURCE 改进。以下 libc 函数现在实现了 FORTIFY_SOURCE 保护功能:stpcpy()stpncpy()read()recvfrom()FD_CLR()FD_SET()FD_ISSET()。这有助于防范涉及这些函数的内存损坏漏洞。
  • 安全修复程序。Android 5.0 中还包含针对 Android 特有漏洞的修复程序。有关这些漏洞的信息已提供给“开放手机联盟”(Open Handset Alliance) 成员,并且 Android 开放源代码项目中提供了相应的修复程序。为了提高安全性,部分搭载更低版本 Android 系统的设备可能也会包含这些修复程序。

Android מגרסה 4 ומטה

כל גרסה של Android כוללת עשרות שיפורים באבטחה להגנה על המשתמשים. אלה כמה משיפורי האבטחה שזמינים ב-Android 4.4:

  • ארגז חול של Android שמאובטח באמצעות SELinux מעכשיו, מערכת Android משתמשת ב-SELinux במצב אכיפה. SELinux היא מערכת חובה לבקרת גישה (MAC) בליבה של Linux, שמשמשת להשלמת מודל האבטחה הקיים שמבוסס על בקרת גישה שרירותית (DAC). כך אפשר להגן מפני נקודות חולשה פוטנציאליות באבטחה.
  • VPN לכל משתמש במכשירים עם כמה משתמשים, רשתות ה-VPN חלות עכשיו על כל משתמש. כך המשתמש יכול לנתב את כל תעבורת הנתונים ברשת דרך VPN, בלי להשפיע על משתמשים אחרים במכשיר.
  • תמיכה בספק ECDSA ב-AndroidKeyStore ל-Android יש עכשיו ספק של מאגר מפתחות שמאפשר להשתמש באלגוריתמים של ECDSA ו-DSA.
  • אזהרות לגבי מעקב אחר מכשירים אם אישור כלשהו נוסף למאגר האישורים של המכשיר ויכול לאפשר מעקב אחרי תעבורת הנתונים המוצפנת ברשת, מערכת Android מציגה למשתמשים אזהרה.
  • FORTIFY_SOURCE מעכשיו יש ב-Android תמיכה ב-FORTIFY_SOURCE ברמה 2, וכל הקוד עובר הידור עם ההגנות האלה. FORTIFY_SOURCE שופרה כך שתעבוד עם clang.
  • הצמדת אישורים ב-Android 4.4 מתבצע זיהוי של אישורי Google שמזויפים ומשמשים בתקשורת מאובטחת מסוג SSL/TLS, ומונעת את השימוש בהם.
  • תיקוני אבטחה ב-Android 4.4 יש גם תיקונים לפרצות ספציפיות ל-Android. המידע על נקודות החולשה האלה סופק לחברי Open Handset Alliance, והתיקונים זמינים בפרויקט הקוד הפתוח של Android. כדי לשפר את האבטחה, יכול להיות שחלק מהמכשירים עם גרסאות קודמות של Android יכללו גם את התיקונים האלה.

Every Android release includes dozens of security enhancements to protect users. The following are some of the security enhancements available in Android 4.3:

  • Android sandbox reinforced with SELinux. This release strengthens the Android sandbox using the SELinux mandatory access control system (MAC) in the Linux kernel. SELinux reinforcement is invisible to users and developers, and adds robustness to the existing Android security model while maintaining compatibility with existing apps. To ensure continued compatibility this release allows the use of SELinux in a permissive mode. This mode logs any policy violations, but will not break apps or affect system behavior.
  • No setuid or setgid programs. Added support for filesystem capabilities to Android system files and removed all setuid or setgid programs. This reduces root attack surface and the likelihood of potential security vulnerabilities.
  • ADB authentication. Starting in Android 4.2.2, connections to ADB are authenticated with an RSA keypair. This prevents unauthorized use of ADB where the attacker has physical access to a device.
  • Restrict Setuid from Android Apps. The /system partition is now mounted nosuid for zygote-spawned processes, preventing Android apps from executing setuid programs. This reduces root attack surface and the likelihood of potential security vulnerabilities.
  • Capability bounding. Android zygote and ADB now use prctl(PR_CAPBSET_DROP) to drop unnecessary capabilities prior to executing apps. This prevents Android apps and apps launched from the shell from acquiring privileged capabilities.
  • AndroidKeyStore Provider. Android now has a keystore provider that allows apps to create exclusive use keys. This provides apps with an API to create or store private keys that cannot be used by other apps.
  • KeyChain isBoundKeyAlgorithm. Keychain API now provides a method (isBoundKeyType) that allows apps to confirm that system-wide keys are bound to a hardware root of trust for the device. This provides a place to create or store private keys that can't be exported off the device, even in the event of a root compromise.
  • NO_NEW_PRIVS. Android zygote now uses prctl(PR_SET_NO_NEW_PRIVS) to block addition of new privileges prior to execution app code. This prevents Android apps from performing operations that can elevate privileges through execve. (This requires Linux kernel version 3.5 or greater).
  • FORTIFY_SOURCE enhancements. Enabled FORTIFY_SOURCE on Android x86 and MIPS and fortified strchr(), strrchr(), strlen(), and umask() calls. This can detect potential memory corruption vulnerabilities or unterminated string constants.
  • Relocation protections. Enabled read only relocations (relro) for statically linked executables and removed all text relocations in Android code. This provides defense in depth against potential memory corruption vulnerabilities.
  • Improved EntropyMixer. EntropyMixer now writes entropy at shutdown or reboot, in addition to periodic mixing. This allows retention of all entropy generated while devices are powered on, and is especially useful for devices that are rebooted immediately after provisioning.
  • Security fixes. Android 4.3 also includes fixes for Android-specific vulnerabilities. Information about these vulnerabilities has been provided to Open Handset Alliance members and fixes are available in Android Open Source Project. To improve security, some devices with earlier versions of Android may also include these fixes.

Android 提供了一个多层安全模型,Android 安全性概述中对该模型进行了介绍。每个 Android 更新版本中都包含数十项用于保护用户的安全增强功能。 以下是 Android 4.2 中引入的一些安全增强功能:

  • 应用验证:用户可以选择启用“验证应用”,并且可以选择在安装应用之前由应用验证程序对应用进行筛查。如果用户尝试安装的应用可能有害,应用验证功能可以提醒用户;如果应用的危害性非常大,应用验证功能可以阻止安装。
  • 加强对付费短信的控制:如果有应用尝试向使用付费服务的短号码发送短信(可能会产生额外的费用),Android 将会通知用户。用户可以选择是允许还是阻止该应用发送短信。
  • 始终开启的 VPN:可以配置 VPN,以确保在建立 VPN 连接之前应用无法访问网络。这有助于防止应用跨其他网络发送数据。
  • 证书锁定:Android 的核心库现在支持证书锁定。如果证书未关联到一组应关联的证书,锁定的域将会收到证书验证失败消息。这有助于保护证书授权机构免遭可能的入侵。
  • 改进后的 Android 权限显示方式:权限划分到了多个对用户来说更清晰明了的组中。在审核权限时,用户可以点击权限来查看关于相应权限的更多详细信息。
  • installd 安全强化:installd 守护程序不会以 root 用户身份运行,这样可以缩小 root 提权攻击的潜在攻击面。
  • init 脚本安全强化:init 脚本现在会应用 O_NOFOLLOW 语义来防范与符号链接相关的攻击。
  • FORTIFY_SOURCEAndroid 现在会实现 FORTIFY_SOURCE,以供系统库和应用用于防范内存损坏。
  • ContentProvider 默认配置:默认情况下,对于每个 content provider,以 API 级别 17 为目标的应用都会将 export 设为 false,以缩小应用的默认受攻击面。
  • 加密:修改了 SecureRandom 和 Cipher.RSA 的默认实现,以便使用 OpenSSL。为使用 OpenSSL 1.0.1 的 TLSv1.1 和 TLSv1.2 添加了安全套接字支持
  • 安全漏洞修复程序:升级了开放源代码库,在其中新增了一些安全漏洞修复程序,其中包括 WebKit、libpng、OpenSSL 和 LibXML。Android 4.2 中还包含针对 Android 特有漏洞的修复程序。有关这些漏洞的信息已提供给“开放手机联盟”(Open Handset Alliance) 成员,并且 Android 开放源代码项目中提供了相应的修复程序。为了提高安全性,部分搭载更低版本 Android 系统的设备可能也会包含这些修复程序。

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

Android 1.5
  • ProPolice כדי למנוע זליגה של מאגרים (-fstack-protector)
  • safe_iop כדי לצמצם את מספר הפעמים שבהן מתרחש זליגת נתונים של מספר שלם
  • תוספים ל-OpenBSD dlmalloc כדי למנוע נקודות חולשה של double free()‏, ולמנוע התקפות של איחוד קטעים. התקפות על צבירה של קטעי קוד (chunk consolidation) הן דרך נפוצה לנצל פגיעה ב-heap.
  • OpenBSD calloc כדי למנוע זליגת נתונים של מספרים שלמים במהלך הקצאת זיכרון
Android 2.3
  • הגנות מפני נקודות חולשה במחרוזות פורמט (-Wformat-security -Werror=format-security)
  • No eXecute (NX) מבוסס-חומרה כדי למנוע הרצת קוד ב-stack וב-heap
  • Linux mmap_min_addr כדי לצמצם את הסיכוי להסלמת הרשאות של הפניה למצביע null (שיפור נוסף ב-Android 4.1)
Android 4.0
Address Space Layout Randomization‏ (ASLR) כדי לערבב באופן אקראי את מיקומי המפתחות בזיכרון
Android 4.1
  • תמיכה ב-PIE (קובץ הפעלה שאינו תלוי מיקום)
  • העברות (relocations) לקריאה בלבד / קישור מיידי (-Wl,-z,relro -Wl,-z,now)
  • dmesg_restrict מופעל (מניעת דליפת כתובות ליבה)
  • kptr_restrict מופעל (מניעת דליפת כתובות ליבה)