"这台计算机在 14:00 到 16:00 之间发生了什么"这类问题,绝大多数都可以仅凭 USN 日志直接回答,无需其他痕迹。这些记录不是系统调用日志,也没有按用户标签,但它们提供了几乎同样有用的东西:机器触及的每个文件、按操作粒度的高频记录。配上几次案件积累出的模式知识,你就能按 Office 保存、浏览器跳转、IDE 重建、午休的粒度还原行为。
本文是把日志当作行为时间线来读的实操指南。
为什么这能行
Windows 桌面上多数用户可见的动作都会产生可辨识的文件系统签名。点击 Word 的"保存",Word 会写入一个临时文件、原子地重命名,并在结果上发出 BasicInfoChange | Close。在 Chrome 中打开新标签页,磁盘缓存会追加。运行一次 npm install,几秒内会冒出上千个 package.json 文件。
这些签名没有写在任何 Microsoft 参考文档中。靠的是看实验环境主机的日志,与已知活动作对照学出来。下面是一个起步集合,按我在案件中遇到的频率排序。
实际中的 Office
当用户保存 Word、Excel 或 PowerPoint 文件时,你会看到:
FileCreate | Close ~$<filename>.docx (锁文件)
FileCreate | Close <filename>.tmp (原子 temp)
DataExtend | Close <filename>.tmp × N
RenameOldName | Close <filename>.docx
FileDelete | Close <filename>.docx
RenameNewName | Close <filename>.docx (原为 <filename>.tmp)
FileDelete | Close ~$<filename>.docx
BasicInfoChange | Close <filename>.docx
~$ 锁文件是 Office "文档正打开"的信号。它的 FileCreate 和 FileDelete 精确地界定了打开/关闭窗口。.tmp 到 .docx 的原子重命名就是保存本身。最后的 BasicInfoChange 是新文件在关闭时被打上 mtime。
我在每个案件里都用的转视角技巧:过滤文件名以 ~$ 开头的 FileCreate 记录。它给你窗口内用户打开过的每个 Office 文档。再减去同名的 FileDelete,你就拿到了取证时仍处于打开状态的文档 — 在活动捕获中,对应着镜像化时刻用户正在打开的文档。这一点已经被写进多份报告,作为"我们走进去那一刻用户到底在做什么"的答案。
浏览器活动
现代浏览器维护着重型的文件系统缓存。Chrome 和 Edge 使用 \Users\<u>\AppData\Local\<browser>\User Data\Default\Cache\Cache_Data\(还有 Code Cache\)。Firefox 使用 \Users\<u>\AppData\Local\Mozilla\Firefox\Profiles\<id>\cache2\。浏览过程中:
- 缓存目录里持续的低速率
FileCreate | Close和DataExtend | Close。 - 偶尔的
FileDelete | Close,因为 LRU 在驱逐旧条目。 - 每隔几分钟,缓存文件因索引压缩出现
RenameNewName。
缓存写入爆发与访问富媒体或单页应用相关。安静时段对应用户离开或处于长加载的页面。活跃的视频播放呈现不同的形状 — 在单一缓存文件上出现大且持续的 DataExtend,而非许多小的 create。
缓存文件名不编码 URL。要拿 URL,转到浏览器自身的 SQLite 数据库,参见 浏览器取证工具。日志的贡献是节奏 — 表明用户在某个窗口内活跃地浏览 — 加上对有意下载在 \Users\<u>\Downloads\ 中明确的 FileCreate 事件。
编码活动
如果用户是开发者,IDE 与构建工具的活动会产生非常有特色的爆发:
- Webpack、Vite、Turbopack — 在
node_modules\.cache\、node_modules\.vite\、.next\与dist\中大量FileCreate。一次构建几百个。 - Visual Studio C++ — 在
Debug\或Release\子树中.obj与.pdb文件的FileCreate。 - Cargo(Rust) — 增量构建大量触及
target\debug\incremental\;完整构建还会触及target\debug\deps\。 - Go — 在
$GOPATH\pkg\与\Users\<u>\AppData\Local\go-build\下的构建缓存出现短而密集的爆发。 npm install与yarn install— 数十秒内在node_modules\下产生数千条FileCreate记录。日志中最吵的单一用户活动。
node_modules\ 里 5 分钟的 FileCreate 爆发,后面跟一群对 dist\bundle.js 的 DataExtend,意思是"跑了构建,然后开发服务器热重载了"。请阅读下面的排除章节 — 在非开发分析中,如果不把它们过滤掉,会淹没其他一切。
下载与安装
通过 Chrome 的直接下载:
FileCreate | Close \Users\<u>\Downloads\<file>.crdownload
DataExtend | Close \Users\<u>\Downloads\<file>.crdownload × N
RenameNewName | Close \Users\<u>\Downloads\<file>
BasicInfoChange | Close \Users\<u>\Downloads\<file>
Firefox 用 .part,Edge 用 .download。结尾的原子重命名让文件在资源管理器和其他读取器中显示为"已完成"。
新程序的安装通常表现为:在 Downloads 中安装包(.exe、.msi、.appx)的 FileCreate,然后是在 \Program Files\、\Program Files (x86)\ 或 \Users\<u>\AppData\Local\Programs\ 下一波 FileCreate 记录。分钟级直方图能轻松识别安装。再用 AmCache 和 Prefetch 对执行端做交叉参照。
总装:日次时间线食谱
"今天用户做了什么"报告的食谱:
- 抓取用户当天的解析过日志。限制到解析路径以
\Users\<u>\(目标用户)开头的记录。这消除了通常占主导的 Windows Update、系统缓存和操作系统噪声。 - 按每 10 分钟一桶统计:
FileCreate、DataExtend、BasicInfoChange的计数。 - 绘制三条序列。形状告诉你大致活动:
- 高 create 加高 extend。 写或保存内容。
- 仅高
BasicInfoChange。 浏览、滚动、Office 或编辑器在轻度编辑文件而无明显写入。 - 高 extend 低 create。 大文件下载或媒体播放。
Cache\路径下持续的 create。 浏览。node_modules\或target\或Debug\下持续的 create。 编程。
- 检查每个桶中前五的文件名,为尖峰打标。Office 文件名和
~$锁文件是绝佳锚点。缓存文件名通常可忽略。
本页解析器在其时间线组件中公开了分钟级直方图。点击柱子会把表格过滤到该窗口 — 这就是上面流程的"不写代码"版。
要做归因 — 是 哪个 用户在键盘前 — 把日志时间线与 EVTX 解析器 中 Security.evtx 的 4624 交互式登录(LogonType=2)与 4647 用户发起的注销配对。这界定会话边界,并给活动一个名字。
排除项与陷阱
备份与 AV 扫描 会产生表面上像用户活动的全卷 BasicInfoChange 爆发。它们遵循计划时间,访问所有目录而非聚焦于某个子树。容易通过路径覆盖识别并排除。
同步代理(OneDrive、Dropbox、Google Drive Backup and Sync)产生看起来像用户活动的日志流量,但那是代理自己的工作。要看用户发起的活动,过滤到同步文件夹之外的记录;要看 外泄文章 中记录的云外泄模式,就特别在同步文件夹内查看。
后台索引器。 SearchIndexer.exe 触碰 \Users\<u>\AppData\Roaming\Microsoft\Windows\Recent\ 和 \ProgramData\Microsoft\Search\ 中的文件。MsMpEng.exe(Defender)扫描时会产生 BasicInfoChange 事件。两者都容易归入系统噪声。
Chrome Software Reporter、Edge 更新器、Windows Update。 都会在 \Program Files\ 与 \Windows\SoftwareDistribution\ 下产生可预测的 FileCreate 和 DataExtend 爆发。按路径过滤。
node_modules\ 等构建产物会主导任何含它们的时间线。对非开发场景,按路径前缀排除 node_modules\、target\、Debug\、Release\、obj\、bin\、.next\、dist\、build\。
日志无法还原的内容
- 用户身份。 把时间戳与
Security.evtx4624登录关联。 - 用户访问过的 URL。 这些由浏览器历史数据库保存 — 日志只知道缓存写入节奏。
- 任何文件的内容。 只有元数据。
- 环形缓冲区窗口之外的任何东西。 32 MB 的
$J在桌面机上覆盖几天。更早的内容这份痕迹里已经没了;需要更远的回溯就拉 Shadow Copies 和$LogFile。
对"X 到 Y 之间用户在做什么"问题的 80%,$J 与 $MFT 配合可以直接回答。剩下 20% 需要 Sysmon、EVTX、用于应用级网络与 CPU 使用的 SRUM,以及合格的 super-timeline。
延伸阅读
- Plaso (
log2timeline) — 经典的 super-timeline 工具,可以摄入解析过的 USN 日志,并把它与每一种其他 Windows 时间线痕迹合并为一份可排序视图。 - SANS DFIR — Windows Forensic Analysis 海报 是单页参考,告诉你哪个痕迹回答哪个用户活动问题。
- Velociraptor 的 artifact exchange — 多个社区工件结合了 USN、MFT 与 EVTX 等上文所述的关联。