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


第31回:データベース(SQLite)の診断方法

Hello there, ('ω')ノ

🗄 SQLiteとは?

SQLiteは、Androidアプリで最も一般的に使われている組み込み型のデータベースです。

アプリ内の以下のようなデータを保存するために使われます:

  • ログイン履歴やユーザー設定
  • キャッシュ情報やセッション情報
  • 位置情報の履歴や検索履歴
  • ときにはパスワードやトークンまで(←危険)

アプリの内部ストレージ(/data/data/<パッケージ名>/databases/)に、.db 拡張子のSQLiteファイルとして保存されます。


🛠 診断の準備:実機またはエミュレータへのアクセス

✅ ルート権限が必要(または仮想環境)

SQLiteファイルは通常、アプリ固有のディレクトリ内にあるため、通常の端末ではアクセスできません。 診断には次のいずれかが必要です:

  • ルート化されたAndroid実機
  • Emulator + adb root が可能な設定
  • 仮想Android(例:Bluestacks + adb)
  • または対象アプリを自分でビルドした診断用APK

🔍 診断ステップ①:SQLiteファイルを取り出す

adb root
adb shell
cd /data/data/com.example.app/databases/
ls
# → example.db などがあれば対象
exit
adb pull /data/data/com.example.app/databases/example.db

🧪 診断ステップ②:中身を確認する

取得した .db ファイルは、PC上のSQLiteブラウザやCLIで内容を確認できます。

✅ SQLiteブラウザ(GUI)

  • DB Browser for SQLite → テーブル構造・データ内容・検索・エクスポートなどが簡単にできる

✅ コマンドラインでもOK:

sqlite3 example.db
sqlite> .tables
sqlite> SELECT * FROM users;

🔐 チェックすべき診断ポイント

✅ 1. パスワードやトークンが平文で保存されていないか?

| id | username | password     |
|----|----------|--------------|
| 1  | taro     | admin1234    | ←これはNG!
| 2  | hanako   | 8f9e...(ハッシュ)|

→ 平文保存は完全にアウト。**ハッシュ化(理想的にはソルト付き)**されているかを確認。


✅ 2. 秘密情報が必要以上に保存されていないか?

  • アクセストークン
  • クレジットカード番号(論外)
  • GPSの詳細履歴
  • 通信で渡されたIDトークンなど

→ 一時的にしか使わない情報が、永続的に残っていないか?


✅ 3. データにアクセス制御がないか?

  • ルートでなくても .db にアクセスできてしまう設定はNG
  • 外部ストレージ(SDカードなど)に保存されていないかも要確認

✅ 4. SQLインジェクションの痕跡がないか?

コードに以下のようなパターンがある場合は注意:

db.rawQuery("SELECT * FROM users WHERE name = '" + userInput + "'", null);

→ ユーザー入力を直接クエリに使っている場合、SQLインジェクションのリスクがある


🧠 SQLite診断のリアルな例

以下のようなケースが、実際の診断で見つかっています:

発見された問題 影響
平文のパスワードが複数ユーザー分保存されていた アカウント乗っ取りのリスク
アクセストークンが無期限で保持されていた 第三者による不正APIアクセス
GPS位置履歴が全件保存 プライバシー侵害

🛡️ 対策方法

対策 内容
パスワードはハッシュ+ソルトで保存 SHA-256 + 個別ソルトなど
機密情報は一時記憶にとどめる 保存せず、セッション終了時に削除
SQLiteファイルの権限設定を厳格に MODE_PRIVATE での保存を徹底
PreparedStatementを使う SQLインジェクション対策として推奨

✅ まとめ

  • Androidアプリ内のSQLiteデータベースには重要情報が保存されていることが多く、診断対象として重要
  • 実機から .db ファイルを取得し、GUIまたはCLIで中身を可視化する
  • パスワードやトークンの平文保存、保存期間、アクセス権限、SQL構文に注目してチェックしよう
  • アプリが漏らさないように設計されているか?をデータベースからも見抜くことができる

Best regards, (^^ゞ




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

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