So-net無料ブログ作成

Android Permissionの不思議 [Android]

自分用の覚え書きです。
Android OS搭載のスマートフォンを使っていて、アプリ次第でなかなかできることが多様になって面白く日々ちんこなみに弄っています。
そのアプリですが、先日android marketのアプリにトロイが仕込まれていたのは記憶に新しいところです。
詳しくは調べてないけどrootとれる穴をついて自身をsystemフォルダ(root権限必須)において、一般権限じゃできないこと(スクショとか色々)を勝手にやることができるとかなんとか。さらにアンチウイルスソフトは一般権限でしか動けないので、root権限が必要なsystem領域をいじることができないため、検出しても除去できないとか。ただgoogleがリモートで除去したらしいけど。さすがgoogleさんだぜ。今後はroot取れる端末なくなっちゃうかもしれないですね。ただroot取ることで、できることが大幅に増えるので少し悲しいかなと。suコマンド実行時に通知するソフトとかもあるらしいし、それはそれで自衛につながると思うし。

また、android用アンチウイルスソフトが出始めてきて今後普及しそうですが、現段階で自分の考えではあまり必要ないかなと思います。というのも、アプリのインストール時に必要なpermissionが表示されるのでそれさえ気にかければ大丈夫だと思います。
前置きが長くなりましたがここからが本題で、この非常に便利なpermissionの事前通知ですが、先の件から念のため自分もインストールしていたアプリの権限をチェックしていました。ちなみにpermissionのチェックには「S2 permission checker」というアプリ使ってます。アプリごと、permissionごとにチェックできるのでなかなか便利です。
その時に、READ_PHONE_STATE (日本語表記で電話/通話)を使っているアプリの数が段違いで多いことに気が付きました。というか以前から気づいていましたが不思議に思うくらいで特に気にしてませんでした。
このREAD_PHONE_STATEを許可されたアプリは、SIMナンバーや電話番号、通話先の電話番号を知る許可を得たと考えていいため、悪意を持っていた場合そういった情報を知られてしまう可能性があります。まぁこの情報から何が出来るかと考えたとき特に思いつかないのですがあまりいい気はしません。
なので、自分はインストール時に電話/通話を求めるアプリというのはそれとなく気にしていたため、この数の多さが不気味でした。

本題とかいいながらここから本題なんだけど、インストール時のpermission許可にREAD PHONE STATEがないにも関わらず、インストール後のアプリケーションの管理などからそのアプリのpermissionを確認するとREAD PHONE STATEが追加されている、というお話です。で、調べたところ原因がわかったのでせっかくだから書こうと思いました。
といっても、こちらのリンク先を自分なりに理解しただけですが。
結論からいうと、Android OS 1.5以下とも相互性を持ったアプリ(1.5以下を含むOSでも使えるアプリ)を1.6以上のOS搭載端末にインストールする際に暗黙的に付加されてしまう仕様だそうです。またREAD PHONE STATEだけでなくWRITE_EXTERNAL_STORAGE (日本語表記でストレージ)が付加されるのも仕様だそうです。
原因は、1.6で新たなpermissionの明記としてそれらが新しく追加されたためで、よく理解してないけど1.6未満のOS用に作ったアプリにはそれらの権限がもともと付加されているため1.6以上のOSでは勝手に許可がだされてしまう、という感じだと思う。なので、インストール前に出てくるpermissionはAndroidManifest.xmlに記載されているものだけなのでそれらの権限は明記されていないけど、インストール後に確認すると追記されている、と理解しました。
OS 1.6以上の端末でアプリがそれらのpermissionを利用した機能を用いるためにはインストール前の通知でその記載がないとインストール出来なかったような。なのでアプリ作成者さんはAndroidManifest.xmlにREAD PHONE STATEなどの記述をしているわけではないので、実際にその権限を利用して何かしようということではないので実情無害だと思います。
各アプリの必要最低OSバージョンは、web版Android Marketに記載されてるので確認してみるといいと思います。そこでANDROID 要件が1.5以上であるアプリは1.6以上の端末では例外なく、READ_PHONE_STATEとWRITE_EXTERNAL_STRAGEがインストール後に追加されていると思います。
ということで、一つ疑問が解消されました。理解が間違ってたら指摘してください。

以下はどうでもよくて、もう少し踏み込んでみたお話。
OS1.5の端末を今使ってる人はいるのかねと思うんだけど、上記の現象を回避するにはAndroidManifest.xmlに<uses-sdk android:minSdkVersion="4" /> (正確には4以上)と記載すればいいらしく、これはなにかというとこちらのサイトに翻訳が書いてあって分かりやすいです。4はAPIレベルで、4=OS 1.6を、minSdkVersion=最下位のAPIレベルを指していて、つまりOS1.6以上が必要という意味になるらしい。またSDK APIの互換性は、ほぼ上位互換で、必ずしも下位互換でないと書いてあります。確かに新しいOSの新機能を古いOSでは使えないだろうし、逆は問題ないだろうしで当然といえば当然かもですね。そうなるとなにも最新のSDKが一番ともいえないのかも、と考えると上記の現象も仕方ないのかなとも思います。

ここまで主にREAD_PHONE_STATEのpermissionについて述べてきたけどこのようなパーミッションがあるアプリ=悪質なアプリ、では当然ないことを最後に補足しておきます。それにこういうpermissionはネットワーク通信権限とあわさったときにしかほとんど脅威には成り得ませんし。
またREAD_PHONE_STATEのpermissionが開発者の立場からどんな時に必要なのか少し調べると、例えばミュージックプレイヤーにある場合、電話が来たときに自動で一時停止するためにはこの権限が必要だったり、広告配信でこれにはいくつか会社があってどこのを設置するかは開発者さんが決めるわけだけど、最大手だと思うAdmobは位置情報しか使わないけどadwhirlとかいうとこのは電話/通話も必要ぽかったり、有料アプリのライセンス認証(不正利用者端末の特定と利用停止?)の把握に必要だったりと色々ありました。
他にもアドレス帳アプリでは連絡先の取得とかそれ相応のpermissionが必要ですし。ただ悪用する気があればできるという点で、自衛のためにはインストールするアプリのPermissionに気を使う必要性があるなと思います。今さら畏まっていうことでもないんだけどね。
googleには早いとこ広告用のインターネット接続とかのpermissionと、アプリで必要なpermissionの表記を分けて欲しいと思いました。あと服が透けるARアプリ誰か作ってくれ、大至急はやく


nice!(0)  コメント(5)  トラックバック(0) 

nice! 0

コメント 5

Kenta

参考になります。 しかしミュージックプレイヤーに、電話が来たときに自動で一時停止する機能が必要なのはわかりますが電話番号を知る必要があるでしょうか?
Androidの仕様はなにかにかこつけて個人情報を取得しようというつくりになっていると思います。あるいは権限は持っているけど電話番号を取得するようなコードは実装されていないという場合もあるのでしょうか?それならその辺を詳しくアプリの仕様として明記すべきですよね?機会がありましたらまたブログアップデートして頂けると幸いです。

googleに改善する気が無ければUserは離れていくでしょう。
by Kenta (2012-02-09 12:46) 

YOU

どうもです。
初めに、私はアプリ開発者ではないので自分の理解の範囲での話になりますので以下の話は間違いがあるかもしれません。

まずアプリについているパーミッションですが、READ_PHONE_STATEがついているアプリ全てが電話番号を取得しているわけではありません。Kentaさんが書かれている通り、権限は持っているけど電話番号を取得するようなコードは実装されていない、です。
違う視点から見ますと、READ_PHONE_STATE権限が持つ機能が広い、ということになると思います。音楽一時停止なんかもこれに当てはまって、READ PHONE STATEがないとこの機能を実装できない(らしい)です。大多数のアプリには不要なので、機能から考えて不必要な権限があるアプリはインストールしないようにしてます。このあたりはgoogleに依るのでアプリ開発者がどうこうできる問題ではありません。もっと細分化してくれるといいんですけどね。
仰るとおりアプリの仕様として、この権限を使って何をしているかまで書いてくれていると好感触ですね、たまに見かけます。ただ本当に悪用していないかはわからないわけで、デコンパイルしてソース解読して初めて安心じゃないでしょうか。なので今のままでは開発者、使用者どちらも得しないと思います。

googleは現状では改善しないでしょう。permissionに気を配っていない人のほうが多いのもあるでしょうか。Kentaさんみたいに興味を持つ人が増えれば変わるかもですね。
by YOU (2012-02-09 23:57) 

Kenta

Updateありがとうございます。 全く同感です。googleに限らず最近のNet関連企業はPrivacyを軽視しすぎだと思います。User側からもっと厳しくNoを突きつけるべきだと思いますね。その前にマスコミなどの怠慢(癒着?)によって大衆に周知されてないことも問題ですが。某掲示板では脱Googleの動きが広がっているようです。
by Kenta (2012-02-24 21:25) 

YOU

Privacy情報の価値が認識されているんですかね。マスコミ含めどの企業も知っておいて損はない情報だろうし。
脱googleしたいですがgoogleのサービスを活用している身としては完全移行が難しく、このタイミングでのポリシーの変更は既定路線だったように思ってしまいます。
結局まぁいいやって感じでgoogleを使い続けるという人が多い気がします、私も含めて。
色々と考えさせられる問題ですね。ご意見どうもでした。
by YOU (2012-02-29 18:23) 

SHUNICHI

この記事のおかげでなぜ、READ_PHONE_STATEが自動追加されてしまうのかわかりました。

かなり不評でしたので、すぐさまアプリを更新しました。

二年近く悩んでいたので、本当に助かりました。
このブログがあって良かったです。
by SHUNICHI (2015-01-02 21:53) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

メッセージを送る

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。