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). ## 免责声明 本项目仅在一个完全隔离的实验室环境中进行,用于学术和教育研究目的。所有恶意软件样本都在空气隔离的虚拟机中处理。没有恶意代码部署到任何真实系统或网络。这项工作旨在提高防御性安全理解。
标签:逆向工具