Android 系统排查
· 10 分钟

Root Android 的检测面:用户态信号与硬件证明边界

这份索引按观察层整理原设备排查:包、特性、权限、属性、挂载、日志和硬件证明。表格记录的是那套环境中的本地修改或剩余限制,不是对所有 App、ROM、硬件信任根或服务端判定的保证。

+-------------------+----------------------+-------------------+
|  Detection Path   | Mitigation Layer     | Status            |
+-------------------+----------------------+-------------------+
| PM Binder Calls   | system_server hook   | Resolved          |
| Build Fingerprint | resetprop (init)     | Resolved          |
| Su Binaries       | Mount Namespace      | Resolved          |
| /proc Enum        | hidepid=invisible    | Resolved          |
| Lineage Services  | SELinux sepolicy     | Resolved          |
| Device Logcat     | LogcatManagerService | Resolved          |
| Hardware Certs    | Keymaster/TEE        | Hardware Limit    |
| Isolated /proc    | Kernel / Boot image  | Hardware Limit    |
+-------------------+----------------------+-------------------+

我们在用户态实施了所有可能的伪装,按调用方(Binder.getCallingUid)过滤响应,让 App 进程无需加载注入代码。处理完这些接口后,仍有两处无法通过用户态修改解决。

一个是 Shamiko 式挂载命名空间隔离带来的副作用。隔离隐藏了 Magisk 的 bind-mount,却向 App 暴露了干净、未经篡改的 /proc/cmdline 和 /proc/version。由于模块被隔离在 App 外部,我们失去了修改该命名空间的能力,除非直接重写引导镜像或内核。

另一个则是 TEE 签名。在硬件认证机制中,硬件加密模块根据自身测量的 Bootloader 状态,使用固化在硅片上的私钥签发出一条包含 deviceLocked=false 的凭证。这条证书链直达 Google 出厂的公钥锚点。支付后端校验证书签名时,能识别上层 hook 和数据修改。用户态无法取得硬件私钥,也就无法替换这条签名链。

硬件证明边界可对照 Wallet 绑卡排查,验证方法则见应用上下文审计。

androiddetectionsynthesisrasp

评论