Shikata Ga Nai

Private? There is no such things.

第71回:模擬アプリ診断演習①

Hello there, ('ω')ノ

✅ 今回の診断対象アプリ

| 名前 | NotepadApp(架空のメモ帳アプリ)

| APK入手方法 | 記事では実ファイルは配布しませんが、構成は以下のように仮定します。

| 想定機能 |

  • ログイン機能なし
  • メモの作成・削除・閲覧
  • メモデータはSQLiteに保存
  • 共有ボタンから他アプリに送信可能

🧰 使用ツール

ツール名 用途
ADB アプリのインストール・ログ取得・データ操作
MobSF APK解析(静的解析)
Frida ランタイムの動作確認やフック
Drozer コンポーネント診断
Burp Suite 通信の確認
APKTool APKの展開・構造確認

🔍 診断ポイントの概要

項目 疑わしい点
SQLite保存 暗号化なし?パスワードや個人情報が平文で?
コンテンツプロバイダ 外部アプリから読み出せる?
共有ボタン 意図せぬデータ漏洩は?
デバッグログ 機密情報がLogcatに出てないか?

🧪 Step 1:APKをMobSFで静的解析

  1. MobSFを起動(ローカル環境 or Docker)
  2. APKをアップロード
  3. 主な確認ポイント:

    • Exportedコンポーネントの一覧
    • 保存ファイルのパス(/data/data/package-name/databases/
    • 使用しているパーミッション
    • 暗号化ライブラリの有無(javax.crypto など)

🛠 Step 2:ADBでデータ確認

adb install notepadapp.apk
adb shell
run-as com.example.notepadapp
cd databases
sqlite3 notes.db
SELECT * FROM notes;

👉 メモ内容が平文で保存されていることを確認。 →「端末が盗まれたら中身は全部読まれてしまう」リスクあり。


🧪 Step 3:Drozerでコンテンツプロバイダ診断

run app.provider.info -a com.example.notepadapp

content://com.example.notepadapp.provider.Notes が外部公開されている!

run app.provider.query --uri content://com.example.notepadapp.provider.Notes

👉 他アプリから認証なしでメモの内容が取得可能であることを確認。


🧪 Step 4:Logcat確認

adb logcat | grep Note

→ メモ内容がログ出力されていた場合、それも情報漏洩のリスク。


📋 診断結果のまとめ(この演習で発見された脆弱性)

脆弱性 内容 対応策
SQLite平文保存 メモの中身が暗号化されず保存されている EncryptedSQLite等の導入
公開コンテンツプロバイダ 他アプリから読み出し可能 exported=falseandroid:protectionLevel=signature の指定
ログ出力 メモ内容がLogcatに残る デバッグビルド限定に制御 or ログから除外

✅ まとめ

この演習では、ツールを使ってアプリの中身を“見る”方法と、診断の観点を理解する力を養いました。

今回のメモ帳アプリは機能がシンプルでしたが、だからこそ脆弱性がわかりやすく再現しやすい教材になります。

Best regards, (^^ゞ