Android系统对安全做了很多工作(如下表),其中最最重要的两个安全机制是:
1. 是底层的基于Linux自主访问控制实现的应用沙箱,沙箱内只能做一些最基本的操作。
2. 通过框架层的权限管理来实现的强制访问控制。
但是这些安全机制通常也保护不了用户的隐私,最要原因是:
1. 缺乏强势统一的Android应用审核机构,permission机制不支持部分授权,导致用户的授权被滥用。
2. 组件通讯机制带来很大的灵活性的同事,也破坏了沙箱的密封性。如果app有漏洞的话,数据很可能很被恶意程序获取,甚至有可能被用来提权或者作为攻击代理。
3. 存在具有所有权限的超级用户root。恶意程序一旦获取到root权限,那么将绕过所有Android系统的安全机制。
4. 公共wifi,这是一个普遍存在的问题。数据没有加密,中间人攻击。
表(一) Android系统的安全机制
系统架构层 | 安全机制 | 描述 | |
内核&操作系统系统层 | 硬件层 | MMU | 利用硬件机制来保证地址空间的隔离 |
Linux内核原有 | POSIX | 自主访问控制(文件访问控制等) | |
沙箱机制 | random uid/gid + chroot() + capability沙箱机制,它是Android应用沙箱的基础 | ||
加密 | 实现AES, RSA, DSA和SHA等加密算法,提供SSL和HTTPS等上层协议。Android4.0引入了KeyChain | ||
其它特性 | LSM,加密文件系统,审计,进程隔离, | ||
Android修改 | 内存管理模型 | Low Memory Killer机制等,支持Address Space Layout Randomization (ASLR)等 | |
Binder | 安全通讯机制,支持类型安全检查 | ||
安全模式 | 只加载系统中的包含的核心应用 | ||
Bootloader | 刷机之前必须清除用户数据,防止非法访问 | ||
本地库&运行环境 | Dalvik | 类型安全,对数据类型强制检查,避免缓冲区溢出攻击 | |
DRM | 提供了一个可扩展的DRM框架 | ||
应用框架 | 应用签名 | 确保更新的真实性; 以相同密钥签名的应用能够共享签名级别的权限(signature-level permissions)、, user-id(文件资源)和运行进程。 | |
Permission | 应用程序只有得到权限许可后,才能执行可能会影响到系统或其它应用的操作 | ||
组件封装 | 进程间安全的通讯 | ||
用户安全特性 | 所有文件系统加密 | 要求用户使用口令锁屏,不支持手势 | |
口令保护 | 除了可以保护未经授权就使用设备,还用来对文件系统加密时所使用的加密密钥进行加密 | ||
设备管理 | 当设备丢失时,可以远程擦除数据 | ||
可信存储 | 包含有与定义的CA;从4.0开始用户可以删除或者导入CA;4.1开始增加hardware-backed KeyChain,可以将私钥与其存储设备进行绑定。 | ||
VPN | 提供支持PPTP,L2TP,IPsec的VPN客户端;4.0引入了VpnService类,支持第三方VPN解决方案;4.2允许用户设置应用永远只能通过VPN接入网络。 | ||
其它的一些安全特性 | Bouncer | 是一个恶意软件扫描器, | |
App检测服务 | 在应用安装之前对其进行评估 | ||
SIM 3A | 禁止第三方直接访问SIM卡,由操作系统负责 | ||
系统自身可信 | 系统安全启动 | Bootloader验证加载的内核的签名 | |
系统远程安全升级 | OTA + recovery签名验证 |