Volatility 3 워크플로¶
한 줄 요약
Volatility 3는 RAM 이미지를 실행 중이던 시스템이 갖고 있던 OS 구조로 파싱합니다 — 프로세스, 네트워크 연결, 로드된 모듈, 주입된 코드, 메모리의 레지스트리 하이브, 자격증명. 실행 중이던 것을 보기 때문에(디스크에 닿지 않은 파일리스 악성코드 포함) 디스크 아티팩트로는 답할 수 없는 질문에 답합니다. 이 페이지는 질문별 플러그인 워크플로이고, 수집이 먼저입니다.
설치¶
pip install volatility3 # or: git clone + pip install -e .
vol -h # 'vol' or 'python3 vol.py'
# Volatility 3 auto-detects the OS and builds symbols on the fly (no --profile like v2)
vol -f mem.raw windows.info # confirm it reads the image + OS build
vol -f mem.raw banners.Banners # Linux/Mac: find the kernel banner → get matching ISF symbols
Volatility 3에는 v2의 프로필이 없습니다 — OS를 자동으로 식별하고 심볼 테이블(ISF)을 내려받거나 만듭니다. Linux/macOS는 보통 맞는 심볼 테이블이 필요합니다: banners.Banners로 커널 배너를 얻고, 올바른 ISF JSON을 심볼 경로에 넣으세요(또는 dwarf2json으로 만드세요).
워크플로 — 질문별 플러그인¶
대략 이 순서로 실행하세요. 각 답이 다음 단계로 이어집니다.
1. 방향 잡기¶
vol -f mem.raw windows.info # OS, build, arch, time the image was taken
vol -f mem.raw windows.pslist # processes from the linked list (EPROCESS)
vol -f mem.raw windows.pstree # the same, as a parent/child tree — read this
읽기는 pstree에서 시작합니다: 수상한 부모→자식 쌍 (Office→셸, services.exe→이상한 자식), 부모가 없는 프로세스, 중복된 lsass/svchost를 찾으세요.
2. 숨겨진 프로세스 찾기¶
vol -f mem.raw windows.psscan # scans memory for EPROCESS signatures — finds UNLINKED (hidden) procs
# Compare pslist vs psscan: anything in psscan but NOT pslist was hidden (DKOM rootkit / terminated)
pslist는 OS 자체의 프로세스 목록을 따라가고(루트킷이 연결을 끊어 숨길 수 있음), psscan은 목록과 상관없이 원시 메모리에서 프로세스 객체를 카빙합니다. psscan에는 있고 pslist에는 없는 프로세스는 숨겨졌거나 최근에 종료된 것 — 둘 다 볼 가치가 있습니다.
3. 명령줄과 핸들¶
vol -f mem.raw windows.cmdline # full command line per process — the "what ran" gold
vol -f mem.raw windows.dlllist --pid 1234 # DLLs loaded by a process
vol -f mem.raw windows.handles --pid 1234 # files, keys, mutexes it holds (mutex = malware family marker)
vol -f mem.raw windows.getsids --pid 1234 # which user/SID it runs as
cmdline은 디스크 아티팩트가 단서만 주는 인코딩된 PowerShell, C2 URL, 도구 인수를 복구해 주는 경우가 많습니다.
4. 인젝션과 악성 코드¶
vol -f mem.raw windows.malfind # regions of memory that are RWX / private+executable with no backing file
vol -f mem.raw windows.malfind --dump # dump those regions for YARA / disassembly
vol -f mem.raw windows.hollowprocesses # process hollowing detection (image mismatch)
vol -f mem.raw windows.ldrmodules # DLLs in memory NOT in the 3 PEB load lists (unlinked/injected)
malfind는 코드 인젝션의 주력 도구입니다: 정상적으로 로드된 모듈이 아닌 실행 가능 메모리(셸코드, 리플렉티브 로딩된 페이로드, Cobalt Strike 비콘)를 찾습니다. 출력 읽는 법은 인젝션 페이지를 보세요.
5. 네트워크¶
vol -f mem.raw windows.netscan # TCP/UDP endpoints + owning PID (even closed/hidden ones)
vol -f mem.raw windows.netstat # active connections
netscan은 라이브 netstat이 놓쳤거나 이미 닫힌 연결을 복구합니다 — 목적지 IP는 비코닝/C2로, 소유 PID는 다시 pstree로 피벗하세요.
6. 지속성과 모듈¶
vol -f mem.raw windows.svcscan # services (incl. hidden) with binary paths
vol -f mem.raw windows.modules # loaded kernel modules (list)
vol -f mem.raw windows.modscan # scan for modules (finds unlinked = rootkit)
vol -f mem.raw windows.ssdt # SSDT hooks (kernel rootkit tampering)
vol -f mem.raw windows.registry.printkey --key "Software\\Microsoft\\Windows\\CurrentVersion\\Run"
7. 자격증명과 레지스트리¶
vol -f mem.raw windows.registry.hivelist # registry hives mapped in memory
vol -f mem.raw windows.hashdump # SAM local account NT hashes
vol -f mem.raw windows.lsadump # LSA secrets
vol -f mem.raw windows.cachedump # cached domain creds
자격증명과 레지스트리를 보세요 — Mimikatz 류의 비밀과 잠금 해제된 디스크 키는 메모리에 있습니다.
8. 더 깊은 분석을 위한 추출¶
vol -f mem.raw windows.dumpfiles --pid 1234 # cached files from a process's memory
vol -f mem.raw windows.pslist --dump # dump process executables
vol -f mem.raw windows.memmap --pid 1234 --dump # full address space of a process
# Then: strings, YARA, upload the dumped payload to a sandbox / VT
결과 읽기 — 반복 루프¶
flowchart LR
P[pstree: odd process?] --> C[cmdline: what did it run?]
C --> M[malfind: injected code?]
M --> N[netscan: talking to whom?]
N --> H[handles/dlllist: what does it touch?]
H --> D[dump: extract for YARA/sandbox]
D --> P
pstree의 수상한 프로세스 하나에 기준을 두고, 그 명령줄, 주입된 영역, 네트워크, 핸들을 차례로 보고, 마지막으로 덤프하세요. 디스크 아티팩트로 넘어가기: PID의 이미지 경로 → Prefetch/Amcache, 네트워크 IP → Zeek, 자격증명 → 횡적 이동.
주의할 점¶
- Linux/macOS 심볼: ISF가 없으면 분석도 없습니다. 배너를 얻고 심볼 테이블부터 맞추거나 만드세요.
- 수집 품질: 번진(smeared) 이미지(시스템이 매우 바쁠 때 떴거나 나쁜 도구로 뜬 것)는 구조가 일관되지 않습니다 — pslist/psscan이 엉뚱한 이유로 크게 어긋납니다. 믿을 만한 수집 도구를 쓰고 페이지 파일도 가져오세요.
- 시간:
windows.info가 이미지 시각을 알려 주고, 프로세스 타임스탬프는 UTC입니다. - v2와 v3는 플러그인 이름이 다릅니다: v3는
windows.pslist.PsList형태입니다(짧은windows.pslist도 동작).--profile과pslist를 쓰는 오래된 블로그 글은 Volatility 2입니다. - 메모리는 수집한 순간만 보여 줍니다 — 디스크/로그 타임라인을 대체하는 게 아니라 보완합니다.