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
标签:客户端加密, 版权保护, 请求拦截, 逆向工具