内存取证是指在计算机系统的内存中进行取证分析,以获取有关计算机系统当前状态的信息。它通常用于分析计算机系统上运行的进程、网络连接、文件、注册表等信息,并可以用于检测和分析恶意软件、网络攻击和其他安全事件。这对于网络安全分析至关重要。
检材概述
检材可以是各种由电子设备中提取出来的电子数据保存而来的镜像文件。对于CTF比赛中所接触到的内存取证,选手大多拿到的都是已经提取好的内存镜像文件,也就是内存数据的原始完整拷贝。这已经从开局就简化了取证的难度,选手不需要考虑如何获取内存镜像,而专注于对内存数据进行解析。
主流内存取证软件概览
处理内存镜像的软件种类繁多,以下是一些常用的工具:
- 免费镜像工具:美国 FTK imager,美国 Encase Imager/Tableau Imager,美国 Paladin,俄罗斯 Belkasoft Acquisition Tool,美国 Autopsy,中国流火镜像大师 Myhex,加拿大 Magnet Acquire。
- 商业镜像工具:德国 Xways Imager,美国 MacQuisition,美国 Smart Linux。
- 免费挂载工具:美国 Arsenal Imager Mounter,美国 FTK Imager。
- 商业挂载工具:澳大利亚 Mount Image Pro,美国 Arsenal Imager Mounter 专业版,中国流火挂载。
MemProcFS 实战解析
MemProcFS 提供了一个内存取证的新视角,即将内存中的各种取证构件(Artifact)以文件系统的形式展现出来。取证人员可以直接使用文本编辑器等工具打开分析结果进行提取和搜索,极大地提升了分析效率。
安装与依赖:
MemProcFS 的运行需要一些依赖库:
- Python 3.6+:首先需要安装。
- LeechCore:这是一个必需的Python依赖库。
- Visual C++ Redistributables:需要安装
Microsoft Visual C++ Redistributables for Visual Studio 2019。
- Dokany 文件系统库:用于创建虚拟文件系统。
安装好所有依赖后,下载并解压 MemProcFS 主程序即可使用。
创建内存镜像:
可以使用 WinPmem 工具对目标计算机进行内存转储。命令示例:winpmem_mini_x64_rc2.exe memdump.dd,其中 memdump.dd 为生成的内存镜像文件。
常用命令行操作:
- 将内存转储文件挂载为默认的
M: 盘:memprocfs.exe -device c:\temp\win10x64-dump.raw
- 启用冗余信息输出:
memprocfs.exe -device c:\temp\win10x64-dump.raw -v
- 启用取证模式:
memprocfs.exe -device c:\temp\win10x64-dump.raw -forensic 1
- 挂载实时内存(需WinPMEM驱动):
memprocfs.exe -device pmem
案例分析:CTFshow单身杯内存取证题
我们以三道CTF题目为例,演示MemProcFS的实战应用。
题目 mem_1:
要求获取计算机名、IP地址和系统Build版本号。
加载镜像后,信息位于 M:\sys\sysinfo\sysinfo.txt 文件中,直接查看即可获得答案。
题目 mem_2:
要求获取登录的QQ号、看过的短剧名称和B站BV号。
- QQ号:可以通过NTFS时间线文件
M:\forensic\timeline\timeline_ntfs.txt 搜索与QQ、Tencent相关的路径信息获得。
- 短剧与BV号:可以通过Web时间线文件
M:\forensic\timeline\timeline_web.txt 查看浏览器访问记录获得。
题目 mem_3:
要求查找一个疑似窃取浏览器Cookie的恶意程序,包括其名称、隐藏目录和版权信息中的域名。
- MemProcFS自带的
findevil 模块(M:\forensic\findevil\findvil.txt)会标记可疑进程,例如指出某个进程具有PE_INJECTED、PE_PATCHED或PRIVATE_RWX权限等异常特征。
- 根据标记的PID(例如10504),可以在
M:\pid\10504\win-path.txt 或 M:\name\ 目录下找到进程路径,发现其隐藏在 ToDesk 目录下。
- 定位到该可疑程序文件(如
Hmohgnsyc.exe),查看其文件属性中的“详细信息”选项卡,即可看到版权信息中包含的域名。
Volatility 框架深度使用
Volatility是另一款经典的内存取证框架,适合通过命令行进行精准、灵活的分析。对于Linux系统的日常运维和脚本化分析,掌握Volatility这类命令行工具是基本功。
基本使用:
取证文件后缀通常为 .raw、.vmem、.img。
分析前,首先需要判断镜像的操作系统信息:
volatility -f xxx.vmem imageinfo
获取系统配置文件(Profile)后,即可在后续命令中使用 --profile= 参数指定。
常用插件命令示例:
- 列出进程:
vol.py -f Challenge.raw --profile=Win7SP1x64 pslist
- 提取用户密码哈希:
volatility -f 1.vmem --profile=Win7SP1x64 hashdump
- 查看网络连接:
volatility -f 1.vmem --profile=Win7SP1x64 netscan
- 查看IE浏览器历史:
volatility -f 1.vmem --profile=Win7SP1x64 iehistory
- 扫描文件对象:
volatility -f 1.vmem --profile=Win7SP1x64 filescan
- 导出内存中的文件:
volatility -f 1.vmem --profile=Win7SP1x64 dumpfiles -Q 0x3e1b7f70 -D ./
Volatility插件全列表参考:
amcache, apihooks, atoms, atomscan, auditpol, bigpools, bioskbd, cachedump, callbacks, clipboard, cmdline, cmdscan, connections, connscan, consoles, crashinfo, deskscan, devicetree, dlldump, dlllist, driverirp, drivermodule, driverscan, dumpcerts, dumpfiles, dumpregistry, editbox, envars, eventhooks, evtlogs, filescan, gahti, gditimers, gdt, getservicesids, getsids, handles, hashdump, hibinfo, hivedump, hivelist, hivescan, hpakextract, hpakinfo, idt, iehistory, imagecopy, imageinfo, impscan, joblinks, kdbgscan, kpcrscan, ldrmodules, lsadump, machoinfo, malfind, mbrparser, memdump, memmap, messagehooks, mftparser, moddump, modscan, modules, multiscan, mutantscan, notepad, objtypescan, patcher, poolpeek, printkey, privs, procdump, pslist, psscan, pstree, psxview, qemuinfo, raw2dmp, screenshot, servicediff, sessions, shellbags, shimcache, shutdowntime, sockets, sockscan, ssdt, strings, svcscan, symlinkscan, thrdscan, threads, timeliner, timers, truecryptmaster, truecryptpassphrase, truecryptsummary, unloadedmodules, userassist, userhandles, vaddump, vadinfo, vadtree, vadwalk, vboxinfo, verinfo, vmwareinfo, volshell, windows, wintree, wndscan, yarascan。
案例分析:46届世界技能大赛数字取证题
题目提供了一个内存镜像 worldskills3.vmem,要求完成多项应急响应任务。
-
获取admin用户密码:
- 使用
imageinfo 确定系统为 Win7SP1x64。
- 使用
hashdump 获取哈希,若无法破解,可尝试 lsadump 命令获取已解密的LSA秘密,从而得到密码 dfsddew。最终flag为 Flag{admin.dfsddew}。
-
获取系统IP及主机名:
- IP地址:使用
netscan 命令直接查看。
- 主机名:可通过查询环境变量快速获得:
volatility -f 1.vmem --profile=Win7SP1x64 envars | grep “COMPUTERNAME”,得到主机名 WIN-9FBAEH4UV8C。
-
获取浏览器搜索关键词:
- 使用
iehistory 命令直接查看IE浏览器历史记录,从中找到搜索关键词。
-
获取挖矿进程连接的矿池地址:
- 再次使用
netscan,观察异常的外联IP和端口,通常矿池地址会表现为一个长期存在的连接。
-
获取恶意进程注册的服务名:
- 通过
netscan 和 pslist 定位到可疑进程PID(如2588)。
- 使用
svcscan 命令扫描所有服务,查找与可疑进程PID或路径对应的服务名称。
-
分析病毒自删除命令:
- 此题使用 Volatility 2 可能不便,可借助 Volatility 3 的
windows.dumpfiles 插件并指定PID来导出进程相关数据。
- 在导出的内存文件中进行字符串分析,可以找到病毒自删除时执行的命令,通常格式为
cmd.exe /C @ping -n 15 127.0.0.1&del path\file >nul,旨在延时后静默删除自身。
图形化工具推荐
-
lovelymem:
一款集成了 MemProcFS、Volatility2 和 Volatility3 的图形化内存取证工具。它结合了 MemProcFS 的文件系统直观性和 Volatility 的命令灵活性,通过图形界面操作,非常适合快速分析和实战使用。
-
Magnet AXIOM:
一款功能强大的商业图形化综合取证工具,界面和流程类似于国内的“取证大师”。它可以处理包括内存镜像在内的多种证据源,进行深度分析和关联,虽然分析过程耗时较长,但结果全面直观。
学习与练习平台
DIDCTF-电子数据取证综合平台:一个专注于电子数据取证的在线练习平台,非常适合用于提升内存取证及各类取证技能的实战能力。