連載
» 2011年08月02日 00時00分 公開

イチから始める! Androidセキュリティ(4):要注意! 本当は怖い出力データ (1/3)

「もいちどイチから! HTTP基礎訓練中」でWebアプリケーションの脆弱性と対策について学んだクウが、今度はAndroidの世界に挑戦。Android特有の問題、PCや従来の携帯電話向けのWebアプリとの違いや対策について紹介します。(編集部)

[杉山俊春, Illustrated by はるぷ,株式会社ユービーセキュア]

システムログは厄介もの?

 前回のお話で、ログ情報やデバッグ用に出力する情報を通じて、パスワードなどの重要な情報が漏えいしてしまう可能性があることを認識したクウ。さっそくAndroidアプリの修正に取り組んでいたところ、コミュニティで知り合ったジュンさんから「Androidアプリについて語る会」に誘われて……。

 週末、クウはナツから聞いたお店へと足を運んだ。

クウ 「ここかな……?」

ジュン 「おー。久しぶり♪」

ナツ 「来たねー。急に決めてごめんね〜」

クウ 「こんにちはー。今日はこの3人で〜って感じですかね」

ナツ 「いや、あと1人」

クウ 「あら、そうなんですかー。知ってる人ですか?」

ナツ 「クウは知らないかな」

クウ 「そうなんですか」

ジュン 「まあ、どうせいつものように遅れてくるだろうから、だらだらと始めとこうか」

ナツ 「そうだね〜。まあ、来るまでジュンにログの話、してあげてよ」

 クウは、ユウヤに指摘された、Android端末のシステムログに含まれるデータの危険性について話し始めた。一通り話し終えたところで、ようやくもう1人の参加者が到着した。

アキ登場

アキ 「ごめーん。遅れたー」

ナツ 「相変わらず遅刻魔だね〜。久しぶりー!」

ジュン 「学生のとき以来だっけ? 消息不明だったからどうしてるのかと思った」

アキ 「普通に会社員してるよ。というか、今回ナツから連絡来たときはびっくりしたわ〜」

ナツ 「まあ、そこらへんはいろいろあるからいいとして、とりあえず紹介しとくよ」

クウ 「初めまして! クウです」

アキ 「初めまして。アキです。この子がクウちゃんか〜。なるほど〜」

ナツ 「アキは私とジュンと学生のときに一緒だった子だよ」

クウ 「そうなんですかー。というか、そんな集まりに参加してて大丈夫なんですか?」

ナツ 「まあ、半分くらいクウのおかげでもあるし、気にしないで〜」

クウ 「??」

ジュン 「けど、よくアキと連絡取れたねー。どこかで偶然会ったとか?」

ナツ 「まあ、それは秘密ってことになってるから、教えらんないのよー」

アキ 「それは置いておいて、何の話してたの?」

ナツ 「一応今日のテーマのAndroidの話をしてて、システムログのこととかかな」

アキ 「あー。なるほど〜。なるほど〜。最近そこらへん深めに調べてるんだけど、システムログは厄介よね。いろいろログ吐きすぎで〜」

3人の態度を不審に思うクウ

 作成したAndroidアプリケーションが出力してしまうログの問題は、アプリケーション内で出力するログだけにとどまらない。それ以外に、Intentを利用して他のアプリケーションにデータを渡すときにも問題となり得る。例えば、

  • ブラウザアプリの起動(注1
  • 電話アプリの起動

のような一般的によく利用されるデータの受け渡し時にも、機種によってはログとして出力されてしまう場合がある(注2)。

//ブラウザの起動

Uri uri = Uri.parse("https://www.ubsecure.jp/?id=test&password=pass");

Intent intent = new Intent(Intent.ACTION_VIEW, uri);

startActivity(intent);

//電話アプリの起動

Intent intent2 = new Intent(Intent.ACTION_VIEW, Uri.parse("tel:123456789"));

startActivity(intent2);

脆弱なコードの例

I/ActivityManager( 1224): Starting activity: Intent { act=android.intent.action.VIEW dat=https://www.ubsecure.jp/?id=test&password=pass cmp=android/com.android.internal.app.ResolverActivity }

I/ActivityManager(1224): Starting activity: Intent { act=android.intent.action.VIEW dat=tel:123456789 cmp=com.android.contacts/.DialtactsActivity }

上記の脆弱なコードの例により出力される端末ログ
図1 実際の端末ログ取得例 図1 実際の端末ログ取得例

 httpsのように保護すべきデータや個人情報が含まれているデータでも、上記のような形でログに出力されてしまう場合があるので注意が必要だ。

 しかもこのような挙動は、Androidアプリケーション側での制御が困難な場合がある。アプリケーションの開発者はこのことを踏まえ、他のアプリケーションと連携する場合には「ログに重要な情報が出力される可能性がある」ということを認識し、確認する必要がある。

【注1】
ブラウザ起動後の標準ブラウザ上での遷移に関しても、GETの場合はURLがログに出力されてしまう可能性があります。
【注2】
プリインストールアプリケーションやシステムが出力するログは、機種によって異なる場合があります。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。