-
-
[分享学习]VT-x虚拟化与内核驱动R0之间的关系
-
发表于: 14小时前 74
-
在接触内核开发的过程中, 无法避免的会常听到vt虚拟化技术, 之前一致不太理解但为了学习还是要搞懂才好, 在查询了一些资料后, 我来说说自己对其的理解:
首先, 从传统的系统结构来看, 分为 硬件->内核层(Ring 0)->应用层(Ring 3), 但在启动了VT-x并且启用了 Hyper-V后结构系统结构就变成了 硬件->Hyper-V(Ring -1)->内核层(Ring 0)->应用层(Ring 3)
简单来说, 虚拟化(Virtualization)是通过一个“虚拟机监控器”(Hypervisor / VMM),在一台物理机器上运行多个“虚拟的操作系统”。
其核心能力为:
1.拦截并控制 CPU 指令
2.虚拟化内存(EPT/NPT)
3.虚拟化中断
4.虚拟化设备
比如VMware就是虚拟化技术的其中一种实现, 核心思路也是通过拦截并控制 CPU 指令来实现的
但不同的是VMware VirtualBox这些虚拟虚拟化软件都是运行在宿主机上的, 而Hyper-V直接运行在内核之上
总结就是如果内核是Ring 0, 那么虚拟化就是Ring -1, 在虚拟化上的操作对于Ring 0来说是透明的, 自然也就能监控Ring 0的操作
那么反作弊系统是如何利用虚拟化监控内存读写的呢?
传统内存访问流程(无虚拟化)为: 虚拟地址->页表(CR3)->物理地址->访问内存 这时内核拥有最终控制权。
但在启用虚拟化后的访问流程为: Guest 虚拟地址->Guest 页表(CR3)->Guest 物理地址->EPT(二级页表)->真实物理地址 发现了吗 Hypervisor控制着EPT, 这意味着所有访存最终还要经过EPT, 而EPT个页都有权限位:Read Write Execute, 如果你把某个物理页的 Write 关掉, 或 Execute 关掉, 当 Guest 访问该页时CPU会触发 EPT Violation 违规报错, 紧接着会被Hypervisor接管
为什么这比 Ring0 强?
因为:
Ring0 改页表 → 仍要经过 EPT
Ring0 关 CR0.WP → 无效
Ring0 读物理内存 → 仍受 EPT 控制
EPT 在内核之下。
现实情况
但现实情况是: 普通游戏反作弊大多数仍然是Ring0驱动 行为监控 内核结构完整性检测
原因: 虚拟化方案成本极高 容易和 Hyper-V 冲突 容易和虚拟机软件冲突 可能引发性能问题
例如:
传统内核驱动型(Ring0)代表性产品:
- Easy Anti-Cheat
- BattlEye
优点:兼容性好
缺点:无法绝对防止内核级作弊
虚拟化型(Ring -1)代表性产品:
- Riot Vanguard ,开发商:Riot Games(腾讯全资子公司)
是不是有点好奇, 为什么没有 TP(腾讯反作弊 / TenProtect)
因为不稳定, TP大部分工作的模式也是在Ring0层 而不是标准“虚拟化型(Ring -1)
TP更多的是利用系统已开启的:Hyper-V, 使用 CPU 特权指令检测虚拟化环境 或 在部分版本或内部版本中实验性使用 VT-x, 但没有公开证据显示它长期运行完整 Ring -1 结构
重要现实:虚拟化反作弊并不是主流, 真正“常态化”使用 Ring -1 的产品非常少,原因:成本极高\容易和系统 Hyper-V 冲突\容易和虚拟机软件冲突\性能敏感\维护复杂
大多数商业反作弊仍然主要依赖 Ring0 或 辅助系统虚拟化安全机制(如 VBS), 但不自建完整 Hypervisor
总结: 以上大部分观点均为本人在互联网学习搜集而来, 供互相学习参考, 如有说错请告知, 欢迎互相讨论