
어떤 메모리 덤프든 살펴보세요. 숨겨진 것을 찾아내세요. 단일 정적 Rust 바이너리로 Linux + Windows 커널 포렌식 — Python이 필요 없습니다.
Windows 커널을 스스로 프로파일링하는 메모리 포렌식 툴킷 — Volatility 3과 프로세스 하나하나 대조 검증됩니다.
mem4n6는 모든 일반적인 덤프 형식(LiME, AVML, ELF core, Windows crash dumps, hibernation files, VMware save-states, kdump, raw…)을 읽고 프로세스, 스레드, 모듈, 네트워크 연결, 그리고 인젝션된 메모리를 탐색합니다 — 한 번 컴파일하면 어디든 복사해 사용할 수 있는 단일 정적 바이너리로, Python도, 런타임도, 사전에 준비된 심볼 카탈로그도 필요 없습니다. Windows에서는 자체 프로필을 구축합니다: 실제 메모리에서 ntoskrnl을 찾고, CodeView 레코드에서 PDB GUID를 읽고, 일치하는 Volatility-3 ISF를 해석하고, 최신 KASLR 환경에서 커널 베이스를 복구하며, 심볼 테이블에서 PsActiveProcessHead를 재구성합니다 — Volatility 3와 MemProcFS가 사용하는 동일한 자체 프로파일링 체인을 Rust로 재구현한 것입니다.
증거 도구의 기준은 정확성이므로, 프로세스 워커는 독립적인 참조 구현 — Volatility 3 — 과 실제 2 GB Windows 10 이미지에서 대조 검증됩니다 (참조 구현이 일치한다는 것은 강력한 증거이지 증명은 아니며, 원본 바이트가 진실입니다):
windows.pslist on DESKTOP-SDN1RPT.mem | mem4n6 vs Volatility 3 |
|---|---|
| 일치한 프로세스 | 공유 PID 94 / 94 — PID, PPID, 이름, 생성 시간 정확히 일치 |
| 놓친 프로세스 (vol3가 찾았지만 mem4n6는 못 찾음) | 0 |
| 오탐 (mem4n6가 찾았지만 vol3는 못 찾음) | 0 |
mem4n6는 Volatility 3와 정확히 일치합니다 — 양방향 ActiveProcessLinks 탐색을 통해 라이브 수집 스미어(smear)로 고아가 된 11개 프로세스까지 복구합니다. 두 번째 독립 오라클(MemProcFS)도 깨끗한 하위 집합을 확인해 줍니다 — 그 77개 프로세스 process_list는 mem4n6의 집합에 완전히 포함되며, MemProcFS 전용 프로세스는 0개입니다 (상세 내역). 전체 차등 분석 및 재현 절차는 docs/validation.md를 참조하세요.
cargo install mem4n6로 설치하거나, 최신 릴리스에서 미리 빌드된 정적 바이너리를 받으세요 — Linux 빌드는 static-PIE(musl: 어디든 복사 가능, glibc 불필요)이며, macOS, Windows, 그리고 SHA-256 checksums.txt가 함께 제공됩니다.
또는 소스에서 빌드하세요 (~명령어 하나):```bash git clone https://github.com/SecurityRonin/memory-forensic.git cd memory-forensic && cargo build --release ./target/release/mem4n6 --help
해당 개발 빌드는 libc를 동적으로 링크합니다. 릴리스의 완전 정적 바이너리를 로컬에서 재현하려면 musl 타깃을 추가하세요: `rustup target add x86_64-unknown-linux-musl && cargo build --release --target x86_64-unknown-linux-musl`.```bash
# Inspect any dump — format, ranges, embedded metadata (no symbols needed)
mem4n6 info win10.mem
# Windows process tree. The ISF is resolved from the kernel's own PDB GUID;
# raw .mem dumps take the page-table base via --cr3 (crash dumps carry their own).
mem4n6 ps --symbols ntkrnlmp.json --cr3 0x1ad000 --tree win10.mem
# Linux process tree from a LiME capture
mem4n6 ps --symbols linux.json --tree memdump.lime
# Air-gapped lab? Never touch the network for symbols:
mem4n6 ps --symbols ntkrnlmp.json --offline win10.mem
심볼 파일은 ISF JSON입니다 — Volatility 3가 사용하는 것과 동일한 팩이므로 기존 심볼 캐시를 그대로 사용할 수 있습니다.
mem4n6는 우리가 아는 한, 전체 덤프 → 커널 스캔 → PDB-GUID → 심볼 해석 → DTB 체인을 구현한 유일한 Rust 구현체입니다. 기술 계보 — WinDbg의 심볼 서버, Brendan Dolan-Gavitt의 pdbparse, Rekall, Volatility 3, 그리고 Ulf Frisk의 MemProcFS — 는 잘 정립되어 있습니다. mem4n6는 이를 클린룸 방식으로 재구현하고 결과를 기준 구현과 대조 검증합니다. MemNixFS는 동일한 memory-as-a-filesystem 아이디어를 Linux 덤프에 적용합니다 — 마운트 후 탐색이며, ISF가 없을 때 커널 자체의 BTF에서 심볼을 파생합니다. 위의 n/a 셀들은 (Linux 이미지 및 파일시스템 UX 대비 mem4n6의 Windows 검증 CLI 탐색기) 범위 차이를 나타내며, 결함이 아닙니다. 부트 로우 스텁 / PROCESSOR_START_BLOCK 앵커는 Alex Ionescu의 REcon 2017 Getting Physical을 따릅니다.
git clone https://github.com/SecurityRonin/memory-forensic.git cd memory-forensic cargo build --release ./target/release/mem4n6 --help
---
## 빠른 참조```bash
# Show dump format and physical memory ranges
mem4n6 info memdump.dmp
# Process tree with threads and DLLs
mem4n6 ps --symbols ntkrnlmp.json --tree --threads --dlls memdump.dmp
# Network connections (json / csv / table)
mem4n6 net --symbols ntkrnlmp.json --output json memdump.dmp
# Kernel integrity checks (SSDT, IDT, callbacks, hooks)
mem4n6 check --symbols ntkrnlmp.json --ssdt --callbacks memdump.dmp
# Linux syscall hook and malfind scan
mem4n6 check --symbols linux.json --hooks --malfind memdump.lime
# String extraction with YARA rules
mem4n6 strings --rules ./yara-rules/ --min-length 8 memdump.dmp
# Hash lookup against NSRL (known-good) and MalwareBazaar (known-bad)
mem4n6 hash --lookup memdump.dmp
# Extract framebuffer screenshot from live memory dump
mem4n6 framebuf --symbols linux.json --png screen.png memdump.dmp
# Recover files from tmpfs mounts + detect memfd fileless ELF execution
mem4n6 check --symbols linux.json --tmpfs-recovery --memfd memdump.lime
# Detect EDR bypass: direct syscalls, ETW patching, AMSI/DSE bypass
mem4n6 check --symbols ntkrnlmp.json --direct-syscalls --etw-patch --amsi-bypass memdump.dmp
# Novel kernel interface abuse: io_uring, netfilter hooks, perf_event
mem4n6 check --symbols linux.json --io-uring --netfilter --perf-event memdump.lime
# Cross-artifact ATT&CK correlation across all walkers
mem4n6 correlate --symbols ntkrnlmp.json --output json memdump.dmp
Symbol files are ISF JSON, compatible with Volatility 3 symbol packs.
mem4n6 check --symbols linux.json --hooks --idt --syscalls memdump.lime
I need to translate chunk 11 of 47 of a Markdown document from English to Korean, but the input content provided is empty. There is no text to translate.```
[HOOK] sys_call_table[59] execve → 0xffffffffc0a2f3d0 (outside kernel text)
[HOOK] ftrace_ops[0] target: vfs_read → 0xffffffffc0a2f410 (module: libymv_ko)
[HOOK] security_inode_getattr → 0xffffffffc0a2f450 (LSM hook patched)
세 가지 후크 유형(시스콜 테이블, ftrace, LSM)이 모두 동일한 커널 모듈로 귀결됩니다. 모듈 목록을 상호 참조하면 해당 모듈이 알려진 정상(known-good) 집합에 포함되지 않음을 확인할 수 있습니다.
이름 패턴 매칭은 재컴파일되거나 이름이 변경된 루트킷 변종을 놓칩니다. ELF 동적 심볼 분석은 이름과 관계없이 이를 탐지합니다.```bash mem4n6 check --symbols linux.json --elf-hooks memdump.lime
Please provide the Markdown content to translate.```
[ROOTKIT] /tmp/.x/libhider.so signals=[elf.hooks.process_hiding, elf.hooks.pam_credential_theft]
exports: readdir64, getdents64, pam_get_item, pam_authenticate
MITRE: T1014 (Rootkit), T1556.003 (Modify Authentication Process)
loaded in 100% of processes (23/23)
[ROOTKIT] /tmp/.x/libhider.so .rodata match: "UID:%d:" (Father PAM hook format string, weight=90)
memf-linux은 프로세스 메모리에 매핑된 모든 라이브러리를 검사하여 다음을 찾습니다:
.rodata에 포함된 형식 문자열 (예: UID:%d:, silly.txt)은 바이너리 스트리핑 및 이름 변경 후에도 유지됩니다mem4n6 check --symbols ntkrnlmp.json --dpapi-keys memdump.dmp
mem4n6 check --symbols ntkrnlmp.json --browser-cookies memdump.dmp
No content was provided in the INPUT section. Please provide the chunk content to translate.```
[DPAPI] GUID={A1B2C3D4-...} blob_len=680 source=lsass.exe
[COOKIE] msedge.exe domain=.github.com name=user_session value=secretvalue...
[COOKIE] chrome.exe (v10-encrypted) — key material required for decryption
The Windows credential walkers cover:
g_MasterKeyCache 연결 리스트를 탐색하고, 캐시된 모든 마스터 키에 대한 GUID + 암호화된 blob을 추출합니다v10/v20 + 12바이트 nonce)에 대한 바이너리 스캔; 키 자료가 사용 가능할 때 복호화됩니다mem4n6 framebuf --symbols ntkrnlmp.json --png screen.png memdump.dmp
라이브 또는 최대 절전 메모리 덤프에서 프레임버퍼를 추출하여 PNG로 저장합니다. Linux(DRM/KMS `drm_framebuffer` 워커)와 Windows(`win32k` 풀 스캔을 통한 세션 프레임버퍼) 모두에서 작동합니다. 이미지를 부팅하지 않고 획득 시점의 화면 상태를 캡처하는 데 유용합니다.
---
## 디스크에 닿은 적 없는 파일 복구
tmpfs나 `memfd_create(2)`를 사용하는 공격자는 파일 시스템에 흔적을 남기지 않습니다 — 바이너리는 RAM에만 존재합니다.```bash
# Recover inodes and file content from Linux tmpfs/ramfs mounts
mem4n6 check --symbols linux.json --tmpfs-recovery memdump.lime
# Detect ELF binaries running from anonymous memfd file descriptors
mem4n6 check --symbols linux.json --memfd memdump.lime
Please provide the Markdown content to translate.``` [TMPFS] /tmp/.x (dev=tmpfs) 3 inodes recovered inode 12: ELF x86_64 size=847KB sha256=deadbeef... (no disk copy) inode 13: config.sh size=1.2KB content recovered inode 14: keys.txt size=512B content recovered
[MEMFD] pid=2341 (python3) fd=4 name="" size=3.4MB ELF x86_64 No path on disk — binary executed entirely from anonymous memory. MITRE: T1620 (Reflective Code Loading)
tmpfs 복구는 커널 `vfsmount` 테이블을 순회하고 페이지 캐시 페이지에서 inode 콘텐츠를 재구성합니다. memfd 탐지는 모든 프로세스의 열린 파일 디스크립터 테이블을 순회하고 `memfd_create(2)`로 생성된 익명 inode에 플래그를 지정합니다.
---
## EDR 우회 및 로그 억제 탐지
최신 공격 도구는 디스크를 건드리지 않고 탐지를 회피하기 위해 메모리에서 Windows 보안 계측을 패치합니다.```bash
# Direct syscalls — Syswhispers/Hell's Gate bypass Win32 API entirely
mem4n6 check --symbols ntkrnlmp.json --direct-syscalls memdump.dmp
# ETW patching — log suppression via ret/xor at ETW write functions
mem4n6 check --symbols ntkrnlmp.json --etw-patch memdump.dmp
# AMSI bypass — script-scanning suppression via amsi.dll patch
mem4n6 check --symbols ntkrnlmp.json --amsi-bypass memdump.dmp
# DSE bypass — Driver Signature Enforcement disabled for unsigned drivers
mem4n6 check --symbols ntkrnlmp.json --dse-bypass memdump.dmp
Please provide the Markdown content to translate.``` [DIRECT-SYSCALL] powershell.exe (PID 4412) stub at 0x7ff800a1000 mov r10,rcx / mov eax,0x3c / syscall — NtCreateThreadEx bypassing ntdll MITRE: T1055.012 (Process Injection: Process Hollowing)
[ETW-PATCH] svchost.exe (PID 1200) EtwEventWrite → ret at offset +0 Expected: 4C 8B DC Got: C3 90 90 (patched to immediate return) MITRE: T1562.006 (Impair Defenses: Indicator Blocking)
[AMSI-BYPASS] powershell.exe (PID 4412) AmsiScanBuffer → xor eax,eax / ret MITRE: T1562.001 (Impair Defenses: Disable or Modify Tools)
[DSE-BYPASS] g_CiEnabled=0 CipInitialize patch detected MITRE: T1014 (Rootkit), T1553.006 (Subvert Trust Controls)
---
## 새로운 Linux 커널 인터페이스 악용
고전적인 syscall 훅을 넘어, 현대의 루트킷은 더 새로운 커널 하위 시스템을 악용합니다. `memory-forensic`은 세 가지를 모두 다룹니다:```bash
mem4n6 check --symbols linux.json --io-uring --netfilter --perf-event memdump.lime
No input content was provided after "INPUT:". Please provide the actual chunk text so it can be translated.``` [IO_URING] pid=3311 (malware) ring at 0x7f0000000000 ops=1024 pending SQPOLL thread pinned to cpu=0 — I/O continues without process context MITRE: T1071 (Application Layer Protocol)
[NETFILTER] NF_INET_PRE_ROUTING hook[0] → 0xffffffffc0b31240 (outside kernel text) Module not in module list — DKOM-hidden or manually unmapped MITRE: T1014 (Rootkit)
[PERF-EVENT] pid=1 (systemd) type=HARDWARE cpu=-1 overflow_handler patched → 0xffffffffc0b31500 MITRE: T1056 (Input Capture)
---
## 컨테이너 탈출 지표```bash
mem4n6 check --symbols linux.json --container-escape memdump.lime
[No content provided in the INPUT section. Please paste the Markdown chunk you wish to have translated.]``` [CONTAINER-ESCAPE] pid=8801 (bash) shares host user namespace uid_map: 0 0 4294967295 (full host UID range — privileged mapping) cgroup: / (host root cgroup, not namespaced) mount ns: host (same as pid 1) MITRE: T1611 (Escape to Host)
모든 프로세스에 대해 user, mount, PID, net, cgroup 네임스페이스를 순회하고, 격리되어야 하지만 호스트 수준 네임스페이스를 공유하는 프로세스에 플래그를 지정합니다 — 이는 달성 방법과 관계없이 컨테이너 탈출의 구조적 시그니처입니다.
---
## 아티팩트 간 ATT&CK 상관관계
`memf-correlate`는 워커를 하나씩 실행할 필요 없이 모든 워커의 발견 결과를 타임라인으로 결합하고, 이상 징후를 심각도별로 점수화하며, 각각을 MITRE ATT&CK 기법에 매핑합니다:```bash
mem4n6 correlate --symbols ntkrnlmp.json --output json memdump.dmp > findings.json
The INPUT section is empty — no content was provided to translate. Please provide the chunk text and I'll translate it.```json { "technique": "T1055.012", "name": "Process Hollowing", "severity": "critical", "evidence": [ { "source": "vad", "detail": "svchost.exe VAD 0x140000–0x160000 RWX, no backing file" }, { "source": "ldrmodules","detail": "module in VAD but absent from InLoadOrderList" }, { "source": "iat_hooks", "detail": "CreateRemoteThread IAT entry patched → 0x14001a30" } ], "process": { "name": "svchost.exe", "pid": 1200, "ppid": 508 } }
Process, network, module, hook, and credential walker results are correlated by process and time before scoring — producing ATT&CK-tagged findings rather than per-walker output that an analyst must join manually.
---
## 지원되는 메모리 포맷
| 포맷 | 소스 | 자동 감지 |
|---|---|---|
| LiME (`.lime`) | Linux 커널 모듈 | 예 |
| AVML v2 | Azure AVML | 예 |
| ELF Core | QEMU, `gcore` | 예 |
| Windows 크래시 덤프 (`.dmp`) | DumpIt, WinDbg | 예 |
| Hiberfil.sys | Windows 최대 절전 모드 / 빠른 시작 | 예 |
| VMware 상태 (`.vmss`, `.vmsn`) | VMware Workstation / ESXi | 예 |
| kdump / diskdump | `makedumpfile` | 예 |
| Raw / flat | 모든 폴백 | 예 |
포맷은 파일 헤더에서 감지됩니다 — 별도의 플래그가 필요하지 않습니다.
---
## 차별점
가장 가까운 대안은 **Volatility 3** (Python, 플러그인 아키텍처), **MemProcFS** (Rust 바인딩을 포함한 C, 주로 Windows), **Rekall** (Python, 유지보수되지 않음), 그리고 **MemNixFS** (C++, Linux 덤프를 파일시스템으로 마운트)입니다. 아래 비교는 각 도구의 공식 코어와 알려진 플러그인 저장소를 반영합니다. MemNixFS는 파일시스템 UX로 *Linux* 이미지를 대상으로 하므로 mem4n6의 페이지 캐시 파일 복구를 공유하지만 Windows 자체 프로파일링 및 EDR 우회 행에 대해서는 `n/a`입니다.
### 패리티 — 성숙한 도구와 공유하는 기능
| | memory-forensic | Volatility 3 | MemProcFS | MemNixFS | Rekall |
|--|:-:|:-:|:-:|:-:|:-:|
| Linux + Windows 커널 워커 | ✅ | ✅ | Windows 우선 | Linux 전용 | ✅ |
| 프로세스, 모듈, 네트워크 열거 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 인젝션 메모리 탐지 | ✅ | ✅ | ✅ | ✅ | ✅ |
| ISF 심볼 팩 호환 | ✅ | ✅ | — | ✅ | — |
| Linux / macOS에서 실행 | ✅ | ✅ | 부분 | Linux + Win | ✅ |
| 활발히 유지보수 중 | ✅ | ✅ | ✅ | ✅ | — |
| 무료 및 오픈 소스 | ✅ | ✅ | ✅ | 라이선스 없음 | ✅ |
### 다른 도구의 공식 배포판에는 없는 기능
| | memory-forensic | Volatility 3 | MemProcFS | MemNixFS | Rekall |
|--|:-:|:-:|:-:|:-:|:-:|
| 단일 정적 바이너리 — Python 없음, 런타임 없음 | ✅ | — | — | 부분 | — |
| Rust 도구에 내장하기 위한 라이브러리 API | ✅ | — | ✅ | — | — |
| ELF 동작 기반 루트킷 핑거프린팅 | ✅ | — | — | — | — |
| tmpfs / ramfs 파일 복구 | ✅ | — | — | ✅ | — |
| memfd 무파일 실행 탐지 | ✅ | — | — | — | — |
| 직접 syscall / EDR 우회 탐지 | ✅ | plugin? | — | n/a | — |
| ETW / AMSI / DSE 우회 탐지 | ✅ | plugin? | — | n/a | — |
| io_uring / netfilter / perf\_event 남용 | ✅ | — | — | — | — |
| 컨테이너 탈출 지표 | ✅ | — | — | — | — |
| DPAPI 키 + Chrome 쿠키 추출 | ✅ | plugin? | — | n/a | — |
| 메모리에서 Shellbags 폴더 접근 증거 ‡ | ✅ | — | — | n/a | — |
| 프레임버퍼 스크린샷 | ✅ | plugin? | — | — | — |
| 교차 아티팩트 ATT&CK 상관 분석 | ✅ | — | — | — | — |
| 안전한 출력 — RFC 4180, 수식 주입 가드, bidi 제거 | ✅ | — | — | — | — |
> **`plugin?`** — 해당 기능은 작성 시점에 Volatility 3 커뮤니티 생태계에 존재할 수 있지만 공식 코어 및 플러그인 저장소에는 없습니다. 결론 내리기 전에 확인하세요.
>
> **‡ 메모리에서 Shellbags** — Volatility 2는 RAM에서 shellbags를 복구했습니다(커뮤니티 `shellbags` 플러그인, Kovar 그다음 Lo). Volatility 3는 이를 다시 포팅하지 않았으므로 vol2→vol3 전환 과정에서 메모리 전용 shellbag 복구가 퇴보했습니다. mem4n6는 메모리 내 `UsrClass.dat`/`NTUSER.DAT` 하이브에서 `Shell\BagMRU`를 직접 탐색하여, 디스크를 획득하지 않은 RAM 전용 사례에 대해 vol2 시대의 기능을 복원하거나, 디스크의 하이브를 보강합니다. 디스크가 *있는* 경우의 일반적인 방법은 이미지를 마운트하고 하이브 파일에 대해 SBECmd / RegRipper를 실행하는 것입니다. 메모리 탐색은 하이브를 덤프한 후 파싱하는 2단계 과정을 하나로 축소합니다. 검증은 **tier-2**입니다. `citadeldc01.mem`에서 추출한 하이브에 대해 `regipy`로 도출한 ground truth를 사용합니다. Szechuan 사례에 대해 게시된 제3자 shellbag 정답 키가 없으므로, 이는 자체 도출된 오라클(실제 도구 + 실제 이미지)이며 제3자 키가 아닙니다.
---
## 신뢰하되 검증하라
**신뢰할 수 없고 공격자가 제어할 수 있는** 메모리 이미지를 파싱하는 도구는 거짓말을 거부하고 충돌을 거부해야 합니다. mem4n6는 그 기준에 맞춰 설계되었습니다:
- **적대적인 입력에 대해 린트로 패닉 방지.** 파싱 경로는 `unwrap`/`expect`/`panic!` 및 검사되지 않은 인덱싱을 거부하며(`clippy::unwrap_used`/`expect_used` = deny), 모든 길이, 오프셋, 포인터 읽기는 경계 검사를 거쳐 우아하게 저하됩니다 — 흐트러진 프로세스 목록은 발견한 내용을 반환할 뿐 중단되지 않습니다. (빌더 API는 프로그래머 오류 — 필수 필드 누락 — 에 대해서만 패닉하며, 덤프 내용으로는 절대 패닉하지 않습니다.)
- **기본적으로 메모리 안전.** 작업공간 전체에서 `unsafe_code = "deny"`; 유일한 `unsafe`는 제한적인 `memmap2` 파일 매핑(덤프, 페이지 파일, 알려진 정상 해시 DB)이며 각각 개별적으로 정당화됩니다 — 따라서 *금지* 대신 *제한적(mmap 전용)* 배지를 사용합니다.
- **자체 픽스처뿐만 아니라 독립적인 오라클로 검증.** Windows 프로세스 워커는 실제 2 GB Win10 이미지에서 Volatility 3와 비교되며, 공유된 모든 프로세스에 대해 정확히 일치하고 오탐이 없습니다 ([`docs/validation.md`](https://github.com/securityronin/memory-forensic/blob/HEAD/docs/validation.md)).
- **안전한 출력.** 모든 채널(테이블/CSV/JSON)은 공격자가 제어하는 문자열이 터미널이나 파이프라인에 도달하기 전에 RFC 4180 인용, 스프레드시트 수식 주입 가드, bidi/제어 문자 제거를 적용합니다.
---
## 라이브러리 사용```rust
use mem4n6_format::open;
use mem4n6_core::vas::{TranslationMode, VirtualAddressSpace};
use mem4n6_core::object_reader::ObjectReader;
use mem4n6_symbols::isf::IsfResolver;
// Open any supported format — detected from file headers
let dump = open("memdump.dmp")?;
let symbols = IsfResolver::from_file("ntkrnlmp.json")?;
// Walk the x86_64 4-level page table
let vas = VirtualAddressSpace::new(dump.clone(), TranslationMode::X64, cr3);
let reader = ObjectReader::new(vas, Box::new(symbols));
// Walk EPROCESS list
for proc in reader.eprocess_list()? {
println!("{} (PID {})", proc.image_name()?, proc.pid()?);
}
issen — issen mem4n6 하위 명령어는 이 워크스페이스에서 직접 메모리 수집 및 트라이지 보고를 구동합니다.
Andrew Case 및 Volatility Foundation — 이 프로젝트는 이들의 ISF 형식 및 플러그인 아키텍처와 심볼 호환이 가능합니다.
Brendan Dolan-Gavitt — DKOM 및 VAD 기반 프로세스 은닉에 대한 연구는 숨겨진 프로세스 탐지 워커에 영향을 주었습니다.
Ulf Frisk / MemProcFS — 파일시스템-메모리 인터페이스 모델과 포렌식 모드 설계는 이 라이브러리가 복구된 아티팩트를 노출하는 방식에 영향을 미쳤습니다.
jam1garner — binrw 덕분에 선언적 바이너리 형식 파싱으로 포맷 레이어를 안전하고 읽기 쉽게 만들 수 있었습니다.
S12 — Kernel Dynamic Offset Resolution Using PDB Symbols 글은 덤프에서 ntoskrnl PE를 스캔하고, CodeView PDB GUID를 추출하고, 런타임에 msdl.microsoft.com에서 일치하는 PDB를 가져오는 전체 체인을 문서화했습니다. 이 기법은 memf-symbols의 AutoProfile 구현에 직접적인 영감을 주었습니다.
Alex Ionescu — Getting Physical With USB Type-C: Windows 10 RAM Forensics and UEFI Attacks (REcon Brussels 2017)는 HAL의 HalpLowStub가 문서화되지 않은 PROCESSOR_START_BLOCK임을 문서화했습니다. 즉, 낮은 물리 메모리 앵커( 0x1000–0x100000 범위에서 서명 스캔됨)로, 커널 CR3/DTB 및 커널 VA 힌트를 보유합니다. 이는 memf-symbols에서 find_low_stub와 헤더 없는 DTB/커널 베이스 복구의 기초입니다.
Microsoft Symbol Server (msdl.microsoft.com) — 모든 Windows 커널 빌드에 대한 공개 PDB 파일을 호스팅해 주셨습니다. 이는 사전 준비된 심볼 파일 없이도 런타임 심볼 해석을 가능하게 하는 업스트림입니다.
| mem4n6 | Volatility 3 | MemProcFS | MemNixFS |
|---|
| 배포 | Rust · 단일 정적 바이너리 | Python · 인터프리터 + 의존성 | C(+Rust) · 라이브러리 | C++ · 파일시스템 마운트 |
| Windows 자체 프로파일링 (스캔 → PDB GUID → 심볼) | ✅ | ✅ | ✅ | n/a — Linux 덤프 |
| 부트 로우 스텁 + 페이지 단위 커널 베이스를 통한 헤더 없는 DTB | ✅ | 자체 참조 PML4 + 이미지 스캔 | ✅ 로우 스텁 | n/a — Linux |
| 오프라인 / air-gapped 심볼 모드 | ✅ --offline | ISF 팩 또는 네트워크 | 심볼 / 네트워크 | ✅ BTF-from-dump |
신뢰할 수 없는 덤프에서 패닉 없음 (unsafe-deny; 파싱 경로에서 unwrap/expect 거부됨) | ✅ | — | — | — (C++) |
| Volatility 3와 교차 검증됨 | ✅ (docs/validation.md) | — (기준 구현) | — | — |
| 크레이트 | 용도 |
|---|
memf-format | 형식 감지 및 물리 메모리 제공자. LiME, AVML, ELF Core, Windows 크래시 덤프, hiberfil.sys, VMware 상태, kdump 및 원시 플랫 이미지용 파서. |
memf-core | 페이지 테이블 워킹(x86_64 4레벨/5레벨, AArch64, x86 PAE/non-PAE), 커널 구조체 탐색용 고수준 ObjectReader, 페이지파일 접근, LZO 압축 해제, 그리고 프레임버퍼→PNG 스크린샷 인코딩(Linux EFI/VESA 및 Windows win32k 프레임버퍼 워커와 함께 사용). |
memf-linux | Linux 커널 워커: task_struct 프로세스 목록, 네트워크 연결, 커널 모듈, 열린 파일, eBPF 프로그램, ftrace/IDT/syscall 후크 탐지, 네임스페이스 및 cgroup 열거, DKOM으로 숨겨진 프로세스 탐지, 컨테이너 탈출 징후, ELF 동적 심볼 분석 및 LD_PRELOAD 루트킷 행동 지문 분석, 라이브러리 전역 보급 탐지, 그리고 약 45개의 추가 워커. |
memf-windows | Windows NT 커널 워커: EPROCESS/ETHREAD 열거, DLL 및 드라이버 목록, 핸들 테이블, 네트워크 소켓, 풀 태그 스캐닝, 콜백 테이블, SSDT, ETW, 클립보드, DNS 캐시, Kerberos 티켓, LSASS g_MasterKeyCache에서 DPAPI 마스터 키 추출, Chrome v10/v20 AES-GCM 암호화 쿠키 탐지, BitLocker 키, SAM/NTLM 해시, 주입된 메모리 탐지, 그리고 약 55개의 추가 워커. |
memf-strings | 문자열 추출(ASCII, UTF-8, UTF-16LE) 및 IoC 범주(URL, IP 주소, 도메인, 레지스트리 키, 암호화폐 지갑 주소, 개인 키, 셸 명령)로의 정규식 분류. |
memf-symbols | ISF JSON, BTF(Linux) 및 PDB 파일에서 심볼 해석. AutoProfile 포함 — 제로 구성 Windows 커널 구조체 해석: 덤프에서 ntoskrnl을 스캔하고 msdl.microsoft.com에서 정확한 PDB를 가져와 파싱한 후 SymbolResolver를 반환합니다. 심볼 파일이 필요 없습니다. |
memf-correlate | MITRE ATT&CK 기법 태깅, 프로세스 트리 재구성, 이상 징후 점수화 및 타임라인 생성을 통한 교차 아티팩트 상관 분석. |
forensic-hashdb | 오탐(FP) 제로 해시 데이터베이스: NSRL/CIRCL 알려진 양성 조회, MalwareBazaar/VirusShare 알려진 악성 조회, 그리고 내장된 loldrivers.io 취약 Windows 드라이버 해시. |