以下の内容はhttps://cysec148.hatenablog.com/entry/2025/08/09/175915より取得しました。


第32回:不正なログ出力と情報漏洩の見つけ方

Hello there, ('ω')ノ

🧾 Androidアプリのログとは?

Androidアプリは、開発中に次のような目的でログ出力を行います:

  • デバッグのための状態確認
  • 例外処理やエラー追跡
  • ユーザーの操作履歴を記録する

たとえば、以下のようなコードです:

Log.d("LoginActivity", "userId = " + userId);
Log.e("API", "token = " + token);

開発中は便利でも、本番アプリにこのまま残ってしまうと情報漏洩の原因になります。


⚠️ なぜログが危険なのか?

Androidのログは、root権限がなくても他アプリから取得可能だった時代(Android 4.1以前)の影響で、ログ内容が読み取りやすい環境が存在していました。 現在でも以下のようなリスクがあります:

危険な理由 説明
攻撃者が logcat で監視可能 開発中の端末やroot端末では誰でもログ監視ができる
平文でログに書かれた情報 ユーザー名、トークン、パスワード、GPS情報などが残っていることも
クラッシュ時のエラーがヒントになる 攻撃パターンや脆弱なAPIを特定される

🧪 実際にログを見る方法(診断手順)

✅ 1. adb logcat でログをモニタリング

adb logcat

アプリを起動し、ログに不審な出力があるかを確認します。 以下のようなキーワードで絞ると見つけやすいです:

adb logcat | grep -i "password\|token\|user\|secret"

✅ 2. 静的解析でコードから探す

JadxやMobSFを使って、ログ出力をコードから探しましょう。

検索対象の関数:

Log.d(...)
Log.e(...)
Log.i(...)
System.out.println(...)
printStackTrace()

MobSFの場合は、「Logging Detected」や「Hardcoded Info」などの項目でログ出力に関わる警告が表示されます。


🔍 よくある“やってはいけないログ”の例

コード例 問題点
Log.d("Auth", "token = " + token); 認証トークンの漏洩
Log.e("Login", "password = " + password); パスワードを平文で記録
Log.d("Location", location.toString()); 位置情報の記録
printStackTrace() スタックトレースに内部構造が露出する可能性

🛡️ 対策方法

対策 内容
機密情報はログに出さない トークン、パスワード、GPS、個人情報など
本番ビルドではログ出力を抑制 BuildConfig.DEBUG を条件に制御する
ログレベルの制限 Log.v()Log.d() は本番で無効化する
printStackTrace禁止 エラー処理はロギングせずユーザーにメッセージを表示
独自ログラッパーの導入 本番/開発でログ出力を自動的に切り替えるようにする

✅ まとめ

  • Androidアプリにおけるログ出力は、設計ミスや開発時の置き土産が大きな情報漏洩リスクにつながる
  • adb logcat実機からリアルタイムにログを監視し、機密情報が漏れていないかチェックしよう
  • 静的解析でもログ出力箇所を探し、重要情報が含まれていないかを目視確認することが大切
  • 本番環境ではログを出力しない or 最小限にするのが基本原則!

Best regards, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2025/08/09/175915より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14