Hello there, ('ω')ノ
🪵 Logcatとは?
Logcat(ログキャット)は、Androidが提供する標準的なログ出力機能です。 アプリの開発中や動作確認時に、以下のようなログが記録されます:
Log.d("LoginActivity", "userId = 12345"); Log.e("Payment", "Exception: " + e.getMessage());
これらのログは開発には便利ですが、公開アプリで機密情報を出力してしまうと「情報漏洩」の原因になります。
⚠️ なぜログが危険なのか?
| 問題 | 内容 |
|---|---|
| ユーザーIDや認証情報が記録される | 攻撃者が取得できる可能性 |
| 例外ログに内部実装が露出 | サーバーの構成やDB名がバレる |
| 端末がRoot化されていなくても一部は読める | 特に開発者モードではログ収集が簡単 |
🧪 実践:Logcat診断のステップ
✅ Step 1:端末とADB接続
adb devices adb logcat
アプリを起動し、操作しながらログを観察します。
✅ Step 2:ログ内容をフィルタリング
以下のようなキーワードで絞り込むと見つけやすくなります:
adb logcat | grep -i "token" adb logcat | grep -i "password" adb logcat | grep -i "Exception"
✅ Step 3:アプリ操作中に出力されるログを記録
例:ログイン操作時に出たログ
I/LoginActivity: Login success for user: john@example.com D/AuthManager: token=eyJhbGciOiJIUzI1NiIsInR5cCI...
→ ユーザーのメールアドレスとアクセストークンが丸見え!
🔐 危険なログのパターン一覧
| パターン | 解説 |
|---|---|
| 認証情報の出力 | パスワード、トークン、セッションクッキー |
| 個人情報の出力 | 氏名、電話番号、メールアドレス |
| システムエラーやスタックトレース | 攻撃対象のライブラリ・メソッドがわかる |
| リクエスト/レスポンス全文の出力 | JSONやXMLに含まれる機密データが漏れる |
| クレジットカード情報など | PCI-DSS違反の可能性すらある! |
🔧 Fridaでログ出力を監視する方法(応用)
アプリが Log.d() を使って何を出力しているか、Fridaを使ってモニタリングすることも可能です:
Java.perform(function () { var LogClass = Java.use("android.util.Log"); LogClass.d.overload("java.lang.String", "java.lang.String").implementation = function (tag, msg) { console.log("[Intercepted Log] " + tag + " : " + msg); return this.d(tag, msg); }; });
→ 診断中に気づきにくい内部ログもFrida経由で見える化できます。
✅ 対策:開発者に伝えるべきポイント
| 項目 | 対策内容 |
|---|---|
| ログに個人情報を出力しない | 開発段階でチェックをルール化する |
| スタックトレースはエラー報告サービスへ送信 | ローカルに出力しないようにする |
| リリースビルドではログを無効化 | ProGuardやビルド設定でLog.d等を削除 |
| 重要な処理にはマスク処理 | たとえば *** に置き換えるなど |
🧠 実例:情報漏洩を引き起こしたLogcat
ある金融系アプリでは、次のようなログが出力されていました:
D/Transfer: Sending amount=50000 to account=xxx-yyy-zzz D/Auth: token=abc123...
→ このログが外部アプリからも取得可能だったため、トークンの再利用と口座情報の流出が発生。 開発チームはその後、全てのログ出力をProGuardで削除し、監査ログは内部専用に切り替えました。
✅ まとめ
- Logcatは便利だが、“誰でも見られる可能性がある”情報出力であることを忘れてはいけない
- 認証情報・個人情報・例外スタックなどは絶対に出力しないルールを設けよう
- ADB + grep でのログ診断は、Androidアプリの脆弱性調査の基本スキル
- Fridaを使えば、アプリ内のログ呼び出しを監視・記録することも可能!
Best regards, (^^ゞ