mcpField
M
memory-forensics-evasion

memory-forensics-evasion

github.com/wgpsecセキュリティ1.8k46 回インストール4 日前に更新
リポジトリ

memory-forensics-evasion について

ブルーチームとレッドチームの両面からメモリフォレンジックを扱うセキュリティスキルです。Volatility3の分析手順や検出指標に加え、メモリ解析による検出を回避する手法も解説します。

主な機能

  1. 01メモリ取得と分析の手順
  2. 02Volatility3プラグインの判断ツリー
  3. 03プロセスとコードインジェクションの指標
  4. 04メモリフォレンジック回避技術
  5. 05関連ツールのクイックリファレンス

活用シーン

  1. 01メモリイメージから不審なプロセスを分析
  2. 02コードインジェクションやルートキットの指標を確認
  3. 03レッドチーム手法によるメモリ分析回避の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/wgpsec/aboutsecurity --skill memory-forensics-evasion

インストール後、Claude Code で/memory-forensics-evasionを入力して読み込まれたか確認します。

同梱ファイルreferences/anti-memory-forensics.mdreferences/volatility3-cheatsheet.md

詳細

プロジェクトの README より

内存取证与反内存取证

双面视角:理解蓝队如何从内存中找到你 → 设计红队对策让自己不被找到

⛔ 深入参考


Part A: 蓝队视角 — 内存取证分析流程

Phase 1: 内存获取
# Windows (DumpIt)
DumpIt.exe /OUTPUT memory.raw

# Windows (WinPmem)
winpmem_mini_x64.exe memory.raw

# Linux (LiME)
sudo insmod lime-$(uname -r).ko "path=memory.lime format=lime"

# 远程 (Velociraptor)
# 通过 Velociraptor agent 远程获取内存
Phase 2: Volatility3 分析决策树
内存分析目标?
├─ 发现恶意进程 → windows.pslist / windows.psscan / windows.cmdline
├─ 发现注入代码 → windows.malfind / windows.hollowprocesses
├─ 提取网络连接 → windows.netscan / windows.netstat
├─ 提取凭据 → windows.hashdump / windows.lsadump
├─ 发现隐藏进程 → windows.psscan(扫描已释放 EPROCESS)
├─ Rootkit 检测 → windows.ssdt / windows.callbacks
└─ 提取文件 → windows.filescan / windows.dumpfiles

核心命令:

# 系统信息
vol -f mem.raw windows.info

# 进程列表(链表遍历 → 已 unlink 的看不到)
vol -f mem.raw windows.pslist

# 进程扫描(池标签扫描 → 能找到隐藏进程)
vol -f mem.raw windows.psscan

# ⛔ 对比 pslist vs psscan → 差异 = 隐藏进程
# pslist 有但 psscan 无 → 异常
# psscan 有但 pslist 无 → 被 unlink 的进程(Rootkit)

# 注入检测(PAGE_EXECUTE_READWRITE 内存区域)
vol -f mem.raw windows.malfind

# 网络连接
vol -f mem.raw windows.netscan

# DLL 列表
vol -f mem.raw windows.dlllist --pid <PID>

# 命令行参数
vol -f mem.raw windows.cmdline
Phase 3: 关键检测指标
蓝队检测项含义
RWX 内存页 (malfind)进程注入/Shellcode
父进程异常 (svchost→cmd)恶意进程创建链
pslist ≠ psscan进程隐藏(DKOM)
同名异路径进程进程伪装
异常 VAD 标签内存区域被篡改
SSDT/IDT hookRootkit
网络连接到异常端口C2 通信

Part B: 红队视角 — 反内存取证

策略 1: 避免被 malfind 发现
malfind 原理:扫描 PAGE_EXECUTE_READWRITE 的 VAD 节点
├─ 对策 1: 分配时用 RW,写入 shellcode 后改为 RX(不要 RWX)
├─ 对策 2: 使用 NtMapViewOfSection 映射 → 权限为 SECTION_MAP_EXECUTE
├─ 对策 3: Module Stomping — 覆盖合法 DLL 的 .text 节
└─ 对策 4: 使用回调执行(APC/Timer)→ 不创建远程线程
策略 2: 避免进程异常
父子进程关系审计绕过:
├─ Parent PID Spoofing → 伪造正常父进程
├─ 使用合法签名进程执行 → LOLBins
├─ 进程名/路径完全模仿 → svchost.exe 在正确路径
└─ 命令行参数正常化 → 不留异常 cmdline
策略 3: 内存加密(Sleep Mask)
Cobalt Strike Sleep Mask 原理:
1. Beacon 进入 Sleep 状态前 → 加密自身在内存中的代码段
2. 加密期间 → malfind 只看到随机数据,无 MZ 头/PE 特征
3. 唤醒时 → 解密执行 → 完成任务 → 再加密

现代 C2 实现:
├─ Havoc: Ekko/Zilean sleep obfuscation(加密 + 更改内存保护)
├─ Sliver: 无需 sleep mask(Go 二进制特征不同)
├─ BRC4: 自带 heap 加密
└─ 自定义: SystemFunction032 (RC4) + VirtualProtect(RW)
策略 4: 避免 Credential Dump 暴露
蓝队会检查 LSASS 访问:
├─ 对策: 用 MiniDumpWriteDump 的替代方式(NanoDump/HandleDuplicate)
├─ 对策: SSP 注入代替直接读取
├─ 对策: 使用 comsvcs.dll 的 MiniDump 导出函数
└─ 对策: Kerberos 票据攻击代替直接 dump
策略 5: 清除内存痕迹
⛔ 注意:内存获取通常是一次性快照,不像日志可以被删除
最佳策略:从一开始就不留痕迹(预防 > 清除)

有限清除手段:
├─ Unmap 已用内存区域 → VirtualFree
├─ 清除线程调用栈 → 伪造 Call Stack
├─ 结束并清理 worker 线程 → 不留挂起线程
└─ Module 卸载 + 内存置零

对照表:取证技术 vs 红队对策

取证技术发现什么红队对策
pslist/psscan 对比隐藏进程不隐藏进程,伪装合法进程
malfind注入代码Module Stomping + RW→RX
netscanC2 连接使用合法流量混淆
hashdump凭据被提取使用 Kerberos 代替 NTLM
handles打开的文件/注册表用完即关闭 handle
callbacks/SSDTRootkit hook避免内核操作
YARA scan内存中的恶意特征Sleep Mask 加密

工具速查

工具用途方向
Volatility3内存取证框架蓝
MemProcFS内存文件系统化分析蓝
WinDbg内核调试/分析蓝
BeaconEye检测 CS Beacon蓝
Moneta检测内存注入蓝
Sleep Mask KitCS sleep 加密红
SysWhispers3直接 syscall(绕 hook)红
NanoDumpLSASS 低检测 dump红

コメント