综述
-
Android系统安全性分为客户端安全和云服务安全。
- 客户端安全主要分为:核心平台和应用程序两大部分。其中,核心平台包括设备硬件、Android操作系统、Android应用程序运行环境。应用程序分为:预装应用程序和用户安装的应用程序。
-
云服务安全主要指的是:
- Android Market:提供用户从Andoird设备或Web上发现、安装和购买应用程序,还提供社区审查,应用程序授权验证和其他安全服务;
- Android Updates: OTA(over the air)更新
- Application Serivces: 支持Android应用程序使用云服务来实现类似备份应用程序数据和设置,还包括C2DM(cloud-to-device messaging)来实现消息推送。
Android平台安全架构
Android平台致力于重新定义传统操作系统的安全控制目标为:
- 保护用户数据
- 保护系统资源(包括网络)
- 提供应用程序隔离
为了达到以上控制目标,Android提供以下关键安全特性:
- 通过Linux内核加强操作系统级别的安全可靠性
- 强制所有应用程序的沙盒机制
- 安全加固的进程间通信
- 应用程序签名
- 应用程序定义和用户授权机制
系统和内核层安全
-
Linux内核所提供的安全特性
- 基于用户的权限模型
- 进程隔离
- 安全IPC的可扩展机制
- 按需移除非必需和潜在不安全的内核模块
-
作为一个多用户的操作系统,用户资源隔离机制非常重要。Linux:
- 防止用户A读取B的文件
- 确保用户A无法耗尽用户B的内存
- 确保用户A无法耗尽用户B的CPU资源
- 确保用户A无法耗尽用户B的设备(例如:电话、GPS、蓝牙)
- Android系统给每一个Android应用程序分配一个独立的UID并确保运行在一个独立进程中
- 默认设置:应用程序相互之间无法互操作,应用程序对操作系统的访问受限
- 原生代码的安全性和解释代码的安全性相同
- Android 3.0及后续版本引入了系统层面的文件系统加密支持
- Android 2.2及后续版本引入了设备管理API,支持系统层面的管理:管理员可以远程擦除数据!
内存管理安全加固
- ASLR:地址空间随机化布局
- 硬件NX:防止堆栈代码执行
- ProPolice机制:防止栈溢出
- safe_iop:减少整数溢出
- 扩展了OpenBSD的dlmalloc预防double free()相关漏洞和chunk consolidation类堆破坏攻击
- 内存分配时使用OpenBSD的calloc来防止整数溢出
- Linux的mmap_min_addr()机制缓和null指针释放引起的权限提升漏洞危害
- 设备口令可以用于保护用户数据不被root权限用户获取
Android应用程序安全
Android应用程序组成模块:
- AndroidManifest.xml
- Activities
- Services
- Broadcast Receiver
Andoird权限模型
访问受保护API:
- 相机功能
- 位置数据(GPS)
- 蓝牙功能
- 电话功能
- SMS/MMS功能
- 网络数据连接
用户无法对单个权限进行授权,只能接受或拒绝所有授权请求
进程间通信
- 传统的UNIX进程间通信机制
-
新IPC机制:
- Binder
- Services
- Intents
- ContentProviders
消费敏感API
- 电话
- SMS/MMS
- 网络/数据通信
- In-App付费
- NFC访问