恶意软件有哪些方案检测自己处于沙箱中
1. 基于环境特征的检测
沙箱为了快速分析大量样本,通常会使用标准化的、不完整的系统配置。恶意软件可以利用这些不寻常的特征来判断自己是否被分析
- 硬件特征:
- CPU 指令:通过
cpuid
指令查询 CPU 供应商字符串。虚拟机通常会返回VMwareVMware
,KVMKVMKVM
或Microsoft Hv
等特殊字符串,而真实的物理机则会返回GenuineIntel
或AuthenticAMD
- MAC 地址:检查网卡(MAC)地址。某些虚拟化厂商的 MAC 地址范围是公开的,例如 VMware 的 MAC 地址通常以
00-50-56
开头 - 内存大小:沙箱为了节省资源,通常会分配较少的内存(例如 1GB 或 2GB)。恶意软件可以查询系统内存大小,如果远低于正常桌面系统的配置,就可能怀疑自己处于沙箱中
- CPU 指令:通过
- 文件系统和注册表:
- 特定文件:检查是否存在某些虚拟化工具或分析工具的特定文件,例如
C:\windows\System32\Drivers\VBoxGuest.sys
(VirtualBox) 或C:\Program Files\VMware\VMware Tools\vmtoolsd.exe
(VMware Tools) - 注册表项:查询与虚拟化相关的注册表键值,例如
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0\Logical Unit Id 0\Identifier
,其值可能会包含VBOX
或VMware
等字符串
- 特定文件:检查是否存在某些虚拟化工具或分析工具的特定文件,例如
2. 基于行为和用户交互的检测
正常的桌面环境会有频繁的用户活动,而沙箱通常是自动化运行的,缺乏这些活动
- 用户活动检测:
- 鼠标移动:检查鼠标自启动以来的移动距离。如果鼠标几乎没有移动,可能表明没有真实用户在操作
- 窗口数量:查询桌面上的窗口数量。沙箱通常只运行一个应用程序,所以窗口数量可能很少
- 键盘输入:监控键盘输入事件。如果长时间没有按键操作,也可能是沙箱
- 屏幕分辨率:沙箱环境通常使用一个固定的、非标准的分辨率
- 执行时间检测:
- 延迟执行:恶意软件会在运行初期休眠一段较长的时间(例如几分钟或几小时)。沙箱通常只运行几十秒到几分钟,无法捕捉到后续的恶意行为
- 时间戳:检查系统启动时间,或使用
Sleep
函数,然后比较前后两次获取系统时间的时间差。如果时间差比预期的短得多(因为沙箱可能通过加快时钟来加速分析),就表明处于虚拟化环境
3. 基于进程和文件分析工具的检测
沙箱环境通常会运行一些监控工具,这些工具的进程或文件名可能暴露它的身份
- 进程列表:遍历运行中的进程列表,查找常见的分析工具进程名,例如:
procmon.exe
(Process Monitor)wireshark.exe
(Wireshark)Fiddler.exe
idaq64.exe
(IDA Pro)
- 文件名:恶意软件可以检查自身的可执行文件名。一些自动化分析系统会把样本重命名为固定的、可预测的名字,例如
sample.exe
或malware.exe
4. 基于硬件和底层代码的检测
这是更高级的反沙箱技术,直接利用虚拟机和物理机底层实现的差异
- 指令时序分析:某些 CPU 指令在虚拟机中执行所需的时间与在物理机上不同。恶意软件可以执行这些特定指令,然后测量其执行时间,通过比较时间差来判断
- 中断描述符表(IDT)检测:虚拟机管理程序(Hypervisor)通常会修改 IDT 以拦截某些特权指令。恶意软件可以检查 IDT 的地址或内容,寻找被篡改的迹象
- 内存布局:检查内存布局,如某些特殊的地址或结构,它们在虚拟机中可能会有独特的模式