特集
» 2019年02月27日 05時00分 公開

「不正ユーザーの95%が利用する手法」を解説:「未対策なら1分でできる」 スマホアプリの改ざんを防ぐには? (1/2)

スマートフォン向けアプリケーションを開発する際にもセキュリティ対策は欠かせない。DeNAの舟久保氏は内製ツールと自作アプリを利用して模擬的に改ざん行為を行い、アプリ開発時にどういった対策が有効になるかを解説した。

[石川俊明,@IT]

 スマートフォン向けアプリケーション(以下、スマホアプリ)を開発する場合にも、セキュリティ対策を考える必要があるのは、もはや開発者の義務といっていいだろう。どんなアプリであっても、ユーザーが意図的に情報を改ざんできない仕組みを導入したり、個人情報が漏えいしないような対策を採ったりする必要がある。

 2019年2月6日にディー・エヌ・エー(以下、DeNA)が開催した「DeNA TechCon 2019」で、DeNAの舟久保貴彦氏はゲームアプリの不正(チート行為、改ざん)対策や海外情報を追いかける中で得た知見として、不正行為が行われやすいゲームアプリの特徴や、不正行為を行うための3つの改ざん手法とその対策を紹介した。

不正行為対策には「バランス」が重要

DeNA システム本部 セキュリティ部 セキュリティ技術グループ 舟久保貴彦氏 DeNA システム本部 セキュリティ部 セキュリティ技術グループ 舟久保貴彦氏

 ゲームアプリにおける不正行為とは、自身を優位に進めるため、制作者の意図しない動作を起こせるように改ざんすること、いわゆる「チート」のことだ。舟久保氏は、アプリ改ざん対策について「バランスが重要だ」と説明する。

 「クライアント側にデータやデータの操作ロジックを保存するようなアプリは、データを解析しやすいため、不正行為の対象として狙われやすい。従って、データやデータ操作のロジックはサーバ側に保存すべきだろう。一方で、サーバ側に保存すると、通信処理の頻度が高くなるため、アプリの動作速度が落ちる。ゲームアプリの場合は、素早い動作、応答速度が求められるため、バランスを取ることが重要だ。例えば、絶対に守りたい『アイテムの購入画面における処理』はサーバ側で、『バトルの画面における処理』はクライアント側で行うといった形で切り分けるべきだろう」

サーバ側にデータやロジックを保存することで改ざんに強いアプリになる サーバ側にデータやロジックを保存することで改ざんに強いアプリになる

 舟久保氏はバランスを踏まえた上で、以下の3つの手法に対抗する策を重ねて採ることが重要だと説明した。それぞれ見ていこう。

  • メモリ改ざん
  • ファイル改ざん
  • パケット改ざん

メモリ改ざんによる手法

 初めに紹介したのが「メモリ改ざん」だ。スマートフォンのメモリには、実行したアプリのデータやロジックが保存されている。インターネットで公開されている「メモリ検索ツール」を利用し、改ざんしたいデータのアドレス(保存位置)を特定できれば、1分以内にアプリを改ざんできるという。

 講演では、サンプルアプリで表示された値のバイナリ値をメモリ内で検索し、目星を付けたあと、値を変更してメモリ内のバイナリ値の変化を確認。検索と変化を繰り返すフィルタリング作業を行い、データが保存されている位置を特定して、改ざんに成功した例を紹介した。

アプリ画面に表示されている「32」をメモリで検索
アプリの値を変化させることで保存位置を特定し、改ざんに成功

 「肌感覚として、不正行為の95%がメモリの改ざんを利用している。この改ざんを防ぐには、メモリ内を検索させないことが重要だ。特に、画面に表示される数値は狙われやすい。画面に表示させたデータを保存、利用する際には、何らかの形でエンコード/デコードすることが求められるだろう。例えば、排他的論理和(XOR)とランダム値を利用した難読化手法は、時間をかければ突破される可能性もあるが、検索ツールなどで容易にメモリでの保存位置を特定できなくなる意味で効果がある。また、メモリ解析ツールにはroot権限が必要なものも多いため、Jailbreakやroot化させたスマートフォン、またエミュレータでのアプリ起動を検知してアプリを起動できないようにするのも対策になるだろう」

ヒープ領域やグローバル領域に何らかの形で暗号化して保存するのが有効になる ヒープ領域やグローバル領域に何らかの形で暗号化して保存するのが有効になる
       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。