מערכת 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) 功能,则必须将所有动态加载的文件标记为只读。否则,系统会抛出异常。我们建议应用尽可能避免动态加载代码,因为这样做会大大增加应用因代码注入或代码篡改而遭到入侵的风险。
Android 13
每个 Android 版本中都包含数十种用于保护用户的安全增强功能。以下是 Android 13 中提供的一些主要安全增强功能:
- Android 13 添加了对多文档呈现的支持。 通过这个新的 Presentation Session 接口,应用可以执行多文档呈现,而现有 API 无法做到这一点。如需了解详情,请参阅身份凭据
- 在 Android 13 中,当且仅当源自外部应用的 intent 与其声明的 intent 过滤器元素匹配时,这些 intent 才会传送到导出的组件。
- Open Mobile API (OMAPI) 是一种标准 API,用于与设备的安全元件进行通信。在 Android 13 之前,只有应用和框架模块可以访问此接口。通过将其转换为供应商稳定版接口,HAL 模块还能够通过 OMAPI 服务与安全元件进行通信。 如需了解详情,请参阅 OMAPI 供应商稳定版接口。
- 从 Android 13-QPR 开始,共享 UID 被废弃。 使用 Android 13 或更高版本的用户应在其清单中添加 `android:sharedUserMaxSdkVersion="32"` 行。此条目可防止新用户获取共享 UID。如需详细了解 UID,请参阅应用签名。
- Android 13 添加了对密钥库对称加密基元的支持,例如支持 AES(高级加密标准)、HMAC(密钥哈希消息认证码)以及非对称加密算法(包括椭圆曲线加密、RSA2048、RSA4096 和曲线 25519 加密)
- Android 13(API 级别 33)及更高版本支持用于从应用发送非豁免通知的运行时权限。这可让用户控制他们会看到哪些权限通知。
- 针对请求访问所有设备日志的应用,添加了在每次使用时显示提示的功能,以便用户允许或拒绝授予访问权限。
- 推出了 Android 虚拟化框架 (AVF),它使用标准化 API 将不同的 Hypervisor 整合到一个框架下。 它提供安全、私密的执行环境,以便执行通过 Hypervisor 隔离的工作负载。
- 引入了 APK 签名方案 v3.1 所有使用 apksigner 的新密钥轮替都将默认使用 v3.1 签名方案,以便将 Android 13 及更高版本作为轮替目标。
12 Android
每个 Android 版本中都包含数十种用于保护用户的安全增强功能。以下是 Android 12 中提供的一些主要安全增强功能:
- Android 12 引入了 BiometricManager.Strings API,它为使用 BiometricPrompt 进行身份验证的应用提供本地化的字符串。这些字符串旨在感知设备,并更明确地指定可以使用哪种/哪些身份验证类型。Android 12 还支持屏下指纹传感器
- 添加了对屏下指纹传感器的支持
- 引入了 Fingerprint Android 接口定义语言 (AIDL)
- 支持新的 Face AIDL
- 引入了 Rust 作为平台开发语言
- 添加了可供用户仅授权应用访问其大致位置信息的选项
- 当应用使用摄像头或麦克风时,现在状态栏上会显示隐私指示标志
- Android 的 Private Compute Core (PCC)
- 添加了用于停用 2G 支持的选项
Android 11
每个 Android 版本中都包含数十项用于保护用户的安全增强功能。如需查看 Android 11 中提供的一些主要安全增强功能的列表,请参阅 Android 版本说明。
10 Android
每个 Android 版本中都包含数十项用于保护用户的安全增强功能。Android 10 包含多项安全和隐私增强功能。如需查看 Android 10 中变化的完整列表,请参阅 Android 10 版本说明。
安全
BoundsSanitizer
Android 10 在蓝牙和编解码器中部署了 BoundsSanitizer (BoundSan)。BoundSan 使用 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 在软件编解码器中启用了整数溢出排错功能 (IntSan)。确保播放性能对于设备硬件中不支持的任何编解码器而言都在接受范围内。 以下编解码器启用了 IntSan:
libFLAC
libavcdec
libavcenc
libhevcdec
libmpeg2
libopus
libvpx
libspeexresampler
libvorbisidec
模块化系统组件
Android 10 采用模块化方式处理一些 Android 系统组件,使其能够在 Android 的常规发布周期外的时间进行更新。下面列举了几种模块:
- Android 运行时
- Conscrypt
- DNS 解析器
- DocumentsUI
- ExtServices
- 媒体
- ModuleMetadata
- 网络
- PermissionController
- 时区数据
OEMCrypto
Android 10 使用 OEMCrypto API 版本 15。
Scudo
Scudo 是一个动态的用户模式内存分配器,旨在提高遇到堆相关漏洞时的复原能力。它提供了标准 C 分配和取消分配基元,以及 C++ 基元。
ShadowCallStack
ShadowCallStack
(SCS)
是一种 LLVM 插桩模式,可将函数的返回地址保存到非叶函数的函数 prolog 中单独分配的 ShadowCallStack
实例,并从函数 epilog 中的 ShadowCallStack
实例加载返回地址,从而防止返回地址覆盖(比如堆栈缓冲区溢出)。
WPA3 和 Wi-Fi Enhanced Open
Android 10 添加了对 Wi-Fi Protected Access 3 (WPA3) 和 Wi-Fi Enhanced Open 安全标准的支持,可更好地保护隐私,更稳健地防御已知攻击。
隐私权
以 Android 9 或更低版本为目标平台时的应用访问权限
如果您的应用在 Android 10 或更高版本上运行,但其目标平台是 Android 9(API 级别 28)或更低版本,则 Android 平台具有以下行为:
- 如果您的应用为
ACCESS_FINE_LOCATION
或ACCESS_COARSE_LOCATION
声明了<uses-permission>
元素,则系统会在安装期间自动为ACCESS_BACKGROUND_LOCATION
添加<uses-permission>
元素。 - 如果您的应用请求了
ACCESS_FINE_LOCATION
或ACCESS_COARSE_LOCATION
,系统会自动将ACCESS_BACKGROUND_LOCATION
添加到请求中。
后台 Activity 限制
从 Android 10 开始,系统会增加针对从后台启动 Activity 的限制。此项行为变更有助于最大限度地减少对用户造成的干扰,并且可以让用户更好地控制其屏幕上显示的内容。只要您的应用启动 activity 是因用户互动直接引发的,该应用就极有可能不会受到这些限制的影响。
如需详细了解从后台启动 activity 的建议替代方法,请参阅有关如何在应用中提醒用户注意有时效性的事件的指南。
相机元数据
Android 10 更改了 getCameraCharacteristics()
方法默认返回的信息的广度。具体而言,您的应用必须具有 CAMERA
权限才能访问此方法的返回值中可能包含的设备特定元数据。
如需详细了解这些变更,请参阅关于需要权限的相机字段的部分。
剪贴板数据
对于 Android 10 或更高版本,除非您的应用是默认输入法 (IME) 或是目前聚焦的应用,否则它无法访问剪贴板中的数据。
设备位置信息
为了让用户更好地控制应用对位置信息的访问权限,Android 10 引入了 ACCESS_BACKGROUND_LOCATION
权限。
不同于 ACCESS_FINE_LOCATION
和 ACCESS_COARSE_LOCATION
权限,ACCESS_BACKGROUND_LOCATION
权限仅会影响应用在后台运行时对位置信息的访问权限。除非符合以下条件之一,否则应用将被视为在后台访问位置信息:
- 属于该应用的 Activity 可见。
- 该应用运行的某个前台服务已声明前台服务类型为
location
。
如需将应用中的某个服务声明为前台服务类型,请将应用的targetSdkVersion
或compileSdkVersion
设置为29
或更高版本。详细了解前台服务如何继续执行用户发起的需要访问位置信息的操作。
外部存储设备
默认情况下,以 Android 10 及更高版本为目标平台的应用在访问外部存储设备中的文件时存在范围限制,即分区存储。此类应用可以查看外部存储设备内以下类型的文件,无需请求任何与存储相关的用户权限:
- 特定于应用的目录中的文件(使用
getExternalFilesDir()
访问)。 - 应用创建的照片、视频和音频片段(通过媒体库访问)。
如需详细了解分区存储以及如何共享、访问和修改在外部存储设备上保存的文件,请参阅有关如何管理外部存储设备中的文件以及如何访问和修改媒体文件的指南。
随机分配 MAC 地址
默认情况下,在搭载 Android 10 或更高版本的设备上,系统会传输随机分配的 MAC 地址。
如果您的应用处理企业使用场景,Android 平台会提供 API,用于执行与 MAC 地址相关的几个操作。
- 获取随机分配的 MAC 地址:设备所有者应用和资料所有者应用可以通过调用
getRandomizedMacAddress()
检索分配给特定网络的随机分配 MAC 地址。 - 获取实际的出厂 MAC 地址:设备所有者应用可以通过调用
getWifiMacAddress()
检索设备的实际硬件 MAC 地址。此方法对于跟踪设备队列非常有用。
不可重置的设备标识符
从 Android 10 开始,应用必须具有 READ_PRIVILEGED_PHONE_STATE
特许权限才能访问设备的不可重置标识符(包括 IMEI 和序列号)。
Build
TelephonyManager
如果您的应用没有该权限,但您仍尝试查询不可重置标识符的相关信息,则 Android 平台的响应会因目标 SDK 版本而异:
- 如果应用以 Android 10 或更高版本为目标平台,则会发生
SecurityException
。 - 如果应用以 Android 9(API 级别 28)或更低版本为目标平台,则相应方法会返回
null
或占位符数据(如果应用具有READ_PHONE_STATE
权限)。否则,会发生SecurityException
。
身体活动识别
Android 10 针对需要检测用户步数或对用户的身体活动(例如步行、骑车或坐车)进行分类的应用引入了 android.permission.ACTIVITY_RECOGNITION
运行时权限。此项权限旨在让用户了解设备传感器数据在“设置”中的使用方式。
除非用户已向您的应用授予此权限,否则 Google Play 服务中的一些库(例如 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
类。
从界面中移除了权限组
从 Android 10 开始,应用无法在界面中查询权限的分组方式。
移除了联系人关系密切程度
从 Android 10 开始,平台不再记录联系人的关系密切程度信息。因此,如果您的应用对用户的联系人进行搜索,系统将不会按互动频率对搜索结果排序。
有关 ContactsProvider
的指南包含一项说明特定字段和方法已废弃的声明(从 Android 10 开始,这些字段和方法在所有设备上已作废)。
限制对屏幕内容的访问
为了保护用户的屏幕内容,Android 10 更改了 READ_FRAME_BUFFER
、CAPTURE_VIDEO_OUTPUT
和 CAPTURE_SECURE_VIDEO_OUTPUT
权限的作用域,从而禁止以静默方式访问设备的屏幕内容。从 Android 10 开始,这些权限只能通过签名访问。
需要访问设备屏幕内容的应用应使用 MediaProjection
API,此 API 会显示要求用户同意访问的提示。
USB 设备序列号
如果您的应用以 Android 10 或更高版本为目标平台,则该应用只能在用户授予其访问 USB 设备或配件的权限后才能读取序列号。
如需详细了解如何使用 USB 设备,请参阅有关如何配置 USB 主机的指南。
Wi-Fi
以 Android 10 或更高版本为目标平台的应用无法启用或停用 Wi-Fi。WifiManager.setWifiEnabled()
方法始终返回 false
。
如果您需要提示用户启用或停用 Wi-Fi,请使用设置面板。
对直接访问已配置的 Wi-Fi 网络实施了限制
为了保护用户隐私,只有系统应用和设备政策控制者 (DPC) 支持手动配置 Wi-Fi 网络列表。给定 DPC 可以是设备所有者,也可以是资料所有者。
如果应用以 Android 10 或更高版本为目标平台,并且应用不是系统应用或 DPC,则下列方法不会返回有用数据:
getConfiguredNetworks()
方法始终返回空列表。- 每个返回整数值的网络操作方法(
addNetwork()
和updateNetwork()
)始终返回 -1。 - 每个返回布尔值的网络操作(
removeNetwork()
、reassociate()
、enableNetwork()
、disableNetwork()
、reconnect()
和disconnect()
)始终返回false
。
Android 9
每个 Android 版本中都包含数十项用于保护用户的安全增强功能。如需 Android 9 中提供的一些主要安全增强功能的列表,请参阅 Android 版本说明。
8 Android
כל גרסה של Android כוללת עשרות שיפורים באבטחה להגנה על המשתמשים. הנה כמה משיפורי האבטחה העיקריים הזמינים ב-Android 8.0:
- הצפנה. נוספה תמיכה בהוצאת מפתח מפרופיל עבודה.
- הפעלה מאומתת נוספה תמיכה ב-Android Verified Boot (AVB). קוד בסיס מאומת של הפעלה שתומך בהגנה מפני חזרה לאחור לשימוש במחוללי אתחול שנוספו ל-AOSP. המלצה על תמיכה בתוכנת אתחול להגנה מפני החזרה עבור בפרוטוקול HLOS. מומלץ שרק משתמשים שמבצעים אינטראקציה פיזית עם המכשיר יוכלו לבטל את הנעילה של מנהלי האתחול.
- נעילת מסך. נוספה תמיכה בשימוש בחומרה עמידת-זיופ כדי לאמת את פרטי הכניסה למסך הנעילה.
- KeyStore. אימות מפתחות נדרש לכל המכשירים שכוללים Android מגרסה 8.0 ואילך. הוספנו תמיכה באימות זהויות כדי לשפר את ההרשמה דרך הארגון.
- ארגז חול. יותר מעודכנת משתמשים בארגז חול (sandboxing) של רכיבים רבים שמשתמשים בממשק הסטנדרטי של Project Treble ורכיבים ספציפיים למכשיר. הופעל סינון seccomp בכל האפליקציות הלא מהימנות כדי לצמצם את שטח ההתקפה של הליבה. WebView מופעלת עכשיו בתהליך מבודד עם גישה מוגבלת מאוד לשאר המערכת.
- הקשחת הליבה. הטמענו hardened usercopy, הדמיה של PAN, קריאה בלבד אחרי init ו-KASLR.
- הקשחת מרחב משתמשים. הטמעת CFI ב-Media Stack. שכבות-על של אפליקציה כבר לא יכולות לכסות חלונות קריטיים של המערכת, ולמשתמשים יש דרך לסגור אותן.
- עדכון של מערכת ההפעלה בסטרימינג. הפעלת עדכונים במכשירים עם מעט מקום פנוי בדיסק.
- התקנת אפליקציות לא מוכרות. המשתמשים צריכים להעניק הרשאה להתקנת אפליקציות ממקור שאינו חנות אפליקציות של צד ראשון.
- פרטיות. למזהה Android (SSAID) יש ערך שונה לכל אפליקציה לכל משתמש במכשיר. באפליקציות של דפדפני אינטרנט, מזהה הלקוח של Widevine
מחזירה ערך שונה לכל שם חבילה של אפליקציה ומקור אינטרנט.
השדה
net.hostname
ריק עכשיו, ותוכנת הלקוח של DHCP לא שולחת יותר שם מארח.android.os.Build.SERIAL
הוחלף ב- API שלBuild.SERIAL
שמוגן מאחורי הרשאה בשליטת המשתמש. כתובת MAC משופרת לבצע רנדומיזציה בערכות שבבים מסוימות.
Android 7
כל גרסה של Android כוללת עשרות שיפורים באבטחה להגנה על המשתמשים. הנה כמה משיפורי האבטחה העיקריים הזמינים ב-Android 7.0:
- הצפנה מבוססת-קבצים. לבצע הצפנה ברמת הקובץ, במקום להצפין את כל אזור האחסון כיחידה אחת, עדיף לבודד ומגן על משתמשים ופרופילים אישיים (כגון עבודה) במכשיר.
- Direct Boot. הפעלת Direct Boot מתבצעת באמצעות הצפנה מבוססת-קובץ, ומאפשרת לאפליקציות מסוימות, כמו שעון מעורר ותכונות נגישות, לפעול כשהמכשיר מופעל אבל לא נעול.
- אתחול מאומת. התכונה 'הפעלה מאומתת' נאכפת עכשיו בקפדנות על למנוע אתחול של מכשירים שנפרצו; הוא תומך בתיקון שגיאות שיפור האמינות כנגד פגיעה לא זדונית בנתונים.
- SELinux. הגדרות SELinux מעודכנות ותמיכה מורחבת ב-seccomp נועדו לנעול את ארגז החול של האפליקציות ולצמצם את שטח ההתקפה.
- רנדומיזציה של סדר הטעינה של ספריות ו-ASLR משופר. רמת אקראיות גבוהה יותר הופכת חלק ממתקפות של שימוש חוזר בקוד לפחות מהימנות.
- הקשחת הליבה. הוספנו הגנה נוספת על הזיכרון לליבות חדשות יותר, על ידי סימון חלקים מזיכרון הליבה כקריאה בלבד, הגבלת הגישה של הליבה לכתובות במרחב המשתמש והקטנת שטח ההתקפה הקיים.
- סכמת חתימת APK גרסה 2 הוספנו סכימה לחתימה על קובץ שלם, שמקצרת את זמני האימות ומחזקת את ההתחייבויות לשלמות.
- חנות מהימנה בקנדה. לאפשר לאפליקציות לשלוט בקלות גישה לתנועת הגולשים המאובטחת שלהם ברשת, לרשויות אישורים שהותקנו על ידי משתמשים כברירת מחדל, ממשקי ה-API לניהול מכשירים לא מהימנים יותר לאפליקציות שמטרגטות לרמת API 24 ומעלה. בנוסף, כל מכשירי Android החדשים צריכים יישלחו לאותה חנות CA מהימנה.
- Network Security Config. הגדרת אבטחת הרשת ו-TLS באמצעות קובץ תצורה מצהיר.
6 Android
כל גרסה של Android כוללת עשרות שיפורי אבטחה שנועדו להגן משתמשים. ריכזנו כאן כמה מהשיפורים העיקריים באבטחה שזמינים ב-Android 6.0:
- הרשאות זמן ריצה. הרשאות הבקשות לאפליקציות ב- זמן ריצה במקום לקבל אותו באפליקציה בזמן ההתקנה. המשתמשים יכולים להפעיל ולהשבית הרשאות גם באפליקציות עם גרסת M וגם באפליקציות עם גרסת M קודמת.
- הפעלה מאומתת קבוצה של בדיקות קריפטוגרפיות של המערכת התוכנות מתבצעות לפני כדי להבטיח שהטלפון תקין מתוכנת האתחול עד במערכת ההפעלה.
- אבטחה מבודדת חומרה אבסטרקציה של חומרה חדשה שכבה (HAL) שמשמשת את טביעת האצבע API, מסך הנעילה, הצפנת מכשירים ואישורי לקוח להגנה על מפתחות מפני ליבה פריצה ו/או תקיפות פיזיות מקומיות
- טביעות אצבע. עכשיו אפשר לבטל את הנעילה של המכשירים באמצעות מגע. מפתחים יכולים גם לבצע את היתרון של ממשקי API חדשים לשימוש בטביעות אצבע כדי לנעול מפתחות הצפנה ולבטל את הנעילה שלהם.
- שימוש בכרטיס SD. מדיה נשלפת יכולה להיות אימוץ למכשיר והרחבת נפח האחסון הזמין עבור נתונים מקומיים, תמונות, סרטונים וכו' של האפליקציה, אבל עדיין יהיו מוגנים ברמת חסימה הצפנה.
- Clear Text Traffic. מפתחים יכולים להשתמש ב-StrictMode חדש כדי לוודא שהאפליקציה שלהם לא משתמשת בטקסט ללא הצפנה.
- הקשחת המערכת. הקשחת המערכת באמצעות מדיניות שחלה על ידי SELinux. כך אפשר לקבל בידוד טוב יותר בין משתמשים, סינון IOCTL, הפחתת האיום של שירותים חשופים, הידוק נוסף של דומיינים של SELinux וגישה מוגבלת מאוד ל-/proc.
- בקרת גישה ל-USB: המשתמשים צריכים לאשר את הגישה של ה-USB לקבצים, לאחסון או לפונקציונליות אחרת בטלפון. ברירת המחדל היא עכשיו חיוב בלבד עם גישה לאחסון שדורש אישור מפורש מהמשתמש.
Android 5
5.0
כל גרסה של Android כוללת עשרות שיפורים באבטחה להגנה על המשתמשים. הנה כמה משיפורי האבטחה העיקריים הזמינים ב-Android 5.0:
- מוצפן כברירת מחדל. במכשירים שמגיעים עם L כברירת מחדל, הצפנת הדיסק המלאה מופעלת כברירת מחדל כדי לשפר את ההגנה על הנתונים במכשירים שאבדו או נגנבו. במכשירים שמעודכנים לגרסה L אפשר להצפין את הנתונים בקטע הגדרות > אבטחה.
- שיפור של הצפנת הדיסק המלאה. סיסמת המשתמש היא
מוגן מפני התקפות בכוח הזרוע באמצעות
scrypt
, ובמקרים שבהם הוא מקושר למאגר המפתחות של החומרה כדי למנוע מתקפות מחוץ למכשיר. כמו תמיד, הסוד של נעילת המסך ב-Android ומפתח ההצפנה של המכשיר לא נשלחים מהמכשיר ולא נחשפים לאף אפליקציה. - ארגז חול של Android מחוזק ב-SELinux . מעכשיו, נדרש SELinux במצב אכיפה בכל הדומיינים ב-Android. SELinux היא מערכת של בקרת גישה חובה (MAC) בליבה של Linux, שמשמשת להשלמת מודל האבטחה הקיים של בקרת גישה שרירותית (DAC). השכבה החדשה הזו מספקת הגנה נוספת מפני נקודות חולשה פוטנציאליות באבטחה.
- Smart Lock עכשיו יש ב-Android מערכות אמינות שמספקות יותר גמישות לביטול נעילת מכשירים. לדוגמה, טראסטלטים יכולים לאפשר לבטל את נעילת המכשירים באופן אוטומטי כשהם בקרבת מכשיר מהימן אחר (באמצעות NFC או Bluetooth) או כשמישהו עם פנים מהימנות משתמש בהם.
- ריבוי משתמשים, פרופיל מוגבל ומצבי אורח עבור טלפונים ו בטאבלטים. Android מספק כעת משתמשים מרובים בטלפונים כולל מצב אורח שיכול לשמש לקבלת גישה זמנית קלה במכשיר מבלי להעניק גישה לנתונים ולאפליקציות.
- עדכונים ל-WebView ללא OTA עכשיו אפשר לעדכן את WebView בנפרד מהמסגרת, בלי עדכון OTA למערכת. כך ניתן לקבל תגובה מהירה יותר לבעיות אבטחה פוטנציאליות רכיב WebView.
- קריפטוגרפיה מעודכנת ל-HTTPS ול-TLS/SSL TLSv1.2 ו- TLSv1.1 מופעל עכשיו, Forward Secrecy היא מועדפת עכשיו, AES-GCM מופעלת עכשיו, וסוויטות וצפנים חלשות (MD5, 3DES וייצוא סטים של אלגוריתמים להצפנה) מושבתים עכשיו. פרטים נוספים זמינים בכתובת https://developer.android.com/reference/javax/net/ssl/SSLSocket.html.
- הוסרה התמיכה במנגנון לקישור שאינו PIE. מעכשיו, כל קובצי ההפעלה שמקושרים באופן דינמי ב-Android חייבים לתמוך ב-PIE (קובצי הפעלה שאינם תלויים במיקום). כך משפרים את ההטמעה של אקראיות הפריסה במרחב הכתובות (ASLR) ב-Android.
- 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 中提供的一些安全增强功能:
- 通过 SELinux 得到增强的 Android 沙盒。 Android 现在以强制模式使用 SELinux。SELinux 是 Linux 内核中的强制访问控制 (MAC) 系统,用于增强基于自主访问控制 (DAC) 的现有安全模型。 这为防范潜在的安全漏洞提供了额外的保护屏障。
- 按用户应用 VPN。 在多用户设备上,现在按用户应用 VPN。 这样一来,用户就可以通过一个 VPN 路由所有网络流量,而不会影响使用同一设备的其他用户。
- AndroidKeyStore 中的 ECDSA 提供程序支持。 Android 现在有一个允许使用 ECDSA 和 DSA 算法的密钥库提供程序。
- 设备监测警告。 如果有任何可能允许监测加密网络流量的证书添加到设备证书库中,Android 都会向用户发出警告。
- FORTIFY_SOURCE。 Android 现在支持 FORTIFY_SOURCE 第 2 级,并且所有代码在编译时都会受到这些保护。FORTIFY_SOURCE 已得到增强,能够与 Clang 配合使用。
- 证书锁定。 Android 4.4 能够检测安全的 SSL/TLS 通信中是否使用了欺诈性 Google 证书,并且能够阻止这种行为。
- 安全修复程序。 Android 4.4 中还包含针对 Android 特有漏洞的修复程序。 有关这些漏洞的信息已提供给“开放手机联盟”(Open Handset Alliance) 成员,并且 Android 开源项目中提供了相应的修复程序。为了提高安全性,搭载更低版本 Android 的某些设备可能也会包含这些修复程序。
כל גרסה של Android כוללת עשרות שיפורי אבטחה שנועדו להגן משתמשים. אלה כמה משיפורי האבטחה שזמינים ב-Android 4.3:
- ארגז חול של Android שמאובטח באמצעות SELinux הגרסה הזו מחזקת את ארגז החול של Android באמצעות SELinux מערכת בקרת גישה (MAC) בליבה (kernel) של Linux. התגבור של SELinux הוא בלתי נראה למשתמשים ולמפתחים, והוא מוסיף חוסן למודל האבטחה הקיים של Android תוך שמירה על תאימות לאפליקציות קיימות. כדי להבטיח תאימות מתמשכת של הגרסה הזו מאפשר להשתמש ב-SELinux במצב מתירני. במצב הזה מתועדת כל מדיניות הפרות, אבל לא יגרמו לשיבושים באפליקציות ולא ישפיעו על התנהגות המערכת.
- אין תוכניות
setuid
אוsetgid
. הוספנו תמיכה ביכולות של מערכת הקבצים לקובצי המערכת של Android והסרנו את כל התוכניות מסוגsetuid
אוsetgid
. הזה מפחית את שטח המתקפה של השורש ואת הסבירות לאבטחה פוטנציאלית נקודות חולשה. - אימות ADB החל מגרסה 4.2.2 של Android, החיבורים ל-ADB מאומתים באמצעות זוג מפתחות RSA. זה מונע שימוש בלתי מורשה ב- ADB – במקרים שבהם יש לתוקף גישה פיזית למכשיר.
- הגבלת Setuid מאפליקציות ל-Android
המחיצה
/system
מותקנת עכשיו עם nosuid לתהליכים שנוצרו על ידי zygote, כדי למנוע מאפליקציות Android להריץ תוכניותsetuid
. כך מפחיתים את שטח המתקפה של השורש, הסבירות לפרצות אבטחה פוטנציאליות. - הגבלת יכולות.
ב-Android zygote וב-ADB נעשה שימוש ב-
prctl(PR_CAPBSET_DROP)
כדי להפחית יכולות מיותרות לפני הפעלת האפליקציות. הפעולה הזו מונעת הפעלה של אפליקציות ל-Android ואפליקציות מ- את המעטפת מרכישה של יכולות בעלות הרשאות. - ספק AndroidKeyStore. ל-Android יש עכשיו ספק של מאגר מפתחות שמאפשר לאפליקציות ליצור מפתחות לשימוש בלעדי. כך אפשר לספק לאפליקציות API ליצירה או לאחסון של מפתחות פרטיים שלא ניתן להשתמש בהם באפליקציות אחרות.
- KeyChain
isBoundKeyAlgorithm
. Keychain API מספק עכשיו שיטה (isBoundKeyType
) שמאפשר לאפליקציות לאשר שמפתחות ברמת המערכת מקושרים ל-Root of Trust של החומרה. כך אפשר ליצור או לאחסן מפתחות פרטיים שלא ניתן לייצא מהמכשיר, גם במקרה של פריצה ברמה הבסיסית (root). NO_NEW_PRIVS
. zygote של Android משתמש עכשיו ב-prctl(PR_SET_NO_NEW_PRIVS)
כדי לחסום הוספה של הרשאות חדשות לפני ביצוע קוד האפליקציה. הזה מונעת מאפליקציות ל-Android לבצע פעולות שעלולות העלאת רמת ההרשאות באמצעות execve. (נדרשת לכך גרסה 3.5 ומעלה של ליבה של Linux).- שיפורים ב-
FORTIFY_SOURCE
הפעלתFORTIFY_SOURCE
ב-Android x86 וב-MIPS, ושימוש בשיחות מבוצרות מסוגstrchr()
,strrchr()
,strlen()
ו-umask()
. הזה יכול לזהות נקודות חולשה פוטנציאליות של פגיעה בזיכרון או נקודות חולשה קבועים של מחרוזות. - הגנות על מעבר למיקום גיאוגרפי הופעלה האפשרות של העברת מיקום (relro) לקריאה בלבד עבור קובצי הפעלה שקושרו באופן סטטי והסרת כל מיקום הטקסט ב-Android כך אפשר להגן לעומק מפני נקודות חולשה פוטנציאליות של פגיעה בזיכרון.
- EntropyMixer משופר. EntropyMixer כותב עכשיו את האנטרופיה בזמן כיבוי או הפעלה מחדש, בנוסף לערבוב תקופתי. כך אפשר לשמור את כל הנתונים האנטרופיה שנוצרה בזמן שהמכשירים מופעלים, והיא שימושית במיוחד במכשירים שמופעלים מחדש מיד לאחר ניהול ההקצאות.
- תיקוני אבטחה. Android 4.3 כולל גם תיקונים עבור גרסאות ספציפיות ל-Android נקודות חולשה. המידע על נקודות החולשה האלה סופק לחברי Open Handset Alliance, והתיקונים זמינים בפרויקט הקוד הפתוח של Android. כדי לשפר את האבטחה, חלק מהמכשירים עם גרסאות קודמות של Android עשויים לכלול גם את התיקונים האלה.
מערכת Android מספקת מודל אבטחה רב-שכבתי שמתואר במאמר Android סקירה כללית על אבטחה. כל עדכון ל-Android כולל עשרות שיפורים באבטחה כדי להגן על המשתמשים. ריכזנו כאן כמה מהשיפורים באבטחה שנוספו ב-Android 4.2:
- אימות אפליקציות: המשתמשים יכולים להפעיל את התכונה 'אימות אפליקציות' ולבקש שתוכנות ייבדקו על ידי מאמת אפליקציות לפני ההתקנה. אימות האפליקציות יכול להתריע את המשתמש אם הוא מנסה להתקין אפליקציה שעלולה להיות מזיקה. אם האפליקציה מסוכנת במיוחד, היא יכולה לחסום את ההתקנה.
- שליטה רבה יותר ב-SMS פרימיום: אם אפליקציה תנסה לשלוח הודעת SMS לקוד קצר שמשתמש בשירותי פרימיום שעשויים לגרום לחיוב נוסף, תופיע התראה ב-Android. המשתמש יכול לבחור אם לאפשר כדי לשלוח את ההודעה או לחסום אותה.
- VPN שפועל כל הזמן: אפשר להגדיר את ה-VPN כך שלאפליקציות לא תהיה גישה לרשת עד שייווצר חיבור VPN. כך האפליקציות לא יכולות לשלוח נתונים ברשתות אחרות.
- הצמדת אישורים: ספריות הליבה של Android תומכות עכשיו בהצמדת אישורים. דומיינים מוצמדים מקבלים אימות אישור כישלון אם האישור אינו משורשר לקבוצה של אישורים צפויים. כך אפשר להגן מפני פגיעה אפשרית ברשויות אישורים.
- תצוגה משופרת של הרשאות Android: ההרשאות מאורגנות בקבוצות שקל יותר למשתמשים להבין. במהלך בדיקת ההרשאות, המשתמש יכול ללחוץ על ההרשאה כדי לראות מידע מפורט יותר עליה.
- הקשחת installd: הדימון
installd
לא פועל בתור משתמש root, וכך מצמצם את שטח ההתקפה הפוטנציאלי להסלמת הרשאות root. - הקשחת סקריפט init: סקריפטים של init מחילים עכשיו סמנטיקה של
O_NOFOLLOW
כדי למנוע התקפות שקשורות לקישור סימלי. FORTIFY_SOURCE
: מערכת Android מטמיעה עכשיוFORTIFY_SOURCE
. משמש את ספריות ואפליקציות כדי למנוע פגיעה בזיכרון.- הגדרת ברירת המחדל של ContentProvider: באפליקציות שמטרגטות את רמת ה-API 17, הערך של
export
מוגדר כברירת מחדל כ-false
לכל Content Provider, וכך מקטין את שטח ההתקפה שמוגדר כברירת מחדל באפליקציות. - קריפטוגרפיה: שינינו את הטמעות ברירת המחדל של SecureRandom ו-Cipher.RSA כך שישתמשו ב-OpenSSL. נוספה תמיכה בשקע SSL ב-TLSv1.1 וב-TLSv1.2. באמצעות OpenSSL 1.0.1
- תיקוני אבטחה: ספריות קוד פתוח משודרגות עם תיקוני אבטחה כוללות את WebKit, libpng, OpenSSL ו-LibXML. Android 4.2 כולל גם תיקונים עבור נקודות חולשה ספציפיות ל-Android. המידע על נקודות החולשה האלה סופקו למנויים של Open Handset Alliance, והתיקונים זמינים פרויקט קוד פתוח של Android. כדי לשפר את האבטחה, בחלק מהמכשירים עם מערכת הפעלה קודמת גרסאות Android עשויות לכלול גם את התיקונים האלה.
ב-Android יש מודל אבטחה רב-שכבתי שמתואר בסקירה הכללית על אבטחת Android. כל עדכון ל-Android כולל עשרות שיפורים באבטחה כדי להגן על המשתמשים. ריכזנו כאן כמה מהשיפורים באבטחה שהוצגו בגרסאות Android 1.5 עד 4.1:
- Android 1.5
- המשטרה למשטרה כדי למנוע הצפה של מאגר הנתונים הזמני של המחסנית (-fstack-protector)
- safe_iop כדי לצמצם חריגות של מספרים שלמים
- תוספים ל-OpenBSD dlmalloc כדי למנוע נקודות חולשה כפולות של free() כדי למנוע התקפות איחוד מקטעים. התקפות איחוד מקטעים הן דרך נפוצה לניצול שחיתות של ערימה.
- OpenBSD calloc כדי למנוע זליגת נתונים של מספרים שלמים במהלך הקצאת זיכרון
- Android 2.3
- הגנות מפני נקודות חולשה במחרוזות פורמט (-Wformat-security -Werror=format-security)
- No eXecute (NX) מבוסס-חומרה כדי למנוע הרצת קוד בסטאק ובמקבץ
- mmap_min_addr של Linux כדי לצמצם הרשאות של ביטול הפניה של מצביע 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 מופעל (מניעת דליפת כתובות ליבה)