内存分析

内存取证是数字取证中的一个重要子领域,它涉及获取和分析计算机的易失性存储器,或者说,计算机的随机存取存储器(RAM)。存储在计算机RAM中的信息可以提供对获取时系统状态的宝贵见解。获取的内存通常被称为内存转储,它在识别正在运行的进程、用户凭证、网络连接、注册表键、加密密钥、浏览器历史记录、剪贴板内容以及其他有价值的信息方面特别有用。

在这个实验室中,我们将探索内存取证的基础知识,包括收集和分析内存转储以支持事件响应、恶意软件分析和其他取证调查的技术和工具。

获取内存转储

获取证据始终是任何数字取证调查的第一步,在内存取证中,这意味着获取计算机的易失性存储器。我们可以使用几种工具在活动机器上获取内存转储,然而,最常见的包括:

  • DumpIt — 一个适用于Windows的轻量级命令行实用程序。
  • FTK Imager — 一种流行的图像取证工具。
  • Redline — FireEye开发的内存分析工具。

💡 要从离线的Windows计算机获取内存映像,我们可以从中提取它 %SystemDrive%/hiberfil.sys 文件,该文件包含了上一次启动时的压缩内存映像,通常保留该映像以提供更快的启动时间。

在本实验室中,我们将使用DumpIt收集内存转储文件进行分析,该文件可从以下链接下载:https://raw.githubusercontent.com/thimbleweed/All-In-USB/master/utilities/DumpIt/DumpIt.exe。

💡 注意:获取内存转储可能是一个耗时的过程,因此您可以使用下一节中提供的链接中可供下载的内存转储。

下载该工具后,继续并双击可执行文件。这将启动一个命令提示符,要求您通过键入“y”或“n”来确认内存捕获。键入“y”进行确认,该工具将立即启动内存捕获过程。

因此,内存转储文件将保存在启动该工具的同一目录中。

💡 内存转储文件扩展名可以因用于创建转储的工具而异。内存转储的一些常见扩展包括.raw,.mem,.vmem和.bin。

分析内存转储

分析内存转储可以提供有关获取内存转储时系统状态的宝贵信息,例如正在运行的进程、网络连接、用户凭据、浏览器历史记录、加密密钥、获取时内存中可能存在的任何其他内容,包括恶意软件可能留下的任何工件。这在倾向于驻留在内存中的无文件恶意软件的情况下特别有用。

输入 Volatility ,我们将使用该工具分析内存转储。它是数字取证工具包中必备的记忆取证工具,是开源的,用 Python 编写,是分析内存转储的热门选择,并被取证调查人员广泛使用。

  • 注意:在我们继续安装之前,请确保您的系统上安装了 Python 2。

要安装 Volatility,请打开终端并运行以下命令:

1
2
3
git clone https://github.com/volatilityfoundation/volatility.git && cd volatility
sudo python2 setup.py install
sudo pip2 install pycryptodome

这些命令将从 GitHub 克隆 Volatility 存储库,并安装该工具及其依赖项。

要验证 Volatility 是否已正确安装,您可以运行以下命令 python2 vol.py 在终端中,应产生类似于以下内容的输出:

1
2
3
4
5
6
7
8
9
$ python2 vol.py 
Volatility Foundation Volatility Framework 2.6.1
*** Failed to import volatility.plugins.malware.apihooks (NameError: name 'distorm3' is not defined)
*** Failed to import volatility.plugins.malware.threads (NameError: name 'distorm3' is not defined)
*** Failed to import volatility.plugins.mac.apihooks_kernel (ImportError: No module named distorm3)
*** Failed to import volatility.plugins.mac.check_syscall_shadow (ImportError: No module named distorm3)
*** Failed to import volatility.plugins.ssdt (NameError: name 'distorm3' is not defined)
*** Failed to import volatility.plugins.mac.apihooks (ImportError: No module named distorm3)
ERROR : volatility.debug : You must specify something to do (try -h)

上面的导入错误表明 distorm3 缺少包,但您可以忽略它们,因为我们不需要此实验室的包。但是,如果要修复错误,可以手动安装 distorm3 包。

现在我们已经安装了 volatility,下一步应该是获取内存转储进行分析。您可以使用 DumpIt 或 FTK Imager 来收集一个,或者如果您愿意,您可以下载我已经从 https://drive.google.com/file/d/1Gwe4jbv5qXO5WXQ-2p4N24HP6thC7l4Z/view?usp=sharing 获得的转储 https://drive.google.com/file/d/1Gwe4jbv5qXO5WXQ-2p4N24HP6thC7l4Z/view?usp=sharing。

为了提供内存转储文件作为 Volatility 的输入,我们可以使用 -f 选项(如果转储文件不在当前目录中,请记住提供转储文件的完整路径):

1
$ python2 vol.py -f /path/to/smaple.mem

要开始分析,第一步是确定从中获取转储的系统的配置文件。这可以使用 imageinfo Volatility 中的插件,它将显示有关系统架构、操作系统版本和 Service Pack 级别的信息,以及其他详细信息.

根据上面的输出,我们可以看到有多个建议的配置文件。第一个通常是正确的使用,在这种情况下是 Win7SP1x64。我们将在下一个命令中指定此配置文件。

💡 我们在 Volatility 中指定配置文件,以帮助该工具确定正确的内存布局、操作系统和 Service Pack 版本,从中捕获内存的系统。此信息对于工具正确分析内存转储是必需的。

列出正在运行的进程

内存取证的一个重要方面是确定在获取内存转储时正在运行哪些进程。我们可以使用 pslist 用于此目的的插件.

输出包括进程驻留在内存中的偏移量、进程 ID (PID)、进程名称和其他详细信息,例如父进程 ID (PPID)、线程数、句柄数以及开始和退出时间。

同样,我们可以使用 pstree 插件来显示正在运行的进程的进程树。这在识别特定进程的父进程时非常有用,这有助于检测试图通过伪装成合法进程来隐藏其存在的恶意进程.

列出网络连接

要列出获取内存转储时的活动网络连接,我们可以使用 netscan 插件.

上面的输出显示有关连接的信息,包括协议、本地和外部地址和端口、当前状态、PID、所有者和创建时间。这类似于您得到的 netstat 在 Linux 上。

列出环境变量

如果我们想在获取内存转储时查看环境变量列表,我们可以使用 envars 插件。这有助于识别可能由恶意软件设置的任何环境变量.

其他插件

除了上面提到的插件之外,Volatility 还有许多其他插件可用于分析内存转储。您可以使用 -h 选择.

提供的 Volatility 命令参考 wiki 中探索所有可用的插件及其功能 您可以在 https://github.com/volatilityfoundation/volatility/wiki/Command-Reference

结论

总而言之,内存取证是数字取证领域的一项强大技术。通过分析内存转储,我们可以提取有价值的信息,例如正在运行的进程、网络连接、环境变量等,这有助于确定事件的根本原因,并帮助我们保持主动的方法,以应对将来潜在的安全事件。

最后,虽然我们只介绍了基础知识,但本实验中还有很多其他方法未讨论,我敦促您自己探索。我强烈建议你看看 《内存取证的艺术 》一书作为起点。此外,如果您需要练习记忆取证技能,您可以查看 MemLabs ,这是一个 CTF 风格的教育实验室集合。