How Kernel Anti-Cheats Work
概述
现代内核反作弊系统是消费级 Windows 上最复杂的软件之一。运行在最高权限级别(ring 0),拦截为合法安全产品设计的中文回调,扫描大多数程序员从未接触过的内存结构。
核心问题:用户态(ring 3)反作弊无法对抗内核态(ring 0)作弊。任何用户态保护都可以被更高权限的软件绕过。
军备竞赛历史
- 用户态作弊 → 用户态反作弊
- 内核作弊 → 内核反作弊
- BYOVD 攻击(利用合法驱动漏洞)→ 驱动黑名单
- 虚拟机作弊 → 虚拟机检测
- PCIe DMA 硬件作弊 → 仍在发展中
四大主流反作弊系统
| 系统 | 代表游戏 | 驱动名称 | 特点 |
|---|---|---|---|
| BattlEye | PUBG, Rainbow Six, DayZ | BEDaisy.sys | 运行时加载 |
| EasyAntiCheat | Fortnite, Apex Legends | - | Epic 收购 |
| Vanguard | Valorant, LoL | vgk.sys | 启动时加载 |
| FACEIT AC | Counter-Strike | - | 白名单模式 |
三层架构模型
1. 内核驱动 (ring 0)
- 注册回调
- 拦截系统调用
- 扫描内存
- 执行保护
2. 用户态服务
- 以 SYSTEM 权限运行
- 通过 IOCTL 与内核驱动通信
- 处理网络通信
- 执行封禁
3. 游戏内 DLL
- 注入到游戏进程
- 执行用户态检查
- 与服务和内核驱动通信
通信机制
- IOCTL - 用户态与内核驱动的主要通信方式
- 命名管道 - 服务与游戏 DLL 之间的 IPC
- 共享内存 - 高带宽低延迟的数据共享(如遥测数据)
Vanguard 的独特优势
与运行时加载的 BattlEye 和 EAC 不同,Vanguard 在系统启动时加载驱动。这意味着它可以:
- 监控所有后续加载的驱动
- 在驱动代码运行前进行检查
- 采用白名单模式(而非黑名单)
技术洞察:有效的内核反作弊必须使用与恶意内核软件相同的操作系统原语,因为这些原语提供了检测作弊所需的可见性。(ARES 2024 论文)