安卓系统安全特性
07 Dec 2020目前android系统提供了一套比较完成的安全体系,只要有以下几个特性组成
应用沙盒
Android 平台利用基于用户的 Linux 保护机制识别和隔离应用资源,为此,Android 会为每个 Android 应用分配一个独一无二的用户 ID (UID),并在自己的进程中运行。Android 会使用此 UID 设置一个内核级应用沙盒。
应用签名
通过应用签名,开发者可以标识应用创作者并更新其应用,而无需创建复杂的接口和权限。在 Android 平台上运行的每个应用都必须有开发者的签名。
身份验证
Android 采用通过用户身份验证把关的加密密钥机制,该机制需要加密密钥存储区以及服务提供商和用户身份验证程序。
在配有指纹传感器的设备上,用户可以注册一个或多个指纹,并使用这些指纹解锁设备以及执行其他任务。Gatekeeper 子系统会在可信执行环境 (TEE) 中执行设备解锁图案/密码身份验证。
Android 9 及更高版本包含 Android 受保护的确认功能,使用户能够正式确认关键交易(如付款)。
生物识别
Android 9 及更高版本包含一个 BiometricPrompt API,应用开发者可以使用该 API 采用与设备和模态无关的方式将生物识别身份验证集成到其应用中。只有极为安全的生物识别技术才能与 BiometricPrompt 集成。
加密
设备经过加密后,所有由用户创建的数据在存入磁盘之前都会自动加密,并且所有读取操作都会在将数据返回给调用进程之前自动解密数据。加密可确保未经授权方在尝试访问相应数据时无法读取数据。
密钥库
Android 提供了一个由硬件支持的密钥库,以提供生成密钥、导入和导出非对称密钥、导入原始对称密钥、使用适当的填充模式进行非对称加密和解密等功能。
SELinux
作为 Android 安全模型的一部分,Android 使用安全增强型 Linux (SELinux) 对所有进程强制执行强制访问控制 (MAC)(SELinux是MAC的一种实现),甚至包括以 Root/超级用户权限运行的进程(Linux 功能)。
这个要重点做说明
三个对象
- 主体
- 访问者,一般是进程
- 目标 访问对象,一般是文件,包括普通文件,设备文件,网络设备文件
- 规则
- 确定访问者是否能够访问目标
安全上下文
SELinux分配一个三字符串上下文,包含了用户名、角色和域(或者类型)。主体和目标都会拥有一个安全上下文
# 这是一个普通的android应用的安全上下文 gtaxlltechn:/ # ps -Z 9644 LABEL USER PID PPID VSZ RSS WCHAN ADDR S NAME u:r:untrusted_app:s0:c512,c768 u0_a349 9644 2520 2237912 207196 SyS_epoll+ e5b62ebc S com.nd.app.factory.egvod
我们也可以看一下文件的安全上下文
# 普通文件 gtaxlltechn:/ # ls -Z /sdcard/alipay/ u:object_r:sdcardfs:s0 com.eg.android.AlipayGphone # 系统文件 gtaxlltechn:/ # ls -Z /etc/hosts u:object_r:system_file:s0 /etc/hosts
- 确定访问者是否能够访问目标
可以看到Android给所有应用分配一个一个u
的用户名, 这里角色也不是很重要,重点关注域。
域的访问规则由策略文件提供
Trusty 可信执行环境 (TEE)
Trusty 是一种安全的操作系统 (OS),可为 Android 提供可信执行环境 (TEE)。Trusty 操作系统与 Android 操作系统在同一处理器上运行,但 Trusty 通过硬件和软件与系统的其余组件隔离开来。