Hindsight 浏览器取证 API 参考:用 Hindsight 解析 Chromium 数据库提取上网行为证据
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
本文是一份围绕 Hindsight 浏览器取证工具的实战技术指南,基于本仓库中 analyzing-browser-forensics-with-hindsight 技能的 API 参考文档 展开。它系统讲解 Hindsight CLI 的调用语法、浏览器类型与输出工件、Chrome 三大 SQLite 数据库(History、Cookies、Web Data)的取证查询、Chrome 时间戳换算、各平台浏览器配置文件路径以及访问过渡类型(Transition Types)的语义。读者读完可以独立完成一次完整的浏览器取证分析:从定位配置文件、运行 Hindsight、解读输出时间线,到用仓库自带的 process.py 与 agent.py 脚本直接解析取证镜像中的 Chrome 数据库,并将浏览器行为与系统时间线关联。
Hindsight 是什么:面向 Chromium 的统一时间线提取器
Hindsight 是一款开源浏览器取证工具,专门解析 Google Chrome 及其他基于 Chromium 内核的浏览器(Microsoft Edge、Brave、Opera、Vivaldi)产生的工件。它并非只读取单个数据库,而是从多个浏览器数据库文件中抽取并相互关联数据,最终生成一份统一的上网活动时间线(unified timeline)。
根据技能元数据,Hindsight 可解析的工件范围包括:URL 访问历史、下载历史、缓存记录、书签、自动填充记录、保存的密码、浏览器偏好(Preferences)、浏览器扩展、HTTP Cookie、Local Storage(HTML5 存储)、登录数据(Login Data)以及会话/标签页信息。输出格式支持 XLSX、JSON、SQLite,供调查人员在事件响应、内部威胁调查与刑事案件中重建用户的完整网络活动。
从本仓库技能映射看,该技能对应 NIST CSF 的 RS.AN-03、DE.AE-02、RS.MA-01,以及 MITRE ATT&CK 的 T1217(浏览器信息发现)、T1539(窃取 Web 会话 Cookie)、T1555.003(来自 Web 浏览器的凭证)、T1185(浏览器会话劫持),可用于验证安全监控覆盖范围。
使用前提与运行环境
在运行 Hindsight 之前需要满足以下前提(来自 SKILL.md):
- Python 3.8+,并已安装 Hindsight(
pip install pyhindsight); - 能访问取证镜像中的浏览器配置文件目录(Profile Directory);
- 浏览器配置文件数据未被操作系统级加密(否则需先解密或配合 DPAPI 相关技能);
- 用于结果分析的工具:Timeline Explorer 或任意电子表格应用(打开 XLSX)。
浏览器配置文件位置
Chrome 及各 Chromium 浏览器在各平台上的默认配置文件路径如下:
| 浏览器 | Windows 配置文件路径 |
|---|---|
| Chrome | %LOCALAPPDATA%\Google\Chrome\User Data\Default\ |
| Edge | %LOCALAPPDATA%\Microsoft\Edge\User Data\Default\ |
| Brave | %LOCALAPPDATA%\BraveSoftware\Brave-Browser\User Data\Default\ |
| Opera | %APPDATA%\Opera Software\Opera Stable\ |
| Vivaldi | %LOCALAPPDATA%\Vivaldi\User Data\Default\ |
| Chrome (macOS) | ~/Library/Application Support/Google/Chrome/Default/ |
| Chrome (Linux) | ~/.config/google-chrome/Default/ |
其中 Windows 与 Linux 路径在仓库的 agent.py 中也有对应实现——find_browser_profiles()会依次探测 Windows 的 Chrome/Edge/Brave 路径与 Linux 的google-chrome、chromium、microsoft-edge路径,并返回真实存在的配置目录,可作为自动化定位配置文件的参考实现。
Hindsight CLI 完整参考
命令语法
本 API 参考给出了 Hindsight 的命令行核心用法:
hindsight.py -i <profile_path> # 分析 Chrome 配置文件 hindsight.py -i <path> -o <output_dir> # 保存结果 hindsight.py -i <path> -f xlsx # 导出为 Excel hindsight.py -i <path> -f sqlite # 导出为 SQLite hindsight.py -i <path> -b <browser_type> # 指定浏览器类型支持的浏览器类型(-b 参数)
| 标志 | 浏览器 |
|---|---|
Chrome | Google Chrome |
Edge | Microsoft Edge (Chromium) |
Brave | Brave Browser |
Opera | Opera (Chromium) |
结合 SKILL.md 中的实战命令示例,完整用法还包括:
# 基本分析:指定取证镜像中的 Chrome 配置文件并输出结果目录 hindsight.exe -i "C:\Evidence\Users\suspect\AppData\Local\Google\Chrome\User Data\Default" -o C:\Output\chrome_analysis # 显式指定浏览器类型 hindsight.exe -i "/path/to/profile" -o /output/analysis -b Chrome # 输出 JSONL 格式 hindsight.exe -i "C:\Evidence\Chrome\Default" -o C:\Output\chrome --format jsonl # 启用缓存解析(更慢但更完整) hindsight.exe -i "C:\Evidence\Chrome\Default" -o C:\Output\chrome --cache参数要点说明:
-i指向的是浏览器配置文件目录(Default目录),而非单个数据库文件;Hindsight 会识别该目录下的History、Cookies、Web Data、Login Data、Bookmarks、Preferences等工件文件;-o指定报告输出目录;-f/--format控制输出格式,常用xlsx、sqlite、jsonl;--cache启用缓存解析,会显著增加耗时,但在需要恢复被删或未写入历史记录的缓存内容时不可或缺。
输出工件(Output Artifacts)
Hindsight 的输出时间线中包含以下关键表:
| 表 | 描述 |
|---|---|
urls | 带访问计数的浏览历史 |
downloads | 带来源 URL 的文件下载记录 |
cookies | Cookie 值、所属域名、过期时间 |
autofill | 表单自动填充条目 |
bookmarks | 已保存书签 |
preferences | 浏览器配置 |
local_storage | 站点本地存储数据 |
login_data | 已保存凭证的元数据 |
extensions | 已安装扩展及其权限 |
这些表与 SKILL.md 中的"关键工件文件"清单一一对应:
| 文件 | 内容 |
|---|---|
| History | URL 访问、下载、关键词搜索 |
| Cookies | 含域名、过期时间、值的 HTTP Cookie |
| Web Data | 自动填充条目、已保存的信用卡 |
| Login Data | 已保存的用户名/密码(加密) |
| Bookmarks | JSON 书签树 |
| Preferences | 浏览器配置与扩展 |
| Local Storage/ | 按域区分的 HTML5 Local Storage |
| Session Storage/ | 按域区分的会话存储 |
| Network Action Predictor | 之前输入过的 URL |
| Shortcuts | Omnibox 快捷方式与预测 |
| Top Sites | 高频访问站点 |
Chrome SQLite 数据库取证查询
浏览器取证的核心是对 SQLite 数据库的直接查询。下面给出本 API 参考中的三类核心数据库查询,可用于验证 Hindsight 输出或手动重建证据。
History 数据库(访问历史与下载)
-- 浏览历史 SELECT u.url, u.title, v.visit_time, v.transition FROM visits v JOIN urls u ON v.url = u.id ORDER BY v.visit_time DESC; -- 下载记录 SELECT target_path, tab_url, total_bytes, start_time, danger_type, mime_type FROM downloads ORDER BY start_time DESC;补充表结构说明(来自 SKILL.md):
urls表关键列:id, url, title, visit_count, typed_count, last_visit_time;visits表关键列:id, url, visit_time, from_visit, transition, segment_id;downloads表关键列:id, current_path, target_path, start_time, end_time, received_bytes, total_bytes, state, danger_type, interrupt_reason, url, referrer, tab_url, mime_type, original_mime_type。
transition字段低 8 位(transition & 0xFF)即"访问过渡类型",详见下文 Transition Types 一节;danger_type大于 0 表示下载被浏览器标记为危险,是排查恶意下载的重要线索。
Cookies 数据库
SELECT host_key, name, value, creation_utc, expires_utc, is_secure, is_httponly FROM cookies ORDER BY creation_utc DESC;Cookies 表扩展列:encrypted_value(加密后的值)、path、last_access_utc、has_expires、is_persistent、priority、samesite。需要强调的是,现代 Chrome 中 Cookie 的value列通常为空,实际值在encrypted_value中,需借助 Hindsight 或 DPAPI 解密能力才能还原会话令牌。
Web Data 数据库(自动填充)
SELECT name, value, count, date_created, date_last_used FROM autofill ORDER BY date_last_used DESC;注意:Web Data 中自动填充条目的date_created与date_last_used字段在较新版本 Chrome 中可能以秒为单位存储(与 History/Cookies 的微秒 FILETIME 不同),仓库 agent.py 的parse_autofill()在转换时对这两个字段乘以1000000再走标准时间戳换算,正是对这一差异的处理,可直接参考。
Chrome 时间戳转换(Chrome/WebKit 时间格式)
时间格式
Chrome 数据库中的时间戳(visit_time、creation_utc、expires_utc等)采用Windows FILETIME 基准:自 1601 年 1 月 1 日以来的微秒数(microseconds since January 1, 1601)。
Python 转换代码
import datetime def chrome_to_datetime(chrome_time): epoch = datetime.datetime(1601, 1, 1) return epoch + datetime.timedelta(microseconds=chrome_time)SQL 转换写法
若直接用 SQLite 查询,可转换为 Unix 时间戳(秒):
-- Chrome/WebKit 时间戳转可读时间 datetime((visit_time/1000000)-11644473600, 'unixepoch')其中11644473600是 1601-01-01 到 1970-01-01 之间的秒数差。仓库中 process.py 与 agent.py 的chrome_time_to_datetime()实现则额外处理了两种边界情况,值得在取证脚本中沿用:
def chrome_time_to_datetime(chrome_time): """Convert Chrome timestamp (microseconds since 1601-01-01) to datetime.""" if not chrome_time or chrome_time == 0: return None # 0 值时间戳视为无时间 try: epoch = datetime.datetime(1601, 1, 1) delta = datetime.timedelta(microseconds=chrome_time) return (epoch + delta).isoformat() + "Z" except (OverflowError, OSError): return None # 溢出或无效值安全返回不同浏览器的时间戳格式对照
来自 standards.md:
| 浏览器 | 时间戳格式 |
|---|---|
| Chrome/WebKit | 自 1601-01-01 UTC 起的微秒数 |
| Firefox/Mozilla | 自 Unix 纪元起的微秒数 |
| Safari/Mac | 自 2001-01-01 UTC 起的秒数 |
跨浏览器取证时必须分别换算,混用会导致时间线错位数百年。
访问过渡类型(Transition Types)
visits表中的transition字段记录了本次访问的成因,是区分"用户主动访问"与"程序自动导航"的关键证据。通过visit_transition & 0xFF取低 8 位核心类型:
| 值 | 类型 | 描述 |
|---|---|---|
| 0 | LINK | 点击链接进入 |
| 1 | TYPED | 在地址栏手动输入 URL |
| 2 | AUTO_BOOKMARK | 通过书签进入 |
| 3 | AUTO_SUBFRAME | 子框架导航 |
| 5 | GENERATED | 生成的访问(例如搜索结果页) |
| 7 | FORM_SUBMIT | 表单提交 |
| 8 | RELOAD | 页面刷新 |
取证解读示例:
TYPED (1)表示用户直接在地址栏输入,多为主动访问目标站点,而LINK (0)多为从某页面跳转;AUTO_SUBFRAME (3)通常由页面内嵌资源加载产生,对判断"用户是否真的访问过某内容"意义有限;FORM_SUBMIT (7)对应登录/搜索等表单提交动作,可与凭证窃取类攻击(T1555.003)关联。
仓库 agent.py 的parse_history()在查询中直接使用transition & 0xFF提取核心类型并输出到结果字典,可在自动化脚本中复刻。
用仓库脚本快速复现分析
除了 Hindsight 本身,本仓库提供了两个可独立运行的 Python 分析脚本,可以直接对取证镜像中的 Chrome 配置文件执行解析,用于快速复现和交叉验证。
process.py:最小化历史/下载提取
process.py 是精简版分析器,仅解析History数据库中的访问记录与下载记录,输出 JSON 报告:
python skills/analyzing-browser-forensics-with-hindsight/scripts/process.py <chrome_profile> <output>其核心特点:
- 以只读方式打开数据库(
sqlite3.connect(f"file:{history_db}?mode=ro", uri=True)),避免污染证据; - 访问记录取最近 2000 条,下载记录取最近 500 条;
- 输出
browser_forensics.json,包含visits、downloads数量统计与明细。
agent.py:覆盖历史/下载/Cookie/自动填充/扩展的完整分析
agent.py 是更完整的取证分析代理,覆盖五类工件解析:
python skills/analyzing-browser-forensics-with-hindsight/scripts/agent.py <profile_path> # 例:python agent.py ~/AppData/Local/Google/Chrome/User\ Data/Default各解析函数及对应数据库:
| 函数 | 解析内容 | 数据源 |
|---|---|---|
parse_history() | 访问历史(URL、标题、时间、过渡类型、访问计数) | History |
parse_downloads() | 下载记录(目标路径、来源 URL、大小、起止时间、danger_type、MIME) | History |
parse_cookies() | Cookie(域名、名称、路径、创建/过期时间、Secure/HttpOnly/SameSite) | Cookies或Network/Cookies |
parse_autofill() | 自动填充条目(字段名、值、使用次数、创建/最后使用时间) | Web Data |
parse_extensions() | 已安装扩展(ID、名称、版本、权限清单) | Extensions/*/manifest.json |
两个值得注意的实现细节:
- Cookie 路径兼容:较新版本 Chrome 将 Cookies 数据库移入
Network/子目录,parse_cookies()会先尝试根目录再回退到Network/Cookies; - 自动填充时间戳换算:
parse_autofill()对date_created/date_last_used乘以1000000再换算(秒 → 微秒),与 History/Cookies 保持同一时间基准。
可疑活动自动标记
agent.py 的detect_suspicious_activity()给出了自动化 IOC 命中逻辑,可直接借鉴用于调查:
- 可疑域名黑名单:
pastebin.com、ngrok.io、raw.githubusercontent.com、transfer.sh、file.io、temp.sh、anonfiles.com——命中即输出suspicious_url发现; - 危险 MIME 类型:
application/x-msdownload、application/x-msdos-program、application/x-executable、application/vnd.ms-excel.sheet.macroEnabled——命中即输出suspicious_mime; - 危险下载标记:
downloads.danger_type > 0时输出dangerous_download,与 Chrome 的安全浏览标记直接对应。
运行后终端会打印各工件数量与前若干条记录,以及可疑活动发现列表,适合在 SOC 场景下快速形成初步判断。
取证工作流与报告输出
标准分析流程
结合 workflows.md,一次完整的 Chrome 配置文件分析遵循如下步骤:
定位浏览器配置文件目录 | 对配置文件路径运行 Hindsight | 审阅生成的时间线(XLSX/JSON) | 分析 URL 历史中的可疑站点 | 检查下载中的恶意软件/被外泄数据 | 审阅 Cookie 中的会话劫持证据 | 检查自动填充与已保存凭证 | 将浏览器活动与系统时间线关联其中最后一步"与系统时间线关联"最为关键:浏览器历史中的某个下载动作应能与系统日志中的文件创建时间、进程执行时间互相印证,形成完整证据链。
报告模板
仓库提供了可直接套用的 浏览器取证报告模板,包含:
- 案件信息:案件编号、浏览器、配置文件路径;
- 活动汇总:URL 访问数、下载数、已保存密码数、Cookie 数;
- 值得关注的 URL 表:时间戳、URL、标题;
- 下载表:时间戳、文件、来源 URL、大小。
典型输出解读
以下是一个典型分析输出片段(来自 SKILL.md 的示例输出),展示如何从时间线中识别可疑行为模式:
[+] Parsing History database... URL records: 12,456 Download records: 234 Search terms: 567 [+] Parsing Cookies database... Cookie records: 8,923 Encrypted cookies: 6,712 [+] Parsing Web Data (Autofill)... Autofill entries: 1,234 Credit card entries: 2 (encrypted) [+] Parsing Login Data... Saved credentials: 45 (encrypted)时间线中值得警惕的组合模式:
- 短时间内先后访问
mega.nz、pastebin.com、transfer.sh等文件分享/匿名站点,配合可疑下载(如update_client.exe)指向数据外泄(Exfiltration)行为; - 直接访问
https://192.168.1.50:8443/admin之类的内网管理面板,结合TYPED过渡类型,可推断用户主动访问; - 会话 Cookie 出现在非预期域名(如
SESSION_ID对应.corporate.com),需结合 T1539(窃取 Web 会话 Cookie)评估会话劫持风险。
--- Downloads (Suspicious) --- 2024-01-15 14:33:15.000 Q4_Financial_Report.xlsm https://phish-domain.com/docs/report 245 KB 2024-01-15 14:34:02.000 update_client.exe https://cdn.evil-updates.com/client.exe 1.2 MB辅助工具与兼容性提示
根据 standards.md,浏览器取证生态中常与 Hindsight 搭配使用的工具包括:
- Hindsight:主分析工具,产出统一时间线;
- DB Browser for SQLite:直接检查 Chrome 各 SQLite 数据库结构(History、Cookies、Web Data、Login Data);
- ChromeCacheView(NirSoft):缓存分析,配合 Hindsight 的
--cache参数可交叉验证缓存中恢复的内容。
使用限制说明:
- 本技能面向Chromium 系浏览器(Chrome、Edge、Brave、Opera、Vivaldi);Firefox 使用不同的时间戳基准(Unix 微秒)与数据库结构,需用其他工具处理;
- 若浏览器配置文件受操作系统级加密保护(如 Windows 上使用 DPAPI 加密的登录数据与 Cookie),Hindsight 解析出的加密字段需配合 DPAPI 解密技能才能还原明文,这一点在 SKILL.md 的前置条件中已明确列出;
- 读取取证镜像中的数据库时务必使用只读模式(
mode=ro),仓库两个脚本均遵循这一证据保全要求。
小结
围绕 api-reference.md 这份核心参考,本文完整覆盖了 Hindsight CLI 语法与输出工件、Chrome 三大取证数据库的 SQL 查询、Chrome 微秒时间戳的双路转换(Python 与 SQL)、各平台配置文件路径、访问过渡类型语义,并引入仓库中的 process.py 与 agent.py 展示了从零实现浏览器取证解析的可行路径。无论是事件响应中重建攻击者行为、内部威胁调查中的违规取证,还是刑事案件中的上网行为还原,这套"CLI 工具 + SQLite 查询 + 时间戳换算 + 自动化标记"的组合都能形成可落地、可复现、可交叉验证的取证方法。
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考