2020-04-17

検出不可能なゲームのチートが発表、今後のオンラインゲームのデザインはこのチートを前提に設計しなければならない

PCILeechというソフトウェアスタックがある。

ufrisk/pcileech: Direct Memory Access (DMA) Attack Software

これはPICeデバイスを使ってターゲットコンピューターのメモリをDMAで読み取るためのPCIeデバイスのFPGAの実装とその操作のための一連のソフトウェア群だ。

原理は簡単だ。ターゲットコンピューターのPCIeスロットにつないだPCIeデバイスからDMAをするだけ。これによりターゲットコンピューターのメモリ領域を読み取ることができる上、ターゲットコンピューターからは検出不可能だ。なぜならばDMAはCPUを介さずに行われる上、ターゲットコンピューターにカーネルスペース/ユーザースペースともに追加のコード実行を必要としないからだ。

PCILeechを作って作られたゲームのチートに、CSL:GOのチートがある。これはマップ上のどこにプレイヤーがいるかを表示するチートだ。

pcileech-webradar/readme.md at master · EngineOwningSoftware/pcileech-webradar

原理上、このチートはターゲットコンピューターからは検出不可能だ。したがっていかなるDRMであろうとも役に立たない。難読化をして多少チートの開発を嫌がらせすることはできるかもしれないが、所詮その程度だ。もはやゲームにおいてメモリは常に読まれるものと考えなければならない。

このチートに抗うのは無意味だ。したがってこれからのオンラインゲームはローカル環境でのメモリが読まれることを前提に設計しなければならない。CS:GOのようなオンラインFPSゲームでは、全プレイヤーの位置は公開すべきだろう。すなわちこのようなチートの意味をなくすのだ。オンラインポーカーのようなゲームでは、ローカルに秘密情報を保持しない実装にしなければならない。秘密情報については中央の権威サーバーのみが処理するか、メンタルポーカーのアルゴリズムを使う。オンラインFPSも中央の権威サーバーによる実装もできるが、それはGoogle Stadiaのような入力をサーバーに送信して映像をストリーミング再生するだけのような実装になるだろう。

この仕組みを使ってメモリに書き込む場合は検出可能だろう。というのも連続していない任意箇所のメモリに対してアトミックに書き込むことはできないので、ゲーム状態を重複して複数のメモリ箇所に保持したり常時チェックサム計算などの対策で、メモリ改変を検出できるはずだ。

また、自分のプログラムが全メモリアクセスを専有している場合は、メモリ帯域を常時使い切ることにより、メモリ帯域に変化が生じればそれはDMAアクセスが行われたと考えていいだろう。問題はPCILeech以外の各種デバイスかもしれず、またIntel MEやAMD PSPのような邪悪で不自由なバイナリブロブのファームウェアによるものかもしれないので、切り分けができない。そして全メモリアクセスを専有する状態ではもはやPCゲームは実装できない。

世の中から無意味で邪悪で人道上の罪であるDRMは滅ぼさなければならない。

6 comments:

Anonymous said...

>なぜならばDMAはCPUを介さずに行われる上、ターゲットコンピューターにカーネルスペース/ユーザースペースともに追加のコード実行を必要としないからだ。

 うーんと、PCIeからCPUを介さずにメモリを直接アクセスすることはもちろん可能(PCIeのリード・アクセス。これ自体をDMAとは呼びません。)なのですが、この場合使われるPCIe上のアドレスは実アドレスなので、単なる主メモリ全体のダンプではなく特定のプログラムに対するハッキング目的を持ったアクセスならば、論理アドレスを実アドレスに変換する必要性があります。MMUの変換テーブルを管理しているのはOSですから、したがって基本的にはOSにアクセスするコード実行が必要になります(変換テーブル自体もPCIeで読み取るという手もありますが複雑、かつ定期的に書き換えられると厄介)。

Anonymous said...

 と思って、一寸調べてみたら Linuxの場合は pcileech_kmd.c っていうのがターゲット上で実行するコードのソースのようですね。これをkernelスレッドとして常駐実行させておいて、PCIeを介してホストからハッキングに必要な追加コードを送り込む形かと・・・。でもそれって ps -A あたりでバレるんじゃないかと。
 また、PCIは誰も知らないかもだけど、元祖プラグアンドプレイ機器。通常はブート時にconfig応答して身元を明かすので(config応答しないと省エネのため電源を切られるとか、色々弊害が・・・)、lspci すれば怪しげな物が刺さっていることがバレるんじゃないかと・・・。
 とか調べていたら、もうこんなことやってバレてBANされたのがいるようですね。

ttps://www.elecspo.com/games/csgo-cheater-ra1f-exposes-cheating-in-csgo/

>CS:GOのようなオンラインFPSゲームでは、全プレイヤーの位置は公開すべきだろう。

 いやー、この手のゲームで身を隠してambushしているのがバレたら、このゲームが作成された背景を無視しすぎてゲームとして意味がなくなるというか、それゆえにambushを避ける様々なチート法が現れるというか・・・。

hrroman said...

We Fullassignment.com is among the best companies on the Law Assignments writing market. We offer top-notch essays, Law Assignment Experts research papers, thesis and other types of works that can be assigned to you at a high school or college. We also provide Civil Law Assignment Help from our experts. for more information contact us +16692714848.

Anonymous said...

まあ、意外と基本的なことが分っていないってことかな?

Robert Charles said...

Great post.......Thanks for sharing this post.

Talk to the customer care executives with the free spirit if some kinds of issues stop you to make the necessary decisions.

netgear router not login
netgear router customer service number
netgear router customer support number
netgear router customer care number

Sazzad Khan Rubel said...

All the articles here are informative. It is beneficial to the newcomers. Thanks for posting such a
nice post.
Make White Background
Clipping Path
Image Masking Service