BlackEnergy恶意软件内存取证分析:Volatility实战指南
引言
本文将通过CyberDefenders平台举办的BlackEnergy CTF挑战赛,深入解析Windows内存分析的全过程。
出于道德考量,我不会直接给出答案原文,而是帮助您理解整个分析流程与方法论。
在开始之前,请确保已准备好以下环境与工具:
- 配备必要分析工具的虚拟机(推荐使用REMnux——专为恶意软件分析与逆向工程设计的Linux工具集)
- 已安装Volatility内存分析工具(REMnux预装了该工具)
- 已下载并解压挑战文件
场景描述
某跨国公司遭受网络攻击,导致敏感数据被盗。攻击者使用了一种此前从未出现过的BlackEnergy v2恶意软件变种。公司安全团队已获取受感染主机的内存转储文件,现需您进行分析,以明确攻击范围与影响程度。
解决方案
Q1:该主机最适合的Volatility配置文件是什么?
使用imageinfo或kdbgscan模块,可以获取该主机的Volatility配置文件。
vol.py -f img.raw imageinfo
vol.py -f img.raw kdbgscan
Q2:获取内存镜像时有多少个进程正在运行?
我使用psxview模块来查看进程的退出时间。(也可使用pslist或psscan。)ExitTime属性对判断进程的运行状态至关重要:若该属性值为空(即空字符串),则表示该进程正在运行。
我将结果导出为SQLite3数据库文件,然后进行查询操作。
vol.py -f img.raw --profile <来自Q1的配置文件> psxview --output=sqlite --output-file=psxview.db
sqlite3 psxview.db
/* SQLite3 查询 */
.schema /* 获取表名、列名及数据类型 */
SELECT count(*) FROM PsXview; /* 获取镜像采集时的进程总数 */
SELECT count(*) FROM PsXview WHERE ExitTime IS ""; /* 获取正在运行的进程数 */
Q3:cmd.exe的进程ID(PID)是多少?
可使用pslist、psscan、psxview获取进程列表,然后通过grep过滤出cmd.exe的进程信息。
vol.py -f img.raw --profile <来自Q1的配置文件> pslist | grep 'cmd'
Q4:最可疑的进程名称是什么?
我将pslist的输出保存到文件中,并仔细审查进程列表,其中可疑进程非常显眼。
vol.py -f img.raw --profile <来自Q1的配置文件> pslist > pslist.txt
less pslist.txt
Q5:哪个进程最可能存在代码注入行为?
代码注入是攻击者或攻防安全人员常用的技术手段,用于实现防御规避或权限提升。我使用malfind模块来查找存在“注入”痕迹的进程。关键特征如下:
- 存在MZ头(0x4D5A),表明该进程包含可移植可执行文件(PE)
- 内存保护标志为
PAGE_EXECUTE_READWRITE,这是攻击者注入PE文件时的常用权限组合(注意:此权限组合并不总是代表进程注入)
vol.py -f img.raw --profile <来自Q1的配置文件> malfind > malfind.txt
less malfind.txt
Q6:Q5中注入进程所引用的异常文件的完整路径是什么?
我使用handles模块获取进程线程所打开的文件。在此案例中,一个可疑的驱动程序被加载到内存中。所使用的进程ID(PID)属于被注入的进程。
vol.py -f img.raw --profile <来自Q1的配置文件> handles -p <PID> -t file > handles.txt
less handles.txt
Q7:与Q5中进程相关的注入DLL文件的名称是什么?
ldrmodules模块对于检测动态链接库(DLL)注入和进程镂空(Process Hollowing)非常有效。如果InLoad、InInit和InMem属性中存在任何值为False的情况(PE文件本身InInit = False除外),则很可能发生了反射式DLL注入。
vol.py -f img.raw --profile <来自Q1的配置文件> ldrmodules -p <PID> > ldrmodules.txt
less ldrmodules.txt
Q8:注入DLL的基地址是什么?
执行注入所使用的DLL与Q5中被注入的进程共享相同的基地址。我们可以使用Q5中malfind模块的输出结果来获取该基地址(地址以十六进制表示)。
结语
在我看来,该挑战难度适中,足以激发深入思考,同时也提供了贴近真实场景的内存取证分析思路。我使用Volatility 2(基于Python 2)完成了上述解决方案,您也可以使用Volatility 3。
如需进一步深入研究内存取证领域,推荐以下学习资源:
- 《内存取证艺术》(The Art of Memory Forensics):learning.oreilly.com/library/vie…
- 《Windows internals 第7版 第1部分》(Windows Internals, Part 1):learning.oreilly.com/library/vie…
- 《恶意软件分析学习指南》(Learning Malware Analysis):learning.oreilly.com/library/vie…
🔥 祝您调查顺利! CSD0tFqvECLokhw9aBeRql9xNYES+YinPrU2B/vxKeJ7H44lQx6Xsn5JHhXGTIRxf8+3rIz2c4CPyYH2OU1duWeavDPl0bY8VA0gF0lrHwxVv8JSSDlMBjM9RLg0Cjtl