i'tong一直想搞清楚文档的时间属性,这几天看到sans海报中专门列出了windows 时间规则,对文档的各种时间属性分析的比较细致。
https://cyberforensicator.com/2018/03/25/windows-10-time-rules/这篇文章进一步对win10的时间规则进行了实验,做了一些修正。见下图:
下面我们就来跟着做下实验验证下结果, 实验系统:win10 版本号19041.450,NTFS,ssd 硬盘。
今天我们就先从修改文件名对时间戳的影响开始分析吧!
1.哪些和时间有关的属性?
通常用户在Windows资源管理器中看到的时间属性是3个,就像下图:created(创建时间),modified(修改时间),accessed(访问时间)。
当然对于word文档这种复合文档,还可以看到文件中带有的创建和最后保存时间,但这和操作系统没有关系,不管文档拷贝到哪里,只和word本身携带的时间戳有关。
顺便说一句如果把word文档的后缀改为.zip然后解压缩,就能找到一个core.xml文件,里面就记录了文档的创建和修改时间。
作为电子数据取证人员,要了解的是8个而不仅是3个显性的时间戳。那么到底是哪8个呢?
Windows系统为一个文件处理四种不同类型的时间戳,一般称为MACB,也就是:修改(Modified)进入(Accessed)修改(Changed)($MFT记录修改)出生(Birth)(文件创建时间)NTFS卷上每个文件由主控文件表(MFT)记录来表述。MFT是由一个个属性体组成,每个属性体都有一个对应的属性名。如0x10类型的属性表示标准属性,这个属性记录着文件的基本信息。
MFT属性类型值(16进制) | MFT属性名 | 描述 |
10 | $STANDARD_IFORMATION | 标准属性,包含文件的基本属性,只读创建时间、最后访问时间等属性。 |
20 | $ATTRIBUTE_LIST | 属性列表 |
30 | $FILE_NAME | 文件名属性(UNICODE编码) |
40 | $OBJECT_ID | 对象ID属性,文件或目录的16字节唯一标志 |
50 | $SECURITY_DESCRIPTOR | 安全描述符属性,文件的访问控制安全属性 |
60 | $VOLUME_NAME | 卷名属性 |
70 | $VOLUME_INFORMATION | 卷信息属性 |
80 | $DATA | 文件的数据属性 |
90 | $INDEX_ROOT | 索引根属性 |
A0 | $INDEX_ALLOCATION | 是90属性的扩展版(90属性只能在MFT内记录文件列表,A0属性将文件列表记录到数据区可以记录更多的文件) |
B0 | $BITMAP | 位图属性 |
C0 | $REPARSE_POINT | 重解析点属性 |
D0 | $EA_INFORMATION | 扩展属性信息 |
E0 | $EA | 扩展属性 |
100 | $LOGGED_UTILITY_STREAM | EFS加密属性 |
每个文件的MFT记录有若干属性,其中与时间密切相关的是$STANDARD_INFO和$FILE_NAME。两者都包含一组4个时间戳——MACB,一共正好8个。$STANDARD_INFO可以由用户级进程修改,但是$FILE_NAME只能由系统内核修改。可以用winhex找到文件的MFT记录,然后选择菜单栏视图(view)->模板管理(template manager),winhex默认模板中就有NTFSFILE Record模板,点击应用,就可以更方便的查看各项属性,这样就能非常直观的看到我们最关心的8个时间戳了。
还要注意的是,上图显示的时间是UTC(世界标准时间),中国与UTC的时差为+8,换算成北京时间要加8小时。
2.只修改文件名会影响哪些时间戳?
正式开始实验,我们创建完word文件后,只修改文件名,查看会影响哪些时间戳。
上图显示改名前后,Accessed时间戳发生了变化
上图显示,改名前后文档自身的时间戳不变
上图显示,改名前后accessed时间戳发生了改变。
上图是用winhex查看文件记录的结果,和前面SANS和 cyberforensicator的实验结果对比发现,有三个时间戳都发生了变化。$STANDARD_INFO和$FILE_NAME最后访问时间戳都发生了变化,到底为什么会出现这种情况?
一开始觉得是系统版本的问题,win7都不变,后来发现win10同版本号的系统也会有的变有的不变。后来还考虑是不是硬盘的问题呢?
最后,在大牛的帮助下终于知道原因了!原来就是系统Last Access(最后访问) 时间戳设置是否更新造成的。
3.Last Access(最后访问) 时间戳
最后访问时间戳显示了NTFS卷上每个文件和文件夹最后访问的更新时间。在旧的Windows版本中,可以启用或禁用最后访问时间戳功能。禁用它可以减少日志更新到文件和目录的最后访问时间戳的影响,并提高文件和目录访问的速度。新版本的Windows10(Windows 10 version 1803以上)支持四种不同的模式,可以设置是否禁用。四种模式是:用户管理,最后访问更新启用用户管理,禁用最后访问更新系统管理,最后访问更新启用(默认开启)系统管理,禁用最后访问更新 在系统管理模式下,NTFS驱动程序可以在引导期间启用或禁用“Last Access”更新(特别是当系统卷被挂载时)。当系统卷(通常挂载为“C:”驱动器)的大小为128 GB或更小时,“Last Access”更新为NTFS卷启用。如果系统卷较大,则禁用“Last Access”更新。在用户管理模式下,系统在引导期间不会修改“LastAccess”更新的状态,无论卷大小如何。“最后访问”将按照用户设置保持启用或禁用。设置“系统管理,最后访问更新禁用”模式将完全禁用NTFS的最后访问时间戳功能。 开启或关闭最后访问时间戳,可以通过注册表或者通过工具 (如fsutil)修改。在注册表找到Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisableLastAccessUpdate键值,看到我的系统这一键值默认是80000002。
不同键值代表的含义是:80000000(十六进制)=用户管理,最后访问更新启用80000001(十六进制)=用户管理,最后访问更新禁用80000002(十六进制)=系统管理,最后访问更新启用80000003(十六进制)=系统管理,最后访问更新禁用
实验结论,只修改文件的文件名会改变$STANDARD_INFO属性的$MFT表记录修改时间戳,但会不会造成accesss时间戳的变化,要看系统Last Access(最后访问) 时间戳的设置。
看来SANS的windows Time Rules还要加一些前提条件,后续我们再一一进行实验。
参考: https://winaero.com/blog/disable-ntfs-last-access-time-updates-in-windows-10/https://www.groovypost.com/howto/microsoft/enable-last-access-time-stamp-to-files-folder-windows-7/https://cyberforensicator.com/2018/03/25/windows-10-time-rules/ https://forensixchange.com/posts/19_04_22_win10_ntfs_time_rules/