Hatena::ブログ(Diary)

popokannのgdgd開発日記 このページをアンテナに追加

2013-01-23

APK signature checkerがsecroidでHIGHと判定される件について

ひっそりと公開済みのAPK signature checkerですが、secroidさんの判定でリスクがHIGHと表示される状態になっています。
http://secroid.jp/d/d/a/0/com.casraq.android.apksignaturechecker.html

私もsecroidさんの利用は是非推奨したいです。しかし当アプリの判定を見た人が不安/不信に思うままではいけないので、当エントリでこの事について補足説明をしておこうかと思います。

ではインストールされているアプリの一覧の「取得」と「送信」それぞれについて解説してきます。

インストールされているアプリの一覧の『取得』

起動時/再読込時に以下の処理を行っています
PackageManager pm = this.context.getPackageManager();
List<PackageInfo> pkgs = pm.getInstalledPackages(PackageManager.GET_SIGNATURES | PackageManager.GET_META_DATA);

アプリ一覧を取得しないと当アプリの目的とする機能が全く果たせませんので、取得自体はやらせてください。(^_^;)
アプリ本来の機能に全く無関係な情報を勝手にぶっこ抜いてる」訳ではありませんよ〜♪

インストールされているアプリの一覧の『送信』

★画面遷移時の情報受け渡し

最初の画面で取得した「インストールされているアプリの一覧」情報は、色々加工したりしなかったりした後、同アプリ内の各画面へデータを受け渡ししています。画面遷移としては次の2パターンがあります。

画面遷移パターン1

最初の画面(MainActivity)
↓リストをロングタップして[同一署名グループ呼び出し]
グループ詳細表示画面(GroupDetailActivity)


画面遷移パターン2

最初の画面(MainActivity)
↓メニューの[グループ毎に表示]
グループ一覧画面(GroupListActivity)
↓リストをロングタップして[グループ詳細表示]
グループ情報詳細画面(GroupDetailActivity)


どちらも最初の画面から見ると「インストールされているアプリの一覧を送信」する形とも言えなくはないですが、送信先はアプリ内部に限定されていますのでご安心ください。

★[text]表示中に[共有]ボタンを押下すると…

各画面のメニューから[text]機能を呼び出し、タブ区切りテキストを表示中に[共有]ボタンを押すと以下の処理を実行しています。

Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, editText1.getText().toString());
startActivity(intent);

「editText1.getText().toString()」が表示中のタブ区切りテキストデータとなります。
上記の実行結果から、端末上のIntent.ACTION_SEND("text/plain")に対応したアプリの選択画面が呼び出されます。その中で選択したアプリに表示中のテキストデータを渡します。この点について「(別アプリ宛に)インストールされているアプリの一覧の送信」をしているとも言えます。
ただし決して自動送信してる訳ではなく、ユーザー自身が[共有]ボタンを押下しない限り別アプリへ「インストールされているアプリの一覧」情報を送信しません。
私個人としては対応アプリとしてJota Text Editor等をお勧めします。

また残念ながらAndroid OSの仕様で、Intent.ACTION_SEND("text/plain")に対応したアプリが1件しかインストールされていない場合、[共有]ボタンを押した直後対応アプリの選択ダイアログは表示されず、即座に該当アプリへ情報を送信する事になります。
もしその1件がメール自動送信やSNS等への自動投稿アプリ、または悪意あるアプリ等であった場合、意図せぬ情報漏洩に繋がる事もありえますのでその点はご注意ください。

おまけ

secroidさんの解析で、(インストールされているアプリの一覧やSDカードの内容の)送信先を具体的にチェックする事は可能らしいのですが、その送信先が「明らかに開発用サーバ」になってたりする場合があるらしく、全てを一律に公開するのが難しいそうです。「送信先:」といった形で空欄のものが多いのはそう言った理由からなんですね。現時点では広告用サーバーとして判明しているもの等が「送信先:airpush」という感じで表示されるそうです。
またAPPREVIEWのインタビューによると、インストールされているアプリの情報については

実際の社会事情を参考にして権限を評価に反映したりもします。端末内のアプリ情報を取得する権限については、本来であればMIDDLEでもいい場合もありますが、ユーザーの方の反応を受けてHIGHに格上げしたこともあります。

http://app-review.jp/news/80017

といった経緯があったそうです。
……つまり▲ppL●gSDK・a●p.t▼・カ●■グ等が無断収集してたとばっちり…? (^_^;)