不適切なログ出力

学習内容

ここでは、不適切なログ出力によって生じる脆弱性を理解する上で必要な知識について学習します。
具体的には、Android OSのログ出力の概要や、事例を交えた脆弱性の概要について説明します。

学習の流れは以下のとおりです。
  • Android OSのログ出力について
    Android OSのログ出力の概要、特徴について学習します。
  • 不適切なログ出力によって生じる脆弱性
    不適切なログ出力がある場合に、どのような脆弱性が生じるのか学習します。
  • 脆弱性の事例
    不適切なログ出力による脆弱性の事例を紹介します。
  • 学習シナリオ
    サンプルアプリのソースコードを確認し、脆弱性体験を通じて、開発時に注意すべきポイントと対策方法について学習します。
    ここでは以下のシナリオを用いて学習します。
    • 重要情報の想定外のログ出力

Android OSのログ出力について

Android OSにはLogCatと呼ばれるシステムログ機構があります。
開発者がLogCatへログ出力を行うケースとして、例えば以下の2点が挙げられます。
  • 開発中のアプリの動作をログの記録内容から追跡する目的
    メソッドの開始時点や終了時点などにログ出力用のメソッドを記述する事でアプリの動作を追跡する目印に使用することがあります。
  • リリースしたアプリの動作を後に確認(監査)する目的
    アプリの動作状況を定期的にログに記録し、後でアプリの動作を確認できるように設計する場合があります。
    スマートフォンアプリの場合は、LogCatを利用者端末から回収する事が難しいため、動作ログを定期的にサーバへ送信する設計が考えられます。この種のログは、アプリが入出力した情報など、多くの情報を含んでいる場合があります。
    アプリの中には、例外を検出した時にログをサーバへ送信するように設計されているものも見られます。

また、LogCatにはアプリが出力するログだけでなく、Android OSが出力するログも出力されます。
例えばActivityManagerは、Activityを起動するためにアプリから発行されたIntentの内容をログに出力します。

不適切なログ出力によって生じる脆弱性

開発者がアプリの動作を確認するために出力するログには、利用者が入力した内容やサーバから受信した内容などが出力されることがあり、重要な情報が含まれる場合があります。 このようなログは、通常はアプリの開発時にだけ必要な物であり、アプリのリリース前に削除しておくべきものです。 しかし、削除されるはずのログ出力処理がリリース版のアプリに残っていることがあります。
LogCatに出力されるログ情報は、Android OSのバージョンによっては(脆弱性チェックリスト参照)、端末内の他のアプリからから読み取り可能になっています。 ログに重要な情報が出力されてしまう原因としては、以下のようなものが考えられます。
  • ログ出力処理の削除漏れ
    リリース版では削除されるはずのログ出力処理が削除されていなかったため、デバッグ目的で出力していた情報がログに出力されてしまう。
  • Android OS、他のアプリによるログ出力
    Android OSのログ出力について知識が不足していたため、Android OSがログに出力する部分に重要な情報を格納してしまう。
  • デバッグモードのアプリをリリース
    デバッグモードでアプリがリリースされてしまったため、デバッグ目的で出力していた情報がログに出力されてしまう。
利用者が入力した情報やサーバから受信したアクセストークン、端末位置情報などがログに出力されていた場合、これらの情報を他のアプリに摂取され、悪用される可能性があります。悪用されると、利用者になり済ましてサービスを利用されたり、利用者の行動を監視されたりしてしまいます。
このように、重要な情報をLogCatにログ出力しているアプリには情報漏えいの脆弱性があるといえます。

脆弱性の事例

ログ出力を行う際の注意点を理解しないままアプリを作成すると、アプリに脆弱性を作り込んでしまいます。
ここでは、不適切なログ出力による脆弱性の事例を挙げます。
事例:ウェザーニュースタッチの不適切なログ出力
2013年1月 JVNに、Android版 ウェザーニュースタッチのログ出力に関する問題が報告されました。
ウェザーニュースタッチには、位置情報をシステムログに出力する問題が存在していました。 Android端末のログ情報を閲覧する権限のあるアプリによって、当該製品が記録した位置情報を取得される可能性がありました。

脆弱性の事例
参考URL:
JVN#86040029:Android版 ウェザーニュースタッチにおいて位置情報をログに出力する脆弱性
http://jvn.jp/jp/JVN86040029/

このように、開発者はLogCatに出力する情報に常に注意しておく事が必要です。

学習シナリオ

不適切なログ出力によって生じる脆弱性の概要について理解できたでしょうか。それでは以下のシナリオを通して脆弱性のあるサンプルアプリを見ながら、脆弱性を作り込んでしまう原因や、対策方法について学習していきましょう。