Mapped every skill to NIST CSF 2.0 subcategory IDs (GV/ID/PR/DE/RS/RC functions)
based on subdomain and content analysis. Restores 11 skills corrupted during
prior rebase, re-enriching with ATLAS, D3FEND, NIST AI RMF, and CSF 2.0 fields.
All 754 skills now carry structured mappings for all 5 security frameworks:
- MITRE ATT&CK (in tags)
- MITRE ATLAS v5.5 (atlas_techniques)
- MITRE D3FEND v1.3 (d3fend_techniques)
- NIST AI RMF 1.0 (nist_ai_rmf)
- NIST CSF 2.0 (nist_csf)
Analyze memory dumps using Volatility3 plugins to detect injected code, rootkits, credential theft, and malware artifacts in Windows, Linux, and macOS memory images.
cybersecurity
malware-analysis
memory-forensics
volatility3
malware-analysis
incident-response
process-injection
rootkit-detection
dfir
1.0
mahipal
Apache-2.0
Executable Denylisting
Execution Isolation
File Metadata Consistency Validation
Content Format Conversion
File Content Analysis
DE.AE-02
RS.AN-03
ID.RA-01
DE.CM-01
Performing Memory Forensics with Volatility3 Plugins
Overview
Volatility3 (v2.26.0+, feature parity release May 2025) is the standard framework for memory forensics, replacing the deprecated Volatility2. It analyzes RAM dumps from Windows, Linux, and macOS to detect malicious processes, code injection, rootkits, credential harvesting, and network connections that disk-based forensics cannot reveal. Key plugins include windows.malfind (detecting RWX memory regions indicating injection), windows.psscan (finding hidden processes), windows.dlllist (enumerating loaded modules), windows.netscan (active network connections), and windows.handles (open file/registry handles). The 2024 Plugin Contest introduced ETW Scan for extracting Event Tracing for Windows data from memory.
When to Use
When conducting security assessments that involve performing memory forensics with volatility3 plugins
When following incident response procedures for related security events
When performing scheduled security testing or auditing activities
When validating security controls through hands-on testing
Prerequisites
Python 3.9+ with volatility3 framework installed
Memory dump files (.raw, .dmp, .vmem, .lime)
Windows symbol tables (ISF files, auto-downloaded)
Understanding of Windows process memory architecture
YARA integration for in-memory pattern scanning
Workflow
Step 1: Process Analysis for Malware Detection
#!/usr/bin/env python3"""Volatility3-based memory forensics automation for malware analysis."""importsubprocessimportjsonimportsysimportosclassVol3Analyzer:"""Automate Volatility3 plugin execution for malware analysis."""def__init__(self,dump_path,vol3_path="vol"):self.dump_path=dump_pathself.vol3=vol3_pathself.results={}defrun_plugin(self,plugin,extra_args=None):"""Execute a Volatility3 plugin and capture output."""cmd=[self.vol3,"-f",self.dump_path,"-r","json",plugin,]ifextra_args:cmd.extend(extra_args)try:result=subprocess.run(cmd,capture_output=True,text=True,timeout=300)ifresult.returncode==0:returnjson.loads(result.stdout)except(subprocess.TimeoutExpired,json.JSONDecodeError)ase:print(f" [!] {plugin} failed: {e}")returnNonedefdetect_process_injection(self):"""Use malfind to detect injected code regions."""print("[+] Running windows.malfind (code injection detection)")results=self.run_plugin("windows.malfind")injected=[]ifresults:forentryinresults:injected.append({"pid":entry.get("PID"),"process":entry.get("Process"),"address":entry.get("Start VPN"),"protection":entry.get("Protection"),"hexdump":entry.get("Hexdump","")[:200],})print(f" [!] Injection in PID {entry.get('PID')} "f"({entry.get('Process')}) at {entry.get('Start VPN')}")self.results["injected_processes"]=injectedreturninjecteddeffind_hidden_processes(self):"""Compare pslist vs psscan to find hidden processes."""print("[+] Running process comparison (pslist vs psscan)")pslist=self.run_plugin("windows.pslist")psscan=self.run_plugin("windows.psscan")ifnotpslistornotpsscan:return[]list_pids={e.get("PID")foreinpslist}scan_pids={e.get("PID")foreinpsscan}hidden=scan_pids-list_pidsifhidden:print(f" [!] {len(hidden)} hidden processes found!")forentryinpsscan:ifentry.get("PID")inhidden:print(f" PID {entry['PID']}: {entry.get('ImageFileName')}")self.results["hidden_processes"]=list(hidden)returnlist(hidden)defanalyze_network(self):"""Extract active network connections."""print("[+] Running windows.netscan")results=self.run_plugin("windows.netscan")connections=[]ifresults:forentryinresults:conn={"pid":entry.get("PID"),"process":entry.get("Owner"),"local":f"{entry.get('LocalAddr')}:{entry.get('LocalPort')}","remote":f"{entry.get('ForeignAddr')}:{entry.get('ForeignPort')}","state":entry.get("State"),"protocol":entry.get("Proto"),}connections.append(conn)self.results["network_connections"]=connectionsreturnconnectionsdefextract_dlls(self,pid=None):"""List loaded DLLs per process."""print(f"[+] Running windows.dlllist{f' (PID {pid})'ifpidelse''}")args=["--pid",str(pid)]ifpidelseNoneresults=self.run_plugin("windows.dlllist",args)dlls=[]ifresults:forentryinresults:dlls.append({"pid":entry.get("PID"),"process":entry.get("Process"),"base":entry.get("Base"),"name":entry.get("Name"),"path":entry.get("Path"),"size":entry.get("Size"),})self.results["loaded_dlls"]=dllsreturndllsdefscan_with_yara(self,rules_path):"""Scan memory with YARA rules."""print(f"[+] Running windows.yarascan with {rules_path}")results=self.run_plugin("windows.yarascan",["--yara-file",rules_path])matches=[]ifresults:forentryinresults:matches.append({"rule":entry.get("Rule"),"pid":entry.get("PID"),"process":entry.get("Process"),"offset":entry.get("Offset"),})self.results["yara_matches"]=matchesreturnmatchesdeffull_triage(self):"""Run full malware-focused memory triage."""print(f"[*] Full memory triage: {self.dump_path}")print("="*60)self.detect_process_injection()self.find_hidden_processes()self.analyze_network()returnself.resultsif__name__=="__main__":iflen(sys.argv)<2:print(f"Usage: {sys.argv[0]} <memory_dump>")sys.exit(1)analyzer=Vol3Analyzer(sys.argv[1])results=analyzer.full_triage()print(json.dumps(results,indent=2,default=str))
Validation Criteria
Memory dump successfully parsed with correct OS profile
Injected processes detected via malfind with RWX regions
Hidden processes identified through pslist/psscan comparison
Network connections reveal C2 communication endpoints
YARA rules match known malware signatures in memory
Credential artifacts extracted from lsass process memory