1. Android安全概述:Android安全模型演进、安全架构总览、攻击面分析
各位同学,咱们今天聊聊Android安全这个大话题。说实话,我做了这么多年系统安全,每次跟新人聊这个,都会先问一个问题:你觉得Android安全吗?
答案其实挺微妙的。Android不是天生安全,而是通过一层层的机制堆叠出来的。我2015年刚入行时,还见过一些老设备连基本的文件加密都没有。嗯,那时候的Android安全,说白了就是个「筛子」。
但今天不一样了。从Android 1.0到现在的14、15,安全模型经历了翻天覆地的变化。咱们这一章,就把整个安全架构的演进脉络、核心组件、以及攻击面,一次性讲清楚。
1.1 Android安全模型演进:从「信任一切」到「零信任」
先看一张图,这是我个人习惯——每次讲架构前,先画个全景图,心里才有底。
这张图我画了好几次才满意。你仔细看,从1.0到14,安全策略其实就一个核心逻辑:从「信任一切」走向「零信任」。
早期Android(1.0-4.4)的沙箱,说白了就是给每个App分配一个UID,文件权限靠Linux那套。但问题是——root用户权限太大。我记得2013年那会儿,随便一个漏洞提权到root,整个系统就裸奔了。
到了5.0,Google终于把SELinux强制开启了。我当时在项目里做系统集成,第一次看到SELinux策略拒绝日志时,整个人都懵了——「这玩意儿怎么这么严格?」但后来我明白了,严格才是对的。
1.2 安全架构总览:四层防御体系
Android的安全架构,我习惯把它分成四层。每一层都像一道防线,攻破一层还有下一层。
| 层级 | 核心组件 | 保护目标 | 我的经验 |
|---|---|---|---|
| 应用层 | 权限模型、签名验证、应用沙箱 | 防止恶意App窃取数据 | 我曾经见过一个App申请了「读取联系人」权限,结果把整个通讯录上传了。权限模型就是防这个的。 |
| 框架层 | Binder IPC、权限检查、服务管理 | 控制组件间通信 | Binder是Android的「血管」,我调试过无数次Binder死锁,每次都是权限检查没通过。 |
| 内核层 | SELinux、DM-Verity、密钥管理 | 防止内核被篡改 | DM-Verity这玩意儿,我第一次配的时候搞错了哈希树,系统直接起不来。嗯,教训深刻。 |
| 硬件层 | TEE、安全元件、指纹/人脸 | 保护密钥和生物特征 | TEE里的密钥,连系统本身都读不到。这才是真正的「硬件级安全」。 |
你想想看,一个攻击者想搞事情,得先过应用层的权限检查,再绕过框架层的Binder限制,还得突破内核的SELinux策略,最后还得搞定硬件TEE。这难度,不是一般的高。
1.3 攻击面分析:黑客最喜欢「打」哪里?
讲完了防御,咱们聊聊攻击。我这些年做安全审计,见过太多漏洞了。总结下来,攻击面主要集中在三个方向。
1.3.1 应用层攻击面
- 权限滥用:App申请了「短信权限」,然后偷偷读取验证码。我见过一个案例,某天气App居然申请了「通话记录」权限——你一个看天气的,要通话记录干嘛?
- 组件暴露:Activity、Service、ContentProvider没加权限保护,被恶意App直接调用。我曾经在审计时发现一个银行App的ContentProvider居然可以无密码查询用户余额——这简直是送分题。
- WebView漏洞:JavaScript接口暴露,导致XSS攻击。嗯,这个坑我踩过,后面章节会细讲。
1.3.2 框架层攻击面
- Binder提权:通过Binder调用系统服务,利用服务端的漏洞提权。我记得有个CVE-2020-0041,就是通过Binder搞的。
- 权限提升:利用系统漏洞,从普通App权限提升到系统权限。说白了,就是「以小博大」。
- 服务劫持:伪造系统服务,欺骗App发送敏感数据。
1.3.3 内核层攻击面
- 驱动漏洞:GPU驱动、Wi-Fi驱动、蓝牙驱动,这些第三方代码质量参差不齐。我见过一个Wi-Fi驱动,居然有缓冲区溢出——连个边界检查都没做。
- SELinux策略绕过:虽然SELinux很严格,但策略配置不当就会留后门。我曾经在项目里发现一条策略允许「所有域」访问「所有文件」——这跟没开SELinux有什么区别?
- Bootloader解锁:解锁Bootloader后,整个信任链就断了。所以现在很多厂商都加了「熔断机制」——解锁后某些功能永久失效。
1.4 攻击面全景图
下面这张图,是我自己整理的攻击面全景。每次做安全评估,我都会对着这张图逐项检查。
你看,攻击面其实很广。但好消息是,Google和各大厂商也在不断加固。比如Android 12引入了「隐私指示器」,App用摄像头时状态栏会亮绿灯——这招挺狠的,直接让偷拍无所遁形。
1.5 本章小结
好了,这一章的内容就这些。咱们回顾一下核心要点:
- 安全模型演进:从「信任一切」到「零信任」,SELinux强制开启是分水岭。
- 四层防御体系:应用层→框架层→内核层→硬件层,层层递进。
- 三大攻击面:应用层(权限、组件)、框架层(Binder、服务)、内核层(驱动、SELinux)。
说实话,Android安全是个大话题,光这一章肯定讲不完。但有了这个全景图,后面的内容你就知道该往哪个方向深入了。
嗯,下一章咱们会深入权限模型——那个让无数开发者头疼的玩意儿。到时候我会分享一些「骚操作」,比如怎么在合规的前提下申请最少权限。敬请期待。
公众号:蓝海资料掘金营,微信deep3321