Volatility的netscan插件可直接从物理内存提取TCP/UDP连接记录,绕过API hook等隐藏技术,重点排查PID为0或负数、非常规端口连公网IP等可疑连接,并结合psscan、ldrmodules、malfind形成闭环分析链。

怎么用 netscan 找出内存里藏起来的恶意网络连接
Volatility 的 netscan 是唯一能直接从物理内存中提取 TCP/UDP 连接记录的插件,它不依赖系统 API 调用,因此绕过了 hook、SSDT 替换或驱动级隐藏。哪怕进程本身已被 psscan 漏掉,只要连接结构体(_TCP_ENDPOINT 或 _UDP_ENDPOINT)还在内存里,netscan 就能扫出来。
实操建议:
-
netscan输出包含本地/远程 IP、端口、状态(ESTABLISHED/LISTENING)、PID 和创建时间——重点盯住 PID 为 0 或负数的连接,它们大概率是内核模块或无进程网络通信 - 若看到非常规端口(如
9999、7777、4444)连向公网 IP,且对应 PID 在pslist里查不到,立刻用psscan补扫:它比pslist更底层,能捕获被 unlink 的进程 - Windows 10+ 系统上,
netscan可能漏掉某些 AF_UNIX 或 WFP 过滤后的连接,此时需配合sockets插件交叉验证
为什么 dlllist 常漏掉注入的 DLL,该用什么补位
dlllist 只读取进程 PEB 中的 Ldr 链表,一旦攻击者用反射式 DLL 加载(Reflective DLL Injection)或直接写入内存页并修改 EAT/IAT,这个链表就完全不会更新——你看到的仍是干净的 DLL 列表。
实操建议:
- 优先跑
malfind -p <pid></pid>:它扫描每个进程的内存页属性(PAGE_EXECUTE_READWRITE),自动标记可疑的、含 shellcode 或 PE 头的内存块;输出里带protection: PAGE_EXECUTE_READWRITE和PE header found的基本就是注入体 - 对
malfind报出的可疑地址,用memdump -p <pid> --base <address> -D ./dumps/</address></pid>导出原始内存块,再用file命令或strings查看是否含 URL、IP、命令关键字 - 若怀疑是 inline hook 或 IAT patch,加跑
apihooks -p <pid></pid>,它会比对内存中函数真实入口与 IAT 记录的差异,直接列出被篡改的 API(如kernel32!CreateProcessA)
ldrmodules 比 dlllist 多看出什么,什么时候必须用它
ldrmodules 不只查 PEB 的 Ldr 链表,还同时扫描内核中的 _LDR_DATA_TABLE_ENTRY 结构,对比三处视图:内存加载地址(BaseDllName)、文件路径(FullDllName)、以及是否在 PEB 链表中可见(Load / Mem / Init 标志)。三者不一致就是典型注入信号。
实操建议:
- 执行时务必加
-v参数:ldrmodules -p <pid> -v</pid>,否则看不到关键的“in load list? No”、“in init list? No”这类判断依据 - 重点关注
Mem列为Yes但Load列为No的 DLL——说明它被映射进内存了,但没走正常加载流程,极可能是 process hollowing 或直接VirtualAllocEx注入 - 输出中若出现
??\C:\WINDOWS\system32\开头但BaseDllName显示乱码或空字符串,基本可断定是伪造路径的恶意 DLL
一次闭环排查:从外联 IP 回溯到注入 DLL 的完整链路
真正有效的分析不是单点扫描,而是把 netscan → psscan → ldrmodules → malfind 串成证据链。比如发现一个 192.168.1.100:4444 → 203.208.60.1:80 的 ESTABLISHED 连接,PID 是 1234,但 pslist 里没有这个 PID:
- 先用
psscan确认 PID 1234 是否为隐藏进程;若有,记下其 Offset 地址 - 再用
ldrmodules -p 1234 -v查它的模块加载状态,找 “Load: No” 的条目 - 接着跑
malfind -p 1234,定位可疑内存页;导出后用strings搜http、POST、/api/等关键词 - 最后用
cmdline -p 1234看启动命令——如果为空或显示svchost.exe -k netsvcs这类标准模板,而实际行为异常,基本坐实恶意利用
最常被忽略的是:netscan 和 ldrmodules 的输出时间戳可能差几秒,而内存镜像本身是静态快照,所有结果必须基于同一时刻的内存状态交叉比对;不能把 pslist 的创建时间当成绝对依据,得信 psscan 扫出的物理地址和 netscan 的连接结构体偏移。

















