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は滅ぼさなければならない。

10 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を避ける様々なチート法が現れるというか・・・。

Anonymous said...

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

Kim McNeeley said...

Google 5 Star Rating , Wow Great... your writing is so good I got a good idea later. Thanks,

JacobHarman said...

As quite possibly of the biggest independent data set on the planet, Upwork is perfect as far as the ability pool. Here you can post a task offering and hold on until up-and-comers apply. From that point onward, an organization can choose a reasonable supplier. One of the benefits is that each specialist has a history of past ventures and evaluations. There is likewise an installment security highlight, which adds to the wellbeing of collaboration. This site has an alternate methodology. It vets and tests applicants that are introduced here. So the ability pool is more modest yet there are less dangers also. You glance through the records of experts and physically choose who to contact. Consultants reserve the privilege to acknowledge or deny the proposition. The site is great yet the employing system could take some time>> data engineer freelance

Raymon said...

I’m truly enjoying the design and layout of this website. I also love the blog

Bradley said...

Wow, incredible blog format! Your site is fantastic. Unique style

Ceasar said...

Excellent Post as always and you have a great post, Keep doing it

Wade said...

Hi everyone, Really I am impressed to this post. Have a nice day!

Prince said...

Please post some more articles on this topic. Thank you for sharing this