こんにちは。開発部です。
8月22~24日にゲーム開発者向けの国内最大のカンファレンスである、CEDEC2018が行われました。
※CEDEC2018に関するブログもチェックしてみてください↓
CEDEC2018参加レポート 1日目
CEDEC2018参加レポート 2日目・3日目
さて、今回のCEDEC2018では、弊社はブース出展とスポンサーセッションを行いました。弊社の製品はチート対策のソフトとしてお使いいただいています。ゲームデベロッパーの集うこの場で、皆さんにセキュリティに関心を持っていいただく良い機会でした!!
機会の得られた今回、常々思っていた「お客様から弊社に頂くお問い合わせ(やお悩み)について、多分多くの会社も同じように悩んでいるはず。だから悩みと、その対策方法を共有できたら、それは有益なことなんじゃないか」という部分を重視してお話ししました。今回はCEDEC2018の3日目、以下のタイトルで講演をしてきました。
【セキュリティ会社のエンジニアが伝えたい2018年のチート事情】
講演時間は25分。しかも3日目の16:30からと、皆さんお疲れな時間帯にもかかわらず、多くの方が聞きに来てくださいました!
来ていただいた方、また、ライブ配信を見ていただいた方、アンケートにお答えいただいた方、本当にありがとうございました。さて、前置きが長くなってしまいましたが、講演内容についてまとめましたので是非ご覧ください。
講演内容
テーマ
テーマは先に話したように、ゲーム会社から受けたチート被害や相談事とその対策方法について共有することです。
近年、誰でも手軽にチートできるようになったことで、チートの成功例の報告や、被害の報告に関する書き込みを、SNSやアプリストアのレビューでよく見かけるようになりました。
一昔のゲームであれば、一人で黙々と遊ぶゲームが多かったので、チーターがいても正規ユーザーにはあまり迷惑が掛からず対岸の火事でした。しかし、昨今では対戦ゲームや協力プレイなどでチーターと出会う機会が増え、正規ユーザーでも被害を受けるようになりました。
また、ゲームリリース前に大々的な広告をしてユーザーの期待値を上げ、リリース直後に一気にユーザーを獲得することを狙っている企業が多く見られますが、その期待が裏目に出て、チートし放題のゲームであったことが発覚した時に、ユーザーの期待感が裏目に出てしまいます。
こういった背景によって、そのゲームに対するネガティブな書き込みをするユーザーが増えています。一度 チートできるゲーム/チートを容認しているゲーム会社といったレッテルを貼られてしまうと、ゲームの価値を下げるにとどまらず、クレームへのサポート対応やチート対策を導入する再開発作業が発生します。
結果、利益の低下を招き、せっかくのゲームなのに寿命を下げることとなります。
対策としては、リリース前にきちんとチート対策をすることです。このことは、ゲームを改ざんしてくる攻撃者に対しても有効な対策となりえます。なぜなら、彼らは過去のバージョンのアプリから全てバックアップしています。App_ver2からチート対策を導入したとして、保管していたApp_ver1との差分を見ることで、追加した対策コードを見つけることができます。 つまり、リリース時点から対策をしていることで、攻撃者からの攻撃の抑制にもなるのです。
チーターの変化
2018年のトレンドの変化の1つ目として、チーターの変化を話しました。近年、組織的な海賊版サイトが増えています。なぜ増えたかというと、お金になるからです。改造アプリを有料で販売したり、その改造アプリを使って不当にゲーム内で成果を上げ、RMT(※1)に利用しています。
※1:RMT リアルマネートレード。ゲーム内アイテムを現実のマネーで売買すること。
また、海賊版サイトサイトが増えたことで、チートの敷居を下げる結果に繋がりました。今までチートをするにはある程度知識が必要でした。しかし、既に改造されているアプリが手軽に入手できるようになったので、チート方法を知らないユーザーでも、チートできるようになったのです。今後は、「簡単に勝てる方法」や「皆も改造アプリを利用しているから自分も」などといった、単純な動機で特に罪悪感もなくチートをするユーザーが増えてくるのではないでしょうか。。。
プラットフォームの変化
2つ目のトレンドの変化として、プラットフォームの変化について話しました。
スマートフォンの登場以後、いわゆるソシャゲと呼ばれるモバイル端末専用ゲームが猛威をふるい、Windows向けゲームは減少傾向にありました。
しかし近年、Steamを筆頭に、PCで遊ぶゲームが再び人気となってきました。増えた背景について、専門家ではないので多くは語れませんが、OVERWATCHやPUBGなどの人気ゲームの登場や、Unity、UnrealEngineなどの開発エンジンの充実があるのではないでしょうか。
プラットフォームが増えることは、ゲーム業界にとって利益を獲得しやすくなるので良いことです。しかし、せっかくモバイルゲームでチート対策していても、Windowsでチートされては意味がありません。Windowsは、AndroidOSやiOSと比較して以下の点において攻撃者に有利な状況です。
- ユーザー権限を制限しているAndroidOSやiOSと異なり、自由にOSの下層レイヤーから操作できる。
- 解析・改ざんするためのツールが豊富
- 解析方法・改ざん方法に対する今までの成功例、手法などの情報が多い
このように、Windowsで展開されてきたゲームはチーターとの戦いの歴史でした(※2)。
※2:特に、”有料ゲームの無料配布”、”オンラインゲームのチーターと運営の壮絶な戦い”は、ゲームが好きな方々でしたら一度は耳にしたことがあるのではないでしょうか。オンラインゲームのチートの歴史については、以下の本で詳しく書かれています。
参考:ネットゲームチートRMTの教科書
Windowsでまず気をつけたほうが良いチートは、以下の2つです。
- メモリチート
- dllファイル、exeファイルの改ざん
メモリチートは、実行中のゲーム内メモリから、目的の値(例えば敵のHP)を検索して、任意の値へ書き換えるツールです。有名どころとしてChiatEngineというツールが有るのですが、大変優秀で、メモリチートやスピードハックなどもできてしまいます。
また、dllファイルやexeを直接改ざんすることもできます。特にdllはその性質上、改造dllをネット上で配布することだってできます。改造dllを入手して、オリジナルと置き換えるだけで、誰でもチート状態を再現できてしまいます。
守るデータの変化
3つ目のトレンドの変化として、守るデータの変化について話しました。
ソーシャルゲームが出てきて時間も経ち、ゲーム会社もユーザーに新たな体験をしてもらうため、色々な試みをしています。近年で増えてきたのは、ポケモンGOで一躍有名となった位置情報ゲーム。また、クロスメディアの一環として、アニメや漫画のIPを用いたゲームが増えてきました。しかし、こうしたゲームは、ゲーム会社だけでゲームは成り立ちません。位置情報ゲームではスポットとなるリアルの施設との協業。IPを用いたゲームでは、コンテンツホルダーの会社の支援が必要です。
他社との協力を得たゲームは、今までに無い価値を生み出しますが、同時に他社の利益を損ねないよう注意しなくてはなりません。そのため、チート対策の項目としても、他社IPを不正利用させない、リアルイベントの効果を出すために位置偽装を防止することが重要となります。
今回は2つの事例を紹介しました。位置偽装チートをされた場合、他社IP画像を不正に抜き取られてしまった場合における驚異を共有しました。googleが率先してゲーム業界向けGoogleMaps APIを提供した(※3) ことからも予測できるように、今後は位置情報ゲームが更に増えてきます。また、ゲームが新たな魅力を提供するために他社との協力が増えていくことでしょう。そうした時、チートにより他社の利益を損なう事があれば今後の運用にも響きます。きちんと対策を取る必要があります。
※3:今回のCEDECでは、GoogleMaps APIによる事例紹介のセッションが人気でした。
参考:Google、地図データをゲームに利用できる「Google Maps API」を発表 UNITYへの組み込みも可能に…『ジュラシックワールド』『ウォーキング・デッド』などのタイトルで採用
チート対策はどのようにすれば良いか
- チーターの変化
- プラットフォームの変化
- 守るデータの変化
これらについてそれぞれ、対策を説明します。
改造アプリへの対策
これには下記のように攻撃者に十分な解析をさせないことです。
- Root/Jailbreak端末でアプリを動作させない
- ファイルの暗号化、難読化
【Root/Jailbreak対策について】RootやJailbreakの端末を検出するロジックを実装します。例えば、Rootであれば”suファイル”(/system/sbin/su、/sbin/suなどに存在)を、Jailbreakであれば”Cydia(/Applications/Cydia.app)”を見つける機能を追加します。また、Googleが提供している”SafetyNet Attestation API“を利用するのも良いです。
他には、改ざんを検知する機能を実装することです。ファイルのハッシュや、署名情報をアプリ内に保持しておき、アプリが起動する際に、今動いているアプリのハッシュと比較します。異なっていれば改ざんされたと見なします。
Windows上でのメモリチートを防ぐ方法
メモリチートには、2つの対策が考えられます。
- パラメータを暗号化しておく
- サーバー上で異常な数値を検出する
【パラメータの暗号化について】例を上げて解説します。例えば、メモリには”10″が入っており、これに”5″を足した結果である”15″を、ゲーム画面のHPとして表示しておきます。攻撃者は画面上のHPである15をみてツールで検索をかけますが、メモリには15という数値は存在しないので発見できなくなります。
位置偽装を防ぐ方法
位置偽装の対策には、以下のような対策が有効です。
- 移動速度しきい値の設定
- 位置偽装するツールの検出
【ツールの検出について】位置偽装するツールには、例えば”Fake GPS location”などがあるのですが、こういったツールのパッケージネーム(com.lexa.fakegps)を検出する方法があります。また、AndroidOSの端末設定で疑似ロケーションを許可している場合、Googleが提供している”Location.isFromMockProvider“の返り値が変化しますので、こういった実装も有効です。
最後に
今回は私の講演内容について、解説してみました。私がこの会社で学び始めてから約2年。以前と比べて攻撃者の実力が想像以上に伸びてきたと実感しています。我々はこれからもゲーム業界が健全なゲーム運営をできるよう、チート対策の面から応援していきます。ゲーム開発者の皆様も、チートを今まで以上に驚異と認識し、リリース前に備える心構えをしてください。最後になりましたが、皆様、CEDECお疲れ様でした!!
最後の最後に
CEDEC会場内で、ユニティ・テクノロジーズ・ジャパンの大前さんとお会いしました^^講演も聞きに行きましたが、相変わらずのイケメンボイスで感激でした!!