performing-mobile-device-forensics-with-cellebrite について
Cellebriteなどを使う調査担当者向けのモバイル端末フォレンジック手順です。端末の取得、通信・位置データの分析、結果の報告を扱います。
主な機能
- 01端末の準備と隔離
- 02UFEDによるデータ取得
- 03ALEAPPまたはiLEAPPで抽出データを分析
- 04通信やメッセージの抽出
- 05位置データの解析とレポート作成
活用シーン
- 01端末内の通信記録の調査
- 02従業員端末のデータ利用状況の確認
- 03端末データから位置情報を追跡
- 04モバイル端末フォレンジック結果の記録
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill performing-mobile-device-forensics-with-cellebriteインストール後、Claude Code で/performing-mobile-device-forensics-with-cellebriteを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdscripts/agent.py詳細
Cellebrite を使用したモバイルデバイスのフォレンジック調査
使用する場面
- 調査中にスマートフォンやタブレットから証拠を抽出する場合
- モバイルデバイスから削除されたメッセージ、通話履歴、位置情報を復元する場合
- メッセージングアプリを介した通信が関係する調査を行う場合
- 犯罪行為の証拠となるモバイルアプリのデータを分析する場合
- 従業員によるモバイルデバイスの不正利用に関する企業調査を行う場合
前提条件
- Cellebrite UFED Touch/4PC または UFED Physical Analyzer(ライセンス取得済み)
- 代替となるオープンソースツール:ALEAPP、iLEAPP、MEAT、libimobiledevice
- 対象デバイスに適したケーブルとアダプター
- デバイスをネットワーク信号から隔離するファラデーバッグ
- 法的な許可(令状、同意、または社内規定)
- iOS および Android のファイルシステム構造に関する知識
ワークフロー
ステップ 1:デバイスの準備と隔離
# CRITICAL: Immediately place device in airplane mode or Faraday bag
# This prevents remote wipe commands and additional data changes
# Document device state before acquisition
# Record: make, model, IMEI, serial number, OS version, screen lock status
# Photograph the device from all angles
# For Android - Enable USB debugging if accessible
# Settings > Developer Options > USB Debugging > Enable
# For iOS - Trust the forensic workstation
# When prompted on device, tap "Trust This Computer"
# If device is locked, document lock type (PIN, pattern, biometric)
# Cellebrite UFED can bypass certain lock types depending on device model
# Install open-source tools as alternatives
pip install aleapp # Android Logs Events And Protobuf Parser
pip install ileapp # iOS Logs Events And Properties Parser
sudo apt-get install libimobiledevice-utils # iOS acquisition on Linux
ステップ 2:デバイスの取得を実施
# === Cellebrite UFED Acquisition ===
# 1. Launch UFED 4PC or connect UFED Touch
# 2. Select Device > Identify device model automatically
# 3. Choose extraction type:
# - Logical: App data, contacts, messages, call logs (fastest, least data)
# - File System: Full file system access including databases
# - Physical: Bit-for-bit image including deleted data (most complete)
# - Advanced (Checkm8/GrayKey): For locked iOS devices (specific models)
# 4. Select output format and destination
# 5. Begin extraction
# === Open-source iOS acquisition with libimobiledevice ===
# List connected iOS devices
idevice_id -l
# Get device information
ideviceinfo -u <UDID>
# Create iOS backup (logical acquisition)
idevicebackup2 backup --full /cases/case-2024-001/mobile/ios_backup/
# For encrypted backups (contains more data including passwords)
idevicebackup2 backup --full --password /cases/case-2024-001/mobile/ios_backup/
# === Android acquisition with ADB ===
# List connected devices
adb devices
# Full backup (requires screen unlock)
adb backup -apk -shared -all -f /cases/case-2024-001/mobile/android_backup.ab
# Extract specific app data
adb shell pm list packages | grep -i "whatsapp\|telegram\|signal"
adb pull /data/data/com.whatsapp/ /cases/case-2024-001/mobile/whatsapp/
# For rooted Android devices - full filesystem
adb shell "su -c 'dd if=/dev/block/mmcblk0 bs=4096'" | \
dd of=/cases/case-2024-001/mobile/android_physical.dd
# Hash the acquisition
sha256sum /cases/case-2024-001/mobile/*.dd > /cases/case-2024-001/mobile/acquisition_hashes.txt
ステップ 3:ALEAPP(Android)または iLEAPP(iOS)で分析
# === Android analysis with ALEAPP ===
# ALEAPP processes Android file system extractions
python3 -m aleapp \
-t fs \
-i /cases/case-2024-001/mobile/android_extraction/ \
-o /cases/case-2024-001/analysis/aleapp_report/
# ALEAPP extracts and reports on:
# - Call logs, SMS/MMS messages
# - Chrome browser history and searches
# - WiFi connection history
# - Installed applications
# - Google account activity
# - Location data (Google Maps, Photos)
# - WhatsApp, Telegram, Signal messages
# - App usage statistics
# - Device settings and accounts
# === iOS analysis with iLEAPP ===
python3 -m ileapp \
-t tar \
-i /cases/case-2024-001/mobile/ios_backup.tar \
-o /cases/case-2024-001/analysis/ileapp_report/
# iLEAPP extracts and reports on:
# - iMessage and SMS messages
# - Safari browsing history
# - WiFi and Bluetooth connections
# - Health data and location history
# - App usage (KnowledgeC)
# - Photos with EXIF/GPS data
# - Notes, Calendar, Reminders
# - Keychain data (if decryptable)
# - Screen time data
ステップ 4:通信およびメッセージングデータを抽出
# Extract WhatsApp messages from Android
python3 << 'PYEOF'
import sqlite3
import os
# WhatsApp database location
db_path = "/cases/case-2024-001/mobile/android_extraction/data/data/com.whatsapp/databases/msgstore.db"
if os.path.exists(db_path):
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# Extract messages
cursor.execute("""
SELECT
key_remote_jid AS contact,
CASE WHEN key_from_me = 1 THEN 'SENT' ELSE 'RECEIVED' END AS direction,
data AS message_text,
datetime(timestamp/1000, 'unixepoch') AS msg_time,
media_mime_type,
media_size
FROM messages
WHERE data IS NOT NULL
ORDER BY timestamp DESC
LIMIT 1000
""")
with open('/cases/case-2024-001/analysis/whatsapp_messages.csv', 'w') as f:
f.write("contact,direction,message,timestamp,media_type,media_size\n")
for row in cursor.fetchall():
f.write(','.join(str(x) for x in row) + '\n')
conn.close()
print("WhatsApp messages extracted successfully")
PYEOF
# Extract iOS iMessage/SMS from sms.db
python3 << 'PYEOF'
import sqlite3
db_path = "/cases/case-2024-001/mobile/ios_extraction/HomeDomain/Library/SMS/sms.db"
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
cursor.execute("""
SELECT
h.id AS phone_number,
CASE WHEN m.is_from_me = 1 THEN 'SENT' ELSE 'RECEIVED' END AS direction,
m.text,
datetime(m.date/1000000000 + 978307200, 'unixepoch') AS msg_time,
m.service
FROM message m
JOIN handle h ON m.handle_id = h.ROWID
ORDER BY m.date DESC
""")
with open('/cases/case-2024-001/analysis/imessage_sms.csv', 'w') as f:
f.write("phone,direction,text,timestamp,service\n")
for row in cursor.fetchall():
f.write(','.join(str(x) for x in row) + '\n')
conn.close()
PYEOF
ステップ 5:位置情報を抽出してレポートを作成
# Extract GPS data from photos
pip install pillow
python3 << 'PYEOF'
from PIL import Image
from PIL.ExifTags import TAGS, GPSTAGS
import os, json
def get_gps(exif_data):
gps_info = {}
for key, val in exif_data.items():
decoded = GPSTAGS.get(key, key)
gps_info[decoded] = val
if 'GPSLatitude' in gps_info and 'GPSLongitude' in gps_info:
lat = gps_info['GPSLatitude']
lon = gps_info['GPSLongitude']
lat_val = lat[0] + lat[1]/60 + lat[2]/3600
lon_val = lon[0] + lon[1]/60 + lon[2]/3600
if gps_info.get('GPSLatitudeRef') == 'S': lat_val = -lat_val
if gps_info.get('GPSLongitudeRef') == 'W': lon_val = -lon_val
return lat_val, lon_val
return None
locations = []
photo_dir = "/cases/case-2024-001/mobile/ios_extraction/CameraRollDomain/Media/DCIM/"
for root, dirs, files in os.walk(photo_dir):
for fname in files:
if fname.lower().endswith(('.jpg', '.jpeg', '.heic')):
try:
img = Image.open(os.path.join(root, fname))
exif = img._getexif()
if exif and 34853 in exif:
coords = get_gps(exif[34853])
if coords:
locations.append({'file': fname, 'lat': coords[0], 'lon': coords[1]})
except Exception:
pass
with open('/cases/case-2024-001/analysis/photo_locations.json', 'w') as f:
json.dump(locations, f, indent=2)
print(f"Found {len(locations)} geotagged photos")
PYEOF
# Extract location history from Google Location History (Android)
# File: /data/data/com.google.android.gms/databases/lbs.db
# or exported Google Takeout location data
主な概念
| 概念 | 説明 |
|---|---|
| 論理抽出 | デバイス API を通じてアクセス可能なユーザーデータ(連絡先、メッセージ、写真)を抽出します |
| ファイルシステム抽出 | アプリのデータベースを含む、デバイスのファイルシステム全体にアクセスします |
| 物理抽出 | 削除済みデータや未割り当てデータを含む、デバイスストレージのビット単位のコピーです |
| UFED | Universal Forensic Extraction Device — Cellebrite の主力データ取得プラットフォームです |
| ADB | Android デバイスとの通信に使用する Android Debug Bridge です |
| KnowledgeC | アプリやデバイスの詳細な使用パターンを記録する iOS データベースです |
| SQLite データベース | モバイルアプリデータ(メッセージ、連絡先、履歴)の主な保存形式です |
| Checkm8 | A5~A11 デバイスでのデータ抽出を可能にするハードウェアベースの iOS エクスプロイトです |
ツールとシステム
| ツール | 用途 |
|---|---|
| Cellebrite UFED | 商用のモバイルデバイス取得・分析プラットフォーム |
| Cellebrite Physical Analyzer | モバイルデバイスから取得したデータの詳細分析 |
| ALEAPP | オープンソースの Android アーティファクト解析ツールおよびレポート生成ツール |
| iLEAPP | オープンソースの iOS アーティファクト解析ツールおよびレポート生成ツール |
| libimobiledevice | オープンソースの iOS 通信ライブラリ |
| Magnet AXIOM | 商用のモバイル・コンピューターフォレンジックプラットフォーム |
| MEAT | モバイル証拠取得ツールキット |
| ADB | デバイス操作とデータ抽出に使用する Android Debug Bridge |
よくあるシナリオ
シナリオ 1:犯罪に関する通信の調査 UFED の物理抽出でデバイスを取得し、メッセージングデータベースを復号して、WhatsApp/Telegram/Signal の会話を抽出します。WAL ファイルから削除済みメッセージを復元し、通信のタイムラインを作成して、法的手続き用にエクスポートします。
シナリオ 2:個人の携帯電話を介した従業員によるデータ窃取 従業員の同意を得て論理抽出を行い、企業メールやクラウドストレージアプリのデータを分析します。機密文書のスクリーンショットを確認し、ファイル転送アプリのアクティビティを調べ、クラウドへのアップロードに関するブラウザー履歴を確認します。
シナリオ 3:行方不明者の位置追跡 Google ロケーション履歴から位置情報を抽出し、写真の GPS データを解析します。既知の最終位置を特定するため Wi-Fi 接続履歴を分析し、移動パターンを調べるためフィットネスアプリのデータを確認して、最後の通信を調べるためメッセージングアプリを確認します。
シナリオ 4:児童搾取に関する調査 削除済みコンテンツを含むすべてのデータを保持する物理抽出を行い、すべての画像を NCMEC/ICSE データベースと照合します。通信記録を抽出し、未割り当て領域から削除済みメディアを復元して、起訴に備えて証拠保全の連鎖を綿密に記録します。
出力形式
Mobile Forensics Summary:
Device: Samsung Galaxy S23 Ultra (SM-S918B)
OS: Android 14, One UI 6.0
IMEI: 353456789012345
Extraction: Physical (via Cellebrite UFED)
Duration: 45 minutes
Extracted Data:
Contacts: 1,234
Call Logs: 5,678
SMS/MMS: 3,456
WhatsApp Msgs: 12,345 (234 deleted, recovered)
Telegram Msgs: 2,345
Photos/Videos: 4,567 (345 geotagged)
Browser History: 2,345 URLs
WiFi Networks: 67 saved connections
Installed Apps: 145
Key Findings:
- Deleted WhatsApp conversation with suspect recovered
- 23 geotagged photos at crime scene location
- Browser searches related to investigation subject
- Signal app used during incident timeframe (encrypted, partial recovery)
Reports:
ALEAPP Report: /analysis/aleapp_report/index.html
Messages Export: /analysis/whatsapp_messages.csv
Locations: /analysis/photo_locations.json