arxhr007/Malware-Sandbox-Evasion

GitHub: arxhr007/Malware-Sandbox-Evasion

这是一个用C语言编写的高级恶意软件沙盒检测与规避工具,帮助恶意代码避开自动化分析环境。

Stars: 22 | Forks: 4

# 高级恶意软件沙盒检测与规避:技术指南 👾 ## 引言 网络安全领域持续上演着一场攻防战:安全研究人员使用沙盒环境分析恶意代码,而恶意软件开发者则实施复杂的检测与规避机制。本技术指南深入探讨了恶意软件用于识别分析环境的具体方法,以及其为规避检测所采取的对策。 ## 为配合本仓库,我提供了一个 C [程序](https://github.com/arxhr007/Malware-Sandbox-Evasion/blob/main/sandbox_detector.c),它演示了下面列出的一些技术的实际实现。 ## 编译说明: ``` $ gcc -o sandbox_detector.exe sandbox_detector.c -lws2_32 -liphlpapi $ .\sandbox_detector.exe ``` 此外,如果你想直接运行而无需编译,可以使用提供的 [```sandbox_detector.exe```](https://github.com/arxhr007/Malware-Sandbox-Evasion/raw/refs/heads/main/sandbox_detector.exe)。 # 运行时环境检测技术 ### 虚拟处理器异常 恶意软件通过多种技术进行 CPU 级别的检测: - **CPUID 指令分析**:通过 `cpuid` 指令检查供应商字符串(例如 "VMwareVMware")和虚拟化管理程序特定的位(ECX 中的第 31 位) - **时序差异**:使用 `rdtsc` 测量对虚拟化敏感的操作的执行时间,并与预期阈值进行比较 - **指令集不一致**:测试专用指令集(AVX、SSE)是否存在仿真痕迹和缺失功能 - **红药丸技术**:执行 `sidt` 指令来定位中断描述符表,该表在宿主系统和客户系统中的位置不同 - **控制寄存器检查**:读取 CR0、CR3 和 CR4 寄存器,查找虚拟化标志和非预期的位 高级的恶意软件实现通常会串联多种 CPU 检测方法以获得更高的可靠性。 ### API 钩子检测 沙盒监控依赖于函数拦截,恶意软件旨在识别这种拦截: - **函数序言验证**:检查关键 Windows API 函数的前 5-7 字节,寻找表示钩子的 JMP 或 CALL 指令 - **内存校验和验证**:计算内存驻留代码的哈希值并与预期值进行比较 - **调用栈分析**:使用 `StackWalk64` 等函数检查返回地址,查找来自非标准模块的条目 - **影子 API 验证**:测试辅助入口点(例如 Nt* 与 Zw* 函数)是否存在行为不一致 - **IAT/EAT 检查**:分析 PE 头中的导入地址表和导出地址表,寻找表明钩子存在的修改 一旦检测到钩子,规避型恶意软件可以采用替代代码路径或尝试移除钩子。 ### 执行环境分析 进程上下文为分析环境提供了有价值的指标: - **进程路径检查**:使用 `GetModuleFileName` 检查执行目录是否包含分析相关的路径 - **命令行检查**:访问 `GetCommandLine` 或 PEB 结构以识别调试标志 - **父进程验证**:使用 `NtQueryInformationProcess` 配合 `ProcessBasicInformation` 来验证父进程 PID - **模块加载分析**:通过 `EnumProcessModules` 枚举已加载的 DLL,检测调试/分析库 - **内存扫描**:搜索进程内存空间,寻找分析工具的字符串和特征码 - **线程枚举**:使用 `Thread32First/Next` 验证线程计数并识别监控线程 这些检查通常在执行早期进行,以便在检测到分析时能立即终止。 ### 调试检测技术 复杂的恶意软件采用多种调试器检测方法: - **陷阱标志测试**:设置并监控 EFLAGS 寄存器中的处理器陷阱标志(TF) - **调试寄存器检查**:使用汇编级访问检查 DR0-DR7 寄存器中的断点地址 - **异常处理操作**:通过 `SetUnhandledExceptionFilter` 设置自定义异常处理程序以检测调试器存在 - **时序分析**:测量像 `int 2d` 这样在调试环境下行为不同的指令的执行时间 - **自修改代码**:实现运行时代码修改,使调试器的指令缓存失效 - **反单步措施**:使用 TLS 回调或基于线程的监视器来检测单步执行 这些技术专门针对交互式分析,而非自动化沙盒执行。 ## 系统环境分析 ### 操作系统痕迹 宿主操作系统包含许多虚拟化指标: - **注册表指纹识别**:检查 `HKLM\SYSTEM\CurrentControlSet\Services\Disk\Enum` 等键以查找虚拟磁盘标识符 - **设备驱动检查**:使用 `EnumDeviceDrivers` 识别 vmci.sys、vboxdrv.sys 等驱动 - **系统文件分析**:检查与 VirtualBox、VMware 或分析工具相关的文件 - **服务枚举**:使用 `EnumServicesStatusEx` 检测与虚拟机相关的服务 - **进程识别**:搜索 vmtoolsd.exe 或 VBoxService.exe 等进程 - **Windows Management Instrumentation 查询**:使用 `IWbemServices` 执行 WMI 查询以获取系统信息 - **事件日志检查**:分析 Windows 事件日志以寻找沙盒创建的指标 操作系统级别的检测不仅能识别虚拟化,还能通过其独特特征识别具体的分析平台。 ### 硬件配置评估 虚拟硬件表现出与物理系统可检测的差异: - **设备指纹识别**:通过 `SetupDiGetClassDevs` 检查硬件设备 ID 和特征 - **序列号分析**:检查 BIOS、主板和磁盘序列号是否为默认值 - **BIOS/UEFI 检查**:使用 `GetSystemFirmwareTable` 检查固件数据以寻找虚拟化指标 - **硬件性能测试**:将 GPU、磁盘和 CPU 性能与预期指标进行比较 - **硬件多样性评估**:验证真实系统上存在的各种外围设备是否存在 - **USB 控制器分析**:检查 USB 控制器类型和已连接设备的历史记录 - **加速图形评估**:使用 DirectX 或 OpenGL 调用测试真实的 GPU 功能 硬件配置分析揭示了那些未能模拟完整物理系统的沙盒环境。 ### 存储系统分析 磁盘配置常常暴露分析环境: - **磁盘大小验证**:使用 `GetDiskFreeSpaceEx` 识别可疑的小磁盘容量 - **分区结构检查**:使用 `DeviceIoControl` 调用分析磁盘布局以寻找虚拟化模式 - **存储性能测量**:通过顺序和随机访问模式测试 I/O 性能 - **磁盘标识符检查**:使用低级磁盘访问寻找 VDI、VMDK 或 QCOW 签名 - **磁盘活动历史**:检查 NTFS USN 日志和文件时间戳以了解使用模式 - **卷影副本分析**:使用 `VSSAdmin` 检查是否存在 VSS 数据 - **磁盘制造商信息**:使用 SMART 数据验证硬件信息是否与已知的虚拟化提供商相符 存储分析可识别出新创建的或专门构建的、缺乏真实使用模式的分析环境。 ### 内存系统分析 RAM 配置提供了强有力的虚拟化指标: - **内存大小验证**:检查 `GlobalMemoryStatusEx` 结果,看是否存在受限的内存分配 - **内存地址空间布局**:通过 VirtualQuery 分析内存组织以寻找虚拟化模式 - **内存性能测试**:使用校准的测试例程测量访问时间和吞吐量 - **内存分配行为**:使用大型分配请求测试分配模式和限制 - **TLB 测试**:通过时序测试验证 CPU 缓存行为 - **NUMA 检查**:使用 `GetNumaHighestNodeNumber` 检查是否存在预期的 NUMA 配置 - **内存时序一致性**:测量不同区域内存访问时间的变化 内存测试揭示了为分析而配置了最小资源的简化环境。 ## 用户环境检测 ### 人类交互分析 真实系统展现出人类使用模式: - **输入设备监控**:使用 `GetLastInputInfo` 和 `GetCursorPos` 检测鼠标和键盘活动 - **输入模式分析**:分析输入时序模式以区分人类输入和自动化输入 - **空闲时间评估**:使用 `GetTickCount` 测量系统空闲时间与活跃使用模式的对比 - **焦点变化**:使用 `GetForegroundWindow` 监控应用程序焦点,寻找真实的转换 - **剪贴板内容检查**:使用 `GetClipboardData` 检查剪贴板内容是否存在 - **屏幕分辨率变化**:使用 `EnumDisplaySettings` 监控用户发起的显示配置更改 - **多显示器检测**:使用 `EnumDisplayDevices` 验证对多显示器的支持 用户交互分析揭示了缺乏模拟用户行为的自动化分析环境。 ### 用户数据评估 合法系统中的用户配置文件包含累积的个人内容: - **文档分析**:枚举用户文档目录中的文件,查看其历史和多样性 - **媒体文件验证**:检查标准位置是否存在照片、视频和音乐收藏 - **浏览器数据检查**:分析浏览器数据库中的历史记录、Cookie 和缓存内容 - **电子邮件客户端数据**:验证电子邮件存储和配置文件是否存在 - **应用程序偏好设置**:检查应用程序配置文件中的个性化设置 - **最近文件历史**:检查注册表和跳转列表中最近访问的文件列表 - **下载历史**:分析浏览器下载历史和已保存的附件模式 用户数据检查能快速识别出新创建的、缺乏真实用户痕迹的分析环境。 ### 系统使用模式 长期的系统使用会产生独特的模式: - **应用程序使用历史**:检查应用程序预取文件和用户活动日志 - **系统正常运行时间分析**:通过 `GetTickCount64` 和事件日志检查启动历史和正常运行时间 - **电源事件验证**:分析电源管理日志中的休眠、睡眠/唤醒周期 - **更新历史检查**:检查 Windows Update 历史记录,看是否存在一致的补丁模式 - **登录历史评估**:在安全事件日志中验证用户登录模式 - **临时文件累积**:检查临时目录中的累积文件 - **日志文件增长**:检查日志文件是否呈现有机增长模式,而非最少条目 使用模式分析能有效识别缺乏历史使用记录的、专门构建的分析环境。 ## 网络环境分析 ### 连通性评估 网络配置会暴露沙盒环境: - **DNS 解析测试**:使用 `DnsQuery` 或 `getaddrinfo` 验证合法的 DNS 解析 - **代理检测**:使用 `WinHttpGetIEProxyConfigForCurrentUser` 识别监控代理 - **网络隔离测试**:尝试使用 ICMP 或 TCP 测试进行连接以确定是否受控 - **带宽测量**:测试网络吞吐量并与预期基线值进行比较 - **延迟分析**:测量对资源的响应时间以发现异常 - **MTU 验证**:使用 `GetAdaptersAddresses` 检查非标准的 MTU 设置 - **网络协议栈指纹识别**:分析 TCP/IP 协议栈行为以寻找虚拟化痕迹 连通性测试能识别出外部访问受限或受模拟的受控环境。 ### 接口配置分析 网络适配器设置会暴露虚拟化: - **MAC 地址验证**:检查与虚拟机提供商关联的 MAC 地址范围(00:0C:29, 00:50:56, 08:00:27) - **接口命名模式**:通过 `GetAdaptersInfo` 查找虚拟化特定的接口名称 - **IP 分配验证**:分析 IP 地址分配模式是否属于沙盒范围 - **网络适配器类型**:通过 WMI 查询识别虚拟适配器型号 - **适配器性能测试**:测量吞吐量并与预期规格进行比较 - **网络驱动检查**:通过 `EnumDeviceDrivers` 检查虚拟化特定的驱动 - **混杂模式检测**:使用数据包注入测试检测监控配置 接口分析能识别出具有默认网络配置的标准虚拟环境。 ### 外部网络特征 面向互联网的配置可以揭示沙盒实现: - **IP 信誉检查**:通过外部服务验证外部 IP 是否与安全公司关联 - **地理位置验证**:使用 IP 地理定位确保地理位置与预期目标区域匹配 - **ASN 验证**:检查流量是否源自安全或云提供商 - **连接限流检测**:通过吞吐量测试检测是否存在人为带宽限制 - **流量检查识别**:通过证书验证检测 DPI 或 SSL 拦截 - **UDP 行为分析**:测试 UDP 连通性,在限制性沙盒中可能被阻止 - **DNS 陷阱检测**:通过比较多种解析方法检查是否存在人为 DNS 响应 外部网络测试能识别出互联网访问受限、受监控或受模拟的沙盒。 ## 高级规避技术 ### 时间规避策略 基于时序的方法使恶意软件能够熬过分析窗口: - **多阶段休眠链**:嵌套使用 `Sleep`、`WaitForSingleObject` 或 `timeSetEvent` 调用 - **外部事件监控**:等待系统重启、用户登录或特定的系统事件 - **分布式时序验证**:使用多个时序源,如 `QueryPerformanceCounter` 和 NTP - **时区监控**:通过 `GetTimeZoneInformation` 跟踪时区一致性和变化 - **NTP 验证**:使用 socket API 将系统时间与网络时间协议服务器进行比较 - **计时器对象操作**:使用具有复杂触发条件的 Windows 计时器对象 - **基于事件的触发**:仅在特定系统事件发生后激活,通过事件钩子监控 时间规避对于具有运行时限制的自动化分析系统仍然非常有效。 ### 代码流混淆 复杂的执行路径阻碍了静态和动态分析: - **死代码注入**:添加大量永远不会执行的代码以混淆分析 - **不透明谓词**:创建始终以一种方式解析但静态分析看起来可变的条件 - **控制流平坦化**:使用状态变量将代码重新排列为 switch-case 结构 - **状态机实现**:将线性代码转换为基于状态的执行模式 - **基于异常的流程**:使用结构化异常处理创建非正常的流程路径 - **线程同步复杂性**:创建具有复杂信号传递的相互依赖的执行线程 - **间接跳转和调用**:通过函数指针使用计算地址进行控制流转移 流混淆显著增加了分析的复杂性和所需资源。 ### 系统 API 的自定义实现 绕过受监控的函数可防止基于钩子的分析: - **直接系统调用实现**:使用原始 SYSCALL/SYSENTER 指令和手动构建的结构体 - **自定义 DLL 加载**:使用 `NtMapViewOfSection` 手动实现库加载以避免受监控的路径 - **内联汇编替代方案**:用低级汇编代码重新实现 API 功能 - **替代 API 路径**:使用不常见的 Native API 替代常见操作 - **动态 API 解析**:通过哈希或基于 CRC 的查找在运行时解析函数地址 - **窃取的代码执行**:在恶意软件内存空间中执行系统代码的副本以避免钩子 - **反 API 钩子保护页**:通过 `VirtualProtect` 实现内存保护以防止钩子安装 自定义 API 实现有效地绕过了大多数基于钩子的监控系统。 ### 环境操纵 主动修改分析环境会造成混淆: - **自修改配置**:修改系统设置以干扰分析工具 - **注册表键操作**:创建、修改或删除注册表键以扰乱监控 - **文件系统污染**:生成大量诱饵文件以使分析复杂化 - **进程挖空和注入**:使用 `CreateRemoteThread` 或 `SetThreadContext` 等技术来分散代码 - **API 钩子逆转**:实现钩子检测和移除机制 - **DLL 搜索顺序操纵**:利用加载顺序来替换恶意组件 - **选择性组件激活**:仅在满足特定环境条件时才启用功能 环境操纵旨在主动禁用或混淆分析工具。 ### 使用外部触发器检测隔离 通过外部系统验证可击败隔离分析: - **命令与控制验证**:要求来自 C2 基础设施的特定响应 - **域名生成算法**:创建沙盒无法预测的唯一域名模式 - **多通道通信**:要求通过不同协议(HTTP、DNS、ICMP)进行响应 - **分布式配置存储**:将配置分散在多个外部来源中 - **云服务 API 交互**:利用 AWS 或 Azure 等合法云服务进行验证 - **基于区块链的验证**:使用加密货币交易数据作为触发器 - **基于时序的网络指纹识别**:测量来自已知服务的响应模式 外部验证有效地击败了缺乏全面互联网模拟的隔离沙盒。 ## 反规避对策技术 ### 开发弹性分析环境 现代沙盒开发专注于避免被检测: - **硬件虚拟化掩码**:修改虚拟化管理程序代码以移除可检测的痕迹 - **全系统模拟**:使用完整的硬件模拟而非虚拟化 - **真实用户模拟**:实现令人信服的鼠标、键盘和 UI 交互模式 - **历史数据注入**:用真实的使用痕迹和历史记录填充系统 - **自定义虚拟化管理程序**:开发没有已知特征的专用分析平台 - **嵌套虚拟化**:实施分层虚拟化以掩盖检测 - **裸机分析**:为高价值目标使用物理硬件以消除虚拟化指标 随着恶意软件规避技术的发展,分析平台持续调整其隐蔽技术。 ### 钩子隐蔽策略 先进的监控技术优先考虑隐蔽性: - **用户态/内核混合钩子**:将钩子组件分布在不同的权限边界 - **即时钩子**:动态应用和移除钩子以最小化检测窗口 - **来自进程外部的监控**:使用 DLL 注入或远程线程技术 - **硬件辅助调试**:通过 `VirtualProtect` 利用 CPU 调试寄存器和功能 - **虚拟机管理程序级别内省**:使用 VMI 技术从操作系统外部进行监控 - **路径转移技术**:无需修改函数代码即可重定向执行 - **基于陷阱的监控**:使用处理器陷阱而非代码修改进行拦截 钩子隐蔽代表了恶意软件分析军备竞赛的最前沿。 ## 结论 本指南中描述的技术代表了恶意软件沙盒检测与规避的技术现状。现代恶意代码通常采用具有复杂决策树的多种检测向量,要求分析人员同时应对多种规避技术。 最复杂的威胁将时间规避、环境指纹识别和外部验证相结合,为自动化分析系统带来了重大挑战。有效的恶意软件分析需要多管齐下,结合传统的沙盒技术、裸机分析、网络模拟和专用的虚拟化管理程序技术。 通过理解规避技术的细节,安全专业人员可以制定更全面的检测和分析策略,以应对日益复杂的恶意软件。 ## 贡献 欢迎贡献!如果你有关于恶意软件规避的见解、修正或补充技术,请随时提交拉取请求或开启一个问题。 让我们一起构建一个全面的资源库!🚀 ## 如果觉得这个仓库有用,请不吝给出一颗星 🌟 并关注我以获取更多信息
标签:API Hooking, CPUID指令, C语言编程, DAST, meg, 云资产清单, 低级编程, 信息安全, 安全攻防, 实战示例, 客户端加密, 恶意代码分析, 恶意软件, 恶意软件分析, 技术指南, 攻击技术, 检测技术, 沙盒检测, 沙盒规避, 沙盒逃逸, 端点可见性, 系统编程, 编程实现, 网络安全, 虚拟化检测, 规避技术, 运行时环境检测, 逆向工程, 配置文件, 隐私保护