2021年12月1日水曜日

セキュリティを一切考慮しないMMORPGを開発するとどうなるか

どうもご無沙汰しております。本Blogが私の年1回の生存報告、兼、アドベントカレンダー用と相成って久しいですが、今年も一発恒例行事として筆を取らせていただきたいと思います。

今年、私が話題に取り上げますのは、とあるゲームです。Amazon Game Studiosという会社が開発・リリースしました、New WorldというMMORPGについてご紹介させていただきたいのです。ゲームの話題には一切興味がない読者諸君も、どうか少し我慢して、私に騙されたと思って最後まで話を聞いていただけませんでしょうか。そもそも、あのAmazonが開発したMMORPGというのですから、どれほどゲームに興味がなくても、技術に興味のある方でしたら、少しは興味深く感じられるのではないでしょうか?

けして後悔はさせませんよ。悪い方向にね。


さて、ゲームに何ら興味知識のない方にもわかるように少し解説を入れさせていただきますと、MMORPGというのは「数千人単位の人間がネットワーク上に構築された一つの世界を共有するRPG」です。要するにSAOです・・・いや、この説明だと最近の若いのには通じないですかね・・・まぁそういう感じのアレで、要するに滅茶苦茶多数の人間がサーバーに同時接続するゲームってことです。そして説明するまでもございませんが、Amazonという会社は世界で最も巨大なクラウドサービスの一つを展開している会社であります。我々技術畑の人間がシンプルに連想するのは、これほど相性の良い組み合わせはないに違いない、そうですね?

実際、発売前から私もそう思っていましたし、発売された後も、彼らはAmazonの名に相応しい仕事を見せつけてくれました。発売前から話題の合った本作はあれよあれよという間に最大同時接続90万人を記録するモンスターゲームに成り上がったのです。いいですか、90万人同時接続ですよ、90万人。90万DAUとか、90万PV/dayとか、90万Session/dayだとか、そういう雑魚みたいな指標ではありません、同時接続で90万です。貴方は90万の同時接続とリアルタイムレスポンスを保証できるシステムを構築できますか?言うまでも有りませんが私ならその場で全く不可能だと匙を投げますね。

さすがは開発元がAmazonの名を冠するゲーム会社だけあって、サーバーは相当な負荷に耐えきったと言えます。最大同時接続90万人をリリース直後から支えられるMMORPGというのはなかなか世に存在するものではありません。私も思わず「やっぱりAmazonはすごい」と驚嘆したものです。


ですが、我々は後から思い知ることになります。何故、彼らのサーバーが、同時接続90万という途方も無いアクセスに耐えることが出来たのか、その本当の理由を。

・・・サーバーが何もしていないからです。


dupe, exploit, cheatの軌跡 

先に説明したとおり、MMORPGというのはネットワーク上に構築された一つの世界を共有するゲームです。つまり、プレイヤーは全員常時サーバーにリアルタイムで接続された状態になっていますし、必然、全てのプレイヤーのデータはサーバ上で管理されています。

普通はね。

だって、各自のローカルサイドでプレイヤーのデータが管理されていたら、皆が好き勝手にローカルサイドでセーブデータなりメモリなりを書き換えたら、簡単にお金やアイテムが無限に増殖されてしまうでしょう?それでは皆のゲームが成り立ちませんから困りますね?そういう悪いことをゲームで行う・・・チートをする人間は、ここ数年右肩上がりに増えておりますから、ゲームを作る側も畢竟、高レベルのチート対策をゲームに組み入れるのが当然の事項となっているわけです。

そう、だから、普通は、どんなMMORPGを作るときもね、チート対策をするんですよ。

普通はね。


さて、あれはゲームがリリースされて30日もしたころでしょうか。

コミュニティの中で「アイテムが増殖できる」だとか「Goldが無限に増やせる」だとか、そういう噂が流れ始めました。

最初はただの噂だと思われていたのですが、1000万Goldを超える所持金や、ゲーム内で最も貴重なVoidmetalと呼ばれる金属を数千個単位で所持するスクリーンショットが暴露され始めると、「どうやら本当にアイテム増殖バグがあるらしいぞ」ということがわかってきました。私は当初、高度なハッカーの類がパケットを改ざんして攻撃しているのだと推測していたのですが、一週間もしたころでしょうか、突然公式Forumにアイテム増殖の具体的な方法が書き込まれ、一同が唖然となります。

その方法とは・・・


1. 個人間トレードを開始する。

2. 渡す側は、増殖したいアイテムを相手に渡すようにして、Confirmボタンを押す。

3. 受け取る側は、増殖したいアイテムがトレードに乗ったのを確認したら、意図的に通信を遮断する。

4. 受け取る側は、Confirmボタンを押す。

5. しばらく待ってから、渡す側がCancelボタンを押して、取引を中断する。

6. 中断されたのを確認してから、受け取る側は、通信を復旧する。

7. 双方がアイテムを持った状態になる。

 

そう、トレード中に、通信を止めるだけ。

たったのこれだけでアイテムが増殖できてしまうのです。


まさか21世紀も1/5以上が終わった現代において「サーバーを一切介さないでトレードが成立するMMORPG」をあのAmazonの名を冠するゲーム会社がリリースする日が来ようなどとは一体全体誰が予想し得たでしょうか。


結果、サーバー全土に渡る経済封鎖が行われ、個人間トレード、交易所、ギルドバンクの利用などあらゆる富の移動が不可能にされたのですが、現実世界だけではなくゲーム内でも経済活動の制限が行われる日が来るとは実に皮肉なものです。

しかも、問題はこれだけに留まりませんでした。ゲームをWindowedモードで起動し、戦闘中にゲーム画面のWindowを激しく動かしまくって意図的にクライアントサイドでの処理を止めると、なんと完全無敵になるというバグが発見されたのです。全く理解できません。


まさか21世紀も1/5以上が終わった現代において「クライアントサイドの処理を止めると一切ダメージを受けなくなるMMORPG」をあのAmazonの名を冠するゲーム会社がリリースする日が来ようなどとは一体全体誰が予想し得たでしょうか。


あまりの事態に、とうとう開発者たちも重い腰を上げて火消し文章を書きます。

https://forums.newworld.com/t/dev-blog-update-on-current-issues/504297/1

それによると、本作は「To be very clear, New World is not client authoritative — from a simulation standpoint, New World is entirely server based」などと主張されていましたが、誰もこのような世迷い言を信じる者はいませんでした。クライアントサイドでの入力によってサーバーサイドの挙動が不正に変化してしまうのであれば、それは入力に対するValidationが何ら行われていないということであり、Server-Based Authoritativeなアプリケーションとは言えません。この声明発表は単に開発者たちが自らの無能を晒しただけに終わりました。


数日後。

アップデートによりアイテム増殖も無敵化も修正され、経済封鎖も解除され、事態は沈静化するかのように思われました・・・

が、今度は家具を無限に増殖させるバグが発見されました。

その方法とは・・・


1. 家のデコレーションを開始する。

2. 増殖したいアイテムを家に配置する。

3. 増殖したいアイテムが家に配置されたら、意図的に通信を遮断する。

4. しばらく待ってから、Cancelボタンを押して、家具配置をキャンセルする。

5. 中断されたのを確認してから、通信を復旧する。

6. アイテムが家に配置された状態のまま、手元にも残る。


お気づきかと思いますが、前回と全く同じ手順です、彼らは何も学んでいません。

あの日本を代表するみずほ銀行ですらこんなデタラメな修正はしないのでは無いでしょうか。こちらの問題も2回目の経済封鎖の後、現在では修正されているのですが、2回も同じ手口で成功したのですから、今でも似たような手口によるアイテム増殖が可能なのではないかという噂がコミュニティ内で絶えません。もはや完全な無法地帯です。


他にも、チャット欄にHTMLタグが使えてしまうバグだとか、

チャット欄のHTMLタグを利用してリンクをmouseoverした瞬間に攻撃するコードを仕込むバグだとか(onmouseoverが動作してしまうらしい)

全く、話題に事欠かないゲームです。


さて、ここまでお読みいただいたエンジニア諸兄の中にはお気づきの方もいらっしゃることかと思いますが、このNew Worldというゲーム、根幹がそもそもMMORPGとして動作するように設計されていない可能性が極めて高いです。実際、企画の初期段階では、MMOではなく、MOのPvPゲーム(ゲームに詳しい方ならRustといえばご存知でしょうか)として作られていたという噂があります。そのため中央のサーバーが全ての処理を解する設計になっていないのでしょう。現在のNew Worldは単に我々が動作させているクライアントと全く同じものをHeadlessモードでサーバー側で動作させ、その処理を真とするような実装になっているだけなのではないか、と私は勝手に推測していますが、あくまで推測の域を出ません。

ここでの学びは、根幹がそもそも間違っているシステムは、後から何をやっても救えないということです。

くれぐれも皆様もご用心を。


bot、その進化の軌跡

もう一つ、本作New Worldの世界で技術的に興味深い話題があります。それはBotです。MMORPG界隈においてBotという単語を使った場合、それは「プログラムで自動的にキャラクターを操作し、何らかの行動を行わせ続ける」行為を指し、全世界に存在するほぼすべてのMMORPGのエンドユーザーライセンス契約条項において禁止されています。禁止されている理由は多々ありますが、基本的にMMORPGというのは単一の行為をひたすら尋常ではない回数と時間に渡って繰り返しまくることで資源やアイテムやお金や経験値といったリソースを収集して強くなるのが目的ですから、当然自動化と相性がいい・・・失礼、自動化すると真面目に刺し身たんぽぽをポチポチやってる人間が不利益を被るわけです。そういったわけで禁止されているんですね。

まぁ、禁止されてるってことは、当然やる人間が居るわけです。本作New Worldにおいても全く例外ではないのですが、ただでさえバグだらけでマトモな入力検証すら行っていないゲームであることがすでに露呈しているわけですから、今や世界中のBot職人の格好の的となり、過去のゲームで見られた単純なBotとは比較にならないほど洗練されたBotの数々が世界の至るところで観察されるようになったのです。

そのいくつかをご紹介しましょう。


バージョン1.0: Fishing Bot


最初期からいるBotです。多分ゲーム開始2週間後にはもう大量発生していたと思います。名前の通り、自動的に釣りを行うBotとなっています。釣りは一定の位置から動く必要もなく、ただひたすらマウスをタイミングよくクリックするだけで無限に実行できますから、大変自動化しやすいんですね。おまけに本作の釣りは針を垂らした瞬間に針にかかった魚の種類がサーバからクライアントに送信されるというキ○○○・・・失礼、少々脳細胞が足りていない実装になっておりまして、そのためパケットをキャプチャすることで目的の魚が針にかかるまで即座にリセットを繰り返すという大変効率の良い機能まで兼ね備えております。

ちなみにこのBot、2021/12/01現在でも対策されておらず、世界中どこでも見ることができます。


バージョン1.1: Mining/Logging Bot

次に現れたのがこちら。鉱石を自動で掘ったり、リソースを自動で採集したりしてくれるBotです。本作の鉱石やリソースは毎回全く同じ座標に再生するため、同じ座標まで歩いていってボタンを押すだけで自動化できちゃうんですね。とはいえ、先に他の人が採掘していたり、リソースが存在しなかった場合にどうするか、とか、移動が邪魔された場合に対応する必要があるとかで、単純な釣りBotよりは遥かに実装難易度が高いようで、私がプレイしてたサーバーではなかなか見かけませんでした。


バージョン2.0: Questing Bot

https://www.reddit.com/r/newworldgame/comments/qhck8d/complex_scripted_questing_bots_already_available/

YouTubeに動画が見つからなかったのでRedditから引用してきたのですが、必見です。とうとう彼らBotは釣りや採集といった単純動作だけではなく、戦闘とクエストを自動でこなせるように進化してしまったのです。何十体ものBotが蟻の行列のように規則正しく動いて規則正しくクエスト目標の敵をしばき倒す姿は戦慄さえ覚えますが、AIだとかRPAだとかの波はこんなゲーム内にも訪れてきているわけですね。


バージョン3.0: PvP Bot

2週間ほど前ぐらいに発見された最新のBotです。これは噂レベルでしか聞いたことがないので真偽不明ですが、とうとうこの最新のBotはPvP (Player vs Player:対人戦) クエストを自動でこなせるようになったとのこと。といってもBotが我々人間相手に斬りかかってくるわけではなく、対人戦モードを有効にした状態で敵の基地に忍び込んでアイテムを手に入れて帰ってくる、みたいなお使いクエストでしかありません。ただのゾンビですから発見さえすれば簡単に始末できるのですが、問題はこれらが自動化されていて24時間365日常に動き続けているという点にあります。我々人間には休息が必要ですが、彼らは一瞬一秒たりとも休むこと無く、何度殺されても諦めること無く、ひたすら目標めがけて突進してくるのです。これにはどれほど優れた人間も太刀打ちすることが出来ません。これはゲームの中のお遊びですから笑い話ですが、現実世界の戦争がこのように無人の自動兵器がひたすら突撃を繰り返してくる世界になってしまったらと思うと、薄ら寒い思いがしますね。


ちなみにですが、今しかたgithubをちょっと調べてみたところ、golangで書かれたNew World向けのBotのソースコードが転がっていたりしましたので、ちょっと探せば皆様も簡単にBotを運用できるかと思いますが、決して真似しないでくださいね。


まとめ

なかなか得られない機会かもしれませんが、もし読者の皆様におかれまして、MMORPGを開発するという案件に参画するご縁がお在りになりましたら、その際は是非本記事の内容をご参考にしていただければ幸いです。


#pyspa Advent Calendar 2021 - 1日目