一些反沙盒的新技术

Upatre 使用了一些新的逃逸技术来逃逸动态沙盒引擎的检查,这些技巧都非常的简单,但
是非常的有效果。事实上,VirusTotal上Upatre的检出率并不高,新变种出来基本都检测不
出来,说明现在的恶意软件对付杀毒软件是越来越有办法了。

目前在恶意软件上加壳倒是越来越少了,因为加壳容易引起杀软引擎的注意,相反地目前的
恶意软件大量使用边执行边修改自身代码的方法来躲避杀软,不执行的话看起来就像是一个
正常的软件,而真正执行起来代码却全变了,这也算是一种进化。

下面说说两种最近遇到的沙盒逃逸的办法,样本md5: ac3558b973402ef6a27e03c391f20533

检查开机时间

一般使用沙盒的分析引擎的做法都是安装一个全新的系统,做系统镜像。然后在检查的时候
加载镜像,执行样本。而开机的时间往往都被忽略了,基本都不会超过10分钟。

Upatre 样本所采取的方法是利用GetTickCount 获取开机的毫秒数,当开机时间小于12分钟
是就不执行恶意的行为。

1
2
3
4
5
6
7
004013B3 BB D8FE0A00 MOV EBX,0AFED8
004013B8 FF55 DC CALL DWORD PTR SS:[EBP-24] ; kernel32.GetTickCount
004013BB 3BC3 CMP EAX,EBX
004013BD 0F82 6F020000 JB 00401632
00401632 6A 00 PUSH 0
00401634 FF55 F4 CALL DWORD PTR SS:[EBP-C] ; kernel32.ExitProcess

0xAFED8 是 720600毫秒 12分钟多一点,不到进程退出了。

检查鼠标位置

Upatre样本使用的第二种沙盒逃逸的方法是检查鼠标位置的变化,动态沙盒分析系统大多是
自动化的系统,也就是不使用鼠标,如果Upatre样本检查到鼠标的位置没有发生变化,同样
不会执行恶意行为。

1
2
3
4
5
6
7
8
9
10
0040197C 8D85 04FFFFFF lea eax,dword ptr ss:[ebp-0xFC]
00401982 50 push eax
00401983 FF95 20FFFFFF call dword ptr ss:[ebp-0xE0] ; user32.GetCursorPos
00401989 8D85 0CFFFFFF lea eax,dword ptr ss:[ebp-0xF4]
0040198F 50 push eax
00401990 FF95 20FFFFFF call dword ptr ss:[ebp-0xE0] ; user32.GetCursorPos
00401996 8B85 04FFFFFF mov eax,dword ptr ss:[ebp-0xFC]
0040199C 8B9D 0CFFFFFF mov ebx,dword ptr ss:[ebp-0xF4]
004019A2 39D8 cmp eax,ebx
004019A4 74 D6 je short 62.0040197C

只要鼠标一动就退出循环,继续往下执行。

总结

最近出现的样本在反动态沙盒检测方面明显地进化了,针对性极强,不再局限于古老的
IsDebuggerPresent,而是利用PEB检查CPU核数等技术办法来检测,沙盒对抗估技术在后面
的日子里一定会更加迅速的进化。

致谢

非常感谢西安研究中心的同事提供的样本,同时感谢同事lzx在样本分析时给予的大力支持。