首页/安全/取证与溯源速查/四类时间戳语义对照(ext4 与 NTFS)
溯源思路与流程68 条

四类时间戳语义对照(ext4 与 NTFS)

时间线分析的前提是分清每个时间戳的语义:修改、访问、元数据变更、创建各有触发条件,误读会导致事件顺序判断错误。

取证与溯源速查安全更新于 2026-10-13

先分清语义再排时间

同一条文件记录上通常挂着四类时间:内容修改、访问、元数据变更、创建。它们由不同动作触发,含义完全不同:读文件刷新访问时间,改权限或改名刷新元数据变更时间,只有写入内容才刷新修改时间。时间线分析的前提就是把语义分清,否则「文件在 03:20 被访问」会被误读成「文件在 03:20 被写入」,事件顺序直接错位。ext4 与 NTFS 对四类时间的实现细节还有差异,需要分别对待。

语义对照

语义ext4 字段NTFS 字段
内容修改mtime$STANDARD_INFORMATION 修改时间
访问时间atime$SI Access
元数据变更ctime$SI MFT Changed
创建时间crtime(支持有限,statx 暴露为 Birth)$SI Creation / $FN 创建时间

基本信息

适用平台ext4(Linux)、NTFS(Windows)两大类文件系统
读取方式stat/statx(Linux)、MFT 解析(NTFS,$SI 与 $FN 属性)
时间精度ext4 纳秒级(取决于内核与挂载选项),NTFS 100 纳秒
挂载影响noatime/relatime 会显著改变 atime 的更新行为
常见干扰复制、解压、杀毒扫描、备份工具都会刷新部分时间戳

典型使用场景

  • 判断文件是新建还是被修改:看创建时间与修改时间的相对关系
  • 解释「文件明明没变,修改时间却更新」的情况
  • 识别时间戳伪造:$SI 被改而 $FN 未同步
  • 评估 atime 可信度:先确认挂载参数是否禁用了访问时间更新
  • 把文件时间与日志事件对齐,确定操作先后顺序
  • 为清理动作找痕迹:删除后元数据变更时间往往停在被删那一刻

快速查看

快速查看
# ext4 上的四类时间,stat 会输出 Access / Modify / Change / Birth
stat /etc/passwd
# 只取关键字段,便于批量采集
stat -c '%n mtime=%y ctime=%z atime=%x birth=%w' /usr/bin/* 2>/dev/null | head
# 确认挂载选项:relatime 下 atime 不会每次读取都刷新
findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS -T /
# NTFS:$SI 时间可由工具改写,$FN 时间需解析 MFT 属性获取
# 两者不一致本身就是可疑信号,需用专门工具提取比对
复制、解压、扫描类操作都可能刷新访问或修改时间。判读时结合具体场景:备份任务跑过之后整目录 mtime 变化,通常与被入侵无关。反之,一个目录内绝大部分文件 mtime 高度一致,往往说明是被整体复制或解压产生的。
NTFS 的 $STANDARD_INFORMATION 时间容易被工具直接改写(俗称 timestomp),$FILE_NAME 属性的时间只在重命名等操作时更新,两组时间记录在 MFT 的不同属性里,出现明显不一致时应优先怀疑时间戳被篡改。
ext4 的创建时间支持与内核及文件系统特性有关,部分环境读出来为空或为零,不能据此断定文件「不存在创建时间」,需要结合 inode 内容与其他来源判断。

易错点

  • 把 ctime 当作创建时间:Linux 上 ctime 是 inode 元数据变更时间,创建时间要看 crtime/Birth,且并非所有文件系统都支持
  • 忽略挂载选项就采信 atime:noatime 与 relatime 下 atime 不可靠,据此判断「文件被读过」容易出错
  • 把访问时间当成写入时间,事件顺序判断反向,结论整段作废
  • 只读 $SI 时间组,忽略 $FN 的差异,漏掉时间戳被篡改的证据
  • 在源盘上执行 stat 之外的读取动作,扰动时间戳后再取证,失去可比对的基线

数据来源与参考

  • Linux stat man 手册
  • Microsoft Learn(NTFS 时间戳)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌