Cod*_*der 10 c virtualization arm openwrt hypervisor
我正在开发一个项目,我有一个带有ARMv7处理器(Cortex A15)和OpenWRT OS的路由器.我在路由器上有一个shell,可以使用insmod加载内核模块.
我的目标是在C中编写一个内核模块,它更改HVBAR寄存器,然后执行hvc指令以使处理器处于hyp模式.这是一个科学项目,我想检查一下我是否可以将自己的虚拟机管理程序放在正在运行的系统上.但在我开始编写自己的虚拟机管理程序之前,我想检查是否以及如何将处理器置于hyp模式.
根据这张图片来自armv7-a手册B.9.3.4,系统必须处于非安全模式,而不是用户模式,SCR.HCE位必须为1.
我的问题是如何使用C内核模块和内联汇编来准备处理器,然后执行hvc指令.我想用内核模块做这个,因为我从PL1开始.这个伪代码描述了我想要实现的目标:
提升权限的最简单方法就是从所需的权限模式开始:您拥有一个 root shell。启动链是否经过验证?您能否替换引导加载程序或内核,以便您的代码自然地在 PL2 (HYP) 模式下运行?如果是这样,这可能是最简单的方法。
如果您无法替换引导链的相关部分,则编写 Rootkit 的细节在很大程度上取决于您所遗漏的系统信息:Linux 以哪种模式启动?KVM 支持是否已启用并处于活动状态?PL2 是否已初始化?被锁了吗?是否有可以利用的“安全”固件?
目标始终是相同的:指向HVBAR一些您可以控制的代码并执行hvc. 根据您的环境,解决方案可能包括使用代码喷射尽可能多的 RAM,并希望(可能在重新启动后)未初始化的 HVBAR 将指向您控制的指令,以及禁止 KVM 运行和访问早期虚拟机管理程序存根以自行安装反而。
列举此类漏洞有点超出 StackOverflow 答案的范围;这是论文材料。事实上,有一篇博士论文正是关于这个主题的:
通过基于管理程序的安全机制增强 ARMv7 处理器架构上的系统安全性