druserx/larva
GitHub: druserx/larva
larva 结合 ETW 事件追踪与周期性内存扫描,实时检测 Windows 上常见的进程注入技术。
Stars: 0 | Forks: 0
# larva
Windows 进程注入监控工具。结合使用 ETW (Event Tracing for Windows) 和对内存区域的周期性扫描,实时检测常见的进程注入技术。
名字来源于拉丁语—— *larva* 意为“面具”或“幽灵”。对于监控隐藏在暗处的东西来说,这似乎很贴切。
## 检测技术
**内存扫描(周期性扫描):**
- 没有映射文件的 `PAGE_EXECUTE_READWRITE` 区域(`MEM_PRIVATE`)—— shellcode 或 reflective DLL loading 的经典特征
- 任意进程中匿名的可执行页面
- 从可疑路径(`\Temp\`、`\AppData\`、`\Downloads\` 等)加载的模块
**通过 ETW(`Microsoft-Windows-Kernel-Process`):**
- `Win32StartAddress` 指向可执行私有内存的线程 —— 标志着带有 shellcode 的 `CreateRemoteThread`
**使用 `-H` flag:**
- process hollowing:比较内存中与磁盘上文件的关键 PE header 字段(`e_magic`、`e_lfanew`、`Machine`)
## 用法
```
larva.exe [opcoes]
-p foca num processo específico
-i intervalo entre scans (padrão: 5000ms)
-e desativa ETW, só varredura de memória
-H ativa detecção de hollowing (mais lento)
-o salva alertas em arquivo de log
-v verboso
```
需要以 **管理员** 身份运行,才能获得对其他进程内存的完全访问权限并启动 ETW 会话。
## 编译
mingw-w64:
```
make
```
依赖项:`psapi`、`tdh`、`advapi32`(已包含在 MinGW-w64 中)
## 局限性
1. 通过 `Microsoft-Windows-Kernel-Process` 的 ETW 不会公开创建线程的 PID —— 只有目标 PID。要精确追踪来源,需要使用 `Microsoft-Windows-Threat-Intelligence` provider,这要求具有 PPL 或内核 driver。
2. hollowing 检测比较的是 PE header 字段,而不是节区的内容。重定位和合法的补丁可能会导致 header 出现差异 —— 在生产环境中请谨慎使用 `-H`。
3. RWX 区域在某些 JVM 和动态语言 runtime 中是合法存在的。如果要监控特定目标,请使用 `-p` 按进程进行过滤。
## 参考
- [ETW 深入探究 — Matt Graeber](https://posts.specterops.io/data-source-analysis-and-dynamic-windows-re-using-wpp-and-tracelogging-e465f8b653f7)
- [检测进程注入 — endgame.com](https://www.endgame.com/blog/technical-blog/ten-process-injection-techniques-technical-survey-common-and-trending-process)
- Windows Internals Part 1,第 3 章(进程与线程)
标签:AMSI绕过, ETW, 内存扫描, 威胁检测, 客户端加密, 防御侧