Zum Inhalt springen

BenutzeraktivitätNetzwerk

Safari History.db: Browserverlauf unter macOS

Safari History.db, Profildatenbanken, Downloads.plist und Tab-Speicher unter macOS: welche Seiten ein Benutzer wann besuchte und was gelöscht wurde.

Speicherort
~/Library/Safari/History.db
Belegt
Welche URLs ein macOS-Benutzer in Safari geöffnet hat, wann, über welche Weiterleitungen und ob der Verlauf gelöscht wurde
Zeitstempel
Mac Absolute Time (Cocoa, Sekunden seit 2001-01-01 UTC), gespeichert als REAL
Zugriff
Full Disk Access für den lesenden Prozess (TCC); root allein reicht nicht
Aufbewahrung
Benutzereinstellung, standardmäßig ein Jahr oder bis zum manuellen Löschen; Download-Liste standardmäßig ein Tag
Sicherung
Aftermath, mac_apt, UAC

Was es ist

Safari speichert seinen Browserverlauf in einer SQLite-Datenbank namens History.db. Jede eindeutige URL erhält eine Zeile in history_items und jeder einzelne Seitenaufruf eine Zeile in history_visits. Die Datenbank beantwortet daher sowohl „War der Benutzer jemals hier?“ als auch „Wann genau und wie oft?“. Seit Safari 17 Profile eingeführt hat, schreibt das Standardprofil weiterhin nach ~/Library/Safari/History.db, während jedes weitere Profil seine eigene History.db im Sandbox-Container von Safari hat.

Rund um die Verlaufsdatenbank liegen mehrere Begleitdateien: Downloads.plist (die Download-Liste), SafariTabs.db (offene Tabs, Tab-Gruppen und Profilnamen), CloudTabs.db (Tabs, die auf den anderen iCloud-Geräten des Benutzers geöffnet sind), RecentlyClosedTabs.plist und, je nach Version, LastSession.plist. Diese Seite ist die Kurzreferenz; der Leitfaden zur Safari-Forensik geht die Analyse ausführlicher durch.

Wo es liegt

DateiPfadVersionen / Hinweise
Verlauf (Standardprofil)~/Library/Safari/History.db (+ -wal, -shm, -lock)Ab 10.10 Yosemite; davor History.plist
Verlauf (weitere Profile)~/Library/Containers/com.apple.Safari/Data/Library/Safari/Profiles/<UUID>/History.dbAb Safari 17
Downloads~/Library/Safari/Downloads.plistBinär-Plist
Tabs, Tab-Gruppen, Profilnamen~/Library/Containers/com.apple.Safari/Data/Library/Safari/SafariTabs.dbContainer-Layout ab Safari 15
iCloud-Tabs~/Library/Containers/com.apple.Safari/Data/Library/Safari/CloudTabs.dbÄltere Versionen legten sie in ~/Library/Safari ab
Zuletzt geschlossene Tabs~/Library/Safari/RecentlyClosedTabs.plistVorhanden, wenn Tabs geschlossen wurden
Letzte Sitzung~/Library/Safari/LastSession.plistNicht in jeder Version vorhanden
Top Sites~/Library/Safari/TopSites.plist und TopSites.plist pro Profil
Tab-Snapshots~/Library/Containers/com.apple.Safari/Data/Library/Caches/com.apple.Safari/TabSnapshots/Metadata.dbZwischengespeicherte Seitenvorschauen
Einstellungen~/Library/Containers/com.apple.Safari/Data/Library/Preferences/com.apple.Safari.plistÄlter: ~/Library/Preferences/com.apple.Safari.plist

Schutz: ~/Library/Safari und der Safari-Container sind durch TCC geschützt (ab Mojave). Ein Prozess ohne Full Disk Access erhält Operation not permitted, selbst mit sudo. Auf einem eingehängten Dead-Box-Image greift TCC nicht.

Was es belegt

  • Welche URLs in Safari geladen wurden und zu welcher Zeit, pro Besuch.
  • Ob ein Ladevorgang erfolgreich war (load_successful) und die Weiterleitungskette, die zu einer Zielseite führte (redirect_source / redirect_destination).
  • Seitentitel, wie sie zum Zeitpunkt des Besuchs lauteten (history_visits.title), und Suchbegriffe in URLs von Suchergebnissen.
  • Dass der Benutzer den Verlauf bewusst gelöscht hat: history_tombstones erfasst den gelöschten Zeitraum oder die URL.
  • Welche Dateien Safari heruntergeladen hat und wo sie gespeichert wurden (Downloads.plist), solange die Liste nicht geleert wurde.
  • Welche Tabs geöffnet, angeheftet oder gruppiert waren und zu welchem Profil sie gehörten (SafariTabs.db).

Es belegt nicht:

  • Dass die Person an der Tastatur die Seite gelesen hat oder dass ein Besuch auf diesem Mac stattfand: Die iCloud-Synchronisierung des Verlaufs kann Besuche von anderen Geräten einbringen (siehe Spalte origin, und validieren Sie deren Werte auf einem Referenzsystem, bevor Sie sich darauf stützen).
  • Aktivität im privaten Surfen: Private Fenster schreiben keine Besuche in History.db.
  • Aktivität in anderen Browsern (siehe Chrome und Firefox).

Wichtige Felder

Tabelle / DateiFeldBedeutung
history_itemsid, urlEindeutige URL (eine Zeile pro URL)
history_itemsdomain_expansionKurze, aus der Domain abgeleitete Website-Bezeichnung
history_itemsvisit_countAggregierter Besuchszähler
history_visitshistory_itemFremdschlüssel auf history_items.id
history_visitsvisit_timeZeitpunkt des Besuchs (Mac Absolute Time, REAL)
history_visitstitleSeitentitel zum Zeitpunkt des Besuchs
history_visitsload_successful, http_non_getLadeergebnis, Flag für Nicht-GET-Anfragen
history_visitsredirect_source, redirect_destinationIDs verknüpfter Besuche in einer Weiterleitungskette
history_visitsorigin, generationBuchführung für die Synchronisierung (lokal oder synchronisiert)
history_tombstonesstart_time, end_time, urlZeitraum oder URL, die durch das Löschen des Verlaufs entfernt wurden
Downloads.plistArray DownloadHistory: DownloadEntryURL, DownloadEntryPath, DownloadEntryDateAddedKey, DownloadEntryDateFinishedKeyQuelle, Ziel, Beginn und Ende jedes Downloads

Neuere Builds ergänzen Spalten (zum Beispiel status_code in history_items, udid in history_tombstones). Führen Sie zuerst .schema auf der tatsächlichen Datei aus.

Zeitstempel

visit_time, start_time und end_time sind Gleitkommawerte in Mac Absolute Time: Sekunden seit 2001-01-01 00:00:00 UTC. Addieren Sie 978307200, um einen Unix-Zeitstempel zu erhalten. Datumswerte in Downloads.plist sind native Plist-Datumsobjekte, die plutil -p in UTC ausgibt.

SELECT datetime(v.visit_time + 978307200, 'unixepoch') AS visit_utc,
       i.url, v.title, v.load_successful, v.redirect_source, v.redirect_destination
FROM history_visits v
JOIN history_items i ON i.id = v.history_item
ORDER BY v.visit_time;

Aufbewahrung

  • Der Verlauf wird gemäß der Benutzereinstellung „Verlaufsobjekte entfernen“ in den Safari-Einstellungen bereinigt. Standard ist „Nach einem Jahr“, und „Manuell“ behält den Verlauf, bis der Benutzer ihn löscht.
  • „Verlauf löschen“ entfernt Zeilen und hinterlässt Einträge in history_tombstones.
  • Die Download-Liste hat eine eigene Einstellung zum Entfernen und ist häufig leer: Das Velociraptor-Artefakt für Safari-Downloads nennt einen Standardwert von 24 Stunden. Die heruntergeladenen Dateien, ihre Quarantäne-Attribute und die Quarantäne-Datenbank überdauern die Liste meist.
  • Gelöschte Zeilen können eine Zeit lang in freien SQLite-Seiten und in der -wal-Datei überdauern, bis ein Checkpoint oder Vacuum erfolgt.

Sicherung

Erteilen Sie zuerst Terminal oder dem Sicherungstool Full Disk Access. Kopieren Sie jede Datenbank zusammen mit ihren -wal- und -shm-Dateien.

# Live, per user, preserving metadata
ditto ~/Library/Safari /cases/host01/Safari
ditto ~/Library/Containers/com.apple.Safari/Data/Library/Safari /cases/host01/Safari-container
  • UAC: Das Artefakt safari.yaml sichert History*, Downloads.plist, SafariTabs.db*, CloudTabs*, LastSession.plist, RecentlyClosedTabs.plist und mehr aus beiden Speicherorten.
  • Aftermath (Jamf): sichert die History.db des Standardprofils, Downloads.plist, Bookmarks.plist, LastSession.plist und UserNotificationPermissions.plist (keine Erweiterungen, keine weiteren Profile); als root mit Full Disk Access ausführen.
  • mac_apt: Das Plugin SAFARI exportiert und wertet die Dateien aus einem Disk-Image oder einem Live-Mount aus, einschließlich der Profildatenbanken von Safari 17.

Auswertung

  • sqlite3 für History.db, SafariTabs.db und CloudTabs.db. Arbeiten Sie an einer Kopie (mit ihren -wal- und -shm-Dateien im selben Ordner), nie am Original der Beweismittel, denn das Öffnen einer WAL-Datenbank kann einen Checkpoint auslösen.
  • plutil -p Downloads.plist für die Download-Liste.
  • Plugin SAFARI von mac_apt: Verlauf, Downloads, Lesezeichen, Top Sites, letzte Sitzung, zuletzt geschlossene Tabs, iCloud-Tabs und Tab-Snapshots in einer Tabelle.
  • APOLLO: Das Modul safari_history fragt History.db ab; seine KnowledgeC-Module für Safari ergänzen den Kontext der App-Nutzung.

Bewusstes Löschen finden:

SELECT datetime(start_time + 978307200, 'unixepoch') AS cleared_from_utc,
       datetime(end_time + 978307200, 'unixepoch')   AS cleared_to_utc,
       url
FROM history_tombstones ORDER BY end_time;

Tipps für die Untersuchung

  • Werten Sie immer jedes Profil aus: Ein Benutzer mit einem separaten Profil „Arbeit“ oder „Privat“ hat eine zweite History.db im Container-Ordner Profiles/<UUID>/. Ordnen Sie UUIDs über SafariTabs.db den Profilnamen zu.
  • Fehlende -wal-Dateien sind der häufigste Grund für „fehlende“ jüngste Besuche.
  • Verknüpfen Sie Downloads über die Attribute com.apple.quarantine und kMDItemWhereFroms sowie die Quarantäne-Datenbank mit Dateien auf der Platte.
  • Korrelieren Sie Besuche mit dem App-Fokus in KnowledgeC, um zu zeigen, dass Safari zu dem Zeitpunkt tatsächlich im Vordergrund war.
  • Zeilen in history_tombstones mit Zeitstempeln kurz vor einem Vorfallszeitraum sind ein starker Indikator für Anti-Forensik; dokumentieren Sie sie, auch wenn der Verlauf selbst verschwunden ist.
  • Behandeln Sie Einträge in CloudTabs.db als Aktivität eines anderen Geräts, bis das Gegenteil bewiesen ist.

Siehe auch