Androidアプリの不正使用対策について
AndroidはOSのソースが公開されていたり、Android Market以外からアプリをダウンロードする事ができるため、Androidアプリは常に不正使用の危険にさらされているかと思います。
そこで、他の開発者の方への注意喚起、及び情報共有を目的にAndroidアプリの不正使用対策についてまとめてみたいと思います。
間違いなどがありましたならば、ご指摘ください。
項目は以下の通りです。
- 難読化する
- ライセンス管理をする
- パーミッション改竄対策
- その他
- SkyArts について
2012/03/01 追記
電子書籍「Androidアプリ開発者のための不正使用対策」の販売を開始しました!
不正使用対策を詳細に書き直し、最新情報も含んでいます!
大変悪質な認証回避ツール(LVLを含む)対策、改竄検知方法、LVL使用時の注意点等も記載されています。(危険な内容の為、Webでは公開できません!)
2012/09/20追記
Androidアプリの認証回避ツールの手口や不正使用狙いキーワード集等のエントリのまとめ
認証回避ツールの巧妙で悪質な手口を説明しています。全有料アプリが無料化できてしまいますので、開発者の方はご注意下さい。
– 難読化する –
開発者の方であれば以下の様なニュースを聞いた事があるかと思います。
- 勝手にアプリが再配布され、ウイルス入りに改竄されていた
- 勝手に広告を入れられて再配布されていた
広告を入れられる行為は少し考えないといけませんが、ソースの改竄でウイルス的な動作をさせられた場合、不名誉な形でアプリ名が知られてしまう事にもなりかねません。
Android 2.2からアプリファイル(apk)をSDカードにコピーできるようになり、アプリファイルへのアクセスは容易になりました。基本的にアプリ側で設定していないとSDカードにコピーはできませんが、Androidはroot権限を取得する方法が出回っていたりしていますので、正式な場所で配布していてもアプリファイルを引き抜かれる可能性があります。
そして、アプリファイルを引き抜かれた後、上記の様な改竄をされて再配布されるといった悪用が行われる可能性があります。
– 対策 –
ソース改竄防止の為にも 最低限ProGuardなどを使用してソースを難読化しておいた方が好ましいでしょう。勿論、難読化したからといって完全ではありませんが、対策をしておいた方が安心感は増します。
最近では EclipseのAndroid開発用Plug-inのADTで簡単にProGuardで難読化できるようになっています。
やり方は、まず各プロジェクトのディレクトリ下にある「default.properties」ファイルに以下の内容を追記します。そしてリリースビルドをするだけでProGuardによる難読化ができます。
proguard.config=proguard.cfg
※難読化しすぎると実行時に ClassNotFoundError などが発生しますので、細かい設定は「proguard.cfg」ファイルを編集してください。
※特に設定ファイルなどに記載してあるクラスの難読化は気をつけて下さい。
※古いプロジェクトの場合、プロジェクトのディレクトリ下に「proguard.cfg」ファイルがない場合があります。その場合は予め用意しておいて下さい。
ADTでのProGuard使用の詳細は こちら(Android開発者サイト) を参照してください。
このページの下の方には難読化した後にエラーレポートが来た際などに使用する retrace コマンドの説明があります。(プロジェクトのproguradフォルダ下にできるmapping.txtを使用しますので大切に保管して置いて下さい。)
くれぐれもkeep設定は的確に。
– 更に対策 –
加えて、更に解析を難しくしたい場合は こちら(Android開発者サイト) のアプリ内課金の「Obfuscate your code」が役に立つでしょう。
わかりづらくするために「メソッド呼び出しはJava reflectionを使う」など、かなり斬新な内容が記載されています(笑)
– 勝手に広告を付ける改竄対策 –
勝手に広告を付けられる改竄ですが、おそらくソースの改竄は行わず、layout.xmlを変更してリパッケージングしているものと考えられます。
そうなると、layout.xmlを使わずにレイアウト自体をソース内に記載して置き、その上に難読化する対策があるかと思います。しかし、layout.xmlでは簡単にできる事がコード上では難しい場合があるので注意が必要かも知れません。
– 勝手に広告を付ける改竄対策2 – (2011/08/08追記)
layout.xmlの改竄以外にも、AndroidManifest.xmlに悪意あるActivity Serviceを記載&クラスの追加を行って配布し、バックグラウンドで常時起動させてアプリ起動時に勝手に最前面に広告やログイン画面を表示させる手口がある様です。
こちらの手口の場合、最前面にAndroidの標準機能であり、アプリ側で対策をするのは難しいかも知れません。
兎に角、アプリファイル自体にアクセスさせない方が良いのですが、比較的root権限を取りやすい端末があるため、OSでの対策が望まれます。
OSでの対策がされる迄は「アプリの配布先を明確にしておき、それら正式な配布場所以外からはダウンロードしない様訴える」位の対策しか無いのかも知れません。
– ライセンス管理をする –
最近、ネットでは以下の様なキーワードで検索している人達が増えています。
- 「有料 バックアップ 払い戻し アプリ」
- 「マーケット バックアップ 返金」
- 「Android グーグルアカウント 偽名」
Android Marketが15分間以内であればキャンセル可能な事を良い事に、アプリファイルをコピーしておき、15分間以内にキャンセルして支払いを逃れるという不正使用の手口の情報が広まっている様です。
そしてこの手口利用のために偽名を使用する事を考えている可能性があります。
これら以外でも、入手したアプリファイルを他人にコピーして渡す、いわゆる「違法コピー」も考えられます。
若年層には「有料のデジタルコンテンツを無料で使う方法」を見つけるとヒーロー扱いにする悪い風潮があります。今までの事を振り返っても、音楽であったり、ゲームであったり例を挙げればきりが無く出てくるでしょう。
そして、それら不正使用、または違法な使い方はネットを通じてもの凄い勢いで広まります。
実際にグレーな所では正式な配布場所から有料アプリファイルをダウンロードする事ができるアプリについて話されている様です。つまり、今すぐに対策をしないと更に被害が大きくなる可能性があります。
– 対策 –
Android MarketではLicense Verification Library (LVL)というライセンス管理ライブラリが使用できます。ただし、現在は有料アプリのみです。
このライブラリは、現在のGoogleアカウントが使用権限を持っているかどうかを通信して確認するのが目的です。つまり、本当に買ったユーザーが使用しているのかを確認する訳です。
LVLを使用してライセンス管理をきちんとしておけば、上記の様な「バックアップ&キャンセル」や違法コピーによる不正使用を防ぐ事ができるかと思います。
ただし、LVLでのライセンス確認はアプリ開発者が意識して行う必要があるため、初回起動時、(キャンセル可能時間を超えた)15分後に行う、起動毎に行うなど考慮する必要があるでしょう。
なお、LVLの詳細は Licensing Your Applications (Android開発者サイト)を参照してください。
LVLの困ったエラーについては以前まとめた 「AndroidアプリのLicense Verification Library (LVL)のエラーについて」 を参照してください。
– Android Market以外の対策 –
Android Market以外のAndroidアプリストアに関しては、独自にDRM(Digital Rights Management)を用意していたり、全く無かったりします。
– ライセンス管理のススメ –
ライセンス管理機能はオプション扱いで必須では無かったり、入れるのに手間がかかるので付けていない場合もあるかも知れません。しかし、ライセンス管理機能が無い場合、Androidではどのような事が想定されるかはもうご理解頂けるかと思います。
– 更に対策 –
Android Marketは一度キャンセルしたアプリは二度とキャンセルできません。この規約を上手く使い、機能追加などでアップデートして不正使用ユーザーに今度は本当に買わせる、またはアップデートできずに悔しい思いをさせる、という対策も考えられるかも知れませんね(笑)
– その他考えられる事 –
いくらライセンス管理をしていたとしても、写真集アプリなどは画像ファイルなどのリソースだけ取られてしまう事もあるかも知れません。
リソースを暗号化する、キャンセル可能時間を超えた15分後に別途ダウンロードさせるなど、リソース管理も重要な場合も考えられます。
2011/08/29追記
Android Marketには「コピープロテクト機能」があります。近日中に廃止予定なのでLVLを使う様にと言いつつ1年位廃止できないでいる訳ですが、そのせいで開発者に誤った安心感を与えてしまっているように思えます。
この機能は、アプリファイルを本体メモリからコピーできないようにする機能なのですが、現時点でこの機能が有効なのは「不正使用できる様にいじっていない端末」のみと考えられます。
逆に考えれば「不正使用できる様にいじっている端末」の場合はコピー可能になる可能性が高いと言えます。
この様に、このコピープロテクト機能への過信はしない方が賢明です。
2011/09/03追記
Marketアプリを使用せずにAndroid Marketから有料アプリをダウンロードする手段も広まっており、「割れ」などの隠語で呼ばれている様です。
Android Marketの穴を付いたものの様で、Googleアカウントの認証を回避してダウンロードしていると考えられます。
上記の事以外にも、違法コピーしたアプリファイルをホストして配布しているサーバ、ファイル共有ソフトでの配布など、音楽や映像などの違法コピーと同じ様な状況になってるようです。Androidアプリの場合は取り締まる団体などがない分やりたい放題になっている様ですが。
しかし、ライセンス管理機能をきちんとしていれば不正使用は防げるはずです。
違法コピーの標的にされているのは、Android Marketなどのシステムを過信してアプリ内にライセンス管理機能を付けていないアプリだと考えられます。
つまり、ダウンロードさえ出来ればライセンス確認をせずに普通に起動して使えてしまうアプリが標的という事です!
– パーミッション改竄対策 –
最近、私どもの無料アプリのコメントに以下の様な事が記載されていました。
- 広告があれなのでXXXXXで権限落としてつかってます
- 自分はせこいので、パーミッション削って使ってますwww
どうやら、アプリのパーミッション(権限)設定を変更してアプリを再インストールできるアプリがある様です。
少し敷居が高い root権限が必要な無料アプリだったり、250円位で販売されているroot権限無しで使える有料アプリなどがある様です。
– パーミッション設定を変更すると何ができるのか? –
例えば、広告ライブラリの通信を可能にする為にアプリでは通信関連のパーミッションを有効に指定しておきますが、これらを勝手に無効にされていたとしたらどうなるでしょうか?
広告ライブラリ内で通信関連の例外処理が完結してアプリ自体が落ちない場合は普通に使えてしまう可能性があります。
他にも、広告が無い時に自動で広告を非表示にしている場合はどうでしょうか? (Androidとは違いますが、)AppleのiAdは広告が無い場合は隠さないといけない事なっていますし、同様に勝手に広告領域を隠すライブラリもあるかも知れません。
アプリの一部を広告で隠しているはずが自動で消えてしまうと何事もなかったかのように使えてしまうでしょう。
機能制限をしていない場合は有料版と変わりなく使えてしまいます。
上記以外にも「アプリの広告削除方法」を探している人は少なくありません。いずれ、それら不正使用を幇助するアプリの情報にたどり着く事は容易に想像が付くかと思います。
現にグレーな所では「(該当のパーミッション変更アプリは)キャリア課金で普通に買える」、「ネット接続の必要のなさそうなアプリがネット接続する場合はすぐに(権限を)削る」など話されています。
つまり、対策を急がないと誰も儲からない駄目な市場と化す可能性があります。
何にしても開発者、販売者側からしますと勝手にパーミッション設定を変更されては困る訳です!
広告収入を期待している無料アプリであれば尚更だと思います。
そう、Androidは有料アプリだけでなく無料アプリも狙われているのです!
– 対策 –
対策として以下のメソッドを使用することでパーミッションが有効かどうかを確認できます。
PackageManager#checkPermission(String, String)
以下の様にする事で権限があるのかどうかを判断する事ができます。
※実際の不正使用への効果に関しては試せていません。
PackageManager pm = this.getApplicationContext().getPackageManager(); if(pm.checkPermission("android.permission.INTERNET", this.getPackageName()) != PackageManager.PERMISSION_GRANTED) { //インターネット通信に関する権限が無い場合 ////不正使用時のメッセージを出すなどを行う finish();//終了させる }
– その他 –
上記の事以外にもAndroidアプリは何かと狙われているため、次々対策を迫られる事になるとかと思います。
他にも何か有益な情報がありましたならば、本ブログのコメント、及び Twitter などでお教えください。
– 今後 –
今後は不正使用対策が甘いアプリから狙われていく可能性が高いと考えられます。
– 対策 –
上記内容を読んで「急いで不正使用対策をしなくてはいけないかも!」と思われた方も少なくないかと思います。
SkyArtsでは、その様な企業様など向けに不正使用対策に限らず、スマートフォン開発のコンサルティングなどを承っております。
– SkyArts について –
私ども SkyArts ではAndroid/iOSアプリなどのスマートフォン開発のコンサルティングなどを承っております。
加えて、私どもの既存アプリ のカスタマイズ開発なども承っております。「このアプリに自社業務向けにこの様な機能を入れたい!」といったご要望にお応えいたします。
ご連絡は メール、Twitter などでお気軽にお問い合わせ下さい。
>Android 2.2からアプリファイル(apk)をSDカードにコピーできるようになり、アプリファイルへのアクセスは容易になりました。
2.2以前でもapkは簡単にバックアップできていましたよ。
パーミッションチェックによる不正利用に対しては勉強になりました。
ある程度Webサービスを絡ませるのがベストだと思うのですが、リパッケージ対策は悩ましい問題ですね。ユーティリティ系アプリは辛いです。
Android 2.2以前はapkファイルにアクセスする為に別途アプリを入れたり、root化する必要があったかと思います。
その意味でエンドユーザーにはそれ程「アクセスは容易」ではなかったかと思いますよ。