轩辕三官 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 在上篇文章《渗透技巧——Windows下NTFS文件的时间属性》 介绍了修改windows操作系统文件系统(NT文件系统)文件时间属性的方法和细节,以及取证上的建议。 本文将要继续研究windows操作系统文件系统(NT文件系统)文件另一处记录文件修改时间的位置——美国海军杂志,同样是分析利用思路,给出取证上的建议。 0x01 简介 本文将要介绍以下内容: 基本概念 读取美国海军杂志的方法 利用思路 取证建议 0x02 USN Journal的基本概念 官方文档: https://份文件。微软。com/en-us/previous-versions/windows/it-pro/windows-2000-server/bb 742450(v=TechNet。10) 美国海军日志(更新序列号日志),也称作更改日志,用来记录Windows NT文件系统(NT File System)卷中文件修改的信息,能够提高搜索文件的效率 每个Windows NT文件系统(NT File System)卷对应一个美国海军杂志,存储在Windows NT文件系统(NT File System)图元文件的$Extend\$UsnJrnl中,也就是说,不同的Windows NT文件系统(NT File System)卷对应的美国海军杂志不同 美国海军杂志会记录文件和目录的创建、删除、修改、重命名和加解密操作,每条记录的格式如下: typedef结构{ DWORD记录长度; WORD主要版本 WORD MinorVersion DWORDLONG FileReferenceNumber dword long parent filereferencennumber; 美国海军美国海军 大整数时间戳; DWORD原因; DWORD SourceInfo DWORD SecurityId DWORD文件属性 单词文件名长度; 单词文件名偏移量; WCHAR文件名[1]; } USN_RECORD_V2,* PUSN _ RECORD _ V2; 官方资料: https://份文件。微软。com/en-us/windows/desktop/API/winioctl/ns-winioctl-usn _ record _ v2 在Windows NT文件系统(NT File System)图元文件的$Extend\$UsnJrnl\$Max保存美国海军杂志文件的总大小,如果美国海军杂志的记录长度超出总大小,会从最初始的记录开始覆盖 0x03 读取USN Journal的方法 1、使用命令fsutil usn 官方文档: https://份文件。微软。com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc 788042(v=ws。10) (1)查看C盘的USN Journal信息 fsutil usn查询日志丙: 包括以下信息: 美元日志身份证明 第一个美元 下一个美元 最低有效美元 最大美元 最大尺寸 分配增量 (2)查看C盘所有的USN Journal fsutil usn枚举数据1 0 1摄氏度: 包括以下信息: 文件参考号 父文件参考号 美元 SecurityId 理由 名字 输出结果不够详细 2、使用开源工具 (1)导出USN Journal 下载地址: https://github.com/jschicht/ExtractUsnJrnl 参数如下: ExtractUsnJrnl/设备路径:c:/输出路径:c:\ test/输出名称:UsnJrnl _ vol 1。箱子 (2)将USN Journal转为CSV格式输出 下载地址: https://github.com/jschicht/UsnJrnl2Csv 参数如下: UsnJrnl 2 CSV/UsnJrnlFile:c:\ test \ UsnJrnl _ vol 1。bin/输出路径:c:\ test 包括以下信息: 抵消 文件名 美国海军 时间戳 理由 MFT参考 MFTReferenceSeqNo MFTParentReference MFTParentReferenceSeqNo 文件属性 主要版本 MinorVersion SourceInfo SecurityId 输出结果很完整 3、c++实现 我这里写了一个简单的示例代码,下载地址: https://github。com/3g student/home-of-C-Language/blob/master/enumusnjurnal。卡片打印处理机(Card Print Processor的缩写) 代码实现了枚举C盘的美国海军杂志,仅输出文件名 0x04 利用思路 1、清除所有USN Journal (1)使用fsutil fsutil usn删除日志/d c: 注: 我在测试环境下没有删除成功 (2)API https://份文件。微软。com/en-us/windows/desktop/API/winioctl/ns-winioctl-delete _ usn _ journal _ data 注: 我在测试环境下没有删除成功 2、清除单条USN Journal 我还没有找到可用的应用程序接口接口 唯一的方法是直接修改windows操作系统文件系统(NT文件系统)文件,但是自nt6.x开始,Windows禁止加载未经签名的驱动文件 这里可以尝试使用付费版的WinHex对windows操作系统文件系统(NT文件系统)文件进行操作,修改$Extend\$UsnJrnl中的内容 也可以尝试绕过驱动保护 $UsnJrnl的内容可参考: http://forensicinsight。org/WP-content/uploads/2013/07/F-INSIGHT-Advanced-UsnJrnl-Forensics-English。可移植文档格式文件的扩展名(portable document format的缩写) 按照格式读取美国海军杂志,删除指定美国海军杂志,再写入磁盘 3、暴力覆盖 首先查看磁盘美国海军杂志文件的总长度 然后通过新建、删除、修改、重命名等操作生成USN Journal的记录。当超过总长度时,初始记录将被覆盖,直到所有USN日志被覆盖。 0x05 取证建议 1、读取USN Journal,列出所有记录,查找是否存在可疑记录 这种方法并不完全可信,攻击者只要能绕过驱动保护,就可以修改USN Journal。 2、尝试其他方法 比如从记忆中读出$MFT的记录 https://github.com/jschicht/HexDump https://github.com/jschicht/MftCarver Joakim Schicht的github有很多取证工具可以参考: https://github.com/jschicht/ 0x06 小结 本文介绍了利用NTFS文件的USN Journal的思想,并给出了一些取证的建议。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子