zavetsec/ZavetSec-BrowserHistory

GitHub: zavetsec/ZavetSec-BrowserHistory

Windows 平台实时浏览器取证工具,通过 VSS 卷影副本绕过文件锁定,一键提取所有用户的 16 种浏览器历史记录并生成加密报告。

Stars: 1 | Forks: 0

# `>_` ZavetSec-BrowserHistory **Windows IR 实时浏览器历史记录获取 —— 全用户、全浏览器、一份加密报告** [![PowerShell 5.1+](https://img.shields.io/badge/PowerShell-5.1%2B-blue?logo=powershell&logoColor=white)](https://github.com/zavetsec) [![平台](https://img.shields.io/badge/Platform-Windows-0078d4?logo=windows&logoColor=white)](https://github.com/zavetsec) [![无依赖](https://img.shields.io/badge/Dependencies-none%20required-00d4ff)](https://github.com/zavetsec) [![许可证: MIT](https://img.shields.io/badge/License-MIT-green)](https://github.com/zavetsec) 通过 VSS Shadow Copy 绕过文件锁定 · 16 种浏览器 · AES-256 加密输出 · 交互式 HTML 报告 [何时使用](#-when-to-use) · [快速开始](#-quick-start) · [参数](#-parameters) · [报告](#-html-report) · [远程执行](#-remote-execution) · [局限性](#-limitations) · [路线图](#-roadmap)
## TL;DR 用于 Windows 实时 IR 的单命令浏览器历史记录获取: ``` .\ZavetSec-BrowserHistory.ps1 ``` - 通过 VSS Shadow Copy 绕过锁定的浏览器数据库 —— 浏览器保持运行 - 单次运行收集所有本地用户配置文件 - 生成加密的、分析师即用的 HTML 报告,支持搜索和过滤 - 零安装 —— 单个 `.ps1` 文件,PowerShell 5.1,适用于任何 Windows 端点 ## 目标受众 DFIR 分析师 · 事件响应人员 · SOC 工程师 · 威胁猎手 ## 为什么选择这个工具 市面上已有多种浏览器历史记录工具。本工具专为 IR 场景构建 —— 而非用于日常浏览分析或家长控制工具。 在现场实践中至关重要的差异点: - **VSS Shadow Copy** —— 直接从运行中的浏览器读取 `History` 和 `places.sqlite`,无需终止进程或等待其正常关闭。大多数工具在浏览器持有锁定时会静默失败或返回部分结果。 - **一次运行覆盖所有用户** —— 通过注册表 (`ProfileList`) 枚举每个本地配置文件,涵盖域账户、本地账户以及本次会话中从未登录过的账户。一条命令,一台机器,完整图景。 - **加密的证据打包** —— 输出打包为 AES-256 ZIP,使用一次性加密随机密码(仅打印一次到控制台)。可安全地通过跳板机复制、存入 USB 或附加到工单,而不会在传输过程中暴露内容。 - **零安装** —— 单个 `.ps1` 文件。在任何具有 PowerShell 5.1 的 Windows 端点上运行 —— 覆盖自 Windows 7 以来的所有企业机器。无需 MSI、NuGet 或安装过程。 - **内置回退链** —— 没有 `sqlite3.exe`?从原始 SQLite 页面中机会性地恢复 URL。没有 `7z.exe`?内置 .NET 压缩仍然生成 ZIP。没有管理员权限?仍然收集当前用户配置文件。 - **原生 Get-Help** —— 通过 PowerShell 基于注释的帮助完全文档化。`Get-Help .\ZavetSec-BrowserHistory.ps1 -Full` 开箱即用。 **在 IR 工作流中的定位:** 早期部署 —— 在 KAPE 收集之前或同时,以及在镜像之前。它处理 KAPE 目标在实时系统上因文件锁定而经常遗漏的浏览器工件层。结构化 CSV 输出可直接导入 SIEM 或时间线工具。加密存档可在任何环节移交,而不违反证据处理程序。 ## 何时使用 **事件响应 / DFIR** 主机疑似遭到入侵。在重镜像或网络隔离切断访问之前,你需要浏览器证据 —— 访问了什么、何时访问、由哪个账户访问 —— 运行脚本,收集加密存档,继续下一步。 **内部威胁调查** 某账户显示异常行为。所有本地配置文件的浏览器历史记录可以确认或排除通过网页邮件、云存储上传或剪贴板站点进行的数据暂存 —— 仅靠进程日志无法浮现这些证据。 **工作站审计** 离职前审查、合规检查或事件后重建。单次运行覆盖所有配置文件,无需手动逐账户访问。 **何时不适用** 这是一个实时获取的取证分类工具。它不保留原始文件元数据,不计算源数据库文件的加密哈希,也不生成证据保管链文档。请勿在正式法律程序中将其作为唯一证据来源 —— 需配合专业的取证镜像工具使用。 ## 功能特性 - **16 种浏览器** —— 覆盖企业环境和威胁行为者技术中常见的主流 Chromium 和 Gecko 分支:Chrome, Edge, Firefox, Brave, Opera, Opera GX, Yandex, Vivaldi, Tor Browser, Thunderbird, Waterfox, LibreWolf, Pale Moon, Epic, Comodo Dragon, OneDrive WebView - **所有用户** —— 基于注册表的完整配置文件枚举,不仅是当前活动会话 - **文件锁定绕过** —— VSS Shadow Copy 从运行中的浏览器读取锁定的数据库 - **双重解析模式** —— 通过 `sqlite3.exe` 进行完整 SQL 解析(标题、访问计数、精确时间戳),或零依赖的正则回退 - **精确时间戳** —— 正确的 Epoch 转换,同时支持 Chromium(1601-01-01 基准)和 Firefox(Unix Epoch)时间戳格式 - **加密输出** —— 通过 `7z.exe` + `7z.dll` 生成 AES-256 ZIP,16位加密密码输出到控制台一次 - **交互式 HTML 报告** —— 搜索、按用户/浏览器/日期范围过滤、列排序、浏览器内 CSV 导出 - **远程执行就绪** —— 针对 PsExec / WinRM / SYSTEM 上下文的可靠 `$ScriptDir` 解析;当无交互式桌面可用时自动禁止 `-OpenReport` - **原生帮助** —— 完整的 `Get-Help` 支持及示例 ## ⚡ 快速开始 ``` # 查看内置帮助 Get-Help .\ZavetSec-BrowserHistory.ps1 -Full .\ZavetSec-BrowserHistory.ps1 -Help # 标准运行 — 加密 ZIP + 密码输出到控制台 (需要管理员权限) .\ZavetSec-BrowserHistory.ps1 # 生成报告后立即打开 .\ZavetSec-BrowserHistory.ps1 -OpenReport # 限定日期范围收集并导出 CSV .\ZavetSec-BrowserHistory.ps1 -CsvExport -DateFrom 2025-01-01 -DateTo 2025-06-30 # 无归档 — 纯 HTML (在 7z.exe + 7z.dll 不可用时使用) .\ZavetSec-BrowserHistory.ps1 -NoArchive -OpenReport # 收集所有记录,无限制 .\ZavetSec-BrowserHistory.ps1 -MaxRecordsPerBrowser 999999 # 直接保存到网络共享 .\ZavetSec-BrowserHistory.ps1 -NoArchive -OutputPath "\\server\IR\host42_history.html" ``` ## 📋 参数 | 参数 | 类型 | 默认值 | 描述 | |---|---|---|---| | `-OutputPath` | String | auto | HTML 报告的路径。如省略则在 `.\Reports\` 中自动生成 | | `-MaxRecordsPerBrowser` | Int | `5000` | 每个浏览器配置文件的最大记录数。使用 `999999` 表示无限制 | | `-OpenReport` | Switch | — | 生成后打开报告。在远程会话中自动跳过 | | `-CsvExport` | Switch | — | 将结果保存为 CSV,与 HTML 并存 | | `-DateFrom` | String | — | 收集从此日期开始的记录 (`yyyy-MM-dd`) | | `-DateTo` | String | — | 收集截至此日期的记录 (`yyyy-MM-dd`) | | `-NoArchive` | Switch | — | 跳过 ZIP —— 将 HTML(和 CSV)保存为普通文件 | | `-Help` | Switch | — | 显示帮助并退出 | ## 📊 HTML 报告 单个独立的 `.html` 文件 —— 无需服务器、无需 CDN、无需互联网。可在隔离网络的分析师工作站上打开。 ``` ┌──────────────┬──────────────┬───────────────┬──────────────────┐ │ Total Records│ Users Scanned│ Unique Domains│ Extraction Mode │ │ 12 847 │ 3 │ 1 204 │ VSS Shadow Copy │ └──────────────┴──────────────┴───────────────┴──────────────────┘ ``` **侧边面板:** 按用户统计的记录数 · 访问计数前 15 名的域名 **记录表:** | # | 用户 | 浏览器 | 域名 | 标题 / URL | 访问次数 | 最后访问 | |---|------|---------|--------|-------------|--------|------------| | 1 | john | Edge | github.com | GitHub · Build... | ▬▬▬ 42 | 2026-03-24 09:31 | **过滤器:** user · browser · date range (From / To) · full-text search · `⬓ CSV` export of visible rows (BOM UTF-8, Excel-compatible) · click any column header to sort *(译者注:过滤器界面的用户界面文本保持英文原样以确保功能说明的准确性,意为:用户、浏览器、日期范围(从/至)、全文搜索、可见行的 CSV 导出(BOM UTF-8,兼容 Excel)、点击任意列标题排序)* ## 🔑 存档密码 每次运行均通过 `System.Security.Cryptography.RandomNumberGenerator` 全新生成。完成后打印一次到控制台 —— 从不写入磁盘。 ``` ================================================================ REPORT READY ================================================================ Archive : .\HOSTNAME_20260324_093100.zip Encrypt : AES-256 Password : TJewuHDDC9phPTYN Save this password - it will not be shown again. ================================================================ ``` 密码字符集仅包含字母数字 —— 不含可能影响向 `7z.exe` 传递密码时的 Shell 转义问题的特殊字符。 如果未找到 `7z.exe` + `7z.dll`,脚本将回退到未加密的 ZIP 并发出警告。使用 `-NoArchive` 可完全跳过存档。 ## 🔧 设置 脚本无需外部文件即可运行。可选工具可提升输出质量: | 文件 | 效果 | |---|---| | `sqlite3.exe` | 完整 SQL 解析:标题 + 访问计数 + 精确时间戳。若无此项:仅 URL 的正则回退 | | `7z.exe` + `7z.dll` | AES-256 加密 ZIP。两个文件均需 —— 仅 `7z.exe` 无法工作 | 两者均包含在 [发布存档](https://github.com/zavetsec/ZavetSec-BrowserHistory/releases/latest) 中。下载,将所有内容解压到一个文件夹,运行。 手动获取: - `sqlite3.exe` — [sqlite.org/download.html](https://sqlite.org/download.html) → `sqlite-tools-win-x64-*.zip` - `7z.exe` + `7z.dll` — 从现有 7-Zip 安装目录复制这两个文件 (`C:\Program Files\7-Zip\`) ``` ZavetSec-BrowserHistory.ps1 sqlite3.exe ← included in release archive 7z.exe ← included in release archive 7z.dll ← included in release archive (required — 7z.exe will not work without it) HOSTNAME_TIMESTAMP.zip ← report saved here ``` ## 🛡️ 工作原理 ``` Running as Administrator? │ ├─ Yes → VSS Shadow Copy of C:\ │ Reads locked History / places.sqlite from the shadow │ Browser stays running, no interruption │ └─ No → Direct copy fallback ReadAllBytes → Copy-Item → xcopy Running browsers may have their DB files locked sqlite3.exe present? │ ├─ Yes → SQL query: URL + Title + VisitCount + Timestamp │ Chromium: microseconds since 1601-01-01 (correct epoch) │ Firefox: microseconds since 1970-01-01 (Unix epoch) │ └─ No → Regex scan of raw database bytes: URL only 7z.exe + 7z.dll present? │ ├─ Yes → AES-256 encrypted ZIP, 16-char password to console once │ └─ No → Unencrypted ZIP via built-in .NET System.IO.Compression ``` ## 🌐 支持的浏览器 | 引擎 | 浏览器 | |---|---| | **Chromium** | Google Chrome, Microsoft Edge, Brave, Yandex Browser, Opera, Opera GX, Vivaldi, Epic Privacy Browser, Comodo Dragon, OneDrive WebView (enterprise sync workflows), Win WebExperience | | **Firefox / Gecko** | Mozilla Firefox, Tor Browser, Thunderbird, Waterfox, LibreWolf, Pale Moon | ## 🖥️ 远程执行 脚本专为在非交互式上下文中安全运行而设计。 **步骤 1 —— 将脚本文件夹部署到远程主机:** ``` xcopy "C:\tools\ZavetSec-BrowserHistory" "\\TARGET\C$\Windows\Temp\ZavetSec-BrowserHistory\" /E /I /Y ``` 这将一次性复制整个文件夹,包括 `sqlite3.exe`, `7z.exe`, 和 `7z.dll`。使用 `C$` 管理共享或目标上任何可访问的共享。 **步骤 2 —— 远程执行:** PsExec (以 SYSTEM 身份): ``` psexec \\TARGET -s powershell.exe -ExecutionPolicy Bypass ` -File "C:\Windows\Temp\ZavetSec-BrowserHistory\ZavetSec-BrowserHistory.ps1" ` -NoArchive -OutputPath "\\share\IR\TARGET.html" ``` WinRM / Invoke-Command: ``` Invoke-Command -ComputerName TARGET -FilePath .\ZavetSec-BrowserHistory.ps1 ``` **完整远程工作流 (xcopy → 运行 → 收集 → 清理):** ``` rem 1. Deploy tool folder to target (includes sqlite3.exe, 7z.exe, 7z.dll) xcopy "C:\tools\ZavetSec-BrowserHistory" "\\TARGET\C$\Windows\Temp\ZavetSec-BrowserHistory\" /E /I /Y rem 2. Run and save output to a network share psexec \\TARGET -s powershell.exe -ExecutionPolicy Bypass -File "C:\Windows\Temp\ZavetSec-BrowserHistory\ZavetSec-BrowserHistory.ps1" -NoArchive -OutputPath "\\share\IR\TARGET.html" rem 3. Clean up — remove the tool folder from target psexec \\TARGET cmd /c "rmdir /S /Q C:\Windows\Temp\ZavetSec-BrowserHistory" ``` **远程执行注意事项:** - 当未检测到交互式桌面 (PsExec SYSTEM, WinRM) 时,`-OpenReport` 会被自动禁止 —— 无错误,仅记录跳过 - `$ScriptDir` 在所有上下文中正确解析:本地、PsExec、WinRM、计划任务 - xcopy 使用 `/E /I /Y` 会复制子目录、在目标不存在时创建目标、并抑制提示 —— 适用于脚本化 IR 工作流 - 对于通过网络传输的加密输出,省略 `-NoArchive` 并分别从目标获取 `.zip` 和密码 ## 📁 输出 **默认 (带存档):** ``` ZavetSec-BrowserHistory.ps1 HOSTNAME_20260324_093100.zip ← AES-256 encrypted, saved next to the script ``` 源 `.html` 和 `.csv` 在成功存档后删除。 **使用 `-NoArchive`:** ``` ZavetSec-BrowserHistory.ps1 HOSTNAME_20260324_093100.html HOSTNAME_20260324_093100.csv ← with -CsvExport ``` **CSV 列:** `UserName, Browser, Domain, Title, URL, Visits, LastVisit` ## ⚠️ 局限性 - **仅限实时获取** —— 从运行中的系统读取;不镜像或哈希源数据库文件 - **无证据保管链** —— 在法律语境中不能替代取证镜像 (FTK, dd, KAPE) - **仅限标准配置文件路径** —— 无法检测便携式浏览器安装或非默认配置文件位置 - **仅限 C:\ 盘** —— VSS Shadow Copy 针对系统驱动器;其他卷上的配置文件回退到直接复制 - **无删除检测** —— 不识别历史记录空白、SQLite 空闲页或反取证清理活动 - **正则回退是近似的** —— 无 `sqlite3.exe` 时,结果是从原始 SQLite 页面机会性恢复的,可能包含重复项或来自内部数据库结构的部分 URL ## ❓ 常见问题 **可以无管理员权限运行吗?** 可以 —— 脚本会运行并收集当前用户的配置文件。VSS 不可用,其他用户配置文件无法访问。完整收集需要管理员权限。 **浏览器正在运行且数据库被锁定 —— 仍然有效吗?** 是的,以管理员身份运行时。VSS Shadow Copy 从时间点快照读取数据库;锁定无关紧要。 **文件夹中有 7z.exe 但加密仍然失败?** 需要同时具备 `7z.exe` 和 `7z.dll`。`7z.dll` 提供编解码器支持 —— 缺少它,7-Zip 无法处理 ZIP 格式并会报错退出。请从 `C:\Program Files\7-Zip\` 复制这两个文件。 **为什么 `-MaxRecordsPerBrowser` 默认限制为 5000?** 默认值,旨在保持报告生成速度快、文件大小可控(针对拥有数年历史记录的机器)。使用 `-MaxRecordsPerBrowser 999999` 可收集所有内容。 **这与 ZavetSec Triage 有何关系?** `Invoke-ZavetSecTriage.ps1` 将浏览器历史记录作为模块 #14 包含在内,同时还有其他 17 个收集模块。本脚本是其独立版本 —— 当你仅需要浏览器证据,或运行完整取证分类不切实际时使用。 **能与 KAPE 并存吗?** 可以。在 KAPE 收集之前或同时运行。本脚本处理 KAPE 浏览器目标在实时系统上经常遇到的文件锁定问题。`-CsvExport` 输出可直接导入大多数时间线工具。 ## 🗺️ 路线图 - [ ] **🚧 可疑域名标记** ← *下一步* —— 在报告中内联标记已知的 C2 基础设施、钓鱼域名、剪贴板站点和云数据渗出目标,无需离开分析师工作站 - [ ] **IOC 导出** —— 一键将所有收集的域名和 URL 导出为扁平 IOC 列表,供 TIP / SIEM 摄取 - [ ] **Tor / 匿名器检测** —— 突出显示对 .onion 代理、匿名服务和 VPN 提供商页面的访问 - [ ] **时间线视图** —— 跨所有用户和浏览器的统一时间顺序视图,在单个可滚动时间线中展示 - [ ] **多驱动器 VSS** —— 将 Shadow Copy 获取扩展到 C:\ 以外 - [ ] **下载历史** —— 在浏览历史之外同时收集 Chromium 下载记录 ## 🤝 贡献 最有用的贡献: - **新浏览器路径** —— 如果某浏览器未被检测到,请开启一个 Issue 并附上其 `History` 或 `places.sqlite` 的路径 - **Bug 报告** —— 特定 Windows 版本、域配置或配置文件设置上的异常行为 - **可疑域名列表** —— 为计划中的标记功能策划的 C2、钓鱼和渗出域名列表 PR 要求:兼容 PowerShell 5.1,在真实 Windows 上测试,核心收集路径保持零依赖保证。 [开启一个 Issue](https://github.com/zavetsec/ZavetSec-BrowserHistory/issues) ## 📋 变更日志 ### v1.0 —— 初始发布 - VSS Shadow Copy —— 针对运行中浏览器的文件锁定绕过 - 16 种浏览器,通过注册表枚举所有本地用户配置文件 - 双重解析模式:完整 SQL (`sqlite3.exe`) 和正则回退 - 针对 Chromium (1601 Epoch) 和 Firefox (Unix Epoch) 的精确时间戳转换 - 通过 `7z.exe` + `7z.dll` 实现 AES-256 加密 ZIP —— 16位加密密码输出到控制台 - `-NoArchive` —— 针对无 7-Zip 环境的普通文件输出 - `-DateFrom` / `-DateTo` —— 收集级和报告级的日期范围过滤 - `-CsvExport` —— 与 HTML 并行的 CSV 输出 - `-Help` 开关 + 完整的 `Get-Help` 基于注释的文档 - 远程执行支持:可靠的 `$ScriptDir` 解析,非交互式会话中自动禁止 `-OpenReport` - `Write-Progress` + `[CmdletBinding()]` —— 控制台进度,`-Verbose` 支持 - HTML: 交互式报告 —— 搜索、过滤、排序、日期范围选择器、浏览器内 CSV 导出 - HTML: 访问计数迷你条、URL 和域名提示、浏览器图标、改进的对比度调色板 ## `>_` 免责声明
**ZavetSec** —— 为凌晨 2 点读日志的人打造的安全工具 [github.com/zavetsec](https://github.com/zavetsec) · MIT License
标签:AES-256, AI合规, HTML报告, HTTP工具, IPv6, Libemu, PowerShell, VSS, 加密封装, 卷影复制, 多模态安全, 库, 应急响应, 数字取证, 数据提取, 无依赖, 浏览器历史, 漏洞评估, 用户行为分析, 网络安全审计, 自动化脚本