Hello there, ('ω')ノ
✅ 今回の診断対象アプリ
| 名前 | NotepadApp(架空のメモ帳アプリ)
| APK入手方法 | 記事では実ファイルは配布しませんが、構成は以下のように仮定します。
| 想定機能 |
- ログイン機能なし
- メモの作成・削除・閲覧
- メモデータはSQLiteに保存
- 共有ボタンから他アプリに送信可能
🧰 使用ツール
| ツール名 | 用途 |
|---|---|
| ADB | アプリのインストール・ログ取得・データ操作 |
| MobSF | APK解析(静的解析) |
| Frida | ランタイムの動作確認やフック |
| Drozer | コンポーネント診断 |
| Burp Suite | 通信の確認 |
| APKTool | APKの展開・構造確認 |
🔍 診断ポイントの概要
| 項目 | 疑わしい点 |
|---|---|
| SQLite保存 | 暗号化なし?パスワードや個人情報が平文で? |
| コンテンツプロバイダ | 外部アプリから読み出せる? |
| 共有ボタン | 意図せぬデータ漏洩は? |
| デバッグログ | 機密情報がLogcatに出てないか? |
🧪 Step 1:APKをMobSFで静的解析
- MobSFを起動(ローカル環境 or Docker)
- APKをアップロード
主な確認ポイント:
- 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=false や android:protectionLevel=signature の指定 |
| ログ出力 | メモ内容がLogcatに残る | デバッグビルド限定に制御 or ログから除外 |
✅ まとめ
この演習では、ツールを使ってアプリの中身を“見る”方法と、診断の観点を理解する力を養いました。
今回のメモ帳アプリは機能がシンプルでしたが、だからこそ脆弱性がわかりやすく再現しやすい教材になります。
Best regards, (^^ゞ