本文由安全研究人员Amr Ashraf发表于Cyber5w的官方博客,研究人员在本文中讨论了如何对可疑设备中的内存映像进行安全调查,并利用了Volatility 3和MemProcFS来最大程度提升Windows取证分析的工作效率。
介绍
内存取证是任何计算机取证分析人员的必备技能之一,这种技术允许我们找到很多无法在磁盘上找到的数字证据,例如:
1、建立的网络链接;
2、仅在内存中的恶意软件;
3、加密密钥;
4、用户凭证。
从零开始处理内存映像可能会非常具有挑战性,因为这种处理方式要求分析人员对目标操作系统的内存布局和数据结构有深入的了解,但幸运的是,社区有一些工具可以为我们解析这些数据结构,并为我们提供所需的最终结果。这样一来,我们就可以将注意力放到最重要的部分,即我们实际想要看到的内容,以及如何通过内存取证分析达到我们的最终目标。
内存取证中最重要的工具之一就是Volatility,这是一种基于插件的Python工具,我们可以根据需求使用不同的插件,而每个插件都可以从内存中提取特定信息。
Volatility
映像信息
在使用Volatility 2时,如果要处理内存映像的话,你还需要使用一个专门的配置。但如果你使用的是Volatility 3,插件本身就会动态识别配置信息。
使用Volatility需要提供下列参数:
python3 vol.py -f <MemoryImage> <Plugin>
我们以一个简单的插件使用作为开始,下列命令可以显示有关目标设备的一些信息:
python3 .\vol.py -f D:\MemoryDump.mem windows.info
上图中显示的内容可以告诉我们目标系统的Windows版本和执行内存数据捕捉时的系统时间。
运行进程
内存映像中会包含与目标设备相关的所有信息,其中就包括执行内存映像捕捉时目标设备正在运行的进程信息,Volatility同样提供了多种插件来帮助我们调查和分析这些正在运行的进程。
第一个插件就是windows.pslist插件,该插件可以枚举出所有正在运行的进程,如下图所示:
windows.psscan插件与windows.pslist插件类似,但它能够获取已终止进程的信息,同时它也使用了不同的方法来收集正在运行进程的信息,如果威胁行为者使用了反分析技术来隐藏其恶意进程的话,这个插件也许会派上用场。
windows.pstree插件是使用最频繁的,它支持以树状形式查看进程信息,并查看到进程之间的父子关系:
接下来继续我们的分析,我们的目标设备中存在一个恶意活动,我们需要对其进行安全调查,看看我们能够从目标设备的内存中获取到哪些信息。
根据windows.pstree插件的输出,我们发现了一个svchost进程正在以powershell的子进程形式运行,并且它还运行了一个cmd子进程,这就非常可疑了。但最可疑的地方在于,svchost进程本应该只能是services.exe作为父进程,这也就意味着,这个地方是我们可以深入挖掘和研究的地方。
可疑进程调查
找到了可疑的进程之后,我们就可以使用其他的插件来对其进行更深入的分析了。
windows.cmdline插件可以用来查看任意进程通过命令行接口执行的命令,只需要给该插件提供目标进程ID即可(插件名称+“-h”参数可以查看指定插件所有支持的命令选项):
上图中我们可以看到,svchost进程执行的命令行命令是在Documents目录下执行的。
需要注意的是,在某些情况下,你可能会发现Volatility返回的结果中存在信息交换的情况。而内存交换(Swapping)是一种提升内存效率的机制,它可以通过将内存中某些不使用的内容移动到磁盘上,当需要使用的时候再移动回来。
除此之外,我们还可以使用windows.handles来获取引用的进程句柄,这有助于我们找到文件访问或进程创建行为:
当然了,该工具所提供的很多其他命令也非常实用,可以处理DLL注入或其他使用DLL执行的恶意行为。比如说windows.dlllist,该插件可以显示目标进程加载的DLL信息。
在了解了哪一个进程值得进行深入分析之后,我们就可以使用windows.dumpfiles.DumpFiles插件并提供目标进程PID来提取更多信息。
网络链接
获取目标设备内存映像最大的一个优势就在于,我们可以获取到目标设备网络链接的目标IP地址实时信息,以及对应的进程信息。
这里可以选择使用windows.netscan插件:
从上述输出内容中我们可以看到,可疑进程通过端口1337连接了192.168.21.140。
异常检测
某些插件还提供了一些规则来帮助我们自动检测异常,虽然可能会存在假阳性,但确实能够帮助我们大大减少需要分析和查看的数据量。
windows.malfind插件可以查看带有“读&写&执行”权限的内存页面,虽然合法进程也会使用这种技术,但恶意文件使用得会更加频繁和广泛,尤其是当内存页面为MZ(Windows可执行程序签名)时:
让一切变得更简单-MemProcFS
除了Volatility之外,我们也可以选择使用其他的工具,以寻求更多的实用功能。接下来,我们看看如何使用MemProcFS来提升我们内存取证分析的效率。
MemProcFS可以允许我们在文件系统视图中一次性查看多个Volatility插件的输出结果。
该工具的使用非常简单,我们只需要给它传递一个内存映像和一个forensic参数,该工具就会帮助我们对目标内存映像执行自动化取证分析。
需要注意的是,内存映像加载完成后,取证分析操作可能需要等待一段时间才能执行完毕。
在文件系统视图中切换到加载点时,就可以看到如下所示的文件了:
我们可以在每一个进程目录中通过进程名称和进程ID来查看关于正在运行进程的详细信息:
在sys目录中,我们可以查看关于目标系统的详细信息,例如网络、用户和操作系统信息等:
其中,最重要的就是Forensic目录了,其中包含了大量的内存取证信息:
这里我们可以看到系统针对各种组件创建的时间戳,比如说NTFS、网络、Web和进程等:
findevil目录中可以查看到该工具所识别的异常信息,files目录中可以查看到加载在内存中的磁盘内容:
当然了,本文所涉及到的内容还可以扩展至磁盘分析,比如说注册表分析或日志分析等。
总结
每一种安全分析和调查都有其独特的的目标,而深入分析取证文件所采用的方法也因实际情况而定。本文介绍的工具和方法是内存取证活动中常用的,几乎每一项取证活动都会涉及到这些方法步骤,例如寻找可疑的父子进程关系、网络连接、命令执行和异常等等。希望本文能够给信息安全取证人员提供一些新的思路,最大程度地实现取证分析效率的提升。
附件资料
本文涉及到的内存映像拆分成了三个部分,感兴趣的用户可以自行下载实操:
1、第一部分:【点我获取】
2、第二部分:【点我获取】
3、第三部分:【点我获取】
参考资料
https://github.com/volatilityfoundation/volatility3
https://github.com/ufrisk/MemProcFS
参考链接
Windows Memory Forensics