Android 安全架构
2026/8/30大约 4 分钟
Android 安全架构
面试高频指数:高 Android 用"纵深防御"构建安全体系:应用沙箱隔离进程、权限控制能力、签名确认身份、加密保护数据、SELinux 兜底内核访问。理解整体框架才能串联各安全知识点。
1. 安全模型总览
Android 安全四层:
① 应用沙箱(进程隔离)
每个应用独立 UID/进程/数据目录
② 权限模型(能力控制)
危险权限运行时申请、细粒度
③ 签名体系(身份确认)
应用签名、系统签名、密钥轮换
④ 数据加密(静态保护)
全盘/文件加密、Keystore 密钥
底层兜底:SELinux(MAC)强制访问控制| 层 | 保护对象 | 机制 |
|---|---|---|
| 沙箱 | 进程/数据 | UID 隔离 + SELinux |
| 权限 | 系统能力 | Permission 运行时申请 |
| 签名 | 应用身份 | APK 签名 v1-v4 |
| 加密 | 存储数据 | FBE + Keystore |
2. 应用沙箱
2.1 沙箱原理
应用沙箱:
- 每个应用安装时分配独立 UID
- 独立进程(或共享 UID 组)
- 独立数据目录(/data/data/<pkg>)
- 默认无法访问他人数据
进程视角:
应用进程运行在受限 UID 下
→ 无法读系统文件/他人数据
→ 系统服务通过 Binder 提供能力
共享 UID(sharedUserId):
- 同签名应用可共享
- 现代开发不推荐(已被隔离替代)2.2 数据隔离
数据隔离:
- 应用私有目录权限 700
- 其他 UID 无法访问(DAC)
- SELinux 标签再次隔离(MAC)
- 外部存储经 FUSE 按 UID 过滤
Android 11+:
- 应用数据目录不再可被直接访问
- 备份/迁移走系统机制3. 权限模型
3.1 权限分类
权限级别:
- normal:安装即授予(网络等)
- dangerous:运行时申请(相机/定位)
- signature:同签名授予(系统能力)
- privileged:特权(系统应用)
- signature|privileged:升级兼容
运行时权限流程:
请求 → 系统弹窗 → 授予/拒绝
→ 用户可随时撤销(设置)
→ 拒绝后可解释(shouldShowRequestPermissionRationale)3.2 权限实现
权限校验位置:
- 系统服务端(AMS/PMS 等)
- Binder 调用时检查(PermissionController)
- 应用自身也可声明自定义权限
权限组:
- 同一组的权限共享弹窗
- 授予一个可能授予整组(旧版)
最佳实践:
- 最小权限原则
- 场景化请求(使用时再申请)
- 处理拒绝与"不再询问"4. 签名体系
4.1 签名作用
应用签名作用:
① 应用身份唯一性
② 升级校验(同签名才能覆盖安装)
③ 系统权限授予依据
④ 防篡改(内容校验)
签名方案:
- v1:JAR 签名(校验所有文件)
- v2:全文件签名(Android 7.0+)
- v3:密钥轮换(Android 9+)
- v4:增量更新签名(Android 11+)4.2 系统签名
系统签名:
- platform key 签名 = 系统级权限
- 可与系统共享 UID(system)
- 可访问隐藏 API/系统服务
厂商签名:
- OEM key:厂商专属能力
- 与系统 key 分离(防滥用)
- 安全更新需密钥匹配5. 数据加密
5.1 加密体系
加密层次:
① FBE(文件级加密):
DE(设备加密)+ CE(凭据加密)
② Keystore(密钥库):
密钥安全存储(TEE/StrongBox)
③ 传输加密:
TLS/HTTPS(网络层)
④ 备份加密:
云备份加密保护
密钥链:
Keystore 主密钥 → FBE 密钥
→ 加密数据5.2 安全硬件
安全硬件:
- TEE(Trusted Execution Environment)
独立安全世界,密钥不落地
- StrongBox(独立安全芯片)
更强的密钥保护(指纹/支付)
用途:
- 指纹/人脸模板存储
- 支付签名
- 密钥无法导出(仅用不取)6. SELinux 兜底
SELinux 角色:
- 强制访问控制(MAC)
- 进程/文件/Binder 调用全部受限
- 即使 root 也受 policy 约束
- 防提权漏洞扩大化
与沙箱关系:
- 沙箱是 DAC(UID)层隔离
- SELinux 是 MAC 层隔离
- 双层防护,纵深防御7. 高频面试题
Q1:Android 安全架构有哪些层次? A:应用沙箱(进程隔离)、权限模型(能力控制)、签名体系(身份确认)、数据加密(FBE/Keystore),底层 SELinux 兜底。
Q2:应用沙箱怎么隔离? A:每个应用独立 UID、独立进程、独立数据目录;默认无法访问他人数据;SELinux 在 MAC 层再加一层隔离。
Q3:运行时权限和安装时权限区别? A:normal 权限安装即授予;dangerous 权限运行时弹窗申请,用户可随时撤销;signature 权限仅同签名授予。
Q4:应用签名有什么作用? A:确认身份、保证升级校验、授予系统权限依据、防篡改;v1-v4 方案演进支持密钥轮换与增量更新。
Q5:TEE 和 StrongBox 是什么? A:安全执行环境,密钥存于安全硬件无法导出;StrongBox 是独立安全芯片,用于指纹/支付等高安全场景。
8. 小结
- 安全四层:沙箱 / 权限 / 签名 / 加密。
- SELinux 兜底内核级强制访问控制。
- 沙箱隔离进程与数据(UID + MAC)。
- 运行时权限最小化、场景化申请。
- Keystore + TEE 保护密钥与敏感数据。