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
- Browser ForensicsBrowser
- mac_aptCLI · Open Source
- APOLLOCLI · Open Source
- sqlite3CLI · in macOS enthalten
- plutilCLI · in macOS enthalten
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
| Datei | Pfad | Versionen / 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.db | Ab Safari 17 |
| Downloads | ~/Library/Safari/Downloads.plist | Binär-Plist |
| Tabs, Tab-Gruppen, Profilnamen | ~/Library/Containers/com.apple.Safari/Data/Library/Safari/SafariTabs.db | Container-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.plist | Vorhanden, wenn Tabs geschlossen wurden |
| Letzte Sitzung | ~/Library/Safari/LastSession.plist | Nicht 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.db | Zwischengespeicherte 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_tombstoneserfasst 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 / Datei | Feld | Bedeutung |
|---|---|---|
history_items | id, url | Eindeutige URL (eine Zeile pro URL) |
history_items | domain_expansion | Kurze, aus der Domain abgeleitete Website-Bezeichnung |
history_items | visit_count | Aggregierter Besuchszähler |
history_visits | history_item | Fremdschlüssel auf history_items.id |
history_visits | visit_time | Zeitpunkt des Besuchs (Mac Absolute Time, REAL) |
history_visits | title | Seitentitel zum Zeitpunkt des Besuchs |
history_visits | load_successful, http_non_get | Ladeergebnis, Flag für Nicht-GET-Anfragen |
history_visits | redirect_source, redirect_destination | IDs verknüpfter Besuche in einer Weiterleitungskette |
history_visits | origin, generation | Buchführung für die Synchronisierung (lokal oder synchronisiert) |
history_tombstones | start_time, end_time, url | Zeitraum oder URL, die durch das Löschen des Verlaufs entfernt wurden |
Downloads.plist | Array DownloadHistory: DownloadEntryURL, DownloadEntryPath, DownloadEntryDateAddedKey, DownloadEntryDateFinishedKey | Quelle, 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.yamlsichertHistory*,Downloads.plist,SafariTabs.db*,CloudTabs*,LastSession.plist,RecentlyClosedTabs.plistund mehr aus beiden Speicherorten. - Aftermath (Jamf): sichert die
History.dbdes Standardprofils,Downloads.plist,Bookmarks.plist,LastSession.plistundUserNotificationPermissions.plist(keine Erweiterungen, keine weiteren Profile); als root mit Full Disk Access ausführen. - mac_apt: Das Plugin
SAFARIexportiert und wertet die Dateien aus einem Disk-Image oder einem Live-Mount aus, einschließlich der Profildatenbanken von Safari 17.
Auswertung
sqlite3fürHistory.db,SafariTabs.dbundCloudTabs.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.plistfür die Download-Liste.- Plugin
SAFARIvon mac_apt: Verlauf, Downloads, Lesezeichen, Top Sites, letzte Sitzung, zuletzt geschlossene Tabs, iCloud-Tabs und Tab-Snapshots in einer Tabelle. - APOLLO: Das Modul
safari_historyfragtHistory.dbab; 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.dbim Container-OrdnerProfiles/<UUID>/. Ordnen Sie UUIDs überSafariTabs.dbden 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.quarantineundkMDItemWhereFromssowie 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_tombstonesmit 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.dbals Aktivität eines anderen Geräts, bis das Gegenteil bewiesen ist.