vtomasv/lab13-dll-injection-novnc
GitHub: vtomasv/lab13-dll-injection-novnc
该项目是一个基于 Docker 的 DLL 注入与木马分析实验室,通过 noVNC 提供浏览器内图形桌面,帮助威胁猎手练习高级内存注入技术与 EDR 绕过检测。
Stars: 0 | Forks: 0
# 🔬 LAB 13 — DLL 注入与木马分析 (noVNC)
**MAR404 — 威胁追踪**
**Universidad Mayor — 高级网络防御培训**
**第 07 课 — 内存取证 (高级)**
## 描述
基于 Docker 的完整实验室环境,提供可通过 **noVNC**(Web 浏览器)访问的 XFCE 图形桌面。旨在研究和练习 2024-2025 年威胁行为者所使用的最先进的内存注入与 EDR 绕过技术。
### 涵盖技术
| # | 技术 | MITRE ATT&CK | 描述 |
|---|---------|--------------|-------------|
| 1 | Reflective DLL Injection | T1055.001 | 无需 LoadLibrary/dlopen 加载库 |
| 2 | DLL Side-Loading | T1574.002 | OneDriveUpdater.exe + 恶意 version.dll |
| 3 | Module Stomping | T1055 | 覆盖内存中的合法模块 |
| 4 | 现代木马 | T1055.012 | Emotet, Qakbot, Raspberry Robin |
| 5 | Direct Syscalls | T1106 | 通过直接系统调用绕过 EDR hooks |
| 6 | Unhooking + Sleep Obfuscation | T1027 | 恢复 ntdll + 在 sleep 时加密 beacon |
## 要求
- **Docker** >= 20.10
- **Docker Compose** >= 2.0
- 至少 **4 GB RAM** 可用内存
- **6080 端口** 空闲 (noVNC)
- 现代 Web 浏览器 (Chrome, Firefox, Edge)
## 快速开始
```
# 1. 克隆仓库
git clone https://github.com/YOUR_USER/lab13-dll-injection-novnc.git
cd lab13-dll-injection-novnc
# 2. 构建并启动容器
docker-compose up -d --build
# 3. 通过浏览器访问桌面
# 打开:http://localhost:6080
# 4. VNC 密码:hunter2025
```
### 替代访问方式 (直接 VNC)
```
# 如果你更喜欢原生的 VNC 客户端:
vncviewer localhost:5900
# Password: hunter2025
```
## 仓库结构
```
lab13-dll-injection-novnc/
├── README.md # Este archivo
├── docker-compose.yml # Orquestación del contenedor
├── docker/
│ ├── Dockerfile # Imagen base (Ubuntu + XFCE + noVNC)
│ └── entrypoint.sh # Script de inicio (VNC + noVNC)
├── labs/
│ ├── 01-reflective-dll/ # Lab 1: Reflective DLL Injection
│ │ ├── reflective_loader.c # Loader que inyecta SO reflectivamente
│ │ ├── payload.c # Payload (shared object malicioso)
│ │ ├── detector.c # Herramienta de detección
│ │ └── Makefile
│ ├── 02-dll-sideloading/ # Lab 2: DLL Side-Loading
│ │ ├── sideload_demo.c # Simulación de OneDriveUpdater.exe
│ │ ├── libversion_malicious.c # version.dll maliciosa (proxy DLL)
│ │ ├── sideload_detector.sh # Script de detección
│ │ └── Makefile
│ ├── 03-module-stomping/ # Lab 3: Module Stomping
│ │ ├── module_stomping.c # Demostración de stomping
│ │ ├── stomping_detector.py # Detector (compara mem vs disco)
│ │ └── Makefile
│ ├── 04-trojans-memory/ # Lab 4: Troyanos Modernos
│ │ └── trojan_profiler.py # Perfilador interactivo
│ ├── 05-edr-direct-syscalls/ # Lab 5: Direct Syscalls
│ │ ├── direct_syscalls.c # Demo de syscalls directas vs glibc
│ │ ├── syscall_stub.asm # Stub en NASM (x86-64)
│ │ └── Makefile
│ └── 06-edr-unhooking-sleep/ # Lab 6: Unhooking + Sleep Obfuscation
│ ├── unhooking_demo.c # Demo completa
│ ├── sleep_monitor.c # Monitor de sleep obfuscation
│ └── Makefile
├── scripts/
│ └── run_all_labs.sh # Menú interactivo para ejecutar labs
├── tools/
│ └── yara_rules/
│ └── dll_injection.yar # Reglas YARA de detección
└── docs/
└── GUIA_LABORATORIO.md # Guía didáctica completa
```
## 实验室使用说明
### 选项 1:交互式菜单
进入容器后(通过 noVNC 或终端):
```
cd /home/hunter
./scripts/run_all_labs.sh
```
这将打开一个交互式菜单,您可以在其中单独选择每个实验。
### 选项 2:手动执行
```
# 进入容器
docker exec -it dll-analyst bash
# 导航到所需的 lab
cd /home/hunter/labs/01-reflective-dll
# 编译
make
# 运行演示
make demo
```
### 选项 3:编译全部
```
docker exec -it dll-analyst bash -c "cd /home/hunter/labs && for d in */; do make -C \$d all 2>/dev/null; done"
```
## 实验室详情
### Lab 01: Reflective DLL Injection (T1055.001)
**目标:** 了解 DLL 如何在不使用操作系统标准 API 的情况下自行加载到内存中。
```
cd /home/hunter/labs/01-reflective-dll
make demo
# 使用 detector 进行验证:
./detector $(pidof reflective_loader)
# 手动验证:
cat /proc/$(pidof reflective_loader)/maps | grep rwx
```
**观察要点:**
- 匿名的 RWX 内存区域(无 backing file)
- 该区域内的 ELF header
- 该库没有作为文件出现在 `ldd` 或 `/proc/pid/maps` 中
### Lab 02: DLL Side-Loading (T1574.002)
**目标:** 模拟 OneDriveUpdater.exe 加载恶意 version.dll 的真实场景。
```
cd /home/hunter/labs/02-dll-sideloading
make demo
# 运行 detector:
make detect
# 演示 LD_PRELOAD (Linux 等价物):
LD_PRELOAD=./libversion_malicious.so /bin/ls
```
**观察要点:**
- 合法可执行文件从本地目录加载 DLL
- 该 DLL 代理了真实函数(应用程序正常运行)
- payload 在合法进程的上下文中执行
### Lab 03: Module Stomping
**目标:** 演示如何覆盖内存中合法模块的代码。
```
cd /home/hunter/labs/03-module-stomping
make demo
# 运行 detector:
python3 stomping_detector.py --demo
```
**观察要点:**
- 该库在模块列表中保留了其条目
- 内存中的内容与磁盘上的文件不同
- Volatility 的 `malfind` 无法检测到(因为它是 file-backed)
### Lab 04: 内存中的现代木马 (2024-2025)
**目标:** 研究最活跃的恶意软件家族的完整感染链。
```
cd /home/hunter/labs/04-trojans-memory
# 所有 trojan:
python3 trojan_profiler.py all
# 单个:
python3 trojan_profiler.py emotet
python3 trojan_profiler.py qakbot
python3 trojan_profiler.py raspberry
```
**观察要点:**
- 多阶段感染链
- 每个家族特定的注入技术
- 网络和主机 IOC
- 检测规则 (Sigma, KQL)
### Lab 05: EDR 绕过 — Direct Syscalls
**目标:** 了解攻击者如何通过直接执行 syscalls 来绕过 EDR hooks。
```
cd /home/hunter/labs/05-edr-direct-syscalls
make demo
# 比较 strace 与 ltrace:
strace -e trace=mmap ./direct_syscalls 2>&1 | grep -c mmap
ltrace ./direct_syscalls 2>&1 | grep -c mmap
# 如果 ltrace 显示更少 → 存在 direct syscalls
```
**观察要点:**
- 正常调用(通过 glibc)与直接调用之间的区别
- syscall stub 的汇编代码
- strace 如何检测到所有的 syscalls(kernel-level)
### Lab 06: EDR 绕过 — Unhooking + Sleep Obfuscation
**目标:** 研究 2024-2025 年最先进的 EDR 绕过技术。
```
cd /home/hunter/labs/06-edr-unhooking-sleep
make demo
# 监控 sleep obfuscation:
sudo ./sleep_monitor --demo
```
**观察要点:**
- 如何通过消除 hooks 来恢复 ntdll.dll
- sleep 期间被加密的 beacon(只有随机字节)
- 循环过程:加密 → 休眠 → 解密 → 执行 → 重复
## 包含的检测工具
| 工具 | 位置 | 用途 |
|-------------|-----------|-----------|
| `detector` | labs/01-reflective-dll/ | 检测反射式注入 |
| `sideload_detector.sh` | labs/02-dll-sideloading/ | 检测 side-loading |
| `stomping_detector.py` | labs/03-module-stomping/ | 检测 module stomping |
| `trojan_profiler.py` | labs/04-trojans-memory/ | 分析现代木马特征 |
| `sleep_monitor` | labs/06-edr-unhooking-sleep/ | 检测 sleep obfuscation |
| `dll_injection.yar` | tools/yara_rules/ | 完整的 YARA 规则 |
## YARA 规则
使用包含的规则进行扫描:
```
# 扫描特定的二进制文件
yara tools/yara_rules/dll_injection.yar /path/to/suspicious.bin
# 扫描整个目录
yara -r tools/yara_rules/dll_injection.yar /tmp/samples/
# 扫描进程内存
yara tools/yara_rules/dll_injection.yar /proc/PID/mem
```
## 停止实验室
```
# 停止容器
docker-compose down
# 停止并删除卷
docker-compose down -v
# 删除镜像
docker rmi lab13-dll-injection
```
## 故障排除
| 问题 | 解决方案 |
|----------|----------|
| 6080 端口被占用 | 在 docker-compose.yml 中修改为:`"6081:6080"` |
| noVNC 无法加载 | 在 `docker-compose up` 之后等待 30 秒 |
| 编译失败 | 执行 `apt update && apt install -y build-essential nasm` |
| 权限拒绝 | 使用 `sudo` 或验证用户是否为 `hunter` |
## 致谢与许可
- **课程:** MAR404 — 威胁追踪
- **机构:** Universidad Mayor
- **目的:** 仅供教育用途
- **许可证:** MIT (演示代码)
## 参考资料
- MITRE ATT&CK: https://attack.mitre.org/
- Volatility 3: https://github.com/volatilityfoundation/volatility3
- YARA: https://github.com/VirusTotal/yara
- SysWhispers3: https://github.com/klezVirus/SysWhispers3
- pe-sieve: https://github.com/hasherezade/pe-sieve
标签:客户端加密, 版权保护, 请求拦截, 逆向工具