反虚拟机、反沙箱技术整理汇总

反虚拟机、反沙箱技术整理汇总安全狗的⾃我修养 2022-11-06 15:49 反虚拟机、反沙箱技术整理汇总

延迟执⾏

因为沙箱对样本运⾏时间有限制,使⽤已知的windows Api(例如NtDelayExecution,

CreateWaitTableTImer,SetTimer等)将恶意代码的执⾏延迟了⼀段时间。

延迟执⾏ -GetTickCount 检查机器运⾏时间,创建超过设定时间的快照即可使计算机运⾏更多时间,即可绕过。

延迟执⾏ -API泛洪

在循环中调⽤垃圾API以引⼊延迟

Win32/Cutwail

延迟执⾏ -内联汇编

引⼊内联汇编代码,设置较⼤的计数。

硬件检测

对硬件进⾏指纹识别,特别是检查总物理内存⼤⼩,可⽤的存储⼤⼩/类型和可⽤的CPU 内核数量。例如通过Windows API DeviceIoControl()与特定的控制代码⼀起使⽤,以检索有关存储类型和存储⼤⼩的信息。

硬件检测 -储存空间检查

另外,可以通过WMI接⼝获取系统信息时,⽽hookcom的资料很少。

硬件检测 -CPU温度检查

检查涉及检查执⾏中的处理器的温度,该检查通过系统中的WMI调⽤执⾏。因为VM系统在此调⽤之后将永远不会返回结果。

硬件检测 -CPU核⼼数量最初基于API来获取信息,后来都采⽤WMI和更隐蔽的基于PEB访问的⽅法。

更隐秘的⽅法是访问PEB,通过引⼊内联汇编代码或使⽤inline函数来实现。

另⼀种⽅法,MSDN定义,“ProcessAffinityMask”是⼀个位向量,其中每个位代表允许进程在其上运⾏的处理器。系统相似性掩码是⼀个位向量,其中每个位代表配置到系统中的处理器。恶意软件使⽤这种通过获取GetProcessAffinityMask API来获取核⼼计数的新⽅法。API返回掩码,该掩码可以轻松识别正在使⽤的内核数。

在上⾯的示例中(样本md5:53f6f9a0d0867c10841b815a1eea1468),如果核⼼计数⼩于2,则恶意软件仅终⽌⽽不执⾏其有效载荷:

硬件检测 - 基于COM的DirectShow的⾳频检测

上⾯的代码不仅在检查⾳频设备的存在,⽽且还验证API是否完全可操作(可能是为了过滤掉不完整的API仿真)。

这些只是⼀些随机检查,以确保恶意软件在真实系统上执⾏。仅在此沙箱安装了⾳频设备后,它才被视为真实系统。⼤多数仿真器都会失败,因为⼏乎不可能为现代操作系统中存在的每个COM接⼝实现适配⽀持。

}

检测⽤户输⼊

在真实的机器中,诸如键盘或⿏标活动之类的⽤户输⼊将是频繁发⽣的事件,或者⾄少是最终发⽣的事件。但是传统的沙箱通常不会有任何⽤户输⼊,也不会⾜够模拟⽤户的 I/O活动以欺骗恶意软件。由于这些限制,⾼级恶意软件可以利⽤这种差异(缺少⽤户输

⼊)来检测沙箱。

示例1 检查输⼊时间间隔

为了获得⾃上次收到⽤户输⼊以来的空闲时间,恶意软件通常会使⽤GetLastInputInfo 和GetTickCount函数的组合。

样本(md5:5bd308c1b32178098c8202cff5b02a28)示例:

对上⾯的代码进⾏检查后发现,它在⽆限循环内执⾏以下逻辑:

  1. 通过从LASTINPUTINFO.dwTime中减去当前计数来获得空闲输⼊计数。
  2. 如果空闲输⼊计数⼩于100且不等于最后⼀个空闲计数,则将其视为“正确的空闲输

⼊时间”并将其添加到计数器中。

  1. 如果正确的空闲时间计数器次数 > 10,则跳出循环
  2. 睡眠11毫秒

为了测试代码是否在真实系统上运⾏,此恶意软件示例将⽆限期等待⽤户输⼊。如果是在实际系统上,则⽤户有时会按下⼀个键或移动⿏标,并且空闲时间将少于100个滴答

声。如果发⽣10次以上,恶意软件将开始执⾏其有效负载。

但是,传统的沙箱执⾏和分析每个程序的时间有限,因此检测这种类型的逃逸是有问题的。此外,在评估上述恶意软件样本时,常规沙箱需要在指定时间范围内⽣成10次正确的输⼊空闲时间。如果不这样做,该恶意软件将不会执⾏,并且不会被检测到。我们测试的⼤多数沙盒⽆法完成此操作,并错误地得出结论该样品⽆害。

示例2 检测前台窗⼝

Win32 / Gataka变体:使⽤GetForeGroundWindow,并检查是否再次调⽤同⼀API会更改Windows句柄,如果⽤前台窗⼝⼀直没有改变,说明可能没有⽤户操作。在Locky勒索软件变体中发现了相同的技术。

示例3 检测⿏标

Win32 / Sazoora恶意软件,⽤于检查⿏标的移动。

示例4 vb宏

恶意软件活动采⽤了多种技术来检查与受感染系统的历史交互。此类传播Dridex恶意软件的活动⼴泛使⽤了仅在⽂档关闭时触发的“⾃动执⾏”宏。以下是此类活动的VB代码的快照。

示例5 检查注册表项最近⽂档

\HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Word\User MRU

示例6 vb脚本检查最近⽂件

环境检测

恶意软件使⽤的另⼀种技术是对⽬标环境进⾏指纹识别,例如:

  • 对照通⽤沙箱名称或注册表检查主机名。
  • 验证安装的程序,程序数量很少的可能表明机器是假的。
  • 检查⽂件名以检测是否使⽤了哈希或关键字(例如恶意软件)
  • 检测正在运⾏的进程以发现潜在的监视⼯具并检查⽹络地址以检测被列⼊⿊名单的

⼯具,例如AV⼚商。

点击关注,共同学习!
安全狗的自我修养

github haidragon

https://github.com/haidragon

posted @ 2022-11-06 15:54  syscallwww  阅读(899)  评论(0编辑  收藏  举报