反沙箱杂谈
字数 1792 2025-08-05 08:20:05

反沙箱技术全面解析与实战指南

沙箱基础概念

定义:沙箱是一种允许不受信任的应用程序在高度受控环境中运行的系统,其中应用程序的权限被限制为一组基本的计算机权限(NIST定义)。

沙箱分类

  1. 软件沙箱

    • Sandboxie(程序沙箱)
    • VMware/Docker(虚拟化沙箱)
  2. 硬件沙箱

    • 企业级解决方案(如华为FireHunter6000)
  3. 云沙箱

    • 微步沙箱 (https://s.threatbook.com/)
    • VirusTotal (https://www.virustotal.com/)
    • Any.Run (https://any.run/)
    • Joe沙箱 (https://www.joesandbox.com/)
    • Hybrid分析系统 (https://www.hybrid-analysis.com/)
    • 安恒云沙箱 (https://sandbox.dbappsecurity.com.cn/)
    • 奇安信沙箱 (https://sandbox.ti.qianxin.com/)
    • FreeBuf沙箱 (https://sandbox.freebuf.com/)
    • 360云沙箱 (https://ata.360.net/)
    • 哈勃沙箱 (https://habo.qq.com/)

反沙箱前提条件

  1. 静态免杀基础

    • 确保静态资源无敏感信息
    • 避免加壳(或谨慎使用)
    • Shellcode需预先加密(避免对称加密短密钥)
  2. 执行流程要求

    • 无其他前置执行条件(如反调试)
    • 确保程序首先执行反沙箱逻辑

反沙箱技术详解

1. 路径检测技术

微步沙箱特征:在C盘下生成随机字符串文件夹运行样本

检测代码示例

std::string workingdir() {
    char buf[256];
    GetCurrentDirectoryA(256, buf);
    return std::string(buf);
}

bool check_run_path() {
    std::string test(workingdir());
    std::regex pattern("^C:\\\\[A-Za-z0-9_]+");
    return !std::regex_match(test, pattern);
}

2. 时间检测技术

常规方法

  • NtDelayExecution
  • WaitForSingleObject
  • SetTimer
  • SetWaitableTimer
  • CreateTimerQueueTimer

进阶方法

  • API Flooding(API泛洪)
  • GetSystemTimeAdjustment
  • 自定义定时实现
  • 从其他进程获取时间
  • 配合网络时间校验

实战代码示例(时间差检测)

bool check_time() {
    auto url = "http://api.pinduoduo.com";
    httplib::Client cli(url);
    
    // 第一次获取时间
    auto res = cli.Get("/api/server/_stm");
    std::string time_str1 = filterDigits(res->body);
    long long api_time1 = std::stoll(time_str1);
    time_t currentTime1 = time(0);
    
    // 休眠300秒
    HANDLE hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
    WaitForSingleObject(hEvent, 300000);
    CloseHandle(hEvent);
    
    // 第二次获取时间
    res = cli.Get("/api/server/_stm");
    std::string time_str2 = filterDigits(res->body);
    long long api_time2 = std::stoll(time_str2);
    
    // 判断差值(沙箱会加速执行)
    if (api_time2 - api_time1 > 290000) {
        return true; // 真实环境
    } else {
        exit(0);    // 沙箱环境
    }
}

3. 系统特征检测

硬件检测

  • CPU核心数(dwNumberOfProcessors
  • 内存大小(GlobalMemoryStatus
  • 硬盘大小(PhysicalDrive0
  • 显卡显存
  • CPU温度(推荐使用GetSystemFirmwareTable获取SMBIOS信息)

系统环境检测

  • 系统用户名(注意现代系统多为DESKTOP-XXX随机名)
  • 工作组/域信息
  • 系统语言(GetSystemDefaultLangID
  • 系统启动时间(GetTickCount(),对服务器无效)

文件特征检测(Pocket Litter技术)

  • 桌面文件数量(沙箱通常较少)
  • 特定软件存在检测(微信/QQ等国民软件)
  • 临时文件数量(沙箱可能较多)
  • Office文档数量(沙箱可能较少)
  • 自身文件名是否被修改

网络检测

  • IP地理位置检测
  • 网络延迟特征

IP检测示例

bool check_ip() {
    auto url = "http://ip-api.com";
    httplib::Client cli(url);
    auto res = cli.Get("/csv");
    
    if (res->status != 200) {
        exit(0);
        return false;
    }
    
    return res->body.find("China") != std::string::npos;
}

输入设备检测

鼠标移动检测

double distance(POINT p1, POINT p2) {
    double dx = p2.x - p1.x;
    double dy = p2.y - p1.y;
    return sqrt(dx * dx + dy * dy);
}

bool check_mouse() {
    POINT p1, p2, p3;
    GetCursorPos(&p1);
    Sleep(3000);
    GetCursorPos(&p2);
    Sleep(3000); 
    GetCursorPos(&p3);
    
    double d1 = distance(p1, p2);
    double d2 = distance(p2, p3);
    double d3 = distance(p3, p1);
    
    // 检查是否能构成三角形(真实用户会有不规则移动)
    return (d1 + d2 > d3) && (d2 + d3 > d1) && (d1 + d3 > d2);
}

4. 非常规方法

  1. 体积膨胀:制作大于300MB的样本绕过上传限制
  2. 指纹收集:专门收集沙箱特征用于后续分析
  3. 压缩炸弹:释放大量压缩数据挤占资源

注意事项与最佳实践

  1. 敏感API使用

    • 避免直接使用WMI API(易被标记为敏感行为)
    • 推荐使用GetSystemFirmwareTable获取硬件信息
  2. 检测逻辑组合

    • 不要依赖单一检测方法
    • 组合时间、硬件、行为等多种检测方式
  3. 目标环境适配

    • 根据目标环境调整检测阈值(如服务器通常长期运行)
  4. ATT&CK框架

    • 注意某些技术(如鼠标检测)已被列入ATT&CK框架(T1497)

未来发展

  1. AI沙箱:安全公司正在开发融入AI的沙箱系统
  2. 对抗升级:沙箱与反沙箱技术持续博弈
  3. 云原生挑战:容器化和Serverless环境下的新对抗

参考资源

  1. GitHub项目 - Anti-Sandbox
  2. al-khaser - 反沙箱测试项目
  3. MITRE ATT&CK - T1497
  4. CheckPoint反沙箱指南

通过综合运用上述技术,可以有效提高样本在真实环境中的存活率,但需注意技术更新和对抗演进,持续优化反沙箱策略。

反沙箱技术全面解析与实战指南 沙箱基础概念 定义 :沙箱是一种允许不受信任的应用程序在高度受控环境中运行的系统,其中应用程序的权限被限制为一组基本的计算机权限(NIST定义)。 沙箱分类 软件沙箱 : Sandboxie(程序沙箱) VMware/Docker(虚拟化沙箱) 硬件沙箱 : 企业级解决方案(如华为FireHunter6000) 云沙箱 : 微步沙箱 (https://s.threatbook.com/) VirusTotal (https://www.virustotal.com/) Any.Run (https://any.run/) Joe沙箱 (https://www.joesandbox.com/) Hybrid分析系统 (https://www.hybrid-analysis.com/) 安恒云沙箱 (https://sandbox.dbappsecurity.com.cn/) 奇安信沙箱 (https://sandbox.ti.qianxin.com/) FreeBuf沙箱 (https://sandbox.freebuf.com/) 360云沙箱 (https://ata.360.net/) 哈勃沙箱 (https://habo.qq.com/) 反沙箱前提条件 静态免杀基础 : 确保静态资源无敏感信息 避免加壳(或谨慎使用) Shellcode需预先加密(避免对称加密短密钥) 执行流程要求 : 无其他前置执行条件(如反调试) 确保程序首先执行反沙箱逻辑 反沙箱技术详解 1. 路径检测技术 微步沙箱特征 :在C盘下生成随机字符串文件夹运行样本 检测代码示例 : 2. 时间检测技术 常规方法 NtDelayExecution WaitForSingleObject SetTimer SetWaitableTimer CreateTimerQueueTimer 进阶方法 API Flooding(API泛洪) GetSystemTimeAdjustment 自定义定时实现 从其他进程获取时间 配合网络时间校验 实战代码示例(时间差检测) : 3. 系统特征检测 硬件检测 CPU核心数( dwNumberOfProcessors ) 内存大小( GlobalMemoryStatus ) 硬盘大小( PhysicalDrive0 ) 显卡显存 CPU温度(推荐使用 GetSystemFirmwareTable 获取SMBIOS信息) 系统环境检测 系统用户名(注意现代系统多为DESKTOP-XXX随机名) 工作组/域信息 系统语言( GetSystemDefaultLangID ) 系统启动时间( GetTickCount() ,对服务器无效) 文件特征检测(Pocket Litter技术) 桌面文件数量(沙箱通常较少) 特定软件存在检测(微信/QQ等国民软件) 临时文件数量(沙箱可能较多) Office文档数量(沙箱可能较少) 自身文件名是否被修改 网络检测 IP地理位置检测 网络延迟特征 IP检测示例 : 输入设备检测 鼠标移动检测 : 4. 非常规方法 体积膨胀 :制作大于300MB的样本绕过上传限制 指纹收集 :专门收集沙箱特征用于后续分析 压缩炸弹 :释放大量压缩数据挤占资源 注意事项与最佳实践 敏感API使用 : 避免直接使用WMI API(易被标记为敏感行为) 推荐使用 GetSystemFirmwareTable 获取硬件信息 检测逻辑组合 : 不要依赖单一检测方法 组合时间、硬件、行为等多种检测方式 目标环境适配 : 根据目标环境调整检测阈值(如服务器通常长期运行) ATT&CK框架 : 注意某些技术(如鼠标检测)已被列入ATT&CK框架(T1497) 未来发展 AI沙箱 :安全公司正在开发融入AI的沙箱系统 对抗升级 :沙箱与反沙箱技术持续博弈 云原生挑战 :容器化和Serverless环境下的新对抗 参考资源 GitHub项目 - Anti-Sandbox al-khaser - 反沙箱测试项目 MITRE ATT&CK - T1497 CheckPoint反沙箱指南 通过综合运用上述技术,可以有效提高样本在真实环境中的存活率,但需注意技术更新和对抗演进,持续优化反沙箱策略。