前回、Android Market上のアプリに対して、Googleがセキュリティスキャンを行う「Bouncer」(コードネーム)について説明した。Bouncerは、アプリの動作を実際に見てマルウェアかどうかを判定し、認定されたマルウェアを削除したり、レッドフラッグを設定してユーザーがダウンロードしないようにする、といった機能を備えているようだ。
これによって、既知のマルウェアに対する安全度は向上することが期待されるが、それでもまだまだ安心はできない。一般的にも、ウイルス対策ソフトとウイルスなどのマルウェアは、いたちごっこのように検知とすり抜けの攻防を繰り返しており、Bouncerにも同様の懸念がある。
それ以上に、前回も書いたとおり、Bouncerでは内容をチェックしていないため、マルウェアと認識されないアプリが出てくる可能性が高い。
Bouncerがあるから安心とみるのではなく、Android Marketからのアプリダウンロードには、相変わらず注意が必要だ。実際、Bouncerが発表された直後に、人気アプリの偽アプリが発見されており、Bouncerの限界が露呈している。もともとGoogle自身、100%の安全性を担保はしていないため、やはり自衛は必要だ。
この自衛をするために覚えておくべきなのが、アプリの機能を確認する「権限(permission)」という情報だ。
今回は、この権限を含めた、Androidアプリのセキュリティモデルを紹介してみる。
アプリが使う機能はなんなのか
Androidは、ルートシステムが書き換えできないようになっており、ダウンロードしたアプリがシステムファイルを書き換えるといった攻撃は行えない。これはWindowsなどの他のOSとは異なる部分で、Android端末のシステム自体を乗っ取って外部から自由自在に操ってしまう、といったことは起きにくい。
これに加えて、Androidアプリでは「サンドボックス」と呼ばれる仕組みが導入されている。これはアプリごとにユニークなID(UID)が設定され、それぞれのプロセスを分離することで、ほかのアプリやシステムに影響を与えない形でアプリが動作する仕組みだ。Androidは、主にカーネル部分でLinuxをベースにしているが、こうした点はLinuxとは異なる部分だ。
サンドボックス内でアプリは限定的な動作しかできず、例えばあるアプリが別アプリのデータを読み込んだり、システムの電話機能を利用しようとしたりしても(基本的には)できない。
また一般的なOSでは、アプリケーションに脆弱性があって、これを悪用されて任意のコードが実行されてOS自体に影響してしまう場合がある。Googleによれば、このサンドボックスがあることによって、そのアプリ内でしかコードは実行されず、ほかのアプリやOSに影響しない、とされている。
こうしたサンドボックスによって、デフォルトでは限定的な動作しかできないAndroidアプリだが、それだけだとアプリでできることが限られてしまう。これを解消するのが「権限(permission)」と呼ばれる手法だ。
Googleのアプリインストール時に表示される権限。アプリが利用する機能(権限)がズラッと一覧表示される |
前述の偽アプリが取得する権限の一部。本来不要な権限まで取得されている |
取得する権限をタップすると、その詳細が見られる。悪意のあるアプリだった場合、何が行われる危険があるかの説明も表示される |
権限では、アプリがアクセスする機能が個別に指定され、その要求を許可するかどうかが決められる。通常はユーザーがこれを明示的に決定するようになっており、Android Marketからダウンロードする際に「この機能を使うけどいいですか?」とユーザーに聞いてくるので、それを許可して初めて、アプリのダウンロードとインストールができる。ただし、個別の権限に許可・不許可を決められる訳ではないので、要求された権限を拒否したい場合は、アプリのインストール自体ができない。
この権限を見ることで、例えばインターネットアクセスをする、カメラを使う、携帯のIDを取得する、録音する、現在地を取得するといったアプリの機能が分かり、ダウンロードするかどうかの参考にできる。
仮にWebブラウザアプリだったらインターネットアクセスの権限を要求するのは当然だが(でなければWebサイトを表示できない)、カメラアプリには本来不要な権限であり、「撮影した画像を勝手に他人に送信する」ようなマルウェアかもしれない。逆に、「カメラで撮影した画像をSNSに投稿するアプリ」だったらインターネットアクセスは必要だろう。
電話帳アプリだったら、「連絡先データの読み取り」がなければ電話帳を表示できないので必要な権限だが、これにインターネットアクセスの権限が加わると、勝手に電話帳の内容を送信するようなマルウェアかもしれない。
このように、ユーザー側はアプリで利用する機能と権限を見て、そのアプリをインストールするかどうかを決めることになる。権限だけでは判断できない場合もあり、そういう時はアプリの開発者やAndroid Marketのダウンロード数、ユーザーのレビューを確認し、使う権限が怪しく感じても、著名な企業でダウンロード数が多く、ユーザーの評価も高いといった周辺の情報も加味して判断するしかない。とはいえ、著名な企業といっても、100%信用できるとは限らないのも難しい所だが、この件に関しては今後取り上げたい。
アプリ開発者側は、取得する権限を何に使うのかの説明がないと、ユーザーから信用されないという可能性は頭に入れておいた方がいいだろう。
これがアップルやマイクロソフトのアプリマーケットだったら、一定の審査が入るためにある程度は安心できる。それでも確実とはいえないが、Android Marketに比べると安全性は高い。これに対して従来の携帯電話(フィーチャーフォン)向けのアプリの場合、そもそも使える機能が限られていて審査もあったため安心感は高かった。いずれにしても、「アプリの利用にはリスクがともなう」ことは頭に入れておいた方がいい。
もちろん、このことは、従来のPC用ソフトにも言えたことで、「スマートフォンだから特別」というわけではなく、「スマートフォンでも注意が必要」ということだ。ただ、PCに比べて、よりセンシティブなプライバシー情報が含まれるスマートフォン(特にAndroid)では、より注意を払った方がいいだろう。
もう1点、Android端末には「提供元不明のアプリ」という設定項目があり、デフォルトではAndroid Market以外からダウンロードしたアプリがインストールできないようになっている。
この設定をチェックすると、Android Market以外からアプリをインストールできるが、違法なアプリがWebサイトで配信され、それがマルウェアとして動作するといった問題もあり、基本的にはAndroid Market以外からのインストールはできないようにしておいた方が安全だ。
この権限を使うセキュリティモデルに関しては、現時点で完全に機能しているか、というとまだ問題があるように思う。これはさらに別の回でも取り上げることにしたい。