カーネルアンチチートの仕組み
概要
- 現代のカーネルアンチチートは、Windows上で最も高度なソフトウェアの一つ
- ユーザーモード保護の限界とカーネル移行の必然性
- アンチチートとチート開発者の技術的な軍拡競争
- 主なアンチチートシステムの構造とアーキテクチャ
- カーネルアンチチートの三層モデルと通信方式の詳細
カーネルアンチチートの進化と現状
- カーネルアンチチートは、Windowsで動作するソフトウェアの中でも最も高度な部類
- **最高権限(ring 0)**で動作し、カーネルコールバックのフックやメモリスキャンを実施
- ゲーム実行中も透明に動作し、ユーザーにはほとんど気付かれない
ユーザーモード保護の限界
- **ユーザーモード(ring 3)**は、カーネルより下位権限のため、カーネルドライバやハイパーバイザーによるバイパスが容易
- 例: ReadProcessMemoryによるメモリ整合性チェックも、NtReadVirtualMemoryのフックで偽装可能
- モジュール列挙APIも、PEBのパッチで回避される
- これを受け、カーネルモードでのアンチチートが主流に
技術的軍拡競争(アームズレース)
- ユーザーモードチート→カーネルチート→カーネルアンチチート
- **BYOVD(脆弱な正規ドライバを利用した攻撃)**などで署名制限を回避
- **ハイパーバイザー(仮想化)**によるOS全体の仮想化とアンチチート回避
- PCIe DMAデバイスによるOSを介さないメモリアクセス
- 各段階でコストと専門知識が必要になり、一般的なチート利用者の排除に寄与
主要アンチチートシステム
- BattlEye:PUBG、Rainbow Six Siege、Armaなどで採用。BEDaisy.sysがカーネルドライバ
- EasyAntiCheat (EAC):Epic Games所有。FortniteやApex Legendsなどに導入
- Vanguard:Riot Gamesの独自システム。vgk.sysはWindows起動時にロード
- FACEIT AC:Counter-Strike競技プラットフォームで使用
カーネルアンチチートとルートキットの類似性
- 2024年のARESカンファレンス論文で、FACEIT ACとVanguardが「ルートキット的特徴」を持つと分析
- カーネルレベルの動作、システム全体のコールバック登録、広範なOS監視などが共通点
- 意図と技術の違いを明確化しつつも、Windowsアーキテクチャ上の制約として説明
カーネルアンチチートのアーキテクチャ
三層モデル
- カーネルドライバ(ring 0)
- コールバック登録、システムコールフック、メモリスキャン、保護の実施
- ユーザーモードサービス
- SYSTEM権限でWindowsサービスとして動作
- IOCTLでカーネルドライバと通信
- ネットワーク通信、BAN施行、テレメトリ収集
- ゲーム内DLL
- ゲームプロセスにインジェクトされ、ユーザーモード側のチェックを担当
- サービスやカーネルドライバと連携
通信方式
- IOCTL(I/O Control Codes)
- ユーザーモードとカーネルドライバ間の主要通信手段
- DeviceIoControl経由で制御コードを送信、ドライバはIRP_MJ_DEVICE_CONTROLで処理
- Named Pipe
- サービスとゲーム内DLL間のIPCに利用
- 高速かつシンプルな通知が可能
- 共有メモリセクション
- NtCreateSection/NtMapViewOfSectionで作成・マッピング
- 高帯域・低遅延なデータ共有を実現
ドライバのロードタイミング
- BattlEye、EAC:ゲーム起動時にドライバ(例:BEDaisy.sys)をロード
- Vanguard:システム起動時にvgk.sysをロード(SERVICE_BOOT_START)
- これにより、以降にロードされる全ドライバを監視可能
- 再起動必須なのはこのため
ドライバ署名要件
- Windows 64bitでは**Driver Signature Enforcement (DSE)**が必須
- EVコードサイニング証明書やWHQL認証が必要
- BYOVD攻撃はこの制限の回避手段
BattlEyeの構成詳細
-
BEDaisy.sys:カーネルドライバ。プロセス・スレッド作成、イメージロード、ハンドル操作のコールバック登録。スキャンや保護のロジックを実装
-
BEService.exe:ユーザーモードサービス。BEDaisy.sysとデバイスオブジェクト経由で通信。ネットワーク、BAN施行、検出結果のサーバ報告を担当
-
BEClient_x64.dll:ゲームプロセスにロードされ、ユーザーモード側のチェックや自己整合性検証を実施
- BEDaisy.sysが異常検知→BEService.exeへIOCTLや共有メモリで通知→BEService.exeがサーバと通信し、BANや切断などのアクションを決定
このように、現代のカーネルアンチチートは多層構造と高度な通信・監視技術で、日々進化するチート対策の最前線に立つ。