cumakurt/memforge
GitHub: cumakurt/memforge
MemForge 是一个专注于生成带元数据文件的 Linux 内存转储工具,解决在加固系统上可靠采集物理内存与进程内存的问题。
Stars: 1 | Forks: 0
# MemForge
MemForge 是一个专注于创建转储工件的 Linux 内存采集工具。

| | |
|---|---|
| **维护者** | Cuma KURT — [cumakurt@gmail.com](mailto:cumakurt@gmail.com) |
| **源码** | [github.com/cumakurt/memforge](https://github.com/cumakurt/memforge) |
## 功能
- **`memforge dump`** — 捕获内存并写入转储工件以及包含元数据(哈希、主机、内核、方法、大小)的侧车文件 `.memforge.json`。
- 默认模式为 **物理内存**,写入 **未压缩的原始线性内存**。
- 使用 `--compress` 输出 `.zst` 格式。
- 使用 `--type process --pid ` 进行进程转储。
- 输出可以是文件路径或目标目录(`-o`)。
- **`memforge doctor`** — 快速检查主机物理采集能力(`/dev/mem` 和 `memforge_kac` 就绪状态)。
- **`memforge kac`** — 用于捆绑的 `memforge-kac` 内核模块的辅助命令。
## 安装
### 标准安装(`/usr/local/bin/memforge`)
```
git clone https://github.com/cumakurt/memforge.git && cd memforge
chmod +x install.sh && sudo ./install.sh
```
默认安装到 `/usr/local`,构建发布二进制文件,并在未设置 `INSTALL_MEMFORGE_KAC=0` 时构建 `memforge-kac`。
### 静态独立二进制文件(项目根目录下的单个文件)
```
git clone https://github.com/cumakurt/memforge.git && cd memforge
chmod +x install_static.sh && ./install_static.sh
```
这会在仓库根目录生成静态二进制文件:
- `./memforge-static`(默认)
可选:
```
OUT_NAME=memforge ./install_static.sh
TARGET_TRIPLE=x86_64-unknown-linux-musl ./install_static.sh
SKIP_PACKAGE_INSTALL=1 ./install_static.sh
```
## 内核模块(`memforge-kac`)详解
`memforge-kac` 是位于 `memforge-kac/` 中的树外 Linux 内核模块。
它的存在是为了在用户空间访问 `/dev/mem` 被内核加固(常见为 `STRICT_DEVMEM` 或相关策略)限制时,提供备用采集路径。
### 为何需要此模块
在许多现代 Linux 系统上,通过 `/dev/mem` 读取完整物理内存受到限制。
典型行为包括:
- 极低范围可能可读,
- 随后读取因 `Permission denied` 失败,或
- 生成的工件不完整。
MemForge 使用以下策略:
- 优先尝试 `/dev/mem`(默认物理路径),
- 若无法读取完整内存,则在可用时使用 `memforge-kac` 备用(回退)。
没有该模块,在加固内核上完整物理转储可能无法实现。
### 何时需要它
应在以下情况构建/加载 `memforge-kac`:
- `memforge doctor` 报告 `/dev/mem` 限制,
- 物理转储因访问错误而过早失败,
- 需要在生产内核上可靠完成完整物理采集。
可以跳过的情况:
- `/dev/mem` 在你的环境和使用场景中可用,
- 仅执行进程转储(`--type process`),
- 有意避免加载内核模块。
### 安全与权限说明
- 构建/加载内核模块需要 root 权限。
- 模块运行在内核空间;应将其视为敏感代码。
- 仅在你被授权进行内存采集的系统上使用。
- 保持与运行内核(`uname -r`)匹配的内核头文件。
### 自动模块构建(推荐)
两种安装器均支持自动依赖检测与模块构建:
- `./install.sh`(标准安装)
- `./install_static.sh`(静态独立构建)
默认行为是构建 `memforge-kac`。
如需显式跳过模块构建:
```
INSTALL_MEMFORGE_KAC=0 ./install.sh
INSTALL_MEMFORGE_KAC=0 ./install_static.sh
```
### 手动模块构建与加载(逐步操作)
如需完全手动控制:
1. 安装与运行内核匹配的 kernel headers
```
uname -r
# 安装与当前内核版本匹配的头文件/开发包
```
各发行版示例:
```
# Debian / Ubuntu / Kali
sudo apt-get update
sudo apt-get install -y "linux-headers-$(uname -r)"
# Fedora
sudo dnf install -y kernel-devel kernel-headers
# RHEL / Rocky / Alma / CentOS
sudo dnf install -y kernel-devel kernel-headers
# 或(旧系统)
sudo yum install -y kernel-devel kernel-headers
# Arch / Manjaro
sudo pacman -Sy --needed linux-headers
# openSUSE / SLES
sudo zypper --non-interactive install -y kernel-default-devel kernel-devel
# 备用方案:
sudo zypper --non-interactive install -y kernel-devel
# Alpine
sudo apk add --no-cache linux-headers
```
2. 构建模块
```
cd memforge-kac
make
```
预期输出工件:
- `memforge-kac/memforge_kac.ko`
3. 加载模块
```
sudo insmod ./memforge_kac.ko
```
备用方式(若安装在模块树中):
```
sudo modprobe memforge_kac
```
4. 验证模块是否活跃
```
lsmod | grep memforge_kac
test -e /proc/memforge_kac/control && echo "control interface ready"
```
5. 可选卸载
```
sudo rmmod memforge_kac
```
### 故障排查
- 加载模块时提示 `No such file or directory`:
- 模块是为不同于 `uname -r` 的内核版本构建的。
- `Invalid module format`:
- 内核 ABI/版本不匹配;请使用匹配的头文件重新构建。
- `Operation not permitted`:
- 需要 root 权限或受模块加载策略限制(例如安全启动锁定)。
- 在 `make -C /lib/modules/.../build` 中构建失败:
- 缺少或版本不匹配的内核头文件/开发包。
### 实用建议
对于大多数用户,保持默认安装行为(自动构建模块),
运行 `memforge doctor`,然后使用:
```
memforge dump --type physical --physical-backend auto
```
这将优先尝试 `/dev/mem`,并通过 `memforge-kac` 提供可靠的回退路径。
## 常用命令
```
memforge dump
memforge dump -o /path/to/dir/
memforge dump -o /path/file.zst
memforge dump --type process --pid 1234 -o ./proc1234.zst
memforge doctor
memforge kac status
```
使用 `memforge <子命令> --help` 查看选项。
## 环境(可选)
`RUST_LOG`、`MEMFORGE_CONFIG_DIR`、`MEMFORGE_PREFIX`、`MEMFORGE_KAC_KO`、`MEMFORGE_AUTOLOAD_KAC`
## 法律声明
仅将本工具用于 **授权** 的安全工作、取证和合法管理。
## 许可证
**AGPL-3.0-only** — 详见 [`LICENSE`](LICENSE)。
## 链接
[问题反馈](https://github.com/cumakurt/memforge/issues) · [SECURITY.md](SECURITY.md) · [CHANGELOG.md](CHANGELOG.md)
标签:devmem, dump artifacts, JARM, Linux内存获取, Linux系统工具, MemForge, raw memory dump, Ruby on Rails, SecList, zstd压缩, 内存分析, 内存取证, 内存取证实践, 内存取证工具, 内存取证技术, 内存取证方法, 内存取证流程, 内存转储, 内存采集, 内存镜像, 内核模块, 内核模块加载, 压缩内存, 取证工具, 可视化界面, 子域名枚举, 安全资源, 库, 应急响应, 开源取证, 数字取证, 物理内存, 系统安全, 自动化脚本, 进程内存, 通知系统