镇守最后一道防线:三种逃逸沙盒技术分析

xiaohui 技术 2017年3月6日发布

导语:自从诞生沙盒技术来阻挡恶意软件之后,恶意软件也在时刻想办法逃避沙盒,这就是沙盒逃逸技术,本文将深入分析三个主要类别的沙盒逃逸技术。

1465700620132013.jpg

自从诞生沙盒技术来阻挡恶意软件之后,恶意软件也在时刻想办法逃避沙盒,这就是沙盒逃逸技术,本文将深入分析三个主要类别的沙盒逃逸技术。

早在十多年前,人们就已经使用沙盒技术来对实施高级持续性威胁(APT)的恶意软件进行阻挡和分析了。当时,恶意软件已经可以通过结合多态性和加密,实现了一种复杂的混淆方法以及使用防反转保护( anti-reversing protection)等技术来逃避基于静态分析的工具了,例如传统的防病毒软件产品。因此,恶意软件分析沙箱现在被视为是防御APT的最后一道防线。

“沙盒”技术与主动防御技术原理截然不同。主动防御是发现程序有可疑行为时立即拦截并终止运行。“沙盒”技术则是发现可疑行为后让程序继续运行,当发现的确是病毒时才会终止。

沙盒的操作原理很简单,就是 基于在受控环境中观察到的行为来确定文件是否是恶意的。沙箱允许恶意软件执行所有恶意操作并记录结果行为。一段时间后,停止分析,检查结果并扫描典型的恶意行为模式。由于检测不是基于签名,沙盒甚至可以检测出零日漏洞攻击和有针对性的恶意软件,而一般情况下像这样的攻击是很难被安全研究人员发现或在防病毒实验室的样本中被找到。

显然,基于行为分析的恶意程序检测必须具备一点:在利用沙盒进行分析时,所检测的程序必须执行恶意操作,否则无法检测到。所以恶意软件的开发者总是在寻找新的方法,试图隐藏恶意软件的攻击行为来逃避沙盒检测。我们将这些方法分为三类:

1.沙盒检测:首先会检测沙盒是否存在,如果不幸被沙盒检测到了,那么就只在检测时自动调整到无威胁运行模式。
2.利用沙盒箱技术中的漏洞:利用沙盒技术系统中的弱点或漏洞。
3. 利用安全上下文检测:安全上下文的概念范围是很广的,权限、特权、访问令牌、完整性等级等等都包含在其中,在沙箱分析期间,恶意软件会使用一些未被开启的攻击属性。

下面我们先简要的介绍一下这三种技术:

沙盒检测

利用此种逃逸方法,恶意程序会通过寻找沙盒环境和真实受害者系统之间的小差异来检测沙盒的存在。如果检测到沙盒,恶意软件通常会使用两种方式做出应对:

1.立即终止本身的可疑运行活动

2.仅执行非恶意行为并且仅执行无害操作。

比如下面这一个例子,所进行的逃逸行为:

1.尝试检测其是否是在虚拟机中运行

2.看看是否有应用程序沙箱正在运行

1488596786534411.png

我们可以在VMRay(第三代威胁分析和检测供应商)发布的威胁标识符(VTI)详细信息中看到这一点, VMRay以对这个样本进行了沙盒检测,并将其评为高度恶意。

利用沙盒的技术漏洞

这种逃逸方法会直接攻击和利用底层沙盒技术或相关技术生态系统中的弱点。例如,我们最近看到大量的恶意软件都在利用Microsoft COM内部漏洞,这是因为大多数沙盒无法正确分析这些样本。还有一些恶意软件将使用不能由沙盒处理的模糊文件格式,或者利用沙盒无法处理超过一定大小的文件来进行逃逸。比如下面这个样本,会尝试蒙骗监视器即通过使用非法的API来逃避分析,这是利用注入到攻击目标设备中的HOOK技术 或隐藏驱动器的方法。HOOK API的思路就是修改原API的入口,使其跳转到假的API入口, 然后执行假API函数,不过,由于VMRay不是利用的HOOK技术来检测,所以这个样本还是被VMRay检测到。

1488596824473819.png

利用安全上下文检测

这类逃逸技术不会试图检测或攻击沙盒。相反,它利用了沙盒自动化检测系统中的自带缺点。由于沙盒要同时对大量的程序进行检测,所以对每个文件的分析也就是几分钟而已。所以,恶意程序通过延迟恶意有效载荷的执行时间,避开检测时间,则恶意程序就可以不被检测到。除了利用时间触发器,恶意软件还可以使用通常不在沙箱中发生的其他事件,例如,系统重新启动或用户交互或恶意软件在预定攻击设备上的特定应用,例如本地化设置等。

在下面的这个样本中,我们能看到,这个恶意软件除了尝试检测VM环境外,还利用安装启动脚本和应用程序,企图在重新启动后继续运行。

1488596864819782.png

接下来,我们将会对这三类技术中的更多细节进行分析,比如在沙盒检测技术中,恶意软件是如何检测到沙盒的存在并切换到无害运行模式的。

如何检测沙盒的存在

有许多技术来识别沙盒的存在,比如一旦被检测到,恶意软件可以以不同的方式做出应对,当然其中最简单的步骤是立即终止恶意程序运行,这样做虽然简单,但却容易向用户发送错误提示,毕竟这种突然停止运行的做法不会是一个正常的,良性的程序所为,还有就是一旦被检测到,恶意软件就会显示一个虚假的错误消息,例如,恶意软件可以显示某个系统模块丢失或可执行文件已损坏的消息。而更复杂的恶意软件可能会执行一些无害的操作来隐藏真实攻击意图。

下面就让我们更深入地来了解一下恶意软件在沙盒检测中所使用的不同技术:

虚拟化检测或Hypervisor技术

这是最早的逃避技术之一。然而,由于目前许多运行环境(包括工作站和服务器)都虚拟化了,虚拟机的使用也非常广泛了。

最早的检测方法都是基于虚拟化的技术,包括:

1.检测流行虚拟机管理程序的工具,例如VMWare(“端口0x5658”)或Virtualbox典型的“后门程序”或“绑定外壳程序”,

2. Hypervisor技术的检测工具:最有名的是redpill(“IDTR无法被虚拟化”)

不过这些技术今天都不是很有效了。通过硬件虚拟化支持,虚拟机内部很少有可以利用的工具,因为大多数硬件现在都由CPU本身进行虚拟化处理。因此,它们不必使用Hypervisor来模拟出运行应用程序的容器。

除此之外还有另一种方法能够检测出Hypervisor

例如:从MAC地址,设备ID或CPU ID或从存在某些进程,文件,驱动程序,注册表项或存储器中的字符串查看提供hypervisor的供应商。

在此,我们从发布的两个恶意软件的分析报告中,发现了两种类型的虚拟化检测。

在第一个样本,我们看到了一个用正在被沙盒检测的恶意软件正在检测是否在VirtualPC内运行:

1488597145704169.png

点击以下链接 https://www.vmray.com/analyses/678148/report/vti_by_score.html,你可以查看完整的分析报告。

在另外一个样本中,恶意软件是通过查看注册表值来检测虚拟机的存在。在此样本中,恶意软件查询注册表项“HKEY_LOCAL_MACHINE HARDWARE Description System”以查找与常见虚拟机运行(如VMWare)相关联的值:

1488597222676192.png

点击以下链接https://www.vmray.com/analyses/678032/report/overview.html,你可以查看完整的分析报告。

检测沙盒工具

在此方法中,恶意软件不会试图检测hypervisor,而是试图检测沙箱本身。

可以通过以下供应商发的特定信息:

常见虚拟机产品,例如,某些文件,进程,驱动程序,文件系统结构,Windows ID,用户名等。

系统运行机制:

感染后将分析环境恢复到干净的状态,比如Deepfreeze,Reborn Cards

控制沙盒控制器的通信,比如添加监听端口,利用主服务器

使用特定的沙盒技术进行检测:

大多数沙盒会使用Hook技术,即它们在会在分析系统内注入或修改代码和数据。Hook本质上是一个底层操作平台,它能捕获软件进程,驱动程序和操作系统之间的通信。Hook可以以许多方式实现,例如:inline hook,IAT,EAT,代理DLL,过滤器驱动器等,而这些都可以通过以下方式检测到:

检查某些相关运行的指令

验证系统的完整性,例如,验证相关系统文件的hash签名

虽然,一些沙盒会使用与本地系统相类似的模拟运行程序,这些模拟运行都是基于不同的指令语义,高速缓存的攻击等,但是检测工具可以通过调用未包括在仿真中的模糊CPU指令来检测仿真运行中漏洞,当指令调用失败时,恶意软件就会知道它在模拟环境中运行。

比如下面这个样本,恶意软件会查找模块“SbieDll.dll”是否存在,如果有“SbieDll.dll”,则证明沙盒在运行,

1488597420225457.png

检测沙盒的运行环境

因为沙盒通常不是一个运行系统,设置沙盒就是专门用来分析恶意软件的。因此,沙盒的这种虚拟运行环境多少与真实计算机系统不相同,并且这些差异可以由恶意软件检测。差异可能包括:

硬件属性:小屏幕分辨率,没有USB 3.0驱动程序,屏幕的画面缺乏3D渲染功能,只有一个CPU-V(cpu虚拟化检测工具),小硬盘和小内存。

软件属性:异常软件堆栈,例如。没有IM,没有邮件客户端

系统属性:正常运行时间(“系统已在10秒前重新启动”),网络流量(“系统正常运行了一天,但只有几个MB通过网络传输”),没有或只有默认打印机

用户属性:干净的桌面,干净的文件系统,干净的cookie,没有最近的文件,没有用户文件。

现在为了详细说明这种检测方法,我们还是回到图五中那个样本。除了检查虚拟机是否存在外,恶意软件另外正在寻找Wine模拟器(它能模拟Windows功能,而不是模拟CPU)的存在。我们可以在VTI的评分中看到恶意软件正在做一个查询GET_PROC_ADDRESS,并尝试根据返回的结果来确定在Wine环境中预期的结果:

1488597477828258.png

点击以下链接https://www.vmray.com/analyses/678032/report/overview.html,你可以查看完整的分析报告。

基于时间的检测

恶意软件可以通过监视应用程序的时间行为来检测沙盒的存在性,鉴于此沙盒会尝试通过伪造时间来防止恶意检测,但是,恶意软件可以通过并入外部时间源(如NTP)绕过此过程。

比如下面这个样本,就是基于对时间的检测,利用rdtsc执行检测两次系统时间戳的间隔是否过长:

1488597530112845.png

FORCEPOINT安全实验室专门对这个检测技术做了一个深入的研究。

点击以下链接https://www.vmray.com/analyses/663313/report/overview.html,你可以查看完整的分析报告。

如何构建沙盒检测环境

为了避免恶意软件的以上这些类型的检测,沙盒分析环境应该做到以下几点:

在进行检测时,不要修改检测环境,因为用于沙箱分析的通用方法是hook技术,而不论是用户模式还是内核级驱动程序,监视和拦截API调用和其他恶意软件活动都会带有hook的使用痕迹,所以在检测时沙盒环境是不可能完全隐藏hook的存在,也就是说通过这种方法来对抗恶意软件的逃逸是徒劳无功的。

要么完全实现系统仿真,要么完全不实现,虽然从理论上讲,实现完美的仿真环境会让恶意软件难以检测到,但在实践中,真要实现却并不容易,就像我们上面分析的那几个样本一样,几乎任何给定的仿真环境都会有可以被检测到的漏洞。

使用“真实”的分析环境,如果沙盒分析器可以运行从实际运行环境中复制过来的完整映像,例如图像,图标,声音,映像,属性列表,文本文件等,则被检测到的概率就会小很多。正如我们前面所分析的那样,将检测环境与随机化的环境联系起来有助于确保恶意软件不会把检测环境标记为“假”的,

VMRay就是利用以系统管理程序为核心的技术以及由监测方法(模块间的过渡监测),提供一套无代理的自动化威胁分析解决方案。VMRay分析仪是在管理程序级别进行监测,通过不修改目标环境,不依赖于仿真系统,并把真实运行的环境映像过来,运行在目标操作系统下的恶意软件是无法察觉的。

接下来,就让我们来深入分析一下沙盒逃避技术的第二种方法,利用沙箱技术漏洞。

利用沙箱技术漏洞

如果恶意软件刻意的来搜索沙箱的存在,则很有可能在分析期间就被检测为可疑活动。因此,恶意软件采用的更高级方法就是利用沙盒技术中的漏洞来执行逃逸行为。通过利用这些沙盒的漏洞,即使恶意软件是在沙盒系统中执行,也不必担心被检测到。

大多数沙箱都会进行用户监控,即沙箱会在分析环境中放置代码,进程,hook等。如果恶意软件能取消或规避这些监控,则沙箱将失效。恶意软件一般会采用以下的方法来让沙箱失效:

去除hook,可以通过恢复原始指令或数据来去除hook

规避hook,绕过API直接进行系统调用,调用未hook的私有函数(private function)或执行未对齐的函数(unaligned function)调用(跳过hook code)来规避hook。比如下面这个例子,就检测到了恶意软件启动和攻击explorer.exe和regedit.exe的非法API使用。虽然这个问题可以通过hook来解决一些特定的内部功能,但目前在操作系统中,这些漏洞利用会随每个Windows版本而变化。此外,未对齐的函数调用的问题目前还不能通过hook来完全地解决。

1488597720632052.png

替换系统文件,hook通常驻留在映射到内存的系统文件中。某些恶意软件会取消这些映射文件并重新加载它们。然后,新加载的文件就不会含有hook

内核代码:许多沙盒不能监控内核代码或系统的引导过程:模糊文件格式,许多沙盒不支持所有文件格式,例如Powershell,.hta,.dzip等一些文件格式,这些文件格式可能会在沙盒环境中运行。

目前许多沙箱不是支持所有的逃逸分析技术,虽然沙盒能检测到运行在其中的初始文件(例如,带有宏的Word文档),但对宏所携带的逃逸分析技术的有效载荷却无法进行检测。

重新启动操作系统,许多沙盒无法适应重新启动。一些系统尝试通过重新登录用户来模拟重新引导,但是这可以被检测到,并且不是所有的重新引导的触发器都会被执行。

利用沙盒技术系统中的特定漏洞,恶意软件有时还可以使用一些简单但特别有效的方法进行沙盒环境的检测,一些沙盒只支持一定大小的文件,例如10 MB;还有一些沙盒不支持多个压缩层。

所以为了确保恶意软件不能通过这些方法逃避分析,沙盒分析环境应该:

1.不要依赖于对沙盒分析环境的修改,特别是,用于沙箱分析的通用方法是hook。hook的存在使恶意软件有机会禁用沙盒的分析功能。
2.把实际运行环境作为目标分析的环境模型,为了方便有效的检测到恶意软件,许多沙盒都具有“一刀切”的方法,即设置一类目标分析环境,然后将这个环境模型投放到所有的分析中,这样做明显不适合,更好的方法是使用实际的环境映像,即把企业运行的系统标准,服务器操作系统,应用程序配置作为目标分析环境模型。这样,就可以放心的进行检测了,沙盒就可以对任何环境下的恶意软进行检测了。
3.监控所有与恶意软件相关的活动,无论是应用程序还是各种文件格式,一些沙盒分析器,特别是那些使用基于hook方法的沙盒分析器,为了确定什么活动被监视的效率,通常为了采取快捷和稳妥的检测,而只对某一些特定的恶意行为和文件进行检测,这就为恶意软件的检测留下了漏洞。
本文参考于vmray,如若转载,请注明来源于嘶吼: http://www.4hou.com/technology/3665.html
点赞 0
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

    沙拉拉卡 2017-03-06 18:04

    不能完全依赖沙盒,这是必须的,但是沙盒暂时还是有存在的必要性,毕竟还是一层防御

    天海 春香 2017-03-06 12:28

    厉害了