チート対策をするには何をすべきなのか?セキュリティソリューション開発会社DNPハイパーテックにチートの実態と性質を訊く(後編)
アンチチート・クラックのセキュリティツール「CrackProof」を開発・販売するDNPハイパーテック社に、チートにまつわるさまざまなお話を聞くインタビューの後編。前編ではチートの事例や性質について教えていただいた。後編はチートをいかに対策していくかを語っていただく。
――それではチート対策について具体的に教えていただけますか。
須山氏:
我々は解析を大きく二種類に分けて考えています。何も動かしていない状態でファイルの解析をする静的解析。そしてプログラムを動かしながら解析する動的解析に分けています。我々の造語というわけではないんですが、あまり使われない言葉ではありますね。
静的解析対策としてはファイル全体を暗号化します。そうすると逆アセンブルしても有効なコードが出てこない。この暗号化は何重にもかけるので非常に強固です。動的解析対策としてはエミュレーター上での実行阻止、デバッガーのアタッチ 阻止、外部プロセスからのメモリアクセス阻止ですね。チートツールによっては、プログラムを動かしながらメモリを書き換えてくるというのがあるんです。そういうものに対してはメモリを保護すると守れる、基本的にはそういう考えがあるんです。
大きく言えば、これだけの対策をすればプログラムを守れるというのがコンセプトになります。もちろん、これだけでは不十分であったりドライバレベルで何かしないといけないという細かい話はあるんですが、基本的な考えとして「ファイルは暗号化」「外部から守る」を徹底すれば解析されない、メモリを変えられないという発想です。
鶴衛氏:
あとはプラットフォームによって必要な対策が変わってくるので、その点を弊社がフォローします。Windowsであればドライバで何かをしないといけないということもあります。
――柱となる考えがあり、そのほか細かい点は個々に応じたサポートという形ですか。
鶴衛氏:
そうですね、ただエミュレーターの対策に関しては今後どうなっていくのかなと思う部分はあります。仮想化技術は発展していますし、クライアント側に仮想化技術が浸透した時に、そうしたスタンスであり続けてもいいのかというところはあります。
須山氏:
エミュレーターというと、エミュレーター上で動作するプログラム側すなわちエミュレーター内側をいくらセキュリティ強化しても、エミュレーターが動作するWindows OS側すなわちエミュレーター外側からのアタックに対しては無防備です。そういう意味で、エミュレーターというのはセキュリティの観点ではよくないとは思うのですが、特段許したいというところがあれば許していくしかないのかなと。Windowsゲームだとエミュレーターとは無縁なのですが、スマートフォンゲームはエミュレーターでの動作をどう考えるかというのは大きな課題になっています。
――その基本的な守り方の考えは、DNPハイパーテックさんの提供するサービスでいえばWindowsでもスマートフォンでも変わらないですか。
須山氏:
そうですね。ただ、iOSが少し特殊です。iOSを除けば「CrackProof」はすべてコンパイルが終わったまま直接変換する仕組みになっているんです。ただiOSだけはソース組み込み型になっています。というのも、iOSはサンドボックスの制約もApp Storeの審査基準の制約も非常に厳しいためやむを得ずそうしています。その影響でほかの「CrackProof」に比べて、保護範囲は少し狭くなっています。ただ狭いから危険なのかというとそうではなく、Appleは先程言ったようにJailbreakしなければサンドボックスで強固に守られているので、そうした点と相互補完しています。トータル的にはほかのプロテクトと同様の機能があるのかなと。ちなみにiOSは、シミュレーターは存在していますが、エミュレーターは存在しません(笑)。
――PCユーザーとしては、クライアントへの負荷は気になる点です。「CrackProof」を導入することでかかる負荷はどのようなものですか。
須山氏:
起動時に多少の負荷はかかります。プログラム次第なので一概には言えないんですが、平均して10%ぐらいの負荷でしょうか。お客様によっては数%とも言われます。つまり、起動時に数%~10%ほどの負荷がかかるということですね。もともと暗号化しているので、それを復号するという作業が入り、多少負荷はかかります。ただし実行中の負荷はほぼゼロです。
鶴衛氏:
実行中の負荷がほとんどないということで、FPSのような高レスポンスを求められるゲームでも安心して使ってもらえるかなと。乗り換えていただいたお客様からは、業界内でも軽い方だと言われています。
――「CrackProof」の導入部分についても聞かせてください。さまざまなパッケージが存在すると思いますが、一般的なモバイルゲームに組み込む際の手順を教えていただけますか。
鶴衛氏:
AndroidにしてもWindowsにしてもバイナリを直接変換する形なので、お客様の方でしていただく作業は、お客様の実行ファイルを弊社のクラウドサーバーにアップしていただくだけですね。あとは自動的にセキュリティが追加されます。
須山氏:
Androidファイルの場合はapkファイルをアップロードして変換してダウンロード。Windowsの場合はexeとdllをアップしてダウンロードする形ですね。細かい作業はいろいろとあるんですが、基本的にはこのような流れです。ただし、iOSはXcodeプロジェクトにエラー通知関数とセキュリティ機能を有効化するアクティベーション処理の組み込みが必要です。ちなみに、アクティベーション処理内部では他のCarckProof同様にクラウドサーバにアプリをアップロードしてダウンロードしています。それも慣れれば一日かからない程度だとは思います。長くても10分~15分ぐらいでしょうか。
――Unityでもそのプロセスは変わりませんか。
須山氏:
基本的には変わらないです。ただ、UnityのiOS用アプリはXcodeプロジェクトとして出力されますので、エラー通知関数とアクティベーション処理をビルドごとに都度組み込まなければなりません。これではJenkinsなどを使用する際に手間がかかるので、スクリプトで「CrackProof for iOS」の組み込みからビルドまでを完全自動化することを検討しています。
――組み込みは、アプリなどをアップデートしたりした後でも、同様の手順でできますか。
鶴衛氏:
バージョンアップされたアプリをアップロードしていただければ問題ありません。お客様がプロジェクトを更新してビルドをかければ自動的に「CrackProof」で処理するという仕組みを構築されている会社様も結構いらっしゃいますね。
――ちなみにその作業の所要時間はいくらになりますか。
須山氏:
インターネット環境によるので、一概には言えないですね。サーバーとの通信でアップロードとダウンロードと変換処理時間の合計になります。最近、テスト用に作った800MBのアプリをアップロードされた方がいましたが、それはさすがに時間がかかりました。往復で30分から1時間ぐらいでしょうか。ただGoogle Playにアップロードできるサイズは100MBが規定なので、100MBぐらいなら2~3分 というところですかね。
――今のお話を聞いた感じだと、導入イメージはタイトルの立ち上げからというイメージなんですが、既存タイトルの途中導入も可能ですか。
須山氏:
できます。ただ、効果がない場合もあります。さきほども話したように、データを直接守る機能はないんです。過去にすでに暗号化がバレてしまった作品は、いくら「CrackProof」でセキュリティをかけたとしても暗号化に関しては同じ形式なので、バレるのは変わりません。「CrackProof」の導入とセットで暗号形式を変えてくださいというのはお願いしています。
――「CrackProof」を導入すれば、そうした導入前に発生していたトラブルにも対応していただけると。
須山氏:
むしろサポート込みのサービスですよ。売り切りのパッケージ製品ではなく、お客様と一緒にやっていくサービス寄りのサービスかなと思っています。
鶴衛氏:
売って終わりというものではないです。セールストークっぽい話になってしまうんですが、メーカーで直接サポートできるという点と、弊社は日本の会社なので日本のお客様に対しては時差もなく素早いサポートが提供できるという点は大きな売りかなと思います。
須山氏:
自社製品なのでネガティブなことはあまり言いたくなかったんですが、最初に申し上げたようにセキュリティを強化すれば何か犠牲が出るという側面があります。モバイルゲームの場合ですと、導入することによって動かない端末がある程度の確率で出てきます。たとえば、我々は国内キャリアの端末、とりわけXperiaやGalaxyといったフラグシップモデルやNexusやPixelといったリード端末を重点的にチェックしているんですが、XiaomiやNokiaなど海外端末はチェックできておらず動作しないことがあります。その他出荷時点でroot化状態になっていて動作しなかった報告もありますね。
WindowsでしたらPCがウイルスに感染して動かなかったことがあります。このようにセキュリティを導入すると少なからず動かなくなるものがあるという点はあります。ただその部分はお客様にとって重要である場合も多いので、動かなくなった場合にはサポートさせていただきます。
――導入例として、事前防止の事例と、すでに起こっているものへと対策という事例とではどちらが多いですか。
鶴衛氏:
両方あります。予防目的ですと、マーケティング投資も大々的に行っていて収益を見込んでいるタイトルで検討頂くことが多いです。私はこの場合保険的な理由で導入頂いていると考えています。一方で実際被害が発生している場合は、いわば薬として導入していただいています。せっかくヒットしてユーザーが伸びているけど、ちょっと不正が目立ってきて、レビュー欄も荒れだしてきたなぁ、というような状況において特効薬的にお使い頂くことで効果を発揮しています。
小林氏:
被害があってからお問い合わせいただく場合ですと、その後次のタイトルにも導入を検討していただけることが多いですね。最近はアプリのサイクルが短くなっていて年間何本もリリースされていますから、ひとつのタイトルの相談から始まり、次からは事前に対策していこうという流れはあります。
――どちらの事例もしっかりサポートしていただけますか。
鶴衛氏:
もちろんです。実際に被害が起きている場合というのは、暗号方式を変えたりする必要があるので、お客様の手間も発生します。ただそうした点も含めてサポートさせていただきます。コンサルティング的な要素が入ってきますね。
須山氏:
基本的に出来る限りのサポートはさせていただいていますが、再現性がない事例はサポートできない場合もあります。1000回に1回しか起こらないといったケースは、お断りすることもありますが、こちらで再現性が確認できる場合は、間違いなくサポートさせていただきます。
――これまでの実績を考えて、「CrackProof」の導入に相性のいいタイトルなどはありますか。
須山氏:
チートされて困るものが多いと思います。パラメータを変えられると困る会社様がうまくマッチングするんじゃないかと。特殊なケースですが、アルゴリズムを知られたくないというものもありますね。機密度の高いアルゴリズムを実装したいという会社様ともマッチングするかなと思っています。今Free to Playを収益として見込んでいる会社様であれば、どのような会社様でも効果は感じられると思います。
鶴衛氏:
またまたセールストークになりますが、WindowsもAndroidもiOSも守れるというのはひとつの強みかなと思います。今後マルチデバイス化がさらにスタンダードになるでしょうし、スマートフォン向けにサービスされていて次の展開としてWindowsを考えたり、その逆のパターンだったり、そういったお客様にはトータルでセキュリティを提供できますので、満足していただけると思っています。
――WindowsとAndroid、iOS、パッケージはそれぞれ別販売ですか。
鶴衛氏:
それぞれ別になりますね。ボリュームがあればお値引きもさせていただいています。今後はマルチデバイス戦略にフィットするご提供プランを作っていく必要もあるのかなと。
――そのほか「CrackProof」を導入することによる、アンチチート以外のメリットを教えてください。海賊版対策のクラックのサポートもされるとお聞きしましたが。
鶴衛氏:
そうですね。クラックについても直接的・間接的な方法で同様に守ります。ただし、対策を施すだけでは効果がない場合もあります。最初にお客様が何を守りたいのかというところをヒアリングさせていただいて、サポートしていく感じですね。
須山氏:
ツールAには強いけどツールBは強くないといったやり方はあまりしていません。汎用的にメモリを守ることを基本としています。すべてのツールや違法行為から守る方法を採用しています。
鶴衛氏:
ゲームをそっくりそのまま真似されてしまうという事例にも対策できます。リバースエンジニアリングを防ぐという点では同じなので。
――では最後に告知などがあればお願いします。
鶴衛氏:
この記事が出る頃にはもう終わっているかと思いますが、Game Developer Conference 2018に出展します。コンソールでもFree to Playタイトルが増えてきていますので、今後一年以内にコンソールに対応した「CrackProof」をリリースする予定です。
須山氏:
GDCに出すというのも、今後さらにゲーム業界でセキュリティを提供していきたいという思いもあるので、ロードマップとしてコンソール展開も考えおります。ぜひご相談いただければと思います。よろしくお願いします。
――ありがとうございました。
今回の対談とは直接関係ないが、実はDNPハイパーテック社に、いくつかチートツールを提供し、その内容を解析してもらった。ひとつめのツールは「H1Z1 tool」という『H1Z1』のチートツールとしてインターネットで無料配布されているものだ。こちらは.Net Frameworkで作られており、逆アセンブルした結果詐欺ソフトであることが判明した。起動すると特定のサイトに飛ぶ仕組みで、使用者に登録照会をおこなっているように見せかけ、ツールに入力するためのパスワードを表示する。実はこのパスワードは「pass26」で固定されており、ツールに入力すれば「Unlock」「Connecting」と表示されるだけで、何も起きない。つまり、会員登録させることを目的としたダミーソフトである。
次に特定のサイトで配布されている「PUBG Free Tool」についても解析してもらったが、やはりこちらも詐欺ソフトであった。ファイル構成を見るとhook.dllというファイルが存在し、このようなファイルは一般的にDirectXを誤魔化す用途で使われているが、須山氏が解析してみると実行ファイルというより画像ファイルのような形跡が見られたという。拡張子を変えてみると、やはりこのdllファイルはjpgファイルで、“それっぽい画像”を表示するためだけのファイルであったようだ。
機能としては、まずアプリケーション「PUBG Free Tool」を立ち上げるとライセンスキーを求めるような画面が表示され、承諾すると特定のサイトが表示される。ツールはそのサイトで使用者を会員登録させるように促すのだが、そもそもそのような会員登録はライセンスキーに関係なく、特定の文字列を入力した時だけ反応するという。ライセンスキーを入力すると、ロード中であることを思わせる画面を0.8秒ずつ45回表示させるという動きを繰り返し、「ライセンスサーバーはファイアウォールによってブロックされました」という旨の画面が表示されるのみ。つまるところ、やはりこちらも会員登録をさせることを目的とした、詐欺ソフトであった。
チートツールを使用することは断固として推奨できないことはもちろん、くわえて無料チートツールを使うとなれば業者に食い物にされてしまうリスクが存在することがあらためて確認できる。このような解析も参考にし、チートなきオンラインゲームを実現するために、クリーンな遊び方を心がけていきたい。