2012年7月9日月曜日

脅威!!! Permission Remover という世の中

アンドロイドアプリで個人情報ダダ漏れやん。という状況は一般のニュースでも流され、一般のユーザーに脅威を与えたのは記憶に新しいところ。実際パーミッションにどのようなものがあるのかというと、
READ_CALENDAR : カレンダーの読み取り(詳細不明)
READ_CALL_LOG : 電話のログ、つまり電話履歴の読み取り?、怖い怖い
READ_CONTACTS : 電話帳に登録してある住所やメール情報の取得が許可されるらしい、怖いね
READ_PROFILE : ユーザーのプロフィールデータの取得(具体的に何なのか知りません)
ACCESS_FINE_LOCATION : 詳細な位置情報の取得
参考
mucchinのAndroid戦記(http://android.roof-balcony.com/shori/content-provider/getcontent-2/)

まあ電話帳データに着信履歴、画像データなんかは簡単に取得できるし、あとはサーバーにそれを送るだけ。 闇のデータベースがあってそこでは電話番号を検索すると名前、メールアドレスが判明。 逆にメルアドから名前や電話番号も分かるだろう。 また、誰から電話があったのかもデータがあるし、それはいかんだろっていう秘密の写真も見放題。 逆に何が盗まれていないんですか?っていうくらいの盛りっぷり。 おそらくメールの内容、文面までは抜きとれていないだろうが...。

電話帳は怖くって、あなたが安全なアプリしかダウンロードしていなくても、あなたのtel番やメルアドを携帯端末に 登録している友人が危険なアプリをダウンロードしてしまっただけでアウト。しかし、着信履歴やブックマーク、個人持ち画像なんかは自衛することで守れそうな気がする。

こんなご時世ですから、
トラブってもいいから消してしまおう、もろもろ
という気分になってもおかしくはない。その、、アプリが、、正常に、、まともに、、完全体で、、動かなくても、、いいから、、安全を買いたい。
通信機能を解体。
それが表題の Permission Remover !!!
こいつは INTERNET の権限をはく奪するらしい。通信を奪えばサーバーに送信されるリスクを回避できる。

ただこんなことされると、無料アプリで admob 導入して、広告費を稼いでやろうという戦略が破綻してしまう。 ネット通信機能を、アドモブ広告配信という目的だけで取り入れているアプリなんか、きれいに広告部分だけカットされるということになってしまう。これを防ぐためにはネット通信を他の目的でも使うようにしなければならない。 例えばサーバーから他ユーザーのスコアなどから作りだしたランキング的なものを配信するとか。 データそのものをサーバーからダウンロードする形式にするとか。

しかし、もっと根本的な潜在的危機としてはマイナーグループの低迷が考えられる。 とにかくわけのわからないものには手を出さない、有名な(DL数や評価量で判断可能)、老舗の(アイフォンからやっているような)、安心できるメジャーな製作者が作ったものだけダウンロードしよう、という風潮が広がるという懸念。つまり、何の実績もない新規参入組が大量のダウンロードを得ることが、より難しくなった可能性がある。 iphone と比べて参入障壁が低いのが特徴と称されることの多い android マーケットだが、承認制にしなかったことによる負の側面が今、アドモバーたちを窮地に陥れている。

2012年7月4日水曜日

簡単に作れる個人情報収集マシーン -ONMITSU-

admob をやっているおかげで、自作アプリの利用者がどの程度利用しているのかは大雑把には把握できる。国や言語で統計情報がでてくるので。ただ、今後に活かしていくにはもっと詳細な情報がほしいわけです。別に国や言語や電話のキャリア、電話番号などはいらない。自作アプリの詳細な進行状況(どこでつまづいて放置されているのか?)を知りたいわけです。

拙作ではtextファイル形式でゲーム状況を自動セーブするようにしてあるので、その自動セーブデータをサーバーに送信するようにしたい。そこまでは技術的にできました。ただ、単一ファイルの上書きを繰り返すことになるので、ユーザー別にファイルを1個1個作って管理できるようにしたい。そのためには、何らかの識別様式が必要となってくるわけです。

当初は面倒なので us とか jp とか ru とか uk とか de なんかの国コードを取得して同じ国は一つの人物として識別しようかと考えていた。どうせ厳密にわける必要はないし、アメリカ以外の国で同時期に2人以上がアクティブインストールしているケースは珍しいので、情報収集の手段としてはその程度の識別で問題ないと考えていた。実際に PHP で国判定、言語判定などを行うソースはネット上に出回っているのでそれらを利用するのも手だな、と思っていたわけです。

ただついでに送信元、Android Java サイドでそういう識別を行ってみるためにはどうすればいいのかも調べてみたら、TelephonyManagerクラスというものを用いれば電話番号、デバイスID、SIMの国コード...など、なんていうかかなりプライベート情報を取得できるみたいです。ただし、これを使うには READ_PHONE_STATE というパーミッションが必要らしい。電話状態の読み取り? みたいな訳になるのか。

ただ文献ではパーミッションが必要とのことだが、パーミッションなしで試しても以下の結果がでてきた。

電話番号だとかNTT Docomo だとかシリアルナンバー(端末個別の番号)などが楽勝ででてきます。 これがパーミッションなしで取得できる?

アプリのパーミッションはダウロード時、あるいは”設定”>”アプリケーション管理” などによって確認する機会がある。android のアプリは安全のために手枷、足枷をされているのが基本状態だとイメージしてほしい。その枷(かせ)をはずすための作業がパーミッションの追加という具合だ。例えばナビゲーション関連のアプリなら利用者の現在位置を知るために GPS を使うだろうが、この場合は詳細な位置情報 ACCESS_FINE_LOCATION を掲げる必要がある。パーミッションを知れば、それがどういうアプリなのか推測できる...かもしれない(できないっちゃ、できない)。

INTERNET
READ_PHONE_STATE

上記二つは
admob 広告を成立させるためには必須
残念!!!
READ_PHONE_STATE がないと↑画像下側の赤文字警告文がでてくる(むろん広告はでてこない)。

admob を取り入れているアプリは、少なくともTelephonyManagerクラス相当の個人情報が収集される危険性があるということだ。ここはもう、製作者の良心に委ねるしかない...。と締めくくるとありがちなので、モス少し突っ込んで考えてみよう。逆に、個人情報収集したい側の思考に立つならば、
もっと欲しい
もっと欲しい
位置情報も欲しい
電話帳の中身欲しい
と、なるわけで、本気で抜く気ならアプリ利用者本人の電話番号だけじゃ飽き足らないのは明白。確かに電話番号や国や利用キャリアが判明するだけでは...ちょっと使い道がない。アプリ単体の利用統計を取るには便利だが...。つまり、抜く気ムンムンなアプリにはもっといろいろなパーミッションが付いているはず...。