天天看点

bat获取文件修改时间_windows时间规则实验1:修改文件名

i'tong一直想搞清楚文档的时间属性,这几天看到sans海报中专门列出了windows 时间规则,对文档的各种时间属性分析的比较细致。

bat获取文件修改时间_windows时间规则实验1:修改文件名

https://cyberforensicator.com/2018/03/25/windows-10-time-rules/这篇文章进一步对win10的时间规则进行了实验,做了一些修正。见下图:

bat获取文件修改时间_windows时间规则实验1:修改文件名

下面我们就来跟着做下实验验证下结果, 实验系统:win10  版本号19041.450,NTFS,ssd 硬盘。

今天我们就先从修改文件名对时间戳的影响开始分析吧!

1.哪些和时间有关的属性?

通常用户在Windows资源管理器中看到的时间属性是3个,就像下图:created(创建时间),modified(修改时间),accessed(访问时间)。

bat获取文件修改时间_windows时间规则实验1:修改文件名

当然对于word文档这种复合文档,还可以看到文件中带有的创建和最后保存时间,但这和操作系统没有关系,不管文档拷贝到哪里,只和word本身携带的时间戳有关。

bat获取文件修改时间_windows时间规则实验1:修改文件名

顺便说一句如果把word文档的后缀改为.zip然后解压缩,就能找到一个core.xml文件,里面就记录了文档的创建和修改时间。

bat获取文件修改时间_windows时间规则实验1:修改文件名

作为电子数据取证人员,要了解的是8个而不仅是3个显性的时间戳。那么到底是哪8个呢?

Windows系统为一个文件处理四种不同类型的时间戳,一般称为MACB,也就是:修改(Modified)进入(Accessed)修改(Changed)($MFT记录修改)出生(Birth)(文件创建时间)NTFS卷上每个文件由主控文件表(MFT)记录来表述。MFT是由一个个属性体组成,每个属性体都有一个对应的属性名。如0x10类型的属性表示标准属性,这个属性记录着文件的基本信息。 

bat获取文件修改时间_windows时间规则实验1:修改文件名
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个时间戳了。

bat获取文件修改时间_windows时间规则实验1:修改文件名
bat获取文件修改时间_windows时间规则实验1:修改文件名

还要注意的是,上图显示的时间是UTC(世界标准时间),中国与UTC的时差为+8,换算成北京时间要加8小时。 

2.只修改文件名会影响哪些时间戳?

正式开始实验,我们创建完word文件后,只修改文件名,查看会影响哪些时间戳。

bat获取文件修改时间_windows时间规则实验1:修改文件名

上图显示改名前后,Accessed时间戳发生了变化

bat获取文件修改时间_windows时间规则实验1:修改文件名

上图显示,改名前后文档自身的时间戳不变

bat获取文件修改时间_windows时间规则实验1:修改文件名

上图显示,改名前后accessed时间戳发生了改变。

bat获取文件修改时间_windows时间规则实验1:修改文件名

上图是用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。 

bat获取文件修改时间_windows时间规则实验1:修改文件名

  不同键值代表的含义是: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/ 

继续阅读