Memory acquisition is the single highest-value action in the first 30 minutes of a Windows IR. Everything that happens after the system reboots — the disk imaging, the log analysis, the timeline reconstruction — is working with incomplete information without the memory image.
Memory Acquisition Tools Comparison
| Tool | Method | Fleet Support | Output Format | Best For |
|---|---|---|---|---|
| WinPmem | Kernel driver | Manual | Raw .raw | Single system, open source |
| Magnet RAM Capture | Kernel driver | Manual | Raw .mem | Single system, GUI |
| Velociraptor | VQL artifact | Yes (fleet) | Raw or compressed | Enterprise IR |
| DumpIt | Kernel driver | Manual | Raw .dmp | Quick single-host |
| FTK Imager | Kernel driver | Manual | .mem / .ad1 | When already using FTK |
Fleet acquisition via Velociraptor:
# Velociraptor artifact for fleet memory acquisition
name: Windows.Memory.Acquisition
sources:
- query: |
SELECT upload(
file=pathspec(
DelegatePath=winpmem(),
Path="/"),
name=format(format="memory_%s.raw",
args=[hostname()])
) AS Upload
FROM scope()
Step-by-Step Memory Acquisition
Option A: WinPmem (CLI)
# Run from USB/network share, output to network share
# Requires admin privileges
# Acquire to network share
.\winpmem_mini_x64_rc2.exe \\forensic-server\case\$(hostname)_memory.raw
# Verify hash immediately after acquisition
Get-FileHash \\forensic-server\case\$(hostname)_memory.raw -Algorithm SHA256
Get-FileHash \\forensic-server\case\$(hostname)_memory.raw -Algorithm MD5
# Document:
# - Acquisition start time
# - Acquisition end time
# - System uptime at acquisition (systeminfo | findstr "System Boot")
# - Tool version
# - Both hash values
Option B: Magnet RAM Capture (GUI)
1. Run as Administrator from USB media
2. Set destination to \\forensic-server\case\ (network share)
3. Click "Capture Memory"
4. After completion: SHA256 and MD5 hashes displayed in output log
5. Copy hash values to chain of custody form
Option C: Velociraptor Live Response (Remote)
# From Velociraptor server — collect memory from suspect host without
# physically touching the system
velociraptor query \
'SELECT * FROM Artifact.Windows.Memory.Acquisition()' \
--org default \
--client [CLIENT_ID]
# Memory image collected and stored in Velociraptor server's file store
# Accessible via web interface for download and analysis
Documenting the Acquisition
Chain of custody starts at acquisition. Every acquisition must be documented:
FORENSIC ACQUISITION RECORD
Case number: IR-2024-089
Date/time (UTC): 2024-09-02T18:30:00Z
Analyst: M. Torres
System hostname: WS-JSMITH-01
System IP: 10.1.2.33
System uptime: 4 days 7 hours (system boot: 2024-08-29T11:15:00Z)
Acquisition tool: WinPmem v4.0.rc1
Tool hash (SHA256): [tool binary hash — proves tool integrity]
Tool run from: USB media (E:\)
Output location: \\forensic-server\case\IR-2024-089\
Artifacts collected:
1. Physical memory image
File: WS-JSMITH-01_memory_20240902T1830.raw
Size: 16,384 MB (16 GB RAM)
Acquisition duration: 00:18:42
MD5: 9b4c2f1d3e8a7b6c5d4e3f2a1b0c9d8e
SHA256: 4a3f7e2c8b1d5e9f3c7a2e6b4d8f1a5c...
2. Network state (netstat)
File: WS-JSMITH-01_netstat_20240902T1825.txt
Captured before memory acquisition
MD5: 2d7f3a1c...
3. Process list
File: WS-JSMITH-01_processes_20240902T1826.csv
MD5: 5e9c4b2a...
Analyst signature: [digital or physical signature]
Witness (if applicable): [name]
Key Memory Artifacts for IR
After acquisition, initial triage with Volatility or MemProcFS targets:
# 1. Process list comparison (detect DKOM rootkits)
vol.py -f memory.raw windows.pslist
vol.py -f memory.raw windows.psscan
# Compare: processes in psscan not in pslist = DKOM-hidden
# 2. Active network connections
vol.py -f memory.raw windows.netscan
# Look for: ESTABLISHED connections to external IPs from unusual processes
# 3. Injection detection
vol.py -f memory.raw windows.malfind
# Look for: MZ header in private executable memory regions
# 4. Command line history
vol.py -f memory.raw windows.cmdline
# Look for: encoded PowerShell, LOLBin arguments, lateral movement commands
# 5. Credential extraction (high sensitivity)
vol.py -f memory.raw windows.hashdump
# Output: NTLM hashes — treat as live credentials