写在前边
在先前的系列文章中,我们讲到了概念、工具和技术用于分析恶意软件使用静态、动态和代码分析。在本系列里,你将会了解到另一种技术,即内存取证(或内存分析)。
内存取证(或内存分析)是一种调查性技术,涉及到从计算机的物理内存(RAM)中找到并提取司法证据(一个计算机的内存存储有关系统运行状态的有价值的信息)。获取存储并进行分析将为司法提供必要的信息调查,例如系统上正在运行哪些应用程序、哪些对象(文件、注册表等)、这些应用程序正在访问、活动网络连接、加载模块、加载的内核驱动程序和其他信息。由于这个原因,内存取证经常被用于事件响应和恶意软件分析。
在事件响应期间,在大多数情况下将会无法访问恶意软件样本,但你可能只拥有一个可疑系统的内存映像。例如,你可以从安全产品收到关于系统可能存在恶意行为的警报,在这种情况下,可以获取可疑系统的内存映像,以执行内存司法鉴定确认感染和找到恶意工件。
除了将内存取证用于事件响应之外,还可以将其用作恶意软件分析(针对恶意软件样本)来获得额外的信息关于恶意软件感染后的行为。例如,当你有一个恶意软件示例中,除了执行静态、动态和代码分析之外,您还可以执行在一个孤立的环境中采样,然后获取受感染的计算机内存和检查内存图像,了解恶意软件在感染后的行为。
使用内存取证的另一个原因是,某些恶意软件示例可能不会将恶意组件写入磁盘(仅在内存中)。因此,磁盘取证或文件系统分析可能会失败。在这种情况下,内存取证在查找恶意组件。
一些恶意软件示例通过挂钩或修改操作系统结构。在这种情况下,内存取证可能很有用,因为它可以绕过恶意软件使用的技巧来隐藏操作系统并实时取证工具。本章将向大家介绍内存取证的概念并涵盖用于获取和分析内存映像的工具。
一、内存取证步骤
可将内存取证用作事件响应的一部分,还是用于恶意软件分析,以下是内存取证中的一般步骤:
内存获取:
涉及获取(或转储)内存目标计算机到磁盘。取决于是否正在调查感染者系统或使用内存取证作为恶意软件分析的一部分,目标计算机可以是我们怀疑被感染的系统(在个人网络上),也可以是可能是实验室环境中执行的分析计算机恶意软件示例。
内存分析:
将内存转储到磁盘后,此步骤涉及分析转储的内存以查找和提取电子证据。
二、内存采集
存储器采集是将易失性存储器(RAM)采集到非易失性存储器的过程存储(磁盘上的文件),有各种工具可以让我们获取物理机。以下是一些允许获取(转储)物理内存到 Windows 上的工具,其中一些工具是商业性的,其他则在注册后可以免费下载,可分别适用于x86 (32-位) 和 x64(64 位)计算机:
Comae Memory Toolkit (DumpIt) by Comae Technologies (免费下载注册):
https://my.comae.io/
Belkasoft RAM Capturer(注册后免费下载):
https://belkasoft.com/ram-capturer
ACCESSData的FTK镜像软件(注册后免费下载):
https://accessdata.com/product-download
Memoryze by FireEye(注册后免费下载):
https://www.fireeye.com/services/freeware/memoryze.html
Volexity的扩展收集(商业):
https://www.volexity.com/productsoverview/surge/
PassMark Software的OSForensics(商业):
https://www.osforensics.com/osforensics.html
WinPmem(开源),Rekall Memory取证框架的一部分:
http://blog.rekall-forensic.com/search?q=winpmem
*左右滑动查看更多
2.1 使用转储进行内存采集
DumpIt是一款出色的内存采集工具,可以将物理内存转储在视窗上。它支持采集 32 位 (x86) 和 64 位 (x64) 计算机。Dump是称为Comae内存工具包的一部分,该工具包有各种独立工具,有助于不同文件之间的内存采集和转换格式。要下载 Comae 内存工具包的最新副本,可在如下网址创建注册帐户,登录并下载Comae内存工具包的最新副本。
https://my.comae.io
下载 Comae 工具包后,解压缩存档,然后导航到 32 位或 64 位目录,具体取决于要转储的内存机器是 32 位还是 64 位。该目录由各种文件组成,包括 DumpIt.exe。在本节中,我们将主要关注如何使用 DumpIt 转储内存。如果大家有兴趣了解目录中其他工具的功能,可以阅读readme.txt文件。
使用 DumpIt 获取内存的最简单方法是右键单击 DumptIt.exe 文件,然后选择以管理员身份运行。默认情况下,DumpIt 将内存转储到文件中,如Microsoft Crash Dump(具有.dmp扩展名),然后可以使用内存进行分析分析工具,如Volatility(下面将介绍)或使用微软调试器,如 WinDbg。
也可以从命令行运行DumpIt;这也提供了多种选择。要显示不同的选项,请运行 cmd.exe以管理员身份导航到目录包含 DumpIt.exe,然后键入以下命令:
C:Comae-Toolkit-3.0.20180307.1x64>DumpIt.exe /?
DumpIt 3.0.20180307.1
Copyright (C) 2007 - 2017, Matthieu Suiche <http://www.msuiche.net>
Copyright (C) 2012 - 2014, MoonSols Limited <http://www.moonsols.com>
Copyright (C) 2015 - 2017, Comae Technologies FZE <http://www.comae.io>
Hunting Malware Using Memory Forensics Chapter 10
[ 376 ]
Usage: DumpIt [Options] /OUTPUT <FILENAME>
Description:
Enables users to create a snapshot of the physical memory as a local
file.
Options:
/TYPE, /T Select type of memory dump (e.g. RAW or DMP) [default: DMP]
/OUTPUT, /O Output file to be created. (optional)
/QUIET, /Q Do not ask any questions. Proceed directly.
/NOLYTICS, /N Do not send any usage analytics information to Comae
Technologies. This is used to
improve our services.
/NOJSON, /J Do not save a .json file containing metadata. Metadata are
the basic information you will
need for the analysis.
/LIVEKD, /L Enables live kernel debugging session.
/COMPRESS, /R Compresses memory dump file.
/APP, /A Specifies filename or complete path of debugger image to
execute.
/CMDLINE, /C Specifies debugger command-line options.
/DRIVERNAME, /D Specifies the name of the installed device driver image.
*左右滑动查看更多
从命令行获取 Microsoft 故障转储的内存,并保存输出到我们选择的文件名,请使用 /o 或 /OUTPUT 选项,如下所示:
C:Comae-Toolkit-3.0.20180307.1x64>DumpIt.exe /o memory.dmp
DumpIt 3.0.20180307.1
Copyright (C) 2007 - 2017, Matthieu Suiche <http://www.msuiche.net>
Copyright (C) 2012 - 2014, MoonSols Limited <http://www.moonsols.com>
Copyright (C) 2015 - 2017, Comae Technologies FZE <http://www.comae.io>
Destination path: ??C:Comae-Toolkit-3.0.20180307.1x64memory.dmp
Computer name: PC
Proceed with the acquisition ? [y/n] y
Information:
Dump Type: Microsoft Crash Dump
Machine Information:
Windows version: 6.1.7601
MachineId: A98B4D56-9677-C6E4-03F5-902A1D102EED
TimeStamp: 131666114153429014
Cr3: 0x187000
KdDebuggerData: 0xfffff80002c460a0
Current date/time: [2018-03-27 (YYYY-MM-DD) 8:03:35 (UTC)]
Processing... Done.
Acquisition finished at: [2018-03-27 (YYYY-MM-DD) 8:04:57 (UTC)]
Time elapsed: 1:21 minutes:seconds (81 secs)
Created file size: 8589410304 bytes (8191 Mb)
Total physical memory size: 8191 Mb
NtStatus (troubleshooting): 0x00000000
Total of written pages: 2097022
Total of inacessible pages: 0
Total of accessible pages: 2097022
:
3F5753EBBA522EF88752453ACA1A7ECB4E06AEA403CD5A4034BCF037CA83C224
JSON path: C:Comae-Toolkit-3.0.20180307.1x64memory.json
*左右滑动查看更多
获取内存作为原始内存转储,而不是默认的 Microsoft 崩溃dump,可以使用 /t 或 /TYPE 选项指定它,如下所示:
C:Comae-Toolkit-3.0.20180307.1x64>DumpIt.exe /t RAW
DumpIt 3.0.20180307.1
Copyright (C) 2007 - 2017, Matthieu Suiche <http://www.msuiche.net>
Copyright (C) 2012 - 2014, MoonSols Limited <http://www.moonsols.com>
Copyright (C) 2015 - 2017, Comae Technologies FZE <http://www.comae.io>
WARNING: RAW memory snapshot files are considered obsolete and as a
legacy format.
Destination path: ??C:Comae-Toolkit-3.0.20180307.1x64memory.bin
Computer name: PC
Proceed with the acquisition? [y/n] y
Information:
Dump Type: Raw Memory Dump
Machine Information:
Windows version: 6.1.7601
MachineId: A98B4D56-9677-C6E4-03F5-902A1D102EED
TimeStamp: 131666117379826680
Cr3: 0x187000
KdDebuggerData: 0xfffff80002c460a0
Current date/time: [2018-03-27 (YYYY-MM-DD) 8:08:57 (UTC)]
[.......REMOVED.........]
*左右滑动查看更多
如果希望从由大内存组成的服务器获取内存,可以使用 /R或 DumpIt 中的 /COMPRESS 选项,这将创建一个 .zdmp(Comae 压缩故障转储)文件,这减小了文件大小,也使获取速度更快。转储文件 (.zdmp) 可以然后使用Comae星尘企业平台进行分析。
Comae星尘企业平台:
https://my.comae.io
更多详细信息,请参阅以下博客文章:
https://blog.comae.io/rethinkinglogging-for-critical-assets-685c65423dc0
*左右滑动查看更多
在大多数情况下,可以通过以下方式获取虚拟机(VM)的内存挂起虚拟机。例如,在执行恶意软件样本后VMware Workstation/VMware Fusion,可以暂停虚拟机,这会将guest的内存 (RAM) 写入扩展名为 .vmem 的文件主机的磁盘。对于那些应用程序(如VirtualBox),其中内存无法通过挂起来获取,然后您可以使用 DumpIt在客户机器内部。
三、Volatility浏览
获取受感染系统的内存后,下一步是分析获取的内存内存镜像。Volatility是一个开放用Python编写的高级内存取证框架,允许您进行分析并从内存图像中提取电子证据。Volatility可以在各种平台上运行(Windows,macOS和Linux),它支持从32位和64位分析内存Windows、macOS 和 Linux 操作系统的版本。
Volatility网址:
http://www.volatilityfoundation.org/releases
*左右滑动查看更多
3.1 安装Volatility
Volatility以多种格式分发,取决于要运行的操作系统波动开启,可按照相应操作系统的安装过程操作。
3.1.1 Volatility独立可执行文件
使用 Volatility 的最快方法是使用独立的可执行文件。独立可执行文件是为Windows,macOS和Linux操作系统分发的。独立可执行文件的优点是无需安装Python解释器或Polution依赖项,因为它是与Python 2.7解释器和所有必需的依赖项打包在一起的。
在 Windows 上,下载独立可执行文件后,可以通过从命令行使用 -h (–help) 选项执行独立可执行文件来检查 Volatility 是否已准备好使用,如下所示。帮助选项显示Volatility中可用的各种选项和插件:
C:volatility_2.6_win64_standalone>volatility_2.6_win64_standalone.exe -h Volatility Foundation Volatility Framework 2.6
Usage: Volatility - A memory forensics analysis platform.
Options:
-h, --help list all available options and their default
values.
Default values may be set in the configuration file
(/etc/volatilityrc)
--conf-file=.volatilityrc
User based configuration file
-d, --debug Debug volatility
[ ]
*左右滑动查看更多
以同样的方式,我们可以下载适用于 Linux 或 macOS 的独立可执行文件,并使用 -h(或 — help)选项执行独立可执行文件来检查 Volatility 是否已准备好使用,如下所示:
$ ./volatility_2.6_lin64_standalone -h
# ./volatility_2.6_mac64_standalone -h
*左右滑动查看更多
3.1.2 Volatility源包
Volatility也作为源包分发;可以在Windows、macOS或Linux操作系统上运行它。Volatility依赖于各种插件来执行任务,其中一些插件依赖于第三方Python包。要运行 Volatility,需要安装 Python 2.7 Interpreter 及其依赖项。以下网页包含一些Volquisive插件所需的第三方Python软件包列表。
https://github.com/volatilityfoundation/volatility/wiki/Installation#recommendation-packages
*左右滑动查看更多
可以通过阅读文档来安装这些依赖项。安装完所有依赖项后,下载 Volatility 源代码包,将其解压缩,然后运行 Volatility,如下所示:
$ python vol.py -h
Volatility Foundation Volatility Framework 2.6
Usage: Volatility - A memory forensics analysis platform.
Options:
-h, --help list all available options– and their default
values.
Default values may be set in the configuration file
(/etc/volatilityrc)
--conf-file=/root/.volatilityrc
User based configuration file
-d, --debug Debug volatility
[...REMOVED...]
*左右滑动查看更多
本系列文章中提到的所有例子都使用了vol Python脚本源包(Python vol.py),我们可以自由选择一个独立的可执行文件,但要记住将python vol.py替换为独立的可执行文件名称。
3.2 使用Volatility
Volatility由各种插件组成,它可以从内存映像中提取不同的信息。
python vol.py -h 选项显示支持的插件
例如,如果我们想要列出内存映像中正在运行的进程,可以使用pslist这样的插件,或者如果想要列出网络连接,可以使用不同的插件。不管我们使用的插件是什么,您都可以使用以下命令语法。
-f 指定内存映像文件的路径
-profile 告诉volatile内存映像是从哪个系统和体系结构获得的
*左右滑动查看更多
插件可以根据你想从内存映像中提取的信息类型而变化:
$ python vol.py -f <memory image file> --profile=<PROFILE> <PLUGIN> [ARGS]
*左右滑动查看更多
下面的命令使用pslist插件列出列表中正在运行的进程。
从运行Service Pack 1的Windows 7(32位)获取的内存映像:
$ python vol.py -f mem_image.raw --profile=Win7SP1x86 pslist
Volatility Foundation Volatility Framework 2.6
Offset(V) Name PID PPID Thds Hnds Sess Wow64 Start
---------- ---------- ---- ---- ---- ---- ---- ----- --------------------- 0x84f4a958 System 4 0 86 448 ---- 0 2016-08-13 05:54:20 0x864284e0 smss.exe 272 4 2 29 ---- 0 2016-08-13 05:54:20 0x86266030 csrss.exe 356 340 9 504 0 0 2016-08-13 05:54:22 0x86e0a1a0 wininit.exe 396 340 3 75 0 0 2016-08-13 05:54:22 0x86260bd0 csrss.exe 404 388 10 213 1 0 2016-08-13 05:54:22 0x86e78030 winlogon.exe 460 388 3 108 1 0 2016-08-13 05:54:22
[....REMOVED....]
*左右滑动查看更多
有时我们可能不知道向Volatility提供什么配置文件。在这种情况下,可以使用imageinfo插件,它将决定正确的配置文件。下面的命令显示多个由imageinfo插件建议的配置文件;可以使用任何建议的配置文件:
python vol.py -f mem_image.raw imageinfo
Volatility Foundation Volatility Framework 2.6
INFO : volatility.debug : Determining profile based on KDBG search...
Suggested Profile(s): Win7SP1x86_23418, Win7SP0x86, Win7SP1x86 AS Layer1 : IA32PagedMemoryPae (Kernel AS)
AS Layer2 : FileAddressSpace
(Users/Test/Desktop/mem_image.raw)
PAE type : PAE
DTB : 0x185000L
KDBG : 0x82974be8L
Number of Processors : 1
Image Type (Service Pack) : 0
KPCR for CPU 0 : 0x82975c00L
KUSER_SHARED_DATA : 0xffdf0000L
Image date and time : 2016-08-13 06:00:43 UTC+0000
Image local date and time : 2016-08-13 11:30:43 +0530
*左右滑动查看更多
大多数的Volatility插件,比如pslist依赖于从Windows操作系统结构中提取信息。这些结构在不同版本的Windows中有所不同。
配置文件:
-profile 告诉volatile使用哪些数据结构、符号和算法。
帮助选项:
-h(-help),可显示所有应用于Volatility插件的帮助。可使用相同的-h(-help)选项来确定插件支持的各种选项和参数,只需在插件名称旁边输入-h(-help)。下面的命令可显示pslist插件的帮助选项:
python vol.py -f mem_image.raw --profile=Win7SP1x86 pslist -h
*左右滑动查看更多
在这里,我们可以了解到如何在获取的内存映像上运行Volatility插件,以及如何确定插件支持的各种选项。在后面的文章中,我们将会了解到不同的插件以及如何使用它们从内存映像中提取电子证据。
(未完待续)
往期回顾
原文始发于微信公众号(安恒信息安全服务):九维团队-青队(处置)| 使用内存取证狩猎恶意软件(一)