内存取证基础
内存取证基础
本文适合
CTF Misc 入门学习者。学完你能:用 Volatility 从内存镜像中确认系统信息、进程、命令行、网络连接和文件对象,并围绕可疑进程提取证据
内存取证分析的是系统运行时的内存镜像。它能恢复进程、命令、网络连接、加载模块、凭据、剪贴板、文件内容片段等运行时证据。
内存取证的核心价值在于:磁盘上的文件是静态的,而内存中保存的是系统运行时的动态状态。很多关键信息只存在于内存中——加密软件的解密密钥、浏览器中已登录的会话 Token、正在编辑但未保存的文档、恶意进程在磁盘上不留痕迹但在内存中暴露的代码和网络通信数据。当攻击者使用"无文件攻击"(fileless attack)技术,将恶意代码直接注入内存执行、不写入磁盘时,内存取证几乎是唯一的检测手段。
在 CTF 中,内存取证题通常给出一个内存镜像文件,要求选手从中提取 flag、还原攻击过程、恢复加密密钥或分析恶意软件行为。解题的关键是利用操作系统的内核数据结构——进程列表、句柄表、虚拟地址描述符(VAD)、注册表 hive、网络连接表等——来重建系统的运行时状态。
一句话判断
看到 .dmp、.mem、.raw、.vmem、memory image、进程、命令行、剪贴板、浏览器 token、恶意进程或“运行时证据”提示时,先用 Volatility 建立系统和进程基线,再围绕可疑进程 dump/strings/文件扫描。
题目中常见信号
说明:需要 Volatility 解析
第一动作:windows.info / linux.banners
说明:目标在运行时状态
第一动作:查 pslist、pstree、cmdline、netscan
说明:token/cookie 可能在内存中
第一动作:查进程 dump、strings、filescan
说明:进程注入或异常 VAD
第一动作:查 malfind、dlllist、handles
说明:profile/symbol 选择关键
第一动作:先确认 OS 和内核符号
说明:需要缩小范围
第一动作:先定位进程和文件对象
核心概念
内存取证不是全盘 strings。Volatility 解析的是操作系统运行时结构:进程链表、句柄、VAD、网络连接、注册表 hive、文件对象、模块列表。先建立“系统里发生了什么”的地图,再提取具体证据,效率和可信度都更高。
常见证据层级:
- 系统信息:镜像属于哪个 OS、内核版本、时间。
- 进程关系:进程树、父子关系、异常命令行。
- 网络行为:连接目标、端口、监听服务。
- 文件和注册表:打开文件、临时文件、启动项、用户痕迹。
- 进程内容:dump 后 strings、提取密钥、还原脚本或 flag。
最小分析流程
- 确认镜像类型和系统信息。
- 列进程和进程树,找异常名字、路径、父子关系、启动时间。
- 查命令行、环境变量和网络连接。
- 查文件对象、注册表 hive、剪贴板、浏览器或可疑进程相关句柄。
- dump 可疑进程或文件对象,再对 dump 结果跑
strings、file、binwalk。 - 如果恢复出压缩包、文档、脚本或二进制,转对应方向继续分析。
- WP 中写清插件名、PID、输出字段和判断依据。
最小验证示例
# Volatility 3 Windows 基线
vol -f memory.dmp windows.info
vol -f memory.dmp windows.pslist
vol -f memory.dmp windows.pstree
vol -f memory.dmp windows.cmdline
vol -f memory.dmp windows.netscan
# 查可疑字符串和文件对象
vol -f memory.dmp windows.filescan | grep -i flag
strings -n 8 memory.dmp | grep -i flag
# dump 可疑进程
vol -f memory.dmp windows.memmap --pid 1337 --dump -D dumps/
strings -n 8 dumps/* | grep -iE "flag|password|token"判断依据:
windows.info 成功 -> 符号和系统识别可用
pstree/cmdline 显示异常进程 -> 缩小调查范围
dump 后 strings 命中 token/flag -> 证据来自具体 PID常见利用 / 解题路线
路线总览:
关键证据:cmdline 中有参数、密码、路径
常用动作:windows.cmdline、envars
关键证据:netscan 有 C2、内网、下载地址
常用动作:结合日志/流量/strings
关键证据:filescan 找到 flag、zip、txt
常用动作:dumpfiles 提取
关键证据:flag/token 在进程内存中
常用动作:memmap --dump 后 strings
关键证据:启动项、用户痕迹、最近访问
常用动作:hivelist、printkey
关键证据:malfind/VAD 异常
常用动作:dump 注入段并转逆向/恶意分析
关键证据:浏览器进程和 profile 路径
常用动作:dump 进程、查 cookie/token
常见失败原因
常见原因:格式、压缩或符号问题
排查动作:先用 file、换 vol2/vol3、查 banners
常见原因:进程已退出或被隐藏
排查动作:用 psscan、pstree、handles
常见原因:没有先缩小范围
排查动作:先看进程、网络、文件对象
常见原因:dump 的是内存段,不是完整文件
排查动作:用 file、binwalk、按 magic 裁剪
常见原因:编码或宽字符
排查动作:用 strings -el 或 PowerShell Unicode 搜索
常见原因:数据分散在多个段或被编码
排查动作:查相邻内存、同 PID dump、多关键词
迷你案例
题目给 mem.raw,提示“管理员把 flag 复制过”。先做基线:
vol -f mem.raw windows.info
vol -f mem.raw windows.pslist
vol -f mem.raw windows.cmdline发现 notepad.exe 和 powershell.exe 同时存在,继续:
vol -f mem.raw windows.memmap --pid 2416 --dump -D dumps/
strings -n 8 dumps/* | grep -i flag输出 flag{memory_runtime}。这说明 flag 来自具体进程内存,而不是整包盲搜;WP 应记录 PID 和 dump 命令。