H-Binder:安卓系统中强化的Binder框架
1. 系统调用拦截与保护
1.1 系统调用控制流钩子
为防止rootkit篡改向量页或钩子页的物理地址以绕过拦截,虚拟机管理程序(hypervisor)会冻结从向量页到钩子代码的控制流路径,具体步骤如下:
1. 将HCR的陷阱虚拟内存(TVM)位设置为0 × 1,以拦截内核对SCTLR和转换表基址寄存器1(TTBR1)的写访问,阻止对SCTLR.V位和TTBR1的所有更改。
2. 从TTBR1指向的一级页表根开始遍历,找到指向向量页的页表页(向量页地址取决于SCTLR.V位,为0×00000000或0×FFFF0000),通过配置二级页表将此路径上的所有页面设置为只读,防止向量页物理地址被重新映射。
3. 同样从TTBR1指向的一级页表根开始遍历,找到指向钩子代码页的页表页,若对该路径上的页面更新影响钩子代码映射,则不允许更新。
4. 将向量页和钩子代码页都设置为只读,防止内核篡改其内容。
通过这些步骤,系统调用时硬件能在预定义地址定位向量页和钩子页,且因页面只读,能按预期执行正确的钩子代码。
1.2 系统调用返回的线程级拦截
系统调用返回时不会抛出异常,为拦截该事件,需注入异常。由于线程不共享栈,可通过操作相关线程的用户空间栈,使系统调用返回后的栈操作被捕获到虚拟机管理程序。具体步骤如下:
1. 将一个空的物理内存页映射到目标应用的堆中,此页称为保险库页(vault page),虚拟机管理程序通过配置二级页表将其设置为不可访问,以引入页面错误异常。保险库页需映射到应用的虚拟地址空间,否则异常将被内核捕获。
2. 当发出接
H-Binder:强化安卓Binder安全
超级会员免费看
订阅专栏 解锁全文
980

被折叠的 条评论
为什么被折叠?



