Androidアプリをインストールする際に最も注意すべき事柄は、アプリの「パーミッション」の確認です。Androidマルウェアはいくつか特徴的なパーミッションを使用します。Androidアプリをインストールする際には、それらのパーミッションに注意しましょう。
Androidマルウェアが使用するパーミッションを取り上げる前に、まず「パーミッション」について説明します。すでにご存じの方は読み飛ばしていただいて構いません。
「パーミッション」はAndroidプラットフォーム特有のセキュリティ機構であり、アプリが必要とする権限を開発者があらかじめ明示し、インストール時にユーザーがそれを確認することで、インストールの可否を判断できる仕組みです。Androidユーザーには、アプリのインストール時の以下のような確認画面でおなじみでしょう。
パーミッションで許可される権限の例としては、[完全なインターネットアクセス](INTERNET)、[電話番号発信](CALL_PHONE)、[連絡先でデータの読み取り](READ_CONTACT)などがあります。なお本記事では[Android端末で表示されるパーミッション名(ラベル名)](Android内部で使われるパーミッション名)と表記します。
Androidプラットフォームが標準で定義するものだけでも、100以上のパーミッションが存在します。
ユーザーはパーミッションを個別に拒否することはできず、アプリのインストール自体の可否のみを選択できます。インストールした後に、アプリが要求するパーミッションが増減することはありません。アプリがパーミッションで許可されていない権限を実行しようとしてもエラーとなり、その権限は実行できません(注11)。
パーミッションにはNormal、Dangerous、Signature、SignatureOrSystemの4つのプロテクションレベルが存在します。
SignatureおよびSignatureOrSystemは主にシステムアプリに使用され、ユーザーの目に付かないところで適切に処理されるため、本記事では割愛します。アプリをインストールする際にユーザーが確認できるのは、DangerousとNormalのパーミッションのみです。
Dangerousはリスクが高いとされるパーミッションで、確認画面で目立つように表示されます。一方、Normalパーミッションは折り畳まれ、目に付かない状態で表示されます。
パーミッションは種類が多く、内容が分かりにくいものもあるので、面倒に感じることもあるでしょう。ですが、パーミッションの確認は怠らないようにしたいものです。
例えば、ゲームアプリが[連絡先データの読み取り](READ_CONTACT)を使用しているなど、アプリの機能からして明らかに必要以上と思われるパーミッションを使用しているものには注意が必要です。疑問を感じるなら、時にはインストールを我慢することも必要でしょう。
ただし、信頼できる有用なアプリも、危険なパーミッションを含めていくつかのパーミッションを使用していることがほとんどです。そのような場合、開発元の知名度やアプリの評判を頼りに判断しましょう。
注11:通常はSecurityExceptionの例外が発生し、この例外を補足しない多くのアプリはそこで終了する。
では、Androidマルウェアが実際に使用しているパーミッションを基に、注意すべきパーミッションを確認していきましょう。表3は、セキュリティベンダ各社の公開情報などを基に、表1で取り上げたマルウェアが使用するパーミッションを集計し、使用頻度の順に並べたものです。
ラベル名 | 使用数 | パーミッション名 | レベル |
---|---|---|---|
完全なインターネットアクセス | 15 | android.permission.INTERNET | Dangerous |
携帯のステータスとIDの読み取り | 12 | android.permission.READ_PHONE_STATE | Dangerous |
SMSメッセージの送信 | 9 | android.permission.SEND_SMS | Dangerous |
おおよその位置情報(ネットワーク基地局) | 7 | android.permission.ACCESS_COARSE_LOCATION | Dangerous |
ネットワーク状態の表示 | 7 | android.permission.ACCESS_NETWORK_STATE | Normal |
起動時に自動的に開始 | 7 | android.permission.RECEIVE_BOOT_COMPLETED | Normal |
SMSの受信 | 7 | android.permission.RECEIVE_SMS | Dangerous |
SDカードのコンテンツを修正/削除する | 7 | android.permission.WRITE_EXTERNAL_STORAGE | Dangerous |
精細な位置情報(GPS) | 6 | android.permission.ACCESS_FINE_LOCATION | Dangerous |
Wi-Fi状態の表示 | 5 | android.permission.ACCESS_WIFI_STATE | Normal |
SMSの読み取り | 5 | android.permission.READ_SMS | Dangerous |
連絡先データの読み取り | 4 | android.permission.READ_CONTACTS | Dangerous |
電話番号発信 | 3 | android.permission.CALL_PHONE | Dangerous |
Wi-Fi状態の変更 | 3 | android.permission.CHANGE_WIFI_STATE | Dangerous |
アプリケーションを直接インストール | 3 | android.permission.INSTALL_PACKAGES | signatureOrSystem |
システムログファイルの読み取り | 3 | android.permission.READ_LOGS | Dangerous |
ブラウザの履歴とブックマークを読み取る | 3 | com.android.browser.permission.READ_HISTORY_BOOKMARKS | Dangerous |
ブラウザの履歴とブックマークを書き込む | 3 | com.android.browser.permission.WRITE_HISTORY_BOOKMARKS | Dangerous |
ショートカットのインストール | 3 | com.android.launcher.permission.INSTALL_SHORTCUT | Normal |
ネットワーク接続の変更 | 2 | android.permission.CHANGE_NETWORK_STATE | Dangerous |
アプリケーションの削除 | 2 | android.permission.DELETE_PACKAGES | signatureOrSystem |
端末ステータスの変更 | 2 | android.permission.MODIFY_PHONE_STATE | Dangerous |
ファイルシステムのマウントとマウント解除 | 2 | android.permission.MOUNT_UNMOUNT_FILESYSTEMS | Dangerous |
他のアプリケーションの再起動 | 2 | android.permission.RESTART_PACKAGES | Dangerous |
端末のスリープを無効にする | 2 | android.permission.WAKE_LOCK | Dangerous |
SMSの編集 | 2 | android.permission.WRITE_SMS | Dangerous |
発信の傍受 | 1 | android.permission.PROCESS_OUTGOING_CALLS | Dangerous |
壁紙の設定 | 1 | android.permission.SET_WALLPAPER | Normal |
バイブレーション制御 | 1 | android.permission.VIBRATE | Normal |
アクセスポイント名設定の書き込み | 1 | android.permission.WRITE_APN_SETTINGS | Dangerous |
連絡先データの書き込み | 1 | android.permission.WRITE_CONTACTS | Dangerous |
ホーム設定とショートカットの読み取り | 1 | com.android.launcher.permission.READ_SETTINGS | Normal |
ショートカットのアンインストール | 1 | com.android.launcher.permission.UNINSTALL_SHORTCUT | Normal |
ホームの設定とショートカットの書き込み | 1 | com.android.launcher.permission.WRITE_SETTINGS | Normal |
表3 Androidマルウェアが使用しているパーミッション |
これらの中から、Androidマルウェアが使用する特徴的なパーミッションを紹介します。Androidアプリをインストールする際の参考にしてください。
[SMSメッセージの送信](SEND_SMS)はショートメッセージの送信を許可するパーミッションです。「Android端末で動作するマルウェア」の項で触れたように、メッセージの送信で金銭的利益が得られるため、マルウェアによく使用されます。また、[SMSの受信](RECEIVE_SMS)も、ボット型マルウェアがコマンドを受信するために使用する例があります。
[連絡先データの読み取り](READ_CONTACTS)はアドレス帳に登録した連絡先の読み取りを許可するパーミッションです。このパーミッションはアドレス帳の連絡先にメッセージを送るタイプのマルウェアに使用されます。
[起動時に自動的に開始](RECEIVE_BOOT_COMPLETED)は、Normalプロテクションレベルでは目立たないパーミッションですが、ボットのような常駐指向のマルウェアに利用される、警戒すべきパーミッションです。パーミッション確認の際は、ぜひNormalパーミッションも確認し、常駐する必要性のないアプリがこのパーミッションを使用していないか注意してください。
[電話番号発信](CALL_PHONE)、[他のアプリケーションの再起動](RESTART_PACKAGES)、[システムログファイルの読み取り](READ_LOGS)などは、アプリによっては使用する必要がありません。このようなパーミッションを受け入れるのは信頼できる開発元のアプリに限るなど、十分に注意してください。
なお、Androidマルウェアが使用するパーミッションの中には、通常のアプリでもよく使用されるため、判断の難しいものがあります。それらは、前述したパーミッションとは異なり、これらのパーミッションがあるからといって単純に“危険なアプリ“と判断することはできません。以下、そのようなパーミッションを紹介します。
このパーミッションは、情報を外部のサーバに送信するマルウェアや命令を受信するボットなどに使われます。実はこのパーミッションだけでも、パーミッションを必要としないmicroSDの読み込み機能を組み合わせると、microSD内の写真を流出するような暴露系マルウェアが作成できてしまうのです。
しかし、一見インターネット通信を必要としないようなアプリでも、アプリ内広告のためにこのパーミッションを使用しています。例えば、Androidアプリがアプリ内広告サービス「AdMob」「AdMaker」を使用する場合、このパーミッションと[ネットワーク状態の表示](ACCESS_NETWORK_STATE)を必要とします。そのため、Androidアプリが[完全なインターネットアクセス]と[ネットワーク状態の表示]だけを要求している場合、単にアプリ内広告を使用しているだけという可能性もあります。
[携帯のステータスとIDの読み取り](READ_PHONE_STATE)は、電話番号、IMEI、IMSIといったAndroid端末に保存されている情報へのアクセスを許可するパーミッションです。Androidマルウェアには、これらの情報を外部のサーバに送る挙動を取るものが少なくありません。しかしながら、[携帯のステータスとIDの読み取り]は電話の着信を検知してアプリを一時停止させるために、音楽・動画再生を行うアプリやゲームなどでも使われます。
脆弱性を悪用するAndroidマルウェアや攻撃にもきちんと対策しておきたいところです。ここまで、パーミッションの確認を中心に述べてきましたが、その前提を覆すのが、脆弱性を悪用するマルウェア(「Trojan:Android/DroidDream.A」や「Trojan:Android/DroidKungFu.A」)の存在です。脆弱性を悪用することにより、パーミッションの制限を乗り越えてしまいます。
脆弱性の悪用への対策としては、Android端末のアップデート(OSのバージョンアップを含む)が重要になります。残念ながら、携帯電話キャリアなどでは脆弱性への対策状況を発信していないため、アップデートで脆弱性が解消されるのかどうか、よく分からない部分もあります。ですが、お使いのAndroid端末で新しくアップデートプログラムが提供された場合、きちんとアップデートすべきでしょう。
ただし、Android端末をアップデートすると、Androidアプリが最新バージョンのAndroidに対応しておらず、動作しなくなる可能性があります。アップデート時にはこの点に留意してください。
Androidマルウェアの出現に伴い、ウイルス対策機能を持つセキュリティアプリが相次いでリリースされています。
7種類のセキュリティアプリを対象に、既知のAndroidマルウェア4種を用いて実験したところ、いずれのアプリでも4種類のマルウェアすべてをインストール時に検出できました(注12)。報告された既知のAndroidマルウェアに対しては、セキュリティアプリでも検出できるといえそうです。
しかしながら、既知のAndroidマルウェアがAndroid Marketから発見され次第削除されていることを考えると、まだ発見されていない(未知の)Androidマルウェアには注意すべきでしょう。しかし、こうしたセキュリティアプリが未知のAndroidマルウェアをどれだけ検出できるかは未知数です。現状ではセキュリティアプリに頼るよりも、本記事で挙げた注意点を実践し、自分の目でアプリの信頼性を確認してほしいと思います。
注12:セキュリティソフト7種のうち1種だけは、ユーザーがファイラ(例:Androidアプリ「アストロファイルマネージャ」など)でAndroidマルウェアを保存したディレクトリにアクセスしただけで、それらを検出して削除できました。
以上、本記事ではAndroidを取り巻くマルウェア・脆弱性への攻撃といった脅威について述べてきました。すでに、Androidをターゲットにするマルウェアの存在や脆弱性への攻撃の実証が確認されていることは事実です。しかし本記事で述べた注意点を実践していれば、セキュリティ対策を実施していないパソコンに比べ、Android端末使用におけるリスクは低いと考えます。
現状の脅威を理解したうえで、必要以上に怖がらないでAndroid端末を使いましょう。
【関連リンク】
Android セキュリティ部
http://groups.google.com/group/android-security-japan
Copyright © ITmedia, Inc. All Rights Reserved.