渗透技巧——Windows 下 NTFS 文件的时间属性

发布于 2024-09-01 23:11:17 字数 6461 浏览 15 评论 0

0x00 前言

在渗透测试中,如果需要在目标系统上释放文件,将会改变父目录的时间属性 (AccessTime,LastWriteTime,MFTChangeTime),如果需要覆盖目标系统上原有的文件,也会改变原有文件的时间属性 (CreateTime,AccessTime,LastWriteTime,MFTChangeTime)

站在渗透的角度,需要找到修改文件时间属性的方法,用来消除痕迹

站在取证的角度,通过文件属性的异常能够找到攻击者的入侵痕迹

本文将会介绍修改文件属性的方法和细节,分享实现代码,结合利用思路给出在取证上的建议

0x01 简介

本文将要介绍以下内容:

  • 基本概念
  • 读取文件属性的方法
  • 修改文件属性的方法
  • 分享代码
  • 利用思路
  • 取证建议

0x02 基本概念

1、NTFS 文件系统中的时间属性

包括以下四个:

  • CreateTime(Created)
  • AccessTime(Accessed)
  • LastWriteTime(Modified)
  • MFTChangeTime

前三个可通过 右键 -> Properties 获得,如下图

Alt text

无法直接查看 MFTChangeTime

MFTChangeTime 记录 MFT(Master File Table) 的修改时间,如果文件属性变化,就会更新 MFTChangeTime

2、读取 MFTChangeTime 的方法

(1) 通过 NtQueryInformationFile 读取

注:

通过 WinAPI GetFileTime 无法获得

(2) 解析 NTFS 文件格式

Master File Table 中的 $STANDARD_INFORMATION (偏移 0x10) 和 $FILE_NAME (偏移 0x30) 包含完整的文件属性

3、Win7 系统默认 CreateTime 和 AccessTime 保持一致

Win7 系统(以及更高版本) 默认设置下,禁用了 AccessTime 的更新

也就是说,只读取文件的操作不会改变文件属性 AccessTime,AccessTime 同 CreateTime 保持一致,这是为了减少硬盘的读写

对应注册表位置 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem ,键值 NtfsDisableLastAccessUpdate

数值 1 代表禁用,为默认配置,数值 0 代表开启,修改注册表后重启系统才能生效

4、文件属性的变化规律

  • 读取文件:不会改变文件属性
  • 覆盖文件:改变 4 个属性

5、文件夹属性的变化规律

新建文件/删除文件/重命名文件:

改变父文件夹的 AccessTime,LastWriteTime 和 MFTChangeTime

  • 读取文件:不会改变文件属性
  • 覆盖文件:不会改变文件属性

可借助 SetMace 进行测试,下载地址:https://github.com/jschicht/SetMace

0x03 读取和修改文件属性的方法

1、使用 WinAPI GetFileTime 和 SetFileTime

能够操作三个文件属性:

  • CreateTime(Created)
  • AccessTime(Accessed)
  • LastWriteTime(Modified)

无法对 MFTChangeTime 进行操作

(1) GetFileTime 的使用

  • 通过 GetFileTime() 获得 FileTime
  • 通过 FileTimeToSystemTime() 将 FileTime 转换为 SystemTime,即 UTC,同一标准
  • 通过 SystemTimeToTzSpecificLocalTime() 将 SystemTime 转换为 LocalTime,即 UTC 加上时区,考虑时区的影响,同当前系统显示的时间保持一致

(2) SetFileTime 的使用

  • 通过 sscanf() 将输入的时间数据转换为 SystemTime
  • 通过 SystemTimeToFileTime() 将 SystemTime 转换为 FileTime
  • 通过 LocalFileTimeToFileTime() 将 FileTime 转换为对应 UTC 的 FILETIME,即 FILETIME 加上时区,考虑时区的影响,同当前系统显示的时间保持一致

实现代码已开源,下载地址:

https://github.com/3gstudent/Homework-of-C-Language/blob/master/FileTimeControl_WinAPI.cpp

代码实现了以下功能:

  • 查看文件/文件夹的时间(CreateTime,AccessTime,LastWriteTime)
  • 修改文件/文件夹的时间
  • 将文件 A 的时间复制到文件 B

2、使用 NtQueryInformationFile 和 NtSetInformationFile

能够操作四个文件属性:

  • CreateTime(Created)
  • AccessTime(Accessed)
  • LastWriteTime(Modified)
  • MFTChangeTime

我在实现上直接引用了 Metasploit 中 timestomp 的代码,地址如下:https://github.com/rapid7/meterpreter/blob/master/source/extensions/priv/server/timestomp.c

添加了部分功能,下载地址:https://github.com/3gstudent/Homework-of-C-Language/blob/master/FileTimeControl_NTAPI.cpp

代码实现了以下功能:

  • 查看文件的时间(CreateTime,AccessTime,LastWriteTime,MFTChangeTime)
  • 修改文件的时间
  • 将文件 A 的时间复制到文件 B
  • 将时间设置为最小值(1601-01-01 00:00:00)

注:

暂时不支持对文件夹的操作

3、使用驱动文件

(1) SetMace

可供参考的下载地址:https://github.com/jschicht/SetMace

SetMace 能够正常读取文件和文件夹的时间信息(包括 MFTChangeTime)

但无法修改时间信息,这是因为自 nt6.x 开始,Windows 禁止加载未经签名的驱动文件,如果能够绕过驱动保护,就能修改时间信息

(2) WinHex

付费版的 WinHex 支持对硬盘文件的写入操作,可以用来修改时间信息

补充、文件资源克隆

通过 powershell 实现自动化调用 Resource Hacker,对可执行文件(exe,dll,scr 等) 的资源信息进行克隆

下载地址:https://github.com/threatexpress/metatwin

注:这个工具不会修改文件属性

0x04 利用思路

1、在目标系统上释放文件

将会改变父目录的时间属性(AccessTime,LastWriteTime,MFTChangeTime)

可以使用 SetMace 查看属性的变化

修改文件夹的时间属性可使用 0x03 中的 FileTimeControl_WinAPI ,能够修改以下三项内容:

  • CreateTime(Created)
  • AccessTime(Accessed)
  • LastWriteTime(Modified)

想要进一步清除操作痕迹,需要借助 WinHex 修改 Master File Table 中的 $STANDARD_INFORMATION (偏移 0x10) 和 $FILE_NAME (偏移 0x30)

2、覆盖目标系统上原有的文件

将会改变原有文件的时间属性 (CreateTime,AccessTime,LastWriteTime,MFTChangeTime)

可以使用 FileTimeControl_NTAPI 读取和修改时间属性

想要进一步清除操作痕迹,需要借助 WinHex 修改 Master File Table 中的 $STANDARD_INFORMATION (偏移 0x10) 和 $FILE_NAME (偏移 0x30)

0x05 取证建议

1、查看文件/文件夹的时间属性 MFTChangeTime,位于两个位置:

  • Master File Table 中的 $STANDARD_INFORMATION (偏移 0x10)
  • Master File Table 中的 $FILE_NAME (偏移 0x30)

如果 MFTChangeTime 存在异常(时间晚于其他三个),一般情况下可认为该文件被非法修改

可使用工具 SetMace

0x06 小结

本文介绍了修改文件属性的方法和细节,分享两个实现代码( FileTimeControl_WinAPIFileTimeControl_NTAPI ),结合利用思路给出在取证上的建议。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

橘和柠

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

末蓝

文章 0 评论 0

年少掌心

文章 0 评论 0

党海生

文章 0 评论 0

飞翔的企鹅

文章 0 评论 0

鹿港小镇

文章 0 评论 0

wookoon

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文