reverseame/malscan
GitHub: reverseame/malscan
一个 Volatility 3 内存取证插件,结合 ClamAV 签名扫描与字节级启发式规则来检测 Windows 内存转储中的隐藏和注入代码并降低误报。
Stars: 3 | Forks: 1
# MalScan — Volatility 3 插件
`MalScan` 是一个 [Volatility 3](https://github.com/volatilityfoundation/volatility3) 插件,用于检测 Windows 内存转储中的**隐藏和注入代码**。它的工作原理与官方的 [`malfind`](https://volatility3.readthedocs.io/en/latest/volatility3.plugins.windows.html#module-volatility3.plugins.windows.malfind) 插件类似,但它利用 **ClamAV** 来减少误报。
[](https://www.gnu.org/licenses/agpl-3.0)
## 工作原理
对于每个进程,`MalScan` 会遍历 VAD 树,并选择看起来可能包含注入代码的区域(与原始插件的标准相同):
- 使用 `--full-scan` 时:原始保护属性为可执行的每个 VAD。
- 默认情况下:具有 `EXECUTE`+`WRITE` 保护属性且匹配已知注入
模式的 VAD(来自 `VirtualAlloc` 的私有 `VadS`、Stuxnet 风格的映射区域,或
主 `.exe` 模块以捕获进程镂空)。
每个候选区域都会使用 **ClamAV**(通过其 Unix socket)进行扫描。如果 ClamAV
未将其标记,则会应用一组基于字节特征的启发式规则:可疑的 PE header、
函数序言(`push ebp ; mov ebp, esp`),或者基址处被擦除的 PE header。
如果 ClamAV 不可用,插件会透明地回退到仅使用启发式规则。
## 安装说明
必须安装 [Volatility 3](https://github.com/volatilityfoundation/volatility3) 和 ClamAV。你可以使用 [setup.sh](setup.sh) 来安装依赖项:
- 系统:`clamav`, `clamav-daemon`
- Python:`volatility3`
安装 ClamAV 后,确保 daemon 正在运行并暴露其 Unix socket
(默认路径:`/run/clamav/clamd.ctl`)。你可能需要重启系统。
然后在运行时使用 `-p` / `--plugin-dirs` 传递插件目录,或者将
`malscan.py` 和 `clamav.py` 一起复制到 `volatility3/framework/plugins/windows/` 目录下。
## 用法
```
usage: vol.py malscan.MalScan [-h] [--pid [PID ...]] [--full-scan]
[--clamd-socket CLAMD-SOCKET]
Scan with ClamAV for hidden and injected code.
--pid [PID ...] Process IDs to include (all other processes are excluded)
--full-scan Scan every VAD marked as executable
--clamd-socket CLAMD-SOCKET Path to the clamd Unix socket (default: /run/clamav/clamd.ctl)
```
示例(Windows x64 镜像,`pretty` 渲染器):
```
$ vol.py -r pretty -p /path/to/malscan -f /path/to/memory.dump malscan.MalScan
Volatility 3 Framework 2.28.1
| PID | Process | Start | End | Tag | Protection | CommitCharge | PrivateMemory | Result | Hexdump | Disasm
* | 2420 | svchost.exe | 0x53a0000 | 0x53a0fff | VadS | PAGE_EXECUTE_READWRITE | 1 | 1 | Suspicious function prologue | 55 48 8d 2c 24 48 83 ec 20 ... | 0x53a0000: push rbp
| | | | | | | | | | 48 8b 01 48 8b 49 08 ff d0 ... | 0x53a0001: lea rbp, [rsp]
| | | | | | | | | | | 0x53a0005: sub rsp, 0x20 ...
```
当 ClamAV 识别出某个区域时,`Result` 列会转而显示签名名称
(例如 `Win.Trojan.Alina-4`);否则会报告上述的一种字节启发式
结果。`Disasm` 列需要可选的 `capstone` 包。
## 许可证
采用 [GNU AGPLv3](LICENSE) 许可证授权。
(c) RME-DisCo Research Group, University of Zaragoza (Spain)。访问我们的网站了解更多关于我们的信息!https://www.reversea.me
标签:ClamAV, SecList, Volatility3, Web 安全测试, 内存取证, 逆向工具