概要
- 現代のカーネルアンチチートは、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や切断などのアクションを決定
このように、現代のカーネルアンチチートは 多層構造 と 高度な通信・監視技術 で、日々進化するチート対策の最前線に立つ。