世界を動かす技術を、日本語で。

カーネルアンチチートの仕組み

2026年3月15日原文(s4dbrd.github.io)

概要

  • 現代のカーネルアンチチートは、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 ACVanguard が「ルートキット的特徴」を持つと分析
  • カーネルレベルの動作、システム全体のコールバック登録、広範な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や切断などのアクションを決定

このように、現代のカーネルアンチチートは 多層構造高度な通信・監視技術 で、日々進化するチート対策の最前線に立つ。

Hackerたちの意見

ゲーマーではないけど、オンラインゲームのチート問題は面白い技術的な課題だと思う。正直、いい解決策が思いつかないんだよね。そういうゲームやシステムを設計したことがない人たちの「すべてをサーバーで処理する」っていう単純な答えは、笑っちゃうくらいひどい。

それは、停止とチューリングの間くらいだと思う。無限のリソースがあれば解決できる可能性が高いけど、そうじゃないと限界を狭めるだけだね。

技術的な観点から見ると、チーターは常に有利だと思う。だって、ゲームとアンチチートが動いているマシンをコントロールしてるから。アンチチートは、普通のプレイヤーがチーターだらけだと思わないように、十分に高い壁を維持する必要があるんだ。

Netflixがやったみたいに、ISPのサーバーを使うのがいいと思う。まだ分散コンピューティングのインフラがないのはちょっと変だよね。もしかしたら、エージェントがデータの近くで動くような一般的な計算ノードで動くことになるかも。

長期的に見て良い解決策は、リプレイに基づく機械学習と、適度に最新のクライアントサイド(カーネル以外)のアンチチートだと思う。チーターを抑止するには十分なレベルで。

チートを防ぐのは無理だと思う。そもそも、これはオリンピックやプロスポーツ、チェスじゃないからね。もっと言えば、ピックアップリーグみたいなもんだよ。競技の純粋さを守ることは目標にするべきじゃない。むしろ、楽しい試合を目指そう。マッチメイキングは通常、似たスキルレベルの相手を探すから、チーターは広い人口から抜け出させて、問題にならなくなるよ。あとは、プレイヤーがキルカメラを見て、自分の死をタグ付けできるようにすればいい。キャンパー、エイムボット、などなど。それから、試合数が多いプレイヤー同士を同じ戦術で集める。ゲームを真剣なビジネスとして扱うと、楽しさが全部なくなっちゃうよね。

今まで見た中でうまく機能する解決策は、非常にアクティブで優秀なサーバー管理者がいて、ゲームプレイを監視してチーターを永久追放することだね。たくさんの時間と、彼らが見るための良いUIや情報が必要だし、理想的にはリプレイも見れるといい。これが機能するのはプレイヤーがホストするサーバーだけで、大手ゲーム会社(例えばGTA)が自分たちのサーバーを運営しているのを見たことがない。彼らはチーターをゲームから排除できると思ってるみたいだけど、実際には無理なんだよね。

解決策は文化的なものだと思う。オンラインでチートする人は負け犬だってみんなで考えるべきだよ。(皮肉じゃないよ。)

リモートアテステーションを使ったMac OSは、カーネルアンチチートなしでもMac OS上でのアンチチートに十分強力だって証明されてる。

ほとんどの人は「サーバーで全てを行う」というのが、速いインタラクションやまともなローカル予測が必要なゲームを潰すことを無視している。レイテンシが急上昇して、メールでチェスをするようなものになってしまう。クリーンな答えはないよ。カーネルアンチチートもエレガントな解決策じゃない。別の地雷で、セキュリティホールや誤検知、壊れた開発ツール、Windowsのアップデートとの争いがあって、サーバー側にロジックを押し込むことは、ネットコードの調整に数週間かかるし、プレイヤーのピングがスパイクするたびにレースコンディションが発生するから、「より良いコードの規律」に収束するという考えは幻想だね。

現代的な競技ゲームで、オプションのアンチチートがあって、それを有効にすると他のアンチチートユーザー専用のマッチメイキングプールに参加できるようなものが見てみたいな。アンチチートなしのプールのプレイヤーには、「コミュニティモデレーション」があって、アンチアンチチートのプレイヤーがそれを推奨する感じで。どんなことが起こるのか、すごく興味あるよ。例えば、リリース後の最初の数週間でどれくらいのプレイヤーがそれぞれのプールを選ぶのか、そしてその後どれくらいの人が切り替えるのかとか。リリースから数ヶ月後や1年後に参加したプレイヤーはどうなるのかも気になる。残念ながら、これを実現できるのはValveくらいしかないと思う。彼らはプレイヤーのことを本当に気にかけているし、意味のあるデータを集められる規模だから。でも、Valveですらこれにリソースを割く価値があるとは思えないな。

現代的な競技ゲームで、オプションのアンチチートがあって、それを有効にすると他のアンチチートユーザー専用のマッチメイキングプールに参加できるようなものが見てみたいな。アンチチートなしのプールのプレイヤーには、「コミュニティモデレーション」があって、アンチアンチチートのプレイヤーがそれを推奨する感じで。これは大体ValveがCS2でやっていることだね。でも、私の理解では、あまり効果的ではなくて、残念ながらValorantよりもチート率が高くなってしまっている。

Hacker Newsで議論の続きを見る