Forensic ArtifactWindows: Browser

Chrome Forensic Artifacts

Chrome stores browsing history, downloads, cookies, cached pages, autofill data, and login credentials in SQLite databases and LevelDB stores within the user profile.

Google Chrome stores an extraordinarily detailed record of user activity across multiple SQLite databases, LevelDB stores, and JSON files within the user profile directory. From browsing history and download records to cached credentials encrypted with DPAPI, Chrome artifacts provide a comprehensive reconstruction of web-based activity — and several of these artifacts persist even after the user clears their browsing data or uses Incognito mode.

What Are Chrome Forensic Artifacts?

Google Chrome maintains its user data in a structured profile directory containing multiple purpose-specific databases and data stores. Each database serves a distinct function — the History database records URLs visited and files downloaded, the Cookies database stores session tokens and authentication data, the Login Data database retains encrypted credentials, and the Web Data database preserves autofill entries and saved payment information. These are standard SQLite databases that can be opened with any SQLite-compatible tool.

Beyond SQLite, Chrome uses LevelDB stores for its Local Storage and Session Storage APIs (key-value data used by web applications), JSON files for Bookmarks and Preferences, and a proprietary disk_cache format for its HTTP cache. Together, these artifacts create a rich, multi-dimensional record of the user’s interaction with the web: what they browsed, what they searched for, what they downloaded, what credentials they stored, what forms they filled out, and what web applications they used.

Chrome uses a custom timestamp format: microseconds since January 1, 1601 UTC — the same epoch as Windows FILETIME, but expressed in microseconds rather than 100-nanosecond intervals. This means Chrome timestamps are Windows FILETIME values divided by 10. Most forensic parsing tools handle this conversion automatically, but analysts working with raw SQLite queries must account for it.

Key Insight

Chrome Incognito mode does not write to the History, Cookies, or Cache databases. However, Incognito browsing still generates DNS cache entries (viewable via chrome://net-internals/#dns on a live system), Windows Prefetch records for chrome.exe, and SRUM network usage entries. The absence of History entries combined with the presence of SRUM network transfer data during a specific window is itself a finding.

Location & Format

Profile Directory Paths

OSPath
WindowsC:\Users\{user}\AppData\Local\Google\Chrome\User Data\Default\
macOS~/Library/Application Support/Google/Chrome/Default/
Linux~/.config/google-chrome/Default/

If the user has multiple Chrome profiles, additional directories named Profile 1, Profile 2, etc. exist alongside Default. Each profile maintains its own independent set of databases.

Key Databases and Files

FileFormatKey Tables / ContentsForensic Value
HistorySQLiteurls, visits, downloads, downloads_url_chains, keyword_search_termsBrowsing timeline, download records with full file paths, search queries
CookiesSQLitecookies (name, encrypted_value, host_key, path, expires_utc, last_access_utc)Session tokens, authentication cookies, site access history
Login DataSQLitelogins (origin_url, username_value, password_value [DPAPI encrypted])Saved credentials; password_value encrypted with DPAPI (Windows) or Keychain (macOS)
Web DataSQLiteautofill, autofill_profiles, credit_cards, server_addressesForm autofill entries, saved addresses, payment card data
BookmarksJSONHierarchical bookmark tree with URLs, names, timestampsBookmarked sites; date_added and date_modified timestamps
FaviconsSQLitefavicons, icon_mappingSite icons with URL mappings; survives History clearing
Top SitesSQLitetop_sitesMost visited sites; survives some History clearing operations
Local StorageLevelDBKey-value pairs per originWeb application data; may contain tokens, user settings, cached data
Cachedisk_cacheHTTP response bodies (HTML, JS, images, documents)Cached page content; proves what the user saw even after browsing data is cleared
PreferencesJSONBrowser configuration, extensions, download default directoryDefault download path, installed extensions, proxy settings

Chrome Timestamp Format

Timestamp Conversion

Chrome timestamps are microseconds since January 1, 1601 UTC. To convert to Unix epoch: (chrome_timestamp / 1000000) - 11644473600. To convert in Python: datetime.datetime(1601, 1, 1) + datetime.timedelta(microseconds=chrome_timestamp). The value 13380000000000000 corresponds to approximately March 2026.

What It Reveals

Chrome artifacts answer a broad range of investigative questions spanning browsing behavior, credential exposure, data exfiltration, and social engineering attacks:

Investigative Benchmark

The downloads table is one of the most underutilized Chrome artifacts. Unlike History, which records page visits, the downloads table records the full local file path where each downloaded file was saved. In data exfiltration cases, this can reveal that a user downloaded a cloud sync tool, a VPN client, or an archive utility — and exactly where on the filesystem it was placed.

Forensic Use Cases

1. Browsing Timeline Reconstruction

An employee is suspected of conducting personal business during working hours. The History database’s visits table provides a complete timestamped browsing timeline with millisecond precision. Each visit record includes the transition type (typed URL, clicked link, form submission, redirect), enabling the investigator to reconstruct not just what was visited but how the user navigated there — distinguishing between deliberate access (typed) and passive navigation (redirect).

2. Credential Theft Investigation

After a business email compromise, investigators need to determine how the attacker obtained credentials. The Chrome History database shows the victim visited a phishing page at login.m1crosoft-verify.com/auth that visually mimicked the legitimate Microsoft login portal. The visits table shows a transition type of “link” (the user clicked a link in an email), and the keyword_search_terms table shows no related searches, confirming the user was directed to the page rather than finding it independently.

3. Cloud Storage Upload Detection

In data exfiltration investigations, Chrome History may show repeated visits to mega.nz, drive.google.com/upload, or send.firefox.com. The downloads table may show the user downloaded the MEGA desktop client or rclone. Local Storage LevelDB entries for mega.nz may contain cached file metadata and transfer state, proving that specific files were uploaded even after the History is cleared.

4. Session Hijacking and Cookie Theft

After an AiTM (Adversary-in-the-Middle) phishing attack, the attacker intercepts session cookies. The Chrome Cookies database preserves the last_access_utc timestamp for each cookie, allowing the investigator to determine when the session token was last used from the victim’s machine versus when it was replayed from the attacker’s infrastructure. A gap between the victim’s last legitimate cookie access and subsequent usage from a different IP (visible in server logs) confirms session hijacking.

5. Drive-by Download Investigation

The downloads table records every file Chrome downloaded, including those initiated automatically by malicious JavaScript. The tab_url field identifies which page triggered the download, the tab_referrer_url shows how the user reached that page, and the danger_type field indicates whether Chrome flagged the download as suspicious. This reconstructs the full kill chain from initial browsing to malware delivery.

Acquisition Methods

Collection Warning

Chrome SQLite databases are locked by the browser process while Chrome is running. On a live system, either close Chrome before copying, use Volume Shadow Copy, or use a raw-copy tool that bypasses NTFS locks. If Chrome is not cleanly shut down, the WAL (Write-Ahead Log) file (History-journal) may contain uncommitted entries. Always collect both the database and its associated -journal or -wal file.

Live System — Direct Copy (Chrome Closed)

CMD / ADMIN
:: Ensure Chrome is closed, then copy the profile directory
robocopy "C:\Users\jdoe\AppData\Local\Google\Chrome\User Data\Default" ^
         C:\Evidence\Chrome_Profile ^
         History Cookies "Login Data" "Web Data" Bookmarks Favicons "Top Sites" Preferences ^
         /S

:: Also collect WAL/journal files
robocopy "C:\Users\jdoe\AppData\Local\Google\Chrome\User Data\Default" ^
         C:\Evidence\Chrome_Profile ^
         History-journal Cookies-journal "Login Data-journal"

:: Collect Cache directory
robocopy "C:\Users\jdoe\AppData\Local\Google\Chrome\User Data\Default\Cache\Cache_Data" ^
         C:\Evidence\Chrome_Profile\Cache /E

Live System — KAPE Collection

CMD / ADMIN
:: Using KAPE to collect all Chrome artifacts
kape.exe --tsource C: --tdest C:\Evidence\KAPE_Output --target Chrome

:: Using Velociraptor (remote collection)
:: Artifact: Windows.KapeFiles.Targets with target "Chrome"
:: Or: Generic.Forensic.SQLiteHunter for targeted database collection

Forensic Image — Direct Extraction

BASH / FORENSICS
# Mount the forensic image (read-only)
mount -o ro,noexec,nodev /dev/sdb1 /mnt/evidence

# Copy Chrome profile for each user
cp -r "/mnt/evidence/Users/jdoe/AppData/Local/Google/Chrome/User Data/Default/" /analysis/chrome/

# Check for additional profiles
ls -la "/mnt/evidence/Users/jdoe/AppData/Local/Google/Chrome/User Data/" | grep "Profile"

Parsing Tools & Analysis

ToolAuthorLicenseOutputNotes
HindsightRyan BensonOpen source (Python)XLSX / SQLiteComprehensive Chrome parser; handles History, Cookies, Cache, Local Storage, Extensions, Preferences
DB Browser for SQLiteCommunityOpen sourceGUI + CSVManual database inspection; useful for ad-hoc queries and targeted analysis
ChromeHistoryViewNirSoftFreewareGUI + CSV / HTMLLightweight viewer for History database; quick triage
ChromeCacheViewNirSoftFreewareGUI + exportParses Chrome disk_cache format; extracts cached files
KAPE + Chrome modulesKrollFreeCSVCollection and parsing in one pass; SQLECmd Chrome targets
AutopsyBasis TechnologyOpen sourceGUI + reportFull forensic platform; Recent Activity ingest module parses Chrome automatically

Parsing with Hindsight

BASH / FORENSICS
# Install Hindsight
pip install pyhindsight

# Parse the Chrome profile directory
hindsight.py -i /analysis/chrome/Default/ \
              -o /analysis/chrome/hindsight_output \
              -f xlsx

# Output: Excel workbook with sheets for:
#   URLs, Downloads, Cookies, Autofill, Logins,
#   Bookmarks, Cache Records, Local Storage, Preferences

Direct SQLite Queries

SQL / CHROME HISTORY
-- Top visited URLs with visit count and timestamps
SELECT u.url, u.title, u.visit_count,
       datetime(u.last_visit_time/1000000-11644473600, 'unixepoch') AS last_visit,
       datetime(v.visit_time/1000000-11644473600, 'unixepoch') AS visit_time,
       v.transition
FROM urls u JOIN visits v ON u.id = v.url
ORDER BY v.visit_time DESC LIMIT 50;

-- Downloads with source URL and local file path
SELECT target_path, tab_url, total_bytes,
       datetime(start_time/1000000-11644473600, 'unixepoch') AS download_start,
       datetime(end_time/1000000-11644473600, 'unixepoch') AS download_end,
       mime_type, danger_type
FROM downloads
ORDER BY start_time DESC;

-- Search queries with timestamps
SELECT k.term, u.url,
       datetime(u.last_visit_time/1000000-11644473600, 'unixepoch') AS search_time
FROM keyword_search_terms k JOIN urls u ON k.url_id = u.id
ORDER BY u.last_visit_time DESC;

Analysis Script — Download Activity Summary

PYTHON / CHROME ANALYSIS
# Summarize download activity from Chrome History database

import sqlite3
import pandas as pd
from datetime import datetime, timedelta

conn = sqlite3.connect('/analysis/chrome/Default/History')

query = """
    SELECT target_path, tab_url, total_bytes,
           start_time, end_time, mime_type, danger_type
    FROM downloads
    WHERE total_bytes > 0
    ORDER BY start_time DESC
"""

df = pd.read_sql_query(query, conn)

# Convert Chrome timestamps to datetime
epoch = datetime(1601, 1, 1)
df['start_dt'] = df['start_time'].apply(
    lambda x: epoch + timedelta(microseconds=x) if x > 0 else None
)

# Flag suspicious downloads (executables, archives, scripts)
suspicious_types = ['.exe', '.msi', '.zip', '.7z', '.rar', '.ps1', '.bat', '.vbs']
df['suspicious'] = df['target_path'].str.lower().apply(
    lambda x: any(x.endswith(ext) for ext in suspicious_types) if isinstance(x, str) else False
)

print(df[df['suspicious']][['target_path', 'tab_url', 'total_bytes', 'start_dt']].to_string())

Retention & Persistence

DatabaseDefault RetentionCleared by "Clear Browsing Data"?Notes
History (urls, visits)90 days (auto-expire)YesChrome auto-expires visits older than 90 days; “Clear browsing data” removes all
History (downloads)IndefiniteYes (if “Download history” selected)Download records persist until explicitly cleared; often overlooked by users
CookiesPer-cookie expiryYesSession cookies cleared on browser close; persistent cookies have explicit expiry dates
Login DataIndefiniteOnly if “Passwords” explicitly selectedNot cleared by standard “Clear browsing data” unless the Passwords checkbox is checked
FaviconsIndefiniteNoSurvives History clearing; proves site was visited even after History is wiped
Web Data (autofill)IndefiniteOnly if “Autofill” explicitly selectedAutofill entries persist unless specifically targeted
CacheSize-limited (rolling)YesCleared by “Cached images and files”; otherwise rolls over based on size limit
Local StoragePer-origin; indefiniteYes (if “Cookies and other site data”)Grouped with Cookies in the clear dialog despite being a separate store
BookmarksIndefiniteNoNever cleared by “Clear browsing data”
Retention Note

The Favicons database is forensically significant because it survives History clearing. If a user clears their browsing history but the Favicons database contains an icon_mapping entry for mega.nz, this proves the site was visited at some point, even though the visit timestamps are no longer available in the History database.

Anti-Forensics Resilience

Chrome artifacts are more vulnerable to anti-forensics than system-level artifacts like SRUM or the Windows Event Logs. Chrome provides a built-in “Clear browsing data” function, and third-party tools can target the Chrome profile directory directly. However, several artifacts resist cleanup, and the act of clearing itself leaves forensic traces.

ActionWhat Is ClearedWhat Survives
Chrome “Clear browsing data” (default)History (urls/visits), Cookies, CacheFavicons, Login Data, Bookmarks, Web Data (autofill), Extensions, Preferences, download records (unless explicitly selected)
Chrome “Clear browsing data” (all checkboxes)History, Cookies, Cache, Passwords, Autofill, Download historyFavicons (partial), Bookmarks, Extensions, Preferences, Local Storage entries not covered by clear logic
CCleaner (Chrome selected)History, Cookies, Cache, Session dataLogin Data, Bookmarks, Favicons, Extensions
Incognito modeNo History, Cookies, or Cache writtenDNS cache, Prefetch (chrome.exe), SRUM network usage, Windows event logs, network proxy/firewall logs
Profile deletionEntire profile directory$MFT and $UsnJrnl entries for deleted files; SRUM network usage; Prefetch; possibly Volume Shadow Copy snapshots containing the profile
Why Chrome Evidence Persists

Even after comprehensive cleanup, multiple secondary artifacts survive: the Favicons database proves site visits, Prefetch proves Chrome execution, SRUM proves network transfer volumes, and $MFT/$UsnJrnl entries prove when Chrome database files were modified (which corresponds to when the clear operation occurred). The timestamp of the clear operation itself is frequently an important finding, as it establishes intent.

MITRE ATT&CK Detection Mapping

Chrome forensic artifacts provide evidentiary support for detecting the following MITRE ATT&CK techniques:

TechniqueNameChrome Evidence
T1567 T1567Exfiltration Over Web ServiceHistory entries for cloud storage upload pages; downloads of cloud sync clients; Local Storage tokens for cloud services
T1189 T1189Drive-by CompromiseDownloads table with danger_type flags; tab_url identifies the malicious page; redirect chains in visit transitions
T1539 T1539Steal Web Session CookieCookies database last_access_utc anomalies; gaps between legitimate and stolen session usage
T1557 T1557Adversary-in-the-MiddleHistory showing visits to AiTM phishing infrastructure; credential entry on proxy-hosted pages
T1070 T1070Indicator RemovalChrome “Clear browsing data” leaves $UsnJrnl modification entries for History/Cookies files; the clearing timestamp is itself evidence

Related Artifacts & Cross-References

Corroborating Artifacts

ArtifactRelationship to ChromeCross-Correlation Value
SRUM.dbRecords chrome.exe network transfer volumes per hourSRUM proves Chrome was transferring data even if History is cleared; volume correlation with known upload activity
PrefetchCHROME.EXE-*.pf records execution timestamps and run countPrefetch proves Chrome was launched; timestamps bracket the activity window
DNS CacheSystem DNS cache may retain resolved domains from Chrome browsingDNS cache entries survive Incognito mode; ipconfig /displaydns on live system
Windows Event LogsProcess creation events (4688) for chrome.exe with command-line argumentsCommand-line arguments may include --incognito flag, proving Incognito was deliberately used
Proxy / Firewall LogsNetwork-level HTTP/HTTPS connection logsNetwork logs survive all browser-level cleanup; provide independent corroboration of browsing activity
$MFT / $UsnJrnlFilesystem metadata for Chrome database filesModification timestamps on History/Cookies files indicate when data was cleared

References

  1. Chromium Project, “User Data Directory” — https://chromium.googlesource.com
  2. Ryan Benson, “Hindsight — Web Browser Forensics for Google Chrome/Chromium” — https://github.com/obsidianforensics/hindsight
  3. NirSoft, “ChromeHistoryView / ChromeCacheView” — https://www.nirsoft.net/
  4. SANS Institute, “FOR500 — Windows Forensic Analysis: Browser Artifacts” — https://www.sans.org/
  5. 13Cubed, “Chrome Browser Forensics” — https://www.13cubed.com/blog
  6. Chromium Source Code, “SQLite Schema Definitions” — https://source.chromium.org/
  7. DB Browser for SQLite — https://sqlitebrowser.org/
  8. ForensicArtifacts.com, “Chrome Artifact Definitions” — https://github.com/ForensicArtifacts/artifacts

Mjolnir Security — Digital Forensics & Incident Response

Mjolnir Security provides 24/7 incident response, digital forensics, and expert witness testimony. Our DFIR team specializes in browser forensics, credential theft investigations, and BEC/AiTM cases where Chrome artifacts are central to the engagement.

Digital ForensicsIncident ResponseExpert WitnessBrowser ForensicsBEC InvestigationCredential Theft

mjolnirsecurity.com — 24/7: +1 833 403 5875