通过Windows预读取文件找寻攻击者的蛛丝马迹

Change 嘶吼专业版

Windows预读取功能是从Windows XP版本开始引入的一种“预先装载”机制,该功能可以提高系统的性能,加快系统的启动和文件读取的速度。预读取文件是一系列包含启动项目和常用应用的文件,用于描述应用程序或启动时各个模块装载顺序,它们保存在%SYSTEMROOT%\预读取目录中,以*.pf为扩展名,其命名方式是以应用程序的可执行文件的名字为基础,加上一个“-”和描述执行文件完整路径的十六进制值,再加上文件扩展名.pf,例如APP.EX-0065AFFF.pf。

预读取文件中包含了各类元数据——可执行文件的名称、运行计数、卷信息、可执行文件引用的文件和目录,当然还有时间戳,因此可以帮助分析人员找到攻击者的执行证据及策略。

让我们以预读取文件CCLEANER64.EXE-DE05DBE1.pf为例,用Eric Zimmerman编写的PECmd解析它。

输出结果中,首先显示的文件的时间戳为:

可执行文件的名称、路径的哈希值、可执行文件的大小和预读取文件的版本:

在Windows 8.1版本以上执行时,除了创建时间、运行计数和最近一次运行的时间戳外,还可看到最近另外七次的运行时间:

接下来可以查看卷信息,包括其序列号和创建时间戳:

最后是引用的文件和目录:

可执行文件引用的文件和目录是我们要关注的重点,它不仅能让分析人员发现是否存在恶意执行的动作,还可以知道攻击者使用的确切技术。如今,攻击者经常使用诸如SDelete之类的数据擦除工具,因此对于防御者而言,找到不同技术的使用痕迹的能力是必不可少的。

让我们从最常见的技术——鱼叉式钓鱼附件开始说明。攻击者为了绕过检测,往往会对感染文档做创新,比如ATP组织Silent Group就用过武器化的CHM文件,由windows系统程序hh.exe运行后进行后续感染。因此,如果我们解析了hh.exe的预读取文件,就可以更确切地了解受害者打开了什么文件:

而在执行阶段,攻击者可能会使用Microsoft Connection Manager Profile Installer (CMSTP.exe)来启动恶意脚本,这一方法就曾被APT组织Cobalt Group使用过。如果我们分析CMSTP.exe的预读取文件并查看文件引用部分,则可以找到使它运行的文件:

在本例中,攻击者将JavaScript脚本保存到117696489.txt中,并由CMSTP运行。

我们再以Regsvr32为例进行说明,攻击者通常使用Regsvr32.exe执行任意二进制文件,因此通过查看可执行文件的预读取文件,也可以找到执行脚本的位置和名称:

攻击者为了做到持久性、提权或是程序兼容,通常会滥用sdbinst.exe来注册一个插入恶意代码的shim数据库,这类方法就被Carbanak / FIN7组织使用过,我们可以使用shim数据库文件(.sdb)的预读取文件来发现数据库文件名和位置:

如上图所示,不仅有用于安装的文件,还有已安装的定制数据库的名称。

让我们继续看一下横向移动的最典型示例之一—— PsExec,它与ADMIN $网络共享(Windows Admin Shares)交互,将在目标系统上创建PSEXESVC服务(名称可能随机,因为攻击者可以使用–r选项将其重命名),如果我们解析此可执行文件的预读取文件,可以看到运行了什么文件:

就文件删除而言,许多攻击者使用SDelete工具来删除各攻击阶段用到的文件,那么我们也可以通过sdelete.exe 的预读取文件看到攻击者的删除动作:

当然,通过预读取文件并非能发现攻击者所用到的所有技巧手段,但对用于查找执行证据或是发现攻击技巧确实能提供一种很好的帮助。

参考来源:https://www.group-ib.com/blog/hunting_for_ttps_with_prefetch_files