窥探Windows删除痕迹:深度解析文件删除后的系统痕迹
本文深入探讨Windows系统在删除文件后保留的痕迹,揭示如何通过Prefetch、UserAssist、$MFT等多个体系结构恢复已删除数据的完整路径与时间线
在现代取证实践中,文件删除后仍可能在操作系统的多个内部体系结构中保留痕迹,这些痕迹为取证人员提供了重建被删除文件的完整路径、启动时间以及删除时间线的关键线索。攻击者常利用文件删除技巧以降低痕迹密度,然而Windows系统在文件删除、回收站清空以及系统重启后仍会在Prefetch、UserAssist、$MFT、$UsnJrnl等位置留下可被检索的痕迹,形成所谓的"回声"效应。本文以Windows 11为实验环境,创建名为Test.exe的可执行文件,随后通过回收站删除、清空回收站并重新启动系统,系统地检查各类体系结构的痕迹,以验证是否能够确认文件的存在、启动以及删除的具体时间。 为确保实验可控,作者在标准用户桌面上生成了一个4608字节的Test.exe,其SHA256哈希值为CBFCE7E3844A23784E07DC4B4D94813BA2C60933496F80A4CF343E5CD98ED84D。启动该程序时,它会在同一目录下生成一个名为marker.txt的文本文件,内容包含执行时间戳、当前用户名、计算机名称以及可执行文件的完整路径,这些信息将作为判断启动是否成功的依据。随后,作者仅使用Delete键将Test.exe移至回收站,而保留marker.txt不受删除,以便在后续分析中确认启动记录是否仍然存在。
在回收站中,系统会为被删除文件创建两个关联对象:$I元数据文件和$R内容文件。$R的大小与原始Test.exe完全一致,其SHA256哈希值与原始文件相同,这表明在回收站内部仍然保留着完整的文件内容。$I则记录了原始文件的路径、大小以及删除时间戳,具体显示为OriginalPath:C:UsersdfirlabDesktopT1070_004_Test.exe,OriginalSize:4608,DeletionTimeLocal:2026-08-10 14:32:29.124 +03:00。通过对$I和$R的哈希比对,可以确认被删除文件与当前检查对象完全匹配,从而验证取证过程的准确性。 当完成回收站清空并重新启动系统后,回收站内仅保留系统文件desktop.ini,原始的$I和$R已被清除。此时需要检查系统在重新启动后仍然保留的痕迹,以判断是否仍能从其他体系结构中恢复关于Test.exe的信息。
首先,作者查看了Prefetch目录,该目录存储了关于可执行文件启动次数和最近一次启动时间的记录。通过命令Get-ChildItem 'C:WindowsPrefetch' -Filter 'T1070_004_TEST.EXE-*.pf',发现了一个名为T1070_004_TEST.EXE-F0FBFC96.pf的Prefetch文件,其创建时间与系统重启时间相近,表明该文件是系统在删除并重新启动后为记录Test.exe的启动行为而生成的。对该Prefetch文件执行SHA256哈希运算,得到的值与原始Test.exe的哈希一致,进一步确认了该痕迹与被删除文件的关联。 除了Prefetch,UserAssist、PCA以及BAM和Amcache等体系结构也可能留下启动痕迹。UserAssist文件位于用户配置文件的AppDataLocalMicrosoftWindowsWebCacheUserAssist目录,记录了每一次通过图形用户界面启动的可执行文件以及对应的时间戳。通过对UserAssist的解析,可以发现Test.exe的启动记录显示其在删除前的某个时间点通过双击方式被启动,这与通过资源管理器双击启动的情形相符。
PCA(Prefetch Cache Area)和BAM(Bacon Academy Memory)则存储了更细粒度的启动信息,包括进程启动参数和会话ID。虽然在本实验中BAM和Amcache未检测到明确的Test.exe记录,但这并不意味着它们完全没有痕迹,只是说明在特定条件下它们可能不被激活。 $UsnJrnl和$MFT是NTFS文件系统本身提供的日志与元数据存储,它们在文件删除后仍会保留关于文件位置、修改时间以及删除操作的详细记录。$UsnJrnl通过记录目录变更日志,可以追溯到Test.exe被移动至回收站以及随后被清空的具体时间点。相关记录显示,Test.exe在2026-08-10 14:32:29.124被标记为删除,随后在2026-08-10 14:49:05.912被回收站清空,这两个时间点为重建删除时间线提供了关键依据。$MFT则在文件系统的元数据区中保存了文件的索引号、分配单元和最后修改时间,即使文件被删除,$MFT仍会保留其原始分配信息,直到该簇被重新分配给新文件。
通过对$MFT的细致检查,可以发现Test.exe对应的索引号在删除后仍然保留,且其最后修改时间与删除时间戳保持一致,这为取证提供了另一层可靠的证据链。 在比较不同的启动方式 - - 即通过资源管理器双击、cmd.exe以及PowerShell - - 发现每种方式在系统生成的痕迹上存在细微差别。资源管理器启动会在UserAssist中留下明显的图形界面启动记录,而cmd.exe启动则会在命令行历史记录中出现相应的命令行参数痕迹,PowerShell启动则在PowerShell历史记录文件中保留执行脚本的路径与参数。相关分析表明,虽然三种方式均在Prefetch中生成对应的Prefetch文件,但UserAssist的记录最为完整,能够提供最直观的启动方式判断。相对于cmd.exe和PowerShell,资源管理器方式在删除后仍能通过UserAssist恢复到具体的启动入口,这表明在取证时优先检查UserAssist可以获得更高的成功率。 综合以上所有体系结构的检查结果,可以得出以下结论:即使在删除文件、清空回收站并重新启动系统的情况下,Windows仍然在多个内部记录位置保留了关于被删除文件的痕迹。
Prefetch文件提供了文件启动的时间戳与次数,UserAssist则记录了启动方式与用户操作细节,而$MFT和$UsnJrnl则在系统级别上保存了文件的位置与删除时间。通过对这些痕迹的交叉验证,取证人员能够重建文件的完整生命周期,包括其首次创建、首次启动、删除以及后续被系统清理的过程。该实验表明,单纯依赖于回收站内的$I与$R已不足以满足高精度取证需求,必须结合Prefetch、UserAssist、$MFT等多源信息,才能够在取证报告中提供可靠的时间线与路径证据。 尽管本实验在受控环境中完成,但实际取证场景中可能存在更复杂的条件,如文件被多次覆盖、系统更新或安全软件的干扰,这些因素可能会影响痕迹的完整性。未来的研究可以进一步探索如何在更高级的攻击情境下,利用系统自带的日志与审计功能,提升对删除文件痕迹的检索效率,为数字取证提供更强有力的技术支撑。 。