虚拟化技术中的系统调用与处理器状态解析
1. 拦截机制与超调用控制
1.1 拦截类型识别
当 VTL 0 软件引发的拦截将在 VTL 1 中触发时,安全内核需要从其中断服务例程识别拦截类型。它借助 SynIC 为“拦截”合成中断源分配的消息队列实现此目的。同时,安全内核可通过检查由管理程序虚拟化的 SIMP 合成 MSR 来发现并映射物理内存页,此映射操作在 VTL 1 的安全内核初始化时执行。
1.2 保护敏感内核部分
HyperGuard 广泛使用拦截机制来保护正常 NT 内核的敏感部分。若 NT 内核中的恶意 rootkit 试图通过向受保护寄存器写入特定值来修改系统,安全内核的拦截处理程序(ShvlpInterceptHandler)会过滤新寄存器值。若该值不可接受,将向 VLT 0 中的 NT 内核注入通用保护故障(GPF)不可屏蔽异常,导致系统立即进行错误检查并停止;若值可接受,安全内核会通过 HvSetVpRegisters 超调用借助管理程序写入寄存器的新值。
1.3 超调用拦截控制
安全内核向管理程序注册的最后一种拦截类型是超调用拦截。其处理程序会检查 VTL 0 代码向管理程序发出的超调用是否合法,是否源自操作系统本身而非外部模块。每次在任何 VTL 中发出超调用时,都会在管理程序中引发 VMEXIT。管理程序仅针对直接向其请求服务的超调用,向更高 VTL 注入合成拦截中断,跳过用于安全和正常调用安全内核的超调用。若超调用无效,将不会执行,安全内核会更新较低 VTL 的寄存器以发出超调用错误信号,系统不会崩溃,调用代码可自行决定如何处理错误。
超级会员免费看
订阅专栏 解锁全文
4004

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



