iOS Backup‑Forensik (Messaging‑zentrierte Triage)

Tip

Lernen & ĂŒben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & ĂŒben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & ĂŒben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

UnterstĂŒtzen Sie HackTricks

Diese Seite beschreibt praktische Schritte, um iOS‑Backups zu rekonstruieren und zu analysieren, um Hinweise auf 0‑click exploit delivery via AnhĂ€nge von Messaging‑Apps zu finden. Sie konzentriert sich darauf, Apples gehashte Backup‑Struktur in menschenlesbare Pfade umzuwandeln und anschließend AnhĂ€nge in gĂ€ngigen Apps zu enumerieren und zu scannen.

Ziele:

  • Lesbare Pfade aus Manifest.db rekonstruieren
  • Messaging‑Datenbanken enumerieren (iMessage, WhatsApp, Signal, Telegram, Viber)
  • Pfade zu AnhĂ€ngen auflösen, eingebettete Objekte extrahieren (PDF/Bilder/Schriftarten) und diese an Struktur‑Detektoren ĂŒbergeben

Rekonstruktion eines iOS‑Backups

Unter MobileSync gespeicherte Backups verwenden gehashte Dateinamen, die nicht menschenlesbar sind. Die SQLite‑Datenbank Manifest.db ordnet jedes gespeicherte Objekt seinem logischen Pfad zu.

Überblick ĂŒber das Vorgehen:

  1. Manifest.db öffnen und die DateieintrÀge lesen (domain, relativePath, flags, fileID/hash)
  2. Die ursprĂŒngliche Ordnerhierarchie basierend auf domain + relativePath rekonstruieren
  3. Jedes gespeicherte Objekt zu seinem rekonstruierten Pfad kopieren oder per hardlink verknĂŒpfen

Beispielworkflow mit einem Tool, das dies Ende‑zu‑Ende implementiert (ElegantBouncer):

# Rebuild the backup into a readable folder tree
$ elegant-bouncer --ios-extract /path/to/backup --output /tmp/reconstructed
[+] Reading Manifest.db ...
✓ iOS backup extraction completed successfully!

Hinweise:

  • Verarbeite verschlĂŒsselte Backups, indem du dem Extractor das Backup-Passwort bereitstellst
  • Bewahre, wenn möglich, originale Zeitstempel/ACLs fĂŒr Beweiszwecke

Erfassung & EntschlĂŒsselung des Backups (USB / Finder / libimobiledevice)

  • Unter macOS/Finder setze “Encrypt local backup” und erstelle ein frisches verschlĂŒsseltes Backup, damit keychain items vorhanden sind.
  • PlattformĂŒbergreifend: idevicebackup2 (libimobiledevice ≄1.4.0) unterstĂŒtzt die Backup‑ProtokollĂ€nderungen von iOS 17/18 und behebt frĂŒhere Restore-/Backup‑Handshake‑Fehler.
# Pair then create a full encrypted backup over USB
$ idevicepair pair
$ idevicebackup2 backup --full --encrypt --password '<pwd>' ~/backups/iphone17

IOC‑gesteuerte Triage mit MVT

Amnesty’s Mobile Verification Toolkit (mvt-ios) arbeitet jetzt direkt mit verschlĂŒsselten iTunes/Finder-Backups und automatisiert die EntschlĂŒsselung sowie das IOC-Matching fĂŒr FĂ€lle kommerzieller Spyware.

# Optionally extract a reusable key file
$ mvt-ios extract-key -k /tmp/keyfile ~/backups/iphone17

# Decrypt in-place copy of the backup
$ mvt-ios decrypt-backup -p '<pwd>' -d /tmp/dec-backup ~/backups/iphone17

# Run IOC scanning on the decrypted tree
$ mvt-ios check-backup -i indicators.csv /tmp/dec-backup

Outputs land under mvt-results/ (e.g., analytics_detected.json, safari_history_detected.json) and can be correlated with the attachment paths recovered below.

Allgemeine Artefaktanalyse (iLEAPP)

FĂŒr Timeline-/Metadaten ĂŒber Messaging hinaus fĂŒhre iLEAPP direkt im Backup-Ordner aus (unterstĂŒtzt iOS 11‑17 Schemata):

$ python3 ileapp.py -b /tmp/dec-backup -o /tmp/ileapp-report

AufzÀhlung von AnhÀngen in Messaging-Apps

Nach der Rekonstruktion AnhĂ€nge beliebter Apps auflisten. Das genaue Schema variiert je nach App/Version, aber das Vorgehen ist Ă€hnlich: die Messaging-Datenbank abfragen, Nachrichten mit AnhĂ€ngen verknĂŒpfen und Pfade auf der Festplatte auflösen.

iMessage (sms.db)

Wichtige Tabellen: message, attachment, message_attachment_join (MAJ), chat, chat_message_join (CMJ)

Beispielabfragen:

-- List attachments with basic message linkage
SELECT
m.ROWID            AS message_rowid,
a.ROWID            AS attachment_rowid,
a.filename         AS attachment_path,
m.handle_id,
m.date,
m.is_from_me
FROM message m
JOIN message_attachment_join maj ON maj.message_id = m.ROWID
JOIN attachment a ON a.ROWID = maj.attachment_id
ORDER BY m.date DESC;

-- Include chat names via chat_message_join
SELECT
c.display_name,
a.filename AS attachment_path,
m.date
FROM chat c
JOIN chat_message_join cmj ON cmj.chat_id = c.ROWID
JOIN message m ON m.ROWID = cmj.message_id
JOIN message_attachment_join maj ON maj.message_id = m.ROWID
JOIN attachment a ON a.ROWID = maj.attachment_id
ORDER BY m.date DESC;

Attachment-Pfade können absolut sein oder relativ zum rekonstruierten Baum unter Library/SMS/Attachments/.

WhatsApp (ChatStorage.sqlite)

Typische VerknĂŒpfung: message-Tabelle ↔ media/attachment-Tabelle (Benennung variiert je nach Version). Media-Zeilen abfragen, um die Pfade auf dem DatentrĂ€ger zu erhalten. Neuere iOS-Builds geben weiterhin ZMEDIALOCALPATH in ZWAMEDIAITEM preis.

SELECT
m.Z_PK                 AS message_pk,
mi.ZMEDIALOCALPATH     AS media_path,
datetime(m.ZMESSAGEDATE + 978307200, 'unixepoch') AS message_date,
CASE m.ZISFROMME WHEN 1 THEN 'outgoing' ELSE 'incoming' END AS direction
FROM ZWAMESSAGE m
LEFT JOIN ZWAMEDIAITEM mi ON mi.Z_PK = m.ZMEDIAITEM
WHERE mi.ZMEDIALOCALPATH IS NOT NULL
ORDER BY m.ZMESSAGEDATE DESC;

Pfade liegen ĂŒblicherweise unter AppDomainGroup-group.net.whatsapp.WhatsApp.shared/Message/Media/ innerhalb des rekonstruierten Backups.

Signal / Telegram / Viber

  • Signal: die Nachrichten‑DB ist verschlĂŒsselt; Anlagen, die auf der Festplatte zwischengespeichert sind (und Thumbnails), sind jedoch normalerweise durchsuchbar
  • Telegram: Cache verbleibt unter Library/Caches/ innerhalb der Sandbox; iOS 18‑Builds zeigen cache‑clearing bugs, sodass große verbliebene Medien‑Caches hĂ€ufige Beweisquellen sind
  • Viber: Viber.sqlite enthĂ€lt Nachrichten-/Anhangtabellen mit Referenzen auf dem DatentrĂ€ger

Tipp: Selbst wenn Metadaten verschlĂŒsselt sind, fördert das Scannen der media/cache‑Verzeichnisse weiterhin bösartige Objekte zutage.

Scannen von AnhÀngen auf strukturelle Exploits

Sobald Sie Pfade zu AnhĂ€ngen haben, geben Sie diese in strukturelle Scanner ein, die Dateiformat‑Invarianten anstatt Signaturen validieren. Beispiel mit ElegantBouncer:

# Recursively scan only messaging attachments under the reconstructed tree
$ elegant-bouncer --scan --messaging /tmp/reconstructed
[+] Found N messaging app attachments to scan
✗ THREAT in WhatsApp chat 'John Doe': suspicious_document.pdf → FORCEDENTRY (JBIG2)
✗ THREAT in iMessage: photo.webp → BLASTPASS (VP8L)

Erkennungen, die von strukturellen Regeln abgedeckt werden, umfassen:

  • PDF/JBIG2 FORCEDENTRY (CVE‑2021‑30860): impossible JBIG2 dictionary states
  • WebP/VP8L BLASTPASS (CVE‑2023‑4863): oversized Huffman table constructions
  • TrueType TRIANGULATION (CVE‑2023‑41990): undocumented bytecode opcodes
  • DNG/TIFF CVE‑2025‑43300: metadata vs. stream component mismatches

Validierung, EinschrÀnkungen und Fehlalarme

  • Zeitkonvertierungen: iMessage speichert Daten in Apple-Epochen/-Einheiten in einigen Versionen; bei der Berichterstattung entsprechend konvertieren
  • Schema-Drift: App-SQLite-Schemata Ă€ndern sich im Laufe der Zeit; Tabellen- und Spaltennamen fĂŒr jeden GerĂ€te-Build bestĂ€tigen
  • Rekursive Extraktion: PDFs können JBIG2-Streams und Fonts einbetten; innere Objekte extrahieren und scannen
  • Fehlalarme: Strukturelle Heuristiken sind konservativ, können aber seltene, fehlerhafte, jedoch harmlose Medien als verdĂ€chtig markieren

Quellen

Tip

Lernen & ĂŒben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & ĂŒben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & ĂŒben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

UnterstĂŒtzen Sie HackTricks