LoginSignup

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

[CEDEC2017]チートの傾向と対策 〜クライアントサイドのセキュリティ入門!〜

Posted at

チートの傾向と対策 〜クライアントサイドのセキュリティ入門!〜

講演者

末岐 光洋さん(サイファー・テック株式会社)
桝形 謙介さん(サイファー・テック株式会社)

講演内容

チートとは?

ステータスデータの改竄などによってゲームを優位に進めたりすることである。
有料アイテムを支払いなしに使用できるようにしたりすることもある。

チートの被害

チートユーザーがいると正規ユーザーのモチベーションが下がり客離れが発生してしまう。
その影響で売り上げも下がっていってしまう。
特に競技性のあるものに関しては大きな問題となっている。
また、リリース後の対策だとコストが掛かってしまうため、最初から組み込んでおいた方が良い。

クライアントとサーバーのセキュリティの違い

サーバー側(WEB系)

不特定多数のユーザーに公開されているサービスという観点からセキュリティ対策への意識は高い。
規範となる対策方針が業界全体として整備されている

クライアント側(ネイティブアプリ)

ネイティブアプリの場合は悪意のユーザーの手にアプリケーションが渡ってしまっている。
そのため攻撃者(チーター)はユーザーとして潜伏するため対策が複雑化する。

攻撃の種類

  • 低(簡単)
    • メモリ改変
    • データ改変
    • OS改変
    • 通信内容の改変
    • プログラムの改変

メモリ改変

メモリ上に展開されているデータを改変することで値を弄って最大値化することでチートが成り立つ。
原理を知らなくても専用のチートツールが出回っている。

対策

値に対して何かしらのエンコーティングを施す。
デバッガやエミュレータからの実行を抑制する

データ改変

端末のローカルストレージに保存されているデータを改変することで、有利に進めれるようなデータにすること。
キャラやアイテムのデータファイルや中断データの情報などが改変対象

対策

データの保存先としてサーバーにする。
保存するデータに対して暗号化を施す。
※暗号化の手法が看破された場合無効化されるので注意が必要。

OS改変

所謂、root化、jailbreakがこれにあたる。
これを前提としているチートツールが多い。

対策

端末情報からこれを行っているかを特定することはできるが、情報を改竄されることもある。
そのため商用の対策ソリューションを入れたほうが手っ取り早い。

通信内容の改変

クライアントサーバー間の通信を改変することで、サーバーから取得したステータスを改変し、
優位にゲームを進めたりできるようにすること。
HTTPS通信を行っているからといって安心してはいけない。

一般的なWebアプリケーション開発ツールを用いることで容易に復号化し改変することが可能である。
MITM攻撃やMATE攻撃という攻撃手段がある。
MATE攻撃が成立してしまう理由として、端末と中間のデバッグツールが結託してしまうことが原因。

対策

通信内容の暗号化を施す
こちらも暗号化手法が看破されると無効化されるので注意が必要。
難読化と合わせて行うことが有効。

また、単純に暗号化しただけでは暗号文のリプレイによるチートが発生するので、
セッション管理の厳密化やNONCEの利用が必要。
サーバー証明書の検証をOSが管理する認証局リストに頼らない別の方法で行う。
公開鍵の値が特定の値であることを直接検証する公開鍵ピン留めという手法が注目を浴びている

プログラムの改変

ゲームロジックを解析し、チートが可能なようにプログラムを改変してしまうこと。
上記の暗号化対策もプログラム改変により無効化される可能性がある。
ネイティブコードなど機械語化されているようなプログラムだと解析のハードルは高いが、
Unityなどで吐き出されるILなどの中間言語は比較的容易に解析されてしまう。

対策

Unityの場合はIL2CPPを行うなどすることで多少は解析のハードルをあげることが出来る。
ただし、IL2CPP化してもクラス名や関数名などで処理を推測できるので注意が必要
また、プログラムが改変された場合にそれを検知できる仕組みを入れておくといい。

クライアントのセキュリティ対策

チート行為を検知して運営側で判断する。
チート行為をサーバー側で機械学習して対処する。
問題は何を持ってチートと判定するか。

商用ツールのメリット

難読かや動的解析対策などを通常のプログラミングだけではカバーできない専門的な技術の対応が可能
エンジニアは開発に注力することが出来る。

デメリット

料金が高い
様々はオプションが多い
実装に伴い、メモリ使用量の増加や処理速度のオーバーヘッドがあるため
すべてのゲームに適用できるとは限らない。

感想

セキュリティ面に関して、この業界において常に課題となっている項目だと思っています。
素人が対策を行っても破られるなどのイタチゴッコが発生するので、
専門的に行っているものを利用するのはいい案だとおもっています。

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up