1. 背景与取证价值
在 Windows 应急响应和主机取证中,浏览器历史记录是一个很有价值的数据源。它通常可以帮助回答这些问题:
用户近期访问过哪些可疑域名、URL 或 Web 服务。
是否访问过钓鱼页面、WebShell 管理页面、内网后台、远程控制面板或临时文件分享页面。
可疑文件是否来自浏览器下载。
下载文件保存到了哪里,下载来源 URL 和来源页面是什么。
某个访问行为发生在什么时间。
浏览器访问时间能否和进程、文件、事件日志、Prefetch、网络连接等证据互相印证。
浏览器记录本身不等于恶意结论,但它很适合用来还原用户行为和攻击链。例如:
下载记录中的保存路径,可以对应文件系统中的可疑文件。
文件创建时间,可以和下载记录时间互相验证。
访问 URL,可以和 DNS、代理、EDR、网关日志互相验证。
浏览器进程运行时间,可以和 Prefetch 或进程记录互相验证。
可疑文件运行时间,可以继续关联自启动项、服务、计划任务等持久化痕迹。
所以,浏览器历史记录更适合作为证据链中的一环,而不是单独作为处置结论。
2. Chromium 系浏览器
Edge、Chrome、QQ 浏览器、夸克、搜狗、360、2345 等大量浏览器都基于 Chromium 或使用类似的数据目录结构。
Chromium 系浏览器的历史记录通常保存在 SQLite 数据库中,文件名一般为:
History常见 Profile 名称包括:
Default
Profile 1
Profile 22.1 常见数据库路径
以下路径为本次整理过程中确认过的 Windows 路径。不同版本或定制安装环境可能会变化,但整体目录规律基本一致。
路径中的 <Profile> 需要按实际目录替换,例如:
Default
Profile 1
Profile 22.2 访问记录表结构
Chromium 访问记录主要涉及两张表:
urlsvisits
核心关联关系:
visits.url = urls.id常用字段:
典型查询思路:
SELECT
visits.visit_time,
urls.title,
urls.url,
urls.visit_count,
urls.last_visit_time
FROM visits
JOIN urls ON urls.id = visits.url
WHERE urls.url LIKE ?
ORDER BY visits.visit_time DESC
LIMIT ?;
这里需要区分:
urls.last_visit_time:该 URL 的最后访问时间。visits.visit_time:某一次具体访问的时间。
如果目标是还原时间线,应该优先使用 visits.visit_time。
2.3 下载记录表结构
Chromium 下载记录通常涉及:
downloadsdownloads_url_chains
常用字段:
不同 Chromium 版本的 downloads 表字段可能存在差异。比如有的版本存在 target_path,有的版本主要依赖 current_path;来源页面字段也可能随版本变化。
典型查询思路:
SELECT
downloads.start_time,
final_url.url AS download_url,
downloads.target_path,
downloads.current_path,
downloads.tab_url,
downloads.total_bytes,
downloads.received_bytes,
downloads.state
FROM downloads
LEFT JOIN (
SELECT
c.id,
c.url
FROM downloads_url_chains c
WHERE c.chain_index = (
SELECT MAX(c2.chain_index)
FROM downloads_url_chains c2
WHERE c2.id = c.id
)
) final_url ON final_url.id = downloads.id
WHERE
final_url.url LIKE ?
OR downloads.target_path LIKE ?
OR downloads.current_path LIKE ?
ORDER BY downloads.start_time DESC
LIMIT ?;
分析时建议:
保存路径优先看
target_path。没有
target_path时看current_path。下载 URL 从
downloads_url_chains中按chain_index取最终 URL。来源页面优先看
tab_url,如果没有再看其他 referrer 类字段。
2.4 Chromium 时间戳
Chromium 使用的是 WebKit / Chrome 时间:
从 1601-01-01 00:00:00 UTC 开始的微秒数转换为 Unix 微秒时,需要减去固定偏移:
unix_microseconds = chromium_microseconds - 11644473600000000再按本地时区格式化为可读时间。
2.5 Chromium 提取注意点
Chromium 系浏览器提取分析时需要注意:
同一台机器可能有多个用户目录。
同一浏览器可能有多个 Profile。
国产浏览器路径可能和 Chrome / Edge 不完全一致。
History数据库可能被浏览器进程占用。最新记录可能还在 WAL 文件中,单独复制
History可能不完整。下载记录字段在不同版本间可能存在差异,需要动态判断表结构。
3. Firefox 浏览器
Firefox 不使用 Chromium 的 History 数据库,而是使用:
places.sqlite这个数据库保存浏览历史、书签、访问次数等信息。
3.1 常见数据库路径
Firefox Profile 名称通常不是固定格式,例如:
i4qenfgl.default-release
abcd1234.default因此检测 Firefox 记录时,不适合只匹配 Default 或 Profile *,而应该枚举 Profiles 目录下所有包含 places.sqlite 的目录。
3.2 访问记录表结构
Firefox 访问记录主要涉及:
moz_placesmoz_historyvisits
核心关联关系:
moz_historyvisits.place_id = moz_places.id常用字段:
典型查询思路:
SELECT
moz_historyvisits.visit_date,
moz_places.title,
moz_places.url,
moz_places.visit_count,
moz_places.last_visit_date
FROM moz_historyvisits
JOIN moz_places ON moz_places.id = moz_historyvisits.place_id
WHERE moz_places.url LIKE ?
ORDER BY moz_historyvisits.visit_date DESC
LIMIT ?;
Firefox 的访问记录结构相对清晰,主要注意时间戳格式与 Chromium 不同。
3.3 下载记录表结构
Firefox 下载记录比访问记录复杂,不同版本之间也存在变化。
较常见的一种方式是通过注解表保存下载信息:
moz_annosmoz_anno_attributesmoz_places
常见注解名称:
downloads/destinationFileURI
downloads/metaData其中:
downloads/destinationFileURI可能保存下载后的本地文件 URI。downloads/metaData可能保存 JSON 格式的下载元数据。下载 URL 可以从关联的
moz_places.url获取。
典型查询思路:
SELECT
COALESCE(dest.dateAdded, meta.dateAdded, moz_places.last_visit_date) AS download_time,
moz_places.url AS download_url,
dest.content AS destination_uri,
meta.content AS metadata,
moz_places.title
FROM moz_places
JOIN moz_annos dest
ON dest.place_id = moz_places.id
AND dest.anno_attribute_id = (
SELECT id
FROM moz_anno_attributes
WHERE name = 'downloads/destinationFileURI'
LIMIT 1
)
LEFT JOIN moz_annos meta
ON meta.place_id = moz_places.id
AND meta.anno_attribute_id = (
SELECT id
FROM moz_anno_attributes
WHERE name = 'downloads/metaData'
LIMIT 1
)
WHERE moz_places.url LIKE ?
ORDER BY download_time DESC
LIMIT ?;
示例:
file:///C:/Users/test/Downloads/example.zip需要转换为本地路径:
C:\Users\test\Downloads\example.zipFirefox 下载记录不如 Chromium 下载记录稳定。如果目标版本缺少相关注解表或字段,不能简单认为没有下载行为,只能说明当前方式没有提取到。
3.4 Firefox 时间戳
Firefox 常见历史记录字段使用的是 Unix 微秒:
从 1970-01-01 00:00:00 UTC 开始的微秒数例如:
moz_historyvisits.visit_datemoz_places.last_visit_date
和 Chromium 混合分析时,建议统一转换为同一种内部时间格式,再做排序和时间线关联。
3.5 Firefox 提取注意点
Firefox 提取分析时需要注意:
Profile 目录名称不固定。
访问记录和下载记录的稳定性不同,访问记录更容易提取。
下载记录可能和版本、配置、隐私设置有关。
places.sqlite也可能被浏览器占用。
参考链接: