1. Android安全概述:Android安全模型演进、安全架构总览、攻击面分析

各位同学,咱们今天聊聊Android安全这个大话题。说实话,我做了这么多年系统安全,每次跟新人聊这个,都会先问一个问题:你觉得Android安全吗?

答案其实挺微妙的。Android不是天生安全,而是通过一层层的机制堆叠出来的。我2015年刚入行时,还见过一些老设备连基本的文件加密都没有。嗯,那时候的Android安全,说白了就是个「筛子」。

但今天不一样了。从Android 1.0到现在的14、15,安全模型经历了翻天覆地的变化。咱们这一章,就把整个安全架构的演进脉络、核心组件、以及攻击面,一次性讲清楚。

1.1 Android安全模型演进:从「信任一切」到「零信任」

先看一张图,这是我个人习惯——每次讲架构前,先画个全景图,心里才有底。

Android安全模型演进时间线 1.0 - 4.4 沙箱雏形 无SELinux 权限粗放 5.0 - 6.0 SELinux强制 运行时权限 全盘加密 7.0 - 9.0 文件级加密 Treble架构 密钥认证 10 - 14 分区加密 隐私沙盒 零信任 安全强度逐渐增强 → 关键转折点: • Android 5.0:SELinux从「宽容模式」切到「强制模式」,这是质的飞跃 • Android 6.0:运行时权限模型,用户终于可以「拒绝」权限了 • Android 10+:分区加密 + 隐私沙盒,应用之间彻底隔离

这张图我画了好几次才满意。你仔细看,从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。这难度,不是一般的高。

核心观点:Android安全不是「铁板一块」,而是「洋葱模型」——你剥开一层,还有一层。每一层都只信任上一层的验证结果。

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 攻击面全景图

下面这张图,是我自己整理的攻击面全景。每次做安全评估,我都会对着这张图逐项检查。

Android攻击面全景图 应用层攻击面 • 权限滥用 • 组件暴露 • WebView XSS • 数据存储泄露 • 网络通信劫持 • 动态加载恶意 代码 • 日志信息泄露 框架层攻击面 • Binder提权 • 权限提升漏洞 • 服务劫持 • 广播接收器 滥用 • ContentProvider SQL注入 • 系统服务漏洞 内核层攻击面 • 驱动漏洞 • SELinux策略 绕过 • Bootloader解锁 • 内核内存破坏 • 文件系统漏洞 • 密钥泄露 • 硬件接口攻击 攻击者通常从「最薄弱」的环节入手,比如驱动漏洞或权限滥用

你看,攻击面其实很广。但好消息是,Google和各大厂商也在不断加固。比如Android 12引入了「隐私指示器」,App用摄像头时状态栏会亮绿灯——这招挺狠的,直接让偷拍无所遁形。

我的建议:做安全开发,别想着「面面俱到」——那不可能。先把应用层和框架层的常见漏洞堵住,再逐步深入内核和硬件。我个人的习惯是:先做「威胁建模」,找出最关键的资产,然后重点保护

1.5 本章小结

好了,这一章的内容就这些。咱们回顾一下核心要点:

  • 安全模型演进:从「信任一切」到「零信任」,SELinux强制开启是分水岭。
  • 四层防御体系:应用层→框架层→内核层→硬件层,层层递进。
  • 三大攻击面:应用层(权限、组件)、框架层(Binder、服务)、内核层(驱动、SELinux)。

说实话,Android安全是个大话题,光这一章肯定讲不完。但有了这个全景图,后面的内容你就知道该往哪个方向深入了。

嗯,下一章咱们会深入权限模型——那个让无数开发者头疼的玩意儿。到时候我会分享一些「骚操作」,比如怎么在合规的前提下申请最少权限。敬请期待。


公众号:蓝海资料掘金营,微信deep3321