チートはなぜ発生するのか?チートに関する19の質問に、チート対策ツール「CrackProof」開発会社が答える
セキュリティソリューション会社DNPハイパーテックとのタイアップ企画第二弾として、弊誌は先月10月に読者からチートに関する疑問を募った。その結果、20をこえる興味深い質問が投じられた。そして、その質問に答えてもらうべく、DNPハイパーテック社へとおもむき、読者から寄せられた熱心な質問群に、できる限り答えていただいた。本稿では、その内容をお伝えしていく。回答していただいたのは、DNPハイパーテック専務の須山徹氏、エンジニアの國澤佳代氏、マーケティング担当の鶴衛正紘氏である。
まず質問に入る前に、DNPハイパーテックの主力商品であるCrackProofについてあらためて紹介させていただく。CrackProofとは、アプリケーションを耐タンパ技術で堅牢化するセキュリティサービスだ。メモリ改ざんやファイル改ざん、アルゴリズム解析などからアプリケーションを防ぐことができる。具体的な事例としては、チート対策やリバースエンジニアリング対策。そして、海賊版やマルウェア対策などがあげられる。
そのほかにもさまざまな特徴を有しており、クラウドにアップロードするだけで堅牢化できるため、コーディング不要である点もひとつの魅力。また、前述したファイル改ざんの他にも、エミュレータ検知や再パッケージ化防止、位置情報の偽装阻止など多機能であることも特徴としてあげられる。そして、CPUに負荷をかけるのは起動時のみ、かつ若干の負荷量で済むという低負荷も魅力。FPSなど高レスポンス性が求められるタイトルなどとも相性がいい。450本以上のタイトルに採用された実績をほこる、業界で年々シェアを拡大させているチート対策ツールのひとつである。
そんなチート対策ツールの開発・サポート・販売をおこなうエキスパートたちが、今回読者の疑問に答えてくれた。重複した内容の質問はまとめさせていただいているほか、質問の文章などはある程度記事の書式に合わせているので留意してほしい。質問の量が多いこともありヘッドラインも作成しているので、こちらも参考に読み進めていただければ幸いだ。
質問ヘッドライン
・いたちごっこがなぜ起こるのか
・プロテクトをかける理由
・チートを検知できない理由
・不正な改ざんの検知方法
・バイナリデータやパケットの解析方法
・なぜハックされてしまうのか
・なぜセキュリティ対策会社に入ったか
・どこまで対応してもらえるのか
・暗号化に関する対策
・チート対策はひとつすれば問題ないのか
・CrackProofの料金やサポートについて
・Jailbreakなしでのチートは可能か
・他人の値をどう取得しているか
・MACアドレスからユーザーの特定はできるか
・チートに対する法的罰則について
・手こずったチート
・チート対策におけるスピード感
・対策ツールの重ねがけは有用か
・デバッグモードによる不正は、検出可能か
いたちごっこがなぜ起こるのか
・チートツールとプロテクションはいたちごっこですが、何故いつまでたってもチートツールを根絶できないのでしょうか。サーバー側がユーザーのメモリの状態やゲームの内容からチートを検出する際の限界はどこでしょうか。
・チートとチート対策のイタチごっこについて、なぜそのようなことが起こるのか知りたい。
・現在流通しているそのゲームに対するチートを無効化するためのアップデートがあったとして、対策後しばらくすればまたチートを使用するプレイヤーが出現する事が往々にしてあるかと思いますが、なぜいたちごっこになってしまうのでしょうか?あまり完全を求めるとどこかに負荷がかかりすぎてしまうからなのでしょうか?
いたちごっこについて、まとめて回答させていただきます。まず、プロテクトとは「解析を不可能にする技術」ではなく「解析に非常に時間がかかり途中で諦めさせる技術」です。昔は時間をかけているうちに解析を途中で諦めるというケースが多かったのですが、最近は時間をかけても解析を達成するユーザーが増えてきましたので、チートを完全に防ぐことは難しくなりました。プロテクトを破られることで、こちら側も新しくプロテクトをかけることになります。そういった事情で、いたちごっこという状態が生まれてしまうんです。
ものすごく強いプロテクトを作ろうと思えば作れるんです。ただそうなると、ゲームの可用性を落としてしまうことにもなりかねません。強いプロテクトを作ることは可能なのですが、そこはバランスなのかなと思うところはあります。可用性を保ちながらプロテクトの強さを保つ場合には、どこかで隙間は出てきてしまいます。パフォーマンスを無視して完全なプロテクトを提供するものを作ったところで、使うことを希望されるお客様はいらっしゃらないかなと。一方で、そういうプロテクトでカバーできない部分は、サポートでフォローさせていただくという考えです(須山)。
チートに関する情報の共有は今、熾烈になってきていますよね。特に進んでいるのが、アングラな場所での情報共有です。昔は、プロテクトを突破する手がかりすら見つけられない状態でした。今はインターネットで検索するだけで、なんらかの手がかりを見つけることが出来ますし、そこから芋づる式にどんどん高度な情報が出てきます。そういう人々とやりあっていくには、こちらも対策を進めていく必要があります。そういう意味で、私どもはもちろん、完全な守りを実現しようとしている一方で、なにかあったときにサポートするということを、重要視しています(鶴衛)。
プロテクトをかける理由
・(一部省略)プロテクトを導入した結果、消費者から批判を浴びる事例が時々起こります。消費者の反応は予想できることだと思いますが、それでもそのようなプロテクトを開発(または採用)されるのはなぜでしょうか。
4つにわけて、プロテクトが導入される理由についてお答えします。ひとつめは、コンテンツの権利関係ですね。ゲーム会社は、使用目的を限定してゲーム内でのコンテンツ(動画、静止画、音声など)使用を許諾されています。もし、エンドユーザーがゲームからコンテンツを抽出して目的外使用(SNSにアップなど)すれば、ゲーム会社はコンテンツプロバイダから賠償請求される可能性があります。特にアニメのような版権ゲームを管理する時にはそのようなケースは起こりやすいですね。ゲームというだけでなく、コンテンツを守るということは何かしらしなければいけないのです。
2つめは、開発費用の回収ですね。ゲーム開発に要した莫大な費用を回収するためには、有料コンテンツの対価を確実に回収する必要があります。コストをかけて生まれたコンテンツに対し、正しく購入してもらうためにプロテクトをかける形です。
3つめは、エンドユーザーの公平性です。有料コンテンツを無料で入手したり、不正ツールでゲームを有利に進める人がいると、正しくプレイしている課金ユーザーのゲーム離れにつながります。
4つめは、不正競争防止法ですね。コンテンツ保護目的のプロテクトをリバースエンジニアリングすると、不正競争防止法により刑事罰を問うことができます。すなわち、プロテクトを導入しているゲーム会社は法的手段を講じることも可能ということです。
優先順位は会社によって異なると思いますが、各社理由があるのではないでしょうか。これらの理由によってプロテクトを導入している、もしくはする必要があるのではないかと考えております(須山)。
チートを検知できない理由
・FPSのチートはあからさまにあり得ない動きをするので、人間は簡単に判別できます。
あるいはチートを行うファイルを確認すればチーターかどうかの特定は非常に簡単なのではと考えています。それなのに、何故チーターを根絶することはできないのでしょうか?
・自分はPS4、 Xbox、 PC(Steam)向けに発売されたPvPゲームを1500時間以上プレイしているのですが、遊んでいるプラットフォームがPCなためかチーターと結構な頻度で遭遇します。(中略)こういった悪質なチートってサーバー(Steamなどのプラットフォーム、もしくはゲーム開発・運営)が検知できず、また対応できない理由って何があるのかなと気になり投稿させていただきました。
人間の感覚というのは、優れているんです。人間っぽくないなと怪しめば、すぐに判別できますよね。ただし、プログラム的に判断するには基準を設けないといけないです。たとえば時速10キロや20キロまで動ける中で、30キロで動けているユーザーは不正者であると判定し排除することができます。ただし、それがわかれば29キロにするという変更をしてきますよね。またその判定をクリティカルにしてしまうと、テクニックのあるプレイヤーまでも弾いてしまうという形になります。判定を作るのもなかなか難しいところなんですよね。人工知能などが進化すればディープランニングなどを用いて人間的な観点で弾ける可能性があるのかなとも思います。とはいえ、完璧は難しいとは思います。うちとしてはそうした検知というよりは、そもそもチートで用いられる手法を検知して事前防止するのが役目です(須山)。
※先日も、ゲームがうますぎたプレイヤーが誤ってBANされたのではないかという事例があった(関連記事)
不正な改ざんの検知方法
・はじめまして。よい機会なので疑問を一つ投稿させて頂きます。ゲームプログラムは、通常の進行でもメモリを書き換えながら進行していくものだと思うのですが、チートツール等による不正な改竄が発生した事を、どのように判断しているのでしょうか。
・ユーザーがクライアント側でメモリの改ざんを試みた場合、その足跡を感知する方法はありますでしょうか? また、それが可能な場合はどういった仕組みを組み込むのでしょうか?
まず前提としては、CrackProofはメモリへのアクセスを防ぐというツールとなっており、メモリへのアクセスを検知するという機能はありません。一般的な方法としては、メモリ改ざんに対してはセキュアコーディングをおこないます。たとえば、メモリにたいしてハッシュ値をとっておき、変な値を書き込めばハッシュ値が合わないようにしておく。あるいは、データを二重化しておくとか。両方にデータを書いておき、片方だけ変えると矛盾にするようなものですね。そういったやり方は存在します(須山)。
バイナリデータやパケットの解析方法
・チートツールは詰まる所、ファイルや通信パケットの改変をしていると思うのですが、チートツールの開発者たちはどうやってゲーム内のファイルのバイナリデータ構造やパケットのフォーマットを把握しているのでしょうか?
バイナリデータの解析ということになると、逆アセンブラを用いてロジックが見られています。高性能な逆アセンブラで調べていけば、時間さえかければ絶対に解析はできますね。通信パケットについては、TCP/IPという世界のプロトコルに放しているので、パケット解析用のツールもあるんですよね。パケットフォーマットも見えやすくなりました。ゲームでもヒットポイント=Xとかゴールド=Yといった可読な形で送られているケースもあるので、逆アセンブラよりも通信の方が読み取りやすいと考えるチート開発者も多いのではないでしょうか(須山)。
なぜハックされてしまうのか
・オンラインゲームがハックされてしまう原因はなぜですか?どういう脆弱性を突かれているのでしょうか?
よくあるといえば、適切なセキュアコーディングをさせていない、メモリにアクセスし放題だとか、改ざんし放題などそういうケースがありますね。通信経路というのは一番とられやすいので、単にhttpsを使ってもプロキシソフトを使っても見えてしまうんです。そういったところでしょうね(須山)。
なぜセキュリティ対策会社に入ったか
・なぜセキュリティ対策会社に入られたのでしょうか。好奇心ですが、動機などを聞きたいです。
私が入社した理由としては、セキュリティ分野に興味があったというよりは、ソフトウェアに携わりつつ、システムなどのハードウェアに近い部分の技術力を培えるところに魅力を感じたからです。
また、お客様のアプリケーションを保護し、見えないところで活躍する技術にも惹かれました。
ただ、最近はこうやって日の目を見ることも多くなりました。認知度が上がることはうれしい反面、クラッカーの目に触れることも多くなりますので、より強く、より柔軟な堅牢性をもつCrackProofが必要とされていると感じています。(國澤)。
どこまで対応してもらえるのか
・対応できるもしくは対応できないケースというのを、今一度はっきり線引きすることは可能でしょうか。
対応できるものといえば、逆アセンブルされるようなことを防ぐ機能があるので、そこが中心となります。たとえば、クライアントエミュレーターのような、通信プロトコルをそのまま真似たものなどは防げないですね。防ぎようがないんです。自身の解析によるチートなどは、防ぐことができます。一方で、通信経路やアプリのリソースの取得などは防げないです。なので、リソースを暗号化する上では、復号アルゴリズムをCrackProofで守るようなことはできます(須山)。
暗号化に関する対策
・「アプリごとに鍵が異なる」という対策のみだと、計算時間の問題に置き換わるはずなので計算させておけば時間が解決する…クラックするための作業は極小になります。他にどのような対策をしているのでしょうか?
これは暗号化の話であるとして、お答えさせてください。CrackProofの暗号鍵は、かけるごとに変えています。同じアプリでも2回かけると別の暗号鍵になります。しかし、あくまで暗号化はセキュリティ対策のひとつにすぎません。それ以外にもルート化対策やメモリアクセス阻止やデバッグモードオフ化。そうした複合的な対策で守りを固めています。また、かけるたびに暗号鍵を変えているので、ほかのタイトルへの影響などはないと思われます(須山)。
チート対策はひとつすれば問題ないか
・チート対策は、ひとつの対策(例えばメモリ改ざんに対する対策)をおこなうだけで、あらゆるチートを防ぐことは可能なのでしょうか。
これはノーでしょうね。メモリ改ざんを防いだとしてもモニターされてしまいます。パケット改ざんも対策していなければやられてしまう可能性はありますね。ひとつだけで防ぐのは難しいですね(須山)。
CrackProofの形態やサポートについて
・CrackProofの購入形態や、契約期間について教えてください。一度購入すればどのくらいサポートしていただけるのかなども含め。
サブスクリプション型になっており、1年契約ですね。CrackProofの契約料金の中には、当然サポートについても含まれています。セキュリティのコンサルティング的なものも導入時に相談させていただく形です(鶴衛)。
Jailbreakなしでのチートは可能か
・iOSはサンドボックスなつくりにより、他アプリから干渉することは基本的にできませんが、Jailbreakを行わずにチートをすることは可能ですか。
Jailbreakせずにサンドボックスを越えられるかという点については、できませんと回答します。ただ、少し違う方向性ではできるんです。iOSでは、昔はAppleが出した署名以外ではアプリが動きませんでした。最近ではユーザーが明示的に信頼したアプリはApple署名でなくても動くようになりました。それを使えば、改造したIPAファイルを動かすということもできます。ほかにも、アプリの配布方法としてはIn-HouseやAd-Hocという開発者向けの方法があるのですが、それらをうまく使えば、不正改造したアプリをJailbreakなしで動かせられます。ただし、サンドボックスは越えられません。また余談なのですが、メモリの特殊な使い方として自己書き換えというテクニックがあります。ファイル全体を暗号化していてもメモリ上で復号して実行することができます。自己書き換えはJailbreakしなければ、仕組み上絶対にできませんね。エミュレータのようなソフトに関してはJailbreak必須になりますね(須山)。
他人の値をどう取得しているか
・対戦ゲームにおいてよく見られる「他人の値」を取得するチートについて、仕組みと対策を教えてください。(中略)また、対策をするにあたり、クライアント、サーバー、ハード、ソフト、どの部分に重点をおいて対策を置くべきなのかも聞きたいです。
一部推測を含みますが、まず他人の値を取得する方法について回答します。サーバーにはユーザーIDを送信すればユーザー情報を返却する仕組み(以下、「API」と呼びます)があります。何らかの方法で他人のユーザーIDを知ることができれば、APIを悪用して他人のユーザー情報を得ることができます。なお、APIの使い方はWireSharkなどネットワークプロトコル解析ソフトを使用すれば知ることができます。
同じく一部推測を含みますが、対策について回答します。対策時に重点を置くべきポイントはネットワークプロトコルを複雑化することであり、それを実現するためにはサーバー側ソフト、クライアント側ソフトを改修する必要があります。例えばAPIが判明したとしても、ワンタイムパスワードなどを利用すればAPIの悪用が極めて困難となります(須山)。
MACアドレスからユーザーの特定はできるか
・ハードウェアのMACアドレスは、各ユーザーのハードウェアの構成から特定のユーザーを特定するための要素のひとつですか。
まず、MACアドレスは変更可能です。ただ、こういうシリアル番号のようなものはなにかと紐づけていないとユーザーを特定できません。そして、今の傾向としてそれを取得することも難しくなっていますね。AndroidでもiOSでも、コントロールパネルから見えてもプログラムからは取得できなくなっていますね。個人情報保護や欧州のGDPRの観点からも難しくなっています。IPアドレスですら個人情報という話にもなっています。答えになっているかはわかりませんが、そういう背景もあり、情報取得は難しくなっていますね(須山)。
チートに対する法的罰則について
・チートプログラムの作成、及び利用に対しての法的な罰則を厳しくする事は出来ないのですか。
まず、プロテクトで保護されたゲームに対してリバースエンジニアリング等をしたという明確な証拠がなければ、不正競争防止法などの法律に引っ掛けることもできません。法律というのは実態があるのが前提という考えがあり、電子データという概念がなかったので、法律が現状に追いついていない側面があります。ただ今後はデジタルデータに関する法律というのは充実してくるんじゃないかと思っています。法が追いついてないからこそ、しっかりと守ることが重要なのではないかなと考えています(須山)。
手こずったチート
・これまでで一番手こずったチートなどの事例について教えてください。いろんなチートがありますが、どれを対策したり解析したりするのに苦労しましたか。
最近はチートに手こずるというより、どうやってやったかがわからないことに困ることが多いです。たとえば、何かのすきを突くチートツールを使っていたりとか、改造APKが放流されていたりとか。ところが、ゲームとその間に何があったのかはわかりづらいので、そこは推測もまじえて対応を進めなければなりません。そういう意味では、最近だと改造APK対策に力を入れているところではあります。何に手こずったかという質問の回答になっているかはわかりませんが……(須山)。
事例というより、時代の流れとしてのハードさはあります。今では、相手は集団なんですよね。24時間365日体制で、グローバルにチームを組んでチートをしようとしている。年々チート対策をする上でのハードルは上がってきている印象です。なので、僕らとしては会社内で対応するよりも、僕らのような専門の企業に声をかけてみてほしいと思っています(笑) (鶴衛)。
チート対策におけるスピード感
・プロテクトが万が一破られてしまったと報告された場合、どのようなスピード感で対応していただけるのでしょうか。
難しい質問ですね(笑)。ケースによって異なるんです。たとえば、すでにプロトコルなどがバレてプロテクトが破られたお客様に、CrackProofを導入していただくとします。その場合は、前に破られたことが影響し、解析をせずに比較的短い時間で突破される可能性があります。新規導入した場合にも、ある程度の限界はありますね。何か事故がありその対策をするとして、1か月ぐらいのスケジュールを通常とすることもできますね。根本的な対策やその実装、検証をするところまで含めて、1か月というイメージを持っていただくのがいいかなと(鶴衛)。
対策ツールの重ねがけは有用か
・セキュリティツールは、併用すればよりセキュリティの強度が高まるのでしょうか。たとえば、他社ツールの併用をすることで、より堅牢にするという案もあるかと思います。
基本的には、セキュリティツールを併用するのはあまりよくないと思います。コンフリクトする可能性が高いですので。特殊なトラブルが発生し、うまくいかないという事例の背景に、ツールの併用が存在したというケースも存在しました。原則的に組み合わせるのは避けるか、かなり細かく仕様などを見極めて使用するか。ただ、何かあった際には原因がわかりづらくなるので、やはり一社にしておいたほうがいいのかなと思います。CrackProofはコストパフォーマンスが高いので、まずこちらを選んでいただければと思います(須山)。
併用する場合には、サーバーや通信、クライアントなど、それぞれの最適なソリューションを用意しておくのがいいかなと思います。領域が異なるツールとなれば、ご相談していただければ併用できるようにアレンジすることは可能です。ただ、領域が重なるとやはり難しいので、そこは原則ひとつがいいのかなと思っています(鶴衛)。
デバッグモードによる不正は、検出可能か
・Android端末は、USBデバッグモードをオンにすることによって、ミラーリングやPCからの操作が可能になります。そういった機能を使えば、画像認識等を用いることによって、人間よりよいパフォーマンスを引き出すことのできるゲームもあります。そういったツールの使用は、アプリ側から検知できるものなのでしょうか。
USBデバッグは、CrackProofで検出しています。ただし、具体的にどれをオーバーレイしているのかというのは、検出は難しいですね。USBデバッグを無効にすることによって、阻止しているという形ですね(須山)。
いかがだっただろうか。これを機に、チートについての知識を深めていただけたなら幸いだ。DNPハイパーテックは、CrackProofの無料トライアル提供や、チート対策の相談など問い合わせも歓迎しているとのことなので、この記事を読んで興味を抱いた業界の方には問い合わせていただき、そうではない方はDNPハイパーテックとCrackProofという名前を、記憶の片隅に留めておいてほしい。