シェア

「普通に調べごとしてたら偶然 Apex...」、@hasegaw さんからのスレッド

普通に調べごとしてたら偶然 Apex Legends のチートの実装にたどり付いたんだけど、特定バイト列探して目的データを見つけるのは古典的な方法として、UEFIにプログラムロードしてるのね……。OSからも見えないところで下でチートツール動いてるやん。これにまともに対処しろってのが無理だわ……。

SecureBoot 有効なプラットフォーム上でプレイすることを強制すればある程度防げるかもしれないけど、現在ゲーマーの手元にあるゲーミングPCはほぼ利用不可能になりそう。 SecureBoot 有効でも Linux を SecureBoot して KVM + GPU passthrough したら回避できるし完璧ではないな

PS5, XBox, Nintendo Switch などのプラットフォームは原則として SecureBoot 相当のことをしているだろうし、プログラムの改変チェックなども色々しているだろうから、こういう攻撃方法は採りづらいだろうけど。もはや、オープンなPCでネットワーク対戦ゲームを実装すること自体が筋が悪いのかもね。

現実をみてゲームコンソール環境の存在意義を思い知った感がある。PS5にマウス接続してプレイできるようにしたほうがいいよ、これ

なんか伸びてるのでもう少し補足してみようかな。

今知ってる範囲では、チートの実装方法って、こんなのがある。
①改変したプログラムを動かす
②プログラムを動かしておいて、隣のプログラムからメモリを書き換えて誤動作させる
③仮想化(エミュレータのような方法)で Windows を動かして外からメモリを書き換える
④UEFIからメモリ書き換える🆕

①改変したプログラムを動かすというのは、ゲームプログラム自体を改造して、都合のいいオレオレルールを仕込む方法。特に汎用的なゲームエンジン上にゲームを構築していると、その開発方法を知っていれば色々改造しやすいだろうから、汎用ゲームエンジンだと手が打ちにくいという意見がされる事がある

②プログラムを動かしておいて、隣のプログラムからメモリを書き換えて誤動作させる は、Windowsなどがもつ、OSのプログラムデバッグ機能を使うチート方法で20年以上前からある。管理者として動くプログラムは他のプログラムの中身を覗いたり壊したりできるのを利用する。

別にゲームのチートでなくても、ブラウザのタブからクレカ情報抜き出しとかも不可能ではない。なので、怪しいソフトを特に管理者として実行してはいけない。Windows xp以前ではセキュリティ上問題があった部分であり、Windows Vista等でユーザーアクセス制御(UAC)が実装されて随分マシになった

③仮想化(エミュレータのような方法)で Windows を動かして外からメモリを書き換える は2008年ぐらいから、そういう事が可能な機能がごく普通にCPUに搭載されている。これを悪用すると、箱庭のなかでOS動かして、中で動いているゲームの情報を一方的に読み書きできる。ソフトからは見えすらしない

ただ、仮想化環境でWindowsやGPUを動かすためには、それに適したPCパーツの構成や設定も必要だし、仮想マシンの中からGPUを使えるようにしてWindowsを仮想マシンにインストールするゲーマーなどは少ない(そこまでの知識もってたらそれなりに詳しい)ので、この方法の絶対数は少ないのではないか。

④UEFIからメモリ書き換える🆕 UEFIはコンピュータの起動処理を「近代化」するために作られた仕組みで、PCの起動時間短縮化などで恩恵があるんだけど、これがまた強力な仕組みで、OS起動前にプログラムをロードすることで、ある程度「PCの動作を変更」できてしまう。下手するとOSから検出すらできない

この機能は、PCに新しいハードウェアなどを搭載したときに、PC本体をアップデートしなくても、追加のソフトウェアをロードすることで対応させる目的などで利用できるように作られた仕組み。だけど、これを悪用すると、OSも関知しないところでウイルスやマルウェア等も実行できてしまう。

で、何がおきるかというと、OSも、その上で動くゲームなどのソフトも「普通に動いている」のに、「知らないうちに状態が書き換えられてる」状態がおきてる。言い換えれば、もはやプログラマがどれだけ真面目にソフトを作っても、プログラムが正しく動かない「改造PC」が使われてるような状態に近い

方法③はそれなりに技術力がないと難しいけど、 方法④は、攻撃プログラムを入手したら、Windows起動前にUEFI Shell等からプログラムをロードするだけで達成できてしまうので、このあたり、タチが悪いね。

UEFI からの攻撃が一般的になったら、ゲーム会社も当然ある程度の対策をとるだろうけど、でも例えれば「遮蔽のないところにいるのに、岩の向こうからSRで撃たれてる」ぐらいに分が悪い状況。他のゲームタイトルが同じ方法で攻撃されたら、特定のタイトルに限らず、かなり苦しいことになりそう。

ひとつ言えるのは、少なくとも、我々は UEFI ロードで利用するような怪しいチートツールには絶対に手を出してはいけませんって感じですかね。OSの管理者権限とかそんなレベルでなく、場合によってはウイルス感染、情報流出、PCのハードウェア自壊などさせられてもおかしくないぐらいには危険な行為です

そうですね、ここまでくると、もうゲームが実行されているPCを信用してはダメな状況にある。

なおアンチチートツール入れるとして、これまでアンチチートの仕組みが防ぐのは、おもに①のようなソフトウェアが書き換えられるのを防ぐこと、②のような、隣のソフトウェアからのちょっかいを防ぐこと。③の仮想マシン対策までしてるのは少ないんじゃないかなぁ(もしかしたらやってるかも)

ましてや、④ってもはやWindows OSにソフト入れる程度ではほぼ不可能で、アンチチート機能をUEFIレベルでロードしますかって話になるだろうから、言い換えれば Windows という天下一武道会に悟空とベジータが現れて闘い出すようなもので、もうそれは Windows 用ソフトとして提供するのは憚られるレベル

そこまでやるなら、任天堂さまやソニーさまが電子署名したプログラムだけが動作するゲーム機で、楽しくゲームしたほうがいいかな?って思っちゃう。

UEFIなどからチートツールがゲームに干渉をしているのを一時的に解決することは可能だと思う。ツールがどうやって処理しているかを見れば、それが動かなくなるようにプログラムを変更すること自体は難しくない。でも、そうやって対応しても、チートもすぐに追従するので下手したら半日持たないだろう

いろんな有名タイトルなどでも最近の方針は「チートはある程度泳がせて、使った奴を取り締まる」らしい。チートが絶対に不可能な状態を維持するよりも、チートしたユーザを取り締まるほうが簡単だから、他社でもそうしてる。ただ、取り締まりが間に合わないと、当然ながら実害が発生してしまう。

Apex Legends に限っていえば、直近の問題はチート行為が十分に取り締られていないことは多分そうで、あとバトルロワイヤルの特性上、チートの影響範囲が広いことが問題を顕著化させているのかもね。たとえば、スプラトゥーンならチーターが1人いたとして最大7プレイヤーにまでしか影響しないわけで。

昔のPCゲームは、コピー品だとうまく動かないようにディスクに細工がしてあったり、コピー品を見分けて起動しないとか、コピー品ではゲームが進行してから経験値がもらえなくなって詰む仕組みとかが何重にもされてたんだけど、そういうコピープロテクトはほぼ全て外されてコピー品が流通してた。

結局そういう攻撃に対する対策ってどれだけ頑張っても外されちうのよね。攻撃側のほうが絶対的に有利で。ゲームがCD-ROMで販売されるようになった90年代後半〜2000年代は、ほとんどのゲーム会社は、そういったコピー対策にエネルギーを費やさなくなった。

2006年頃から出てきたSteamで、このあたりがかなり健全化させた感じはあって、昔よりコピーされたゲームって出回らなくなったよね。一方、コンシューマゲーム機の歴史をみても初代PlaystationはMODチップ、ニンテンドーDSはマジコンによる不正コピーに苦しんでた。常に不正ユーザとの戦いだねぇ。

今日の話は「プログラマがバグなく1+1を計算させるプログラムをちゃんと書いても、都合のいいときだけ3になるようにコンピュータ側が細工されてしまっている」という話に近いです

微生物系男子などと煽られるコンピュータ ダメンジニア。スノーボード/Xen徹底入門/萌え萌えうにっくす!ネットワーク管理ガイド/エンジニアなら知っておきたい仮想マシンのしくみ bit.ly/gyXfS /投稿内容は所属組織の統一見解ではありません/RTは内容についての同意や賛意を示すものではありません

  1. トップ
  2. Takeshi HASEGAWA
  3. 2021/03/30 10:43:44 公開
シェア

「すまとめ」はTwitterの長文スレッド(長文スレ)・連続ツイート(連ツイ)を1つの記事にキレイにまとめるサービスです。長文スレの最後に、「@matomesu まとめて」とコメントを付けるだけで、まとめ記事がこのように作成されます。

おすすめスレ