提问人:Coder 提问时间:8/2/2017 最后编辑:oxr463Coder 更新时间:11/14/2021 访问量:944
通过内核模块在 ARMv7 上进入虚拟机监控程序模式
Enter Hypervisor Mode on ARMv7 through Kernel Module
问:
我正在做一个项目,我有一个带有 ARMv7 处理器 (Cortex A15) 和 OpenWRT OS 的路由器。我在路由器上有一个 shell,可以使用 .insmod
我的目标是用 C 编写一个内核模块,该模块更改 HVBAR 寄存器,然后执行 hvc 指令以使处理器处于 hyp 模式。 这是一个科学项目,我想检查是否可以将自己的虚拟机管理程序放在正在运行的系统上。但是在我开始编写自己的虚拟机管理程序之前,我想检查一下是否可以以及如何将处理器带入 hyp 模式。
根据 armv7-a 手册 B.9.3.4 中的这张图片,系统必须处于不安全模式,而不是用户模式和 SCR。HCE 位必须设置为 1。
我的问题是我如何准备带有 C 内核模块和内联汇编的处理器,然后执行 hvc 指令。我想用内核模块来做到这一点,因为那时我从 PL1 开始。这个伪代码描述了我想要实现的目标:
- 调用 SMC // 进入监控模式
- 设置 SRC。HCE 到 1 // 启用 hvc 指令
- 设置 SRC。NS 设置为 1 // 将系统设置为不安全
- call hvc #0 // 调用 hvc 指令生成虚拟机管理程序异常
答:
提升权限的最简单方法是从所需的权限模式开始:您有一个 root shell。启动链是否经过验证?你能替换引导加载程序或内核,这样你的代码就可以自然地在PL2(HYP)模式下运行吗?如果是这样,这可能是最简单的方法。
如果您无法替换引导链的相关部分,那么编写 rootkit 的细节很大程度上取决于遗漏的有关系统的信息: Linux 以哪种模式启动?KVM 支持是否已启用并处于活动状态?PL2 是否初始化?它被锁住了吗?是否有可以利用的“安全”固件?
目标始终是一样的:指向一些你可以控制的代码,然后做一个.根据您的环境,解决方案可能包括尽可能多地使用您的代码喷洒 RAM,并希望(也许在重新启动一段时间后)未初始化的 HVBAR 会指向您控制的指令,以及禁止 KVM 运行并访问早期的虚拟机管理程序存根以自行安装。HVBAR
hvc
列举此类漏洞有点超出了 StackOverflow 答案的范围;这是相当的论文材料。事实上,有一篇关于这个主题的博士论文:
评论