Androidの取得と解析
Androidのデータを抽出し、解析します。
「Androidの取得と解析」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。
Androidストレージアーキテクチャ
Androidデータを効果的に抽出するには、データがどこに存在するかを知る必要があります。
- /data/data/<package>/ — 各アプリのサンドボックス:データベース、shared_prefs、ファイル、キャッシュ。
- /data/media/0/ — ユーザーストレージ(写真、ダウンロード)。
- /data/system/ — アカウント、ロック設定、利用統計。
アプリの証拠の大半は、アプリごとのサンドボックス内にあるSQLiteデータベースとXML設定ファイルに保存されています。root権限またはバックアップ機構がなければ読み取れません。
ADBとデバッグの前提条件
Android Debug Bridge (ADB)は、主な論理取得手段です。USBデバッグが有効で、ホスト鍵が承認されている必要があります。
- デバッグが有効でなく、画面もロック解除されていない場合、ADBアクセスはブロックされます。
- 認証プロンプト自体がデバイスの状態を変更するため、記録してください。
まず接続を確認し、デバイスのプロパティを取得します:
adb devices -l
adb shell getprop ro.build.version.release # Android version
adb shell getprop ro.product.model # Device model
adb shell getprop ro.crypto.state # encrypted / unencryptedADBバックアップによる論理取得
adb backupは、アプリデータを含むバックアップ用の.abアーカイブを生成します。root権限を必要とせず広く利用できますが、多くのアプリがallowBackup=falseを設定しているため、制限があります。
- アプリデータ、APK(
-apk指定時)、共有ストレージを取得します。 - バックアップをオプトアウトしたアプリや、削除済みレコードは取得できません。
分析用のバックアップを作成して変換します:
# Create a full backup (user must confirm on device)
adb backup -apk -shared -all -f android_backup.ab
# Convert the .ab to a readable tar (android-backup-extractor)
java -jar abe.jar unpack android_backup.ab android_backup.tar
tar -xvf android_backup.tarファイルシステム抽出
ファイルシステム抽出では、アプリのサンドボックスや、未同期のレコードを保持するSQLiteのWAL/SHMジャーナルファイルを含むディレクトリツリーをコピーします。
- root、フォレンジックエージェント、またはエクスプロイト/ブートローダー方式が必要です。
- -walおよび-shmファイルを保持します。最近の行がそこにしか存在しない可能性があるため、重要です。
SQLiteデータベースを取得するときは、必ずジャーナルの関連ファイルも取得してください:
adb pull /data/data/com.whatsapp/databases/msgstore.db ./out/
adb pull /data/data/com.whatsapp/databases/msgstore.db-wal ./out/
adb pull /data/data/com.whatsapp/databases/msgstore.db-shm ./out/物理取得の現実
物理イメージは、削除されたデータが残っている可能性のある未割り当て領域を含む、NANDのビット単位のコピーです。最新のAndroidでは、取得するのが最も困難です。
- FBE暗号化により、ユーザー鍵がなければraw NANDダンプは暗号文になります。
- 方法には、ベンダーのエクスプロイト、EDL/ブートローダーモード、チップオフ(最終手段であり、破壊的)が含まれます。
- 実用上、AFU状態でのファイルシステム抽出は、暗号化された物理ダンプよりも多くの利用可能なデータを得られることがよくあります。
物理取得は、必要性があり、復号が可能な場合にのみ選択してください。
SQLite:Androidの証拠の中心
Androidのアーティファクトの大半はSQLiteデータベースです。分析担当者はデータベースを直接クエリして、メッセージ、通話履歴、タイムスタンプを復元します。
- 証拠ファイルを変更しないよう、読み取り専用で開きます。
- タイムスタンプはUnixエポックのミリ秒であることがよくあります。
抽出データから連絡先データベースを調べます:
sqlite3 -readonly contacts2.db
sqlite> .tables
sqlite> SELECT display_name, data1
...> FROM view_v_contacts LIMIT 20;削除されたSQLiteレコードの復元
SQLiteで行を削除しても、ページ領域が空きとしてマークされるだけの場合があります。復元可能な断片は次の場所に残っています。
- フリーリストページと、.dbファイルの未割り当て領域。
- -walライトアヘッドログ。チェックポイント処理前の行のバージョンが保持されています。
カービングツールによって、これらのレコードを再構成できます。データベースに対して復元処理を実行します:
# Carve deleted rows from freelist + WAL
python3 sqlite_carver.py --db msgstore.db --wal msgstore.db-wal \
--out recovered_messages.csv
# Cross-check live vs recovered counts in your notesタイムラインとタイムスタンプのデコード
タイムラインを作成すると、アプリ間のイベントを関連付けられます。課題は、Androidが多くのタイムスタンプ形式を使用することです。
- Unixエポック(ms) — ほとんどのメッセージデータベース。
- Unixエポック(s) — 多くのシステムログ。
- WebKit/Chrome時間 — 1601年からのマイクロ秒(ブラウザ履歴)。
必ずUTCに正規化し、デバイスのタイムゾーンを記録してください。SQLiteでの変換例:
-- Convert epoch milliseconds to readable UTC
SELECT datetime(timestamp/1000, 'unixepoch') AS sent_utc,
key_remote_jid, data
FROM messages
ORDER BY timestamp DESC LIMIT 25;主要なシステムアーティファクト
アプリデータだけでなく、Androidのシステムアーティファクトからも、ユーザーの行動やデバイスの使用状況が明らかになります。
- usagestats — どのアプリがいつ実行されたかを示します。
- accounts.db / accounts_ce.db — Googleアカウントやアプリのアカウントとの関連を示します。
- net stats / netpolicy — アプリごとのデータ使用量を示します。
- Wi-Fi config (WifiConfigStore.xml) — 既知のネットワークを示し、位置情報の状況把握に役立ちます。
これらを使うことで、誰がいつデバイスを使用したかという主張を裏付けたり、反証したりできます。
ALEAPPによる自動解析
手動解析では規模に対応できません。ALEAPP(Android Logs Events And Protobuf Parser)はファイルシステム抽出データを取り込み、構造化されたHTML/CSVレポートを出力します。
- usagestats、最近のアクティビティ、通知、アプリの権限などを解析します。
- まずトリアージに使用し、その後、重要な発見事項を未加工のDBと手動で照合して検証します。
抽出データのディレクトリに対してALEAPPを実行します。
python3 aleapp.py -t fs -i ./android_filesystem/ -o ./aleapp_report/
# Open ./aleapp_report/index.html to review parsed artifacts検証と改ざん対策
単一のツールだけを決して信用しないでください。自動出力をソースデータと照合し、さらに複数のツール間でも検証してください。
- sqlite3で重要なクエリを手動で再実行し、パーサーの結果を確認します。
- 反フォレンジックの兆候に注意します。たとえば、ログの消去、タイムスタンプの変更、安全な削除を行うアプリ、消えるメッセージの設定が有効なチャットアプリなどです。
- 分析の前後でイメージのハッシュが一致していることを確認します。
再現性と相互検証によって、所見を根拠のあるものとして提示できます。
確認問題
チャットアプリのSQLiteデータベースを取得しています。最近送信されたメッセージを取りこぼさないために、どの関連ファイルも一緒に収集する必要がありますか。
まとめ:Androidの取得と解析
これで、Androidの証拠を端から端まで取得・解析できるようになりました。
- アプリデータは、SQLite DBやXML設定としてアプリごとのサンドボックスに保存されています。
- ADB backupは簡単な論理取得、file-system extraction(root)はWALを保持し、physicalはFBE環境では最も困難な取得方法です。
- freelist pages and WALから削除されたレコードを復元します。
- タイムスタンプをUTCに統一し、epoch形式とWebKit形式をデコードします。
- ALEAPPでトリアージを行い、その後sqlite3で手動検証します。
- 反フォレンジックの改ざんに注意し、イメージのハッシュを再確認します。
次はiOSについて見ていきます。
よくある質問
「Androidの取得と解析」レッスンは無料ですか?
はい。「Androidの取得と解析」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。
「Androidの取得と解析」で何を学びますか?
Androidのデータを抽出し、解析します。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cyber Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Androidの取得と解析」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCyber Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- モバイルフォレンジックの基礎
- Androidの取得と解析
- iOSの取得と解析
- アプリ、痕跡、レポート作成