dd不能可靠获取物理内存镜像,因其读取的是虚拟地址空间而非RAM芯片原始内容;真取证需用LiME等内核模块绕过内核直接映射物理页,或冷启动+硬件调试器采集。

dd 不能可靠获取物理内存镜像——它读的是虚拟地址空间,不是 RAM 芯片上的原始内容。真要提取被入侵服务器的物理内存镜像(RAM dump),必须绕过内核、直接访问硬件地址总线,否则拿到的只是被 rootkit 污染或篡改过的“假内存”。
为什么不能用 dd if=/dev/mem 或 /proc/kcore
dd if=/dev/mem 或 /proc/kcore
-
/dev/mem默认被内核禁用(CONFIG_STRICT_DEVMEM=y),即使开启也只映射低 1MB + BIOS 区域,无法读取全部 RAM; -
/proc/kcore是内核提供的虚拟内存视图,攻击者若已加载内核模块(如LiME的对手),可 hookread()系统调用隐藏进程、网络连接甚至自身代码; - 所有基于运行中 Linux 内核的工具(包括
volatility直接解析/proc/kcore)都存在取证可信度缺陷:你分析的可能是攻击者想让你看到的内存。
真正可用的物理内存采集方式只有两种
冷启动+硬件辅助(推荐但需停机)
关机后立即断电,用支持内存转储的调试器(如 JTAG 探针)连接主板北桥/内存控制器,通过专用固件读取 DRAM 行列地址。实操门槛高,仅限实验室或高端服务器(如 Dell iDRAC Enterprise、HPE iLO Advanced 含 Memory Snapshot 功能)。-
运行时内核模块采集(主流应急选择)
在系统仍运行、未重启前提下,加载轻量、无符号、一次性使用的内存采集模块,绕过内核安全机制直接读取物理页帧。目前最可靠的是:-
LiME(Linux Memory Extractor):编译为.ko模块,不依赖 /dev/mem,使用phys_to_page()+kmap_atomic()映射物理页,输出 raw 格式; - 必须在加载前确认:
- 内核版本与
LiME编译目标一致(uname -r和/lib/modules/$(uname -r)/build存在); - 关闭 KASLR(
cat /proc/cmdline | grep kaslr,若存在需临时禁用再重装模块); - 避免从可疑路径下载模块(攻击者可能劫持
curl或 DNS)——应提前把预编译好的lime-$(uname -r).ko放在可信 USB 设备中带入。
- 内核版本与
示例操作:
# 加载模块并输出到 /tmp/memory.lime(注意:不要写入 /var 或 /home,防止覆盖痕迹) sudo insmod lime-$(uname -r).ko "path=/tmp/memory.lime format=raw" <h1>等待完成(无进度提示,看 dmesg)</h1><p>dmesg | tail -5</p><div class="aritcle_card flexRow"> <div class="artcardd flexRow"> <a class="aritcle_card_img" href="/xiazai/skill8828" title="Obsidian (Linux)"><img src="https://img.php.cn/upload/skill/000/000/081/179228531040284.jpg" alt="Obsidian (Linux)" ></a> <div class="aritcle_card_info flexColumn"> <a href="/xiazai/skill8828" title="Obsidian (Linux)">Obsidian (Linux)</a> <p>操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。</p> </div> <a href="/xiazai/skill8828" title="Obsidian (Linux)" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div><h1>卸载模块(不留驻内存)</h1><p>sudo rmmod lime</p> -
采集后必须立刻验证完整性与可信度
- 计算 SHA256 并离线保存:
sha256sum /tmp/memory.lime > /tmp/memory.lime.sha256 - 不要依赖当前系统的
sha256sum—— 若命令被替换(md5sum /bin/sha256sum对比官方哈希),结果无效; - 更稳妥做法:用 Live USB 启动干净系统,挂载原盘后校验;
-
memory.lime文件大小应 ≈ 当前free -b | awk 'NR==2 {print $2}'输出值(允许 ±5% 偏差,因内核保留页)。
物理内存镜像不是“备份”而是“证据快照”,一旦重启或断电即永久丢失。能不能采到,取决于你是否在攻击者清除痕迹前,就意识到该用 LiME 而不是 ps aux。

















