ZiadHanyy99/sandbox-evasion-classifier
GitHub: ZiadHanyy99/sandbox-evasion-classifier
基于CAPE沙盒的恶意软件沙盒逃避技术分类器
Stars: 0 | Forks: 0
# 沙盒逃避技术分类器
**作者:** Ziad Hany Mohamed Salem
**部门:** 网络安全
**日期:** 2026年5月
## 概述
本项目构建了一个动态恶意软件分析实验室,证明了现实世界中的恶意软件如何检测沙盒环境并改变其行为——或者完全拒绝运行。在七个分析运行中,执行了三个恶意软件家族,并故意改变了硬件配置(CPU数量、RAM大小、MAC地址、AV状态)。然后,一个定制的Python工具比较运行之间的CAPE JSON报告,以揭示逃避触发的行为差异。
**结果:** 识别、分类并映射到学术分类法中的18种不同的逃避技术。
## 关键发现
| 恶意软件 | 逃避风格 | 检测到的签名 | 显著技术 |
|---------|--------------|-------------------|-------------------|
| Rombertik | 硬件指纹识别 | 2 | 在1个CPU、更改MAC或2GB RAM上拒绝执行 |
| Emotet | 多技术 | 20 | 时间攻击、语言检查、进程注入、鼠标检测 |
| AgentTesla | AV感知打包 | 27 (Defender OFF) | 在Defender ON时0 API调用 → 在Defender OFF时110+ |
## 实验室架构
```
Host (Windows 10 + VirtualBox 7.0)
│
├── Ubuntu 24.04 VM (192.168.56.102)
│ ├── CAPE Sandbox v2.5
│ ├── MongoDB 7.0 (report storage)
│ └── Python 3.12 (differential_analyzer.py)
│
└── Windows 10 VM (192.168.56.103)
└── CAPE Agent v0.20 (guest monitor)
```
**网络:** 主机仅适配器(VM-to-VM)+ NAT
## 恶意软件样本
所有样本仅从[theZoo](https://github.com/ytisf/theZoo)存储库中获取,用于教育和研究目的。
| 样本 | 家族 | 知名特性 |
|--------|--------|-----------|
| `yfoye_dump.exe` | Rombertik | 反分析、沙盒检测时自我销毁 |
| `29D6161522C7F7F21B35401907C702BDDB05ED47.bin` | Emotet | 高级逃避、进程注入 |
| `Win32.AgentTesla.exe` | AgentTesla | AV感知打包、信息窃取 |
## 核心工具 —— `differential_analyzer.py`
定制的Python脚本比较不同沙盒配置下的CAPE JSON报告,以检测逃避触发的行为差异。
```
import json, sys, os
def load_report(task_id):
path = "/home/user/CAPEv2/storage/analyses/" + str(task_id) + "/reports/report.json"
if not os.path.exists(path):
print("Report not found for task " + str(task_id))
return None
with open(path) as f:
return json.load(f)
def extract_api_calls(report):
calls = []
try:
for process in report["behavior"]["processes"]:
for call in process["calls"]:
calls.append(call["api"])
except:
pass
return calls
def extract_signatures(report):
sigs = []
try:
for sig in report["signatures"]:
sigs.append(sig["name"])
except:
pass
return sigs
def compare_reports(task1, task2):
r1 = load_report(task1)
r2 = load_report(task2)
if not r1 or not r2:
return
apis1 = set(extract_api_calls(r1))
apis2 = set(extract_api_calls(r2))
sigs1 = set(extract_signatures(r1))
sigs2 = set(extract_signatures(r2))
print("=== Differential Analysis: Task " + str(task1) + " vs Task " + str(task2) + " ===")
print("API calls only in Task " + str(task1) + ": " + str(apis1 - apis2))
print("API calls only in Task " + str(task2) + ": " + str(apis2 - apis1))
print("Signatures in Task " + str(task1) + ": " + str(sigs1))
print("Signatures in Task " + str(task2) + ": " + str(sigs2))
if sigs1 != sigs2 or apis1 != apis2:
print("Evasion detected: YES")
else:
print("Evasion detected: NO")
compare_reports(sys.argv[1], sys.argv[2])
```
**用法:**
```
# 克隆仓库
git clone https://github.com/ZiadHany99/sandbox-evasion-classifier.git
cd sandbox-evasion-classifier
# 运行两个 CAPE 任务 ID 的比较
python3 differential_analyzer.py 18 19
```
## 实验运行
| 运行 | 任务 | 恶意软件 | 配置更改 | 结果 | 关键发现 |
|-----|------|---------|--------------|--------|-------------|
| 1 | 18 | Rombertik | 基线(2 CPU、4GB、原始MAC) | 逃避 YES — 崩溃 | 通过 `NtQuerySystemInformation` 检测到沙盒,自我终止 |
| 2 | 19 | Rombertik | CPU = 1 | 逃避 YES — 静默 | 0 API调用——拒绝运行 |
| 3 | 20 | Rombertik | MAC更改 | 逃避 YES — 静默 | 0 API调用——检测到非标准MAC |
| 4 | 21 | Rombertik | RAM = 2GB | 逃避 YES — 静默 | 0 API调用——低RAM被标记为沙盒 |
| 5 | 22 | Emotet | Defender OFF | 逃避 YES — 活动 | 20个签名:`stealth_timeout`、`injection_rwx`、`language_check_registry` |
| 6 | 23 | AgentTesla | Defender ON | 被AV阻止 | 0 API调用——Defender在执行前终止进程 |
| 7 | 24 | AgentTesla | Defender OFF | 逃避 YES — 活动 | 27个签名:`disables_uac`、`antisandbox_restart`、`amsi_enumeration` |
## 逃避技术分类法
18种不同的技术被分类到6个类别中,映射到学术参考文献:
| 技术 | 恶意软件 | 类别 | 学术参考文献 |
|-----------|---------|----------|--------------------|
| CPU数量检查 | Rombertik | 反虚拟机 | Sandprint [1] |
| MAC地址检查 | Rombertik | 反虚拟机 | Sandprint [1] |
| RAM大小检查 | Rombertik | 反虚拟机 | Sandprint [1] |
| VM指纹识别(`NtQuerySystemInformation`) | Rombertik | 反虚拟机 | Egele et al. [2] |
| 内存可用性检查 | AgentTesla | 反虚拟机 | Egele et al. [2] |
| 屏幕分辨率检查(`GetSystemMetrics`) | Emotet | 反虚拟机 | Sandprint [1] |
| 自我终止(`exec_crash`) | Rombertik | 反分析 | Egele et al. [2] |
| 调试器检查(`IsDebuggerPresent`) | Emotet、AgentTesla | 反调试 | Egele et al. [2] |
| 异常处理程序(`SetUnhandledExceptionFilter`) | Rombertik、AgentTesla | 反调试 | Egele et al. [2] |
| 时间攻击(`NtDelayExecution`) | Emotet、AgentTesla | 反沙盒 | Sandprint [1] |
| 人类交互检查(`GetCursorPos`) | Emotet | 反沙盒 | Sandprint [1] |
| 语言检查(`GetKeyboardLayout`) | Emotet、AgentTesla | 反沙盒 | Sandprint [1] |
| AMSI枚举 | AgentTesla | 反AV | Egele et al. [2] |
| 打包高熵 | AgentTesla | 反AV | Egele et al. [2] |
| 沙盒重启检测 | AgentTesla | 反沙盒 | Sandprint [1] |
| 进程注入(`injection_rwx`) | Emotet、AgentTesla | 隐蔽 | Egele et al. [2] |
| UAC绕过(`disables_uac`) | AgentTesla | 提权 | Egele et al. [2] |
| WMI滥用(`WbemLocator`) | AgentTesla | 隐蔽 | Egele et al. [2] |
## 工具与堆栈
| 工具 | 目的 |
|------|---------|
| CAPE Sandbox v2.5 | 动态恶意软件分析和API调用监控 |
| Python 3.12 | 差分分析脚本 |
| MongoDB 7.0 | CAPE报告存储后端 |
| VirtualBox 7.0 | 多VM实验室设置的高层虚拟机 |
| Windows 10(客户机) | 恶意软件执行环境 |
| Ubuntu 24.04(主机) | CAPE服务器操作系统 |
## 参考资料
[1] Yokoyama, A. et al. (2016). *Sandprint: Fingerprinting Malware Sandboxes to Provide Intelligence for Sandbox Evasion.* RAID 2016. Springer.
[2] Egele, M. et al. (2012). *A Survey on Automated Dynamic Malware-Analysis Techniques and Tools.* ACM Computing Surveys, 44(2).
## 免责声明
本项目仅在一个完全隔离的实验室环境中进行,用于学术和教育研究目的。所有恶意软件样本都在空气隔离的虚拟机中处理。没有恶意代码部署到任何真实系统或网络。这项工作旨在提高防御性安全理解。
标签:逆向工具