第四章:深入系统底层 —— Root提权与内核漏洞

1. 为什么应用层不够了?

在前三章,我们假设App运行在一个"受限"的环境里。但作为渗透测试员,我们的目标是**"全设备控制"**。

场景引入:

某银行App做了极致的防御:

  • 检测 Frida(第二章失效)。

  • 使用双向证书认证(第三章失效)。

  • 核心逻辑写在云端。

**此时怎么办?**​

唯一的出路是:获取系统最高权限(Root)。

一旦有了 Root,你就是手机的"上帝"。你可以修改系统文件、绕过所有App的防御、直接读取App的私有内存数据。


2. Root方案演进:从"修改系统"到"无痕隐身"

在安卓早期,Root 意味着直接修改 /system分区(如 SuperSU)。但现代安卓引入了 AVB(Android Verified Boot),修改系统分区会导致手机无法开机。

2.1 现代Root神器:Magisk

如今,Magisk 是事实上的 Root 标准。它的核心思想是 "系统less"(无系统修改)。

  • 原理 :不修改 /system,而是修改 Boot 镜像(boot.img)。

  • 优势:

    1. 隐藏 Root:通过 Magisk Hide(或 DenyList),可以让特定的App(如银行App)检测不到 Root 环境。

    2. 模块化:像插件一样安装功能(如广告屏蔽、内核调节)。

2.2 实例:绕过Root检测

很多App会执行 which su或检查 /sbin/su文件。

绕过手法:

  1. 在 Magisk 设置中开启 Zygote 注入。

  2. 将目标App加入 DenyList。

  3. 原理 :当App启动时,Magisk 会在系统层面"欺骗"它,让它以为系统里根本没有 su这个程序。


3. 实战一:从"普通App"到"系统应用"

拥有 Root 权限后,我们能做什么?

目标:读取其他App的私有数据。

安卓规定:App A 无法读取 App B 的数据目录(/data/data/com.bank.app/)。

攻击步骤:

  1. 使用 ADB 获取 Root Shell:

    bash 复制代码
    adb shell
    su  # 获取Root权限,此时提示符变为 #
  2. 直接访问银行App的数据库:

    bash 复制代码
    cd /data/data/com.bank.app/databases/
    sqlite3 user.db
    .dump  # 导出所有用户数据

    结果:

    无需逆向,无需Hook,直接像打开文件夹一样偷走所有数据。


4. 实战二:利用内核漏洞提权(CVE)

如果你的手机无法解锁 Bootloader (例如某些国产机),或者没有现成的 Magisk 方案 ,你需要使用 内核漏洞(Kernel Exploit)。

4.1 什么是内核漏洞?

安卓基于 Linux。Linux 内核偶尔会出现代码错误(如缓冲区溢出)。攻击者可以编写一个程序(Exploit),利用这个错误,从"普通用户"跳到"系统内核(Ring 0)",从而获取 Root。

4.2 经典案例:Dirty COW (CVE-2016-5195)

这是历史上最著名的内核漏洞之一。

  • 原理 :Linux 内核在处理内存写操作时存在竞态条件,允许普通用户写入只读文件(如 /etc/passwd)。

  • 安卓利用:

    1. 编译 Dirty COW 的 POC(概念验证代码)。

    2. 在安卓上运行,它会修改系统的 system_server进程。

    3. 结果:手机被 Root。

现状:

现代安卓(Android 10+)已经修补了大多数老旧漏洞,但碎片化是安卓的噩梦。很多旧设备(尤其是IoT设备、车机系统)依然跑着有漏洞的老内核。


5. 实战三:Bootloader 漏洞与物理攻击

如果软件层面都防住了,攻击者还能怎么做?物理接触。

5.1 场景:捡到一部锁屏的手机

目标:在不解锁屏幕的情况下,窃取数据。

  1. Fastboot 模式:关机状态下,按住音量键+电源键进入。

  2. 漏洞利用:某些厂商的 Bootloader 存在漏洞(如 MTK 芯片的某些版本),允许未授权刷入 Recovery。

  3. 刷入 TWRP:这是一个第三方恢复系统。

  4. 挂载 Data 分区 :进入 TWRP,直接复制 /data目录到 SD 卡。

防御:

现代手机开启了 "安全启动(Verified Boot)"。如果 Bootloader 被解锁,或者系统被篡改,手机会变成"砖头"或清除所有数据(Factory Reset Protection)。


6. 防御方视角:系统级加固

作为厂商或高安全需求用户,如何防御 Root 和内核攻击?

  1. SELinux(强制访问控制):

    安卓的安全基石。即使你拿到了 Root(UID 0),SELinux 也能限制你能做什么。例如,禁止 Root 进程读取 /data/data目录。

    (攻击对抗:攻击者会尝试 setenforce 0关闭 SELinux。)

  2. 内核补丁:

    及时更新系统,修补 Dirty COW 等高危漏洞。

  3. 硬件安全:

    • TrustZone:将指纹、支付密钥存储在独立的硬件区域,即使 Root 也无法读取。

    • AVB 2.0:防止 Boot 镜像被篡改。


7. 总结:渗透测试的边界

到了这一章,我们已经触及了安卓安全的底线。

  • 应用层(一、二、三章):关注"代码逻辑"。

  • 系统层(第四章):关注"权限与控制"。

重要提醒:

利用内核漏洞攻击未授权的设备是违法行为。在真实渗透测试中,如果你发现目标设备存在内核漏洞,正确的做法是:

  1. 记录漏洞(CVE编号)。

  2. 评估危害(Local Privilege Escalation)。

  3. 建议厂商升级内核。


最终章预告:

《第五章:后渗透与防御对抗 ------ 隐身、持久化与取证》

拿到 Root 后,如何长期控制设备而不被发现?如何清理痕迹?以及,作为蓝队(防御方),如何在服务器日志和手机行为中发现这些入侵痕迹?

相关推荐
桐盛科技3 小时前
中央空调全链路管控:基于边缘计算的负荷预判与安全联锁实现
物联网·安全·能源·边缘计算
manok3 小时前
软件供应链安全数据周报|2026-10-19 ~ 2026-10-25
安全·供应链安全
迪康coolmu3 小时前
金融客户数据合规落地:基于迪康端点安全一体化管理系统的四道防线实践
运维·服务器·数据库·经验分享·安全·网络安全·金融
和芯星通unicore4 小时前
汽车GNSS保护等级PL赋能智能辅助驾驶安全
安全·汽车·gnss·智能驾驶·辅助驾驶·驾驶安全
努力实干4 小时前
第二阶段 · 第 7 课:C++ 多线程与线程安全
开发语言·c++·安全
LMT_Lanmantech4 小时前
Synopsys Verdi安全合规:风险、审计与应对
安全·软件许可证
SatanII4 小时前
Kubernetes 认证与授权详解:守护集群API访问安全
安全·贪心算法·kubernetes
安协技术部门4 小时前
安全光栅与红外报警器安全回路设计有什么区别?
安全·制造
Godspeed Zhao4 小时前
具身智能系统概论——系统安全与可靠性
安全·系统安全