Analyzing Memory Forensics with LiME and Volatility
When to Use
- When investigating security incidents that require analyzing memory forensics with lime and volatility
- When building detection rules or threat hunting queries for this domain
- When SOC analysts need structured procedures for this analysis type
- When validating security monitoring coverage for related attack techniques
Detection Gaps & Validation
- Acquisition smear is the #1 false negative: LiME captures memory live, so page tables and process lists shift mid-dump on a busy host. A torn capture makes
linux.pslistwalk a brokentask_structlist and silently drop processes. Preferformat=lime(timestamped, structured) overformat=raw, capture with the box as quiet as possible, and hash the image immediately. - Profile/symbol mismatch yields empty output: Volatility 3 needs an ISF symbol table matching the exact kernel (
uname -r+ build). A wrong banner makes every Linux plugin return nothing — that is a tooling failure, not a clean host. Verify withvol3 -f mem.lime banners.Bannersbefore concluding negative. pslistvspsscan: rootkits unlinktask_structfrom the active list. Always difflinux.pslistagainstlinux.psscan(pool/scan-based) — a process in psscan but not pslist is a hidden-process indicator.- LKM rootkits hook syscalls:
linux.lsmodonly shows registered modules; a module that unregisters itself won't appear. Corroborate withlinux.check_syscall/linux.check_afinfofor hooked syscall and netfilter pointers, andlinux.malfindfor injected/anonymous executable VMAs. - Validate the workflow fires: run a benign test (e.g., a
nclistener + a deleted-but-running binary) on the lab host, capture, and confirmlinux.sockstatshows the socket andlinux.bashrecovers the command history before trusting results on evidence.
Prerequisites
- Familiarity with security operations concepts and tools
- Access to a test or lab environment for safe execution
- Python 3.8+ with required dependencies installed
- Appropriate authorization for any testing activities
Instructions
Acquire Linux memory using LiME kernel module, then analyze with Volatility 3 to extract forensic artifacts from the memory image.
# LiME acquisition
insmod lime-$(uname -r).ko "path=/evidence/memory.lime format=lime"
# Volatility 3 analysis
vol3 -f /evidence/memory.lime linux.pslist
vol3 -f /evidence/memory.lime linux.bash
vol3 -f /evidence/memory.lime linux.sockstat
import volatility3
from volatility3.framework import contexts, automagic
from volatility3.plugins.linux import pslist, bash, sockstat
# Programmatic Volatility 3 usage
context = contexts.Context()
automagics = automagic.available(context)
Key analysis steps:
- Acquire memory with LiME (format=lime or format=raw)
- List processes with linux.pslist, compare with linux.psscan
- Extract bash command history with linux.bash
- List network connections with linux.sockstat
- Check loaded kernel modules with linux.lsmod for rootkits
Examples
# Full forensic workflow
vol3 -f memory.lime linux.pslist | grep -v "\[kthread\]"
vol3 -f memory.lime linux.bash
vol3 -f memory.lime linux.malfind
vol3 -f memory.lime linux.lsmod