クウ 「えー、そうなんですか? それじゃあ、データの受け渡しとかどうするんですか?」
アキ 「そうだねー、場合によってはログに残らないように受け渡しができたりするっぽいよ」
クウ 「おー、そうなんですか。知らなかったです」
Intentによるデータの受け渡しを行う場合は、データを受け取る側の仕様を確認しよう。データを受け取る側が、ログにデータが残らない形の受け渡し方法を用意している場合は、それを利用すると有効だ。
以下は、標準のブラウザに対し、POSTデータとして受け渡しを行う例だ。
Uri uri = Uri.parse("https://www.ubsecure.jp/");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
byte[] postData = "id=test&password=pass".getBytes();
Intent intent2 = i.putExtra("com.android.browser.post_data", postData);
startActivity(intent2);
I/ActivityManager( 1143): Starting activity: Intent { act=android.intent.action.
VIEW dat= https://www.ubsecure.jp/ flg=0x3800000 cmp=com.android.browser/.BrowserActivity (has extras) }
しかしこの例は、単に「結果としてログに出力されていない」というだけである。残念ながら、すべてのAndroidアプリケーションでこのようなデータの渡し方が用意されているとは限らない。中には、システムにプリインストールされているAndroidアプリケーションにしか許可されていない操作も多くある。このため、やむを得ず、情報を取得されてしまう可能性を許容する必要が生じることもある。
従って、設計の段階で個人情報などの重要な情報(設計上困難な場合もあるが)を出力しないよう考慮したり、ユーザーへ注意喚起を行うなどの対処を講じる必要がある。
また逆に、自作のアプリが、他のAndroidアプリケーションからIntentを利用して重要なデータを受け取る場合、ログに出力されない形でデータを受け取る仕組みを用意しなければならない。
クウ 「やっぱりあきらめるしかない場合も残っちゃうんですね……」
ジュン 「やっぱり、READ_LOGSパーミッションに注意するってとこなのかね」
クウ 「むう……」
アキ 「端末による部分も結構あるけれど、いろんなログが出過ぎてる感はあるから、一度はどういうログが出てるかちゃんと見ておいた方がいいよね」
ログの出力に関しては、Androidアプリケーションを開発・提供する側からの情報漏えい対策はもちろんのこと、ユーザー側でもできる対策がある。具体的には、android.permission.READ_LOGSパーミッションに注意することだ(root化を行う仕組みを有したマルウェアなどを考慮した場合は、この限りではない)。
Intentを利用して他のアプリケーションに重要なデータを渡すアプリケーションや、標準出力へデバッグ情報を出力するアプリケーションは比較的多く存在する。このため、このログを取得されることで思わぬ情報が漏えいする可能性がある。
また、このようなAndroidアプリケーションによるログ出力以外に、端末によってはGPSの位置情報や、Wi-Fiの接続情報が出力されていることもある。ユーザーには十分な注意が必要といえる。
通常、システムログにどのような情報が出力されているのかを把握することは困難だ。だがシステムログには、単なる挙動を記録するログ情報だけでなく、個人情報など重要な情報が含まれる可能性がある。この点を考慮し、どのような内容が含まれるか、一度は確認しておくといいだろう(ログ出力の確認方法は第3回を参考にしてほしい)。
Copyright © ITmedia, Inc. All Rights Reserved.