Volatility Plugins for Memory Triage
TL;DR: Volatility’s plugin catalogue turns a raw memory dump into process trees, injected-code reports, and credential material — pick Vol3 for modern Windows, fall back to Vol2 only for legacy profiles.
What it is
Volatility is the de-facto open-source memory-forensics framework. Volatility 2 (Python 2, profile-based) parses Windows XP through 10 1809 reliably; Volatility 3 (Python 3, symbol-table based) covers Windows 10/11 and Server 2019/2022 but has a smaller plugin set and slightly different output schema. Plugins are organised by intent: process enumeration (pslist, psscan, pstree), injected code (malfind, hollowfind), credentials (hashdump, lsadump, mimikatz), and network (netscan, netstat). DFIR uses them to answer “what was running, what was hidden, and what secrets were in RAM” at the moment of capture.
Preconditions / where it applies
- Raw, crash-dump, or hibernation-file image;
VMware .vmem,Hyper-V .bin+.vsv, andVirtualBox .savneed conversion (vol2 imagecopyorvmss2core) - Vol3 auto-detects the OS via PDB symbols downloaded from Microsoft — air-gapped analyst boxes need a pre-populated
symbolsdirectory - Acquire with
WinPMEM,DumpIt,Magnet RAM Capture, orLiME(Linux); avoidprocdump -mafor full-system work - Known gaps: pagefile is not in RAM dumps — combine with
MemProcFSor a disk image to follow paged-out pages
Technique
Triage flow for an unknown Windows dump:
1
2
3
4
5
6
7
8
9
10
# Vol3
vol -f mem.raw windows.info # confirm build + KDBG
vol -f mem.raw windows.pslist
vol -f mem.raw windows.psscan # pool-scan, finds unlinked procs
vol -f mem.raw windows.pstree
vol -f mem.raw windows.malfind --dump-dir ./malfind # RWX + no file backing
vol -f mem.raw windows.cmdline
vol -f mem.raw windows.netscan
vol -f mem.raw windows.hashdump
vol -f mem.raw windows.lsadump # LSA secrets, autologon creds
pslist walks PsActiveProcessHead, so a rootkit unlinking from that list disappears; psscan carves _EPROCESS from the pool and recovers it — a delta between the two is a textbook hidden-process IOC. malfind flags VADs that are PAGE_EXECUTE_READWRITE with no mapped file — classic reflective-DLL or shellcode signature; dump the region and run capa or YARA against it. For credential theft investigations, Vol2 still ships mimikatz and hollowfind plugins that have no Vol3 equivalent yet — keep Python 2 + Vol2 around in a venv:
1
2
vol2.py -f mem.raw --profile=Win10x64_19041 mimikatz
vol2.py -f mem.raw --profile=Win10x64_19041 hollowfind
Detection and defence
- Anti-forensics: kernel-mode rootkits hook
NtQuerySystemInformationto hide processes — defeated bypsscan; userland packers (VMProtect, Themida) inflatemalfindfalse-positive rate so always corroborate with strings/imports - Direct memory anti-acquisition (DMA blocking,
SecureBootDMA) can refuseWinPMEM; pre-deploy an EDR-side memory dumper that runs in kernel mode - Hardening: enable Credential Guard so
lsadumpandmimikatzreturn only blobs; enable HVCI to constrain RWX allocations and shrink themalfindhaystack - Tampering signals:
pslistcount differs frompsscancount,_EPROCESSwithDirectoryTableBase=0, kernel modules signed by revoked certs inwindows.modules
References
- Volatility 3 documentation — plugin index and symbol setup
- Volatility Foundation GitHub — source and issue tracker
See also: memory-image-forensics, traffic-analysis, mft-analysis.