Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

【技术分享】JScript中逃避沙箱检测的的方法

0
0
【技术分享】JScript中逃避沙箱检测的的方法

2017-01-05 10:09:43
来源:labs.lastline.com 作者:myswsun

阅读:311次
点赞(0)
收藏





【技术分享】JScript中逃避沙箱检测的的方法

翻译:myswsun

预估稿费:140RMB(不服你也来投稿啊!)

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


0x00 前言

恶意软件经常利用逃避技术,这些技术被恶意软件用来在传统沙箱中隐藏它的恶意性。过去,我们讨论过在二进制程序中不同的逃避技术,最近我们看到了在一些恶意的office文档中利用VBA宏的逃避技术。在这里我们在JScript脚本中测试这种逃避技术。

JScript是微软对于ECMAScript的别称。实际上,JScript看起来像javascript,多了一些特征,例如条件编译。大部分恶意的JScript程序利用邮件附件传播,然后当用户点击附件,脚本被windows Script Host(WSH,即csript.exe或wscript.exe)执行。利用WSH提供的对象和服务,JScript程序获得设备资源的访问权限(例如访问和修改文件系统或创建新进程),并且能够实施有效的攻击。

为了执行真正的恶意行为,JScript程序经常实现一种或多种逃避技术来使得他们不被沙箱系统检测到。下面是一些相关技术。


0x01 Stalling Code

Stalling code的原理非常简单:使执行变慢以致分析系统过早分析结束,恶意程序在分析下将不会做任何恶意的行为。当然,在一个真实的用户机器上,在stalling code执行完后将执行真正的恶意代码。

一个实现这种技术的简单的方式是包含一些简单代码的无用的循环:这些循环一般是些花销比较大的操纵,但是结果从不被用。例如我们一个例子是在一个上千次的循环中通过解码字符串来生成一个字符串,然后在循环外面从没被使用:


【技术分享】JScript中逃避沙箱检测的的方法

如果分析成功绕过循环(或者足够快的执行),一些恶意行为被暴露,包括C&C服务器。


【技术分享】JScript中逃避沙箱检测的的方法

0x02 COM对象仿真的探测

JScript程序通过传递指定的ProgID参数给WScript.CreateObject方法获得COM对象。例如以“Scripting.FileSystemObject”参数调用CreateObject函数将实例化FileSystemObject对象,这个对象提供了一些可以用来操作文件系统的方法。想让这个操纵有效,相应的COM对象必须正确的在系统中被安装和注册。

因为COM对象经常提供一些安全相关的功能,他们的实例化和使用被分析系统密切监控。在许多情况下,简单的观察下程序想要操纵的COM对象,即使该对象没有在分析系统中被真实提供,这将提供有用的线索来判断这个程序是否是恶意的。例如一个脚本尝试加载一个未知的对象并且调用一个以长字符串为参数的方法,这可能是为了溢出缓冲区漏洞攻击。这种情况,一些分析系统假装任何ProgID是可靠的,同时这些ProgID并没有相应的COM控件被安装,他们返回一个假的对象能跟踪这个对象的所有调用。这个技术使得分析系统能够处理相对不流行的COM对象且这些对象没被分析环境提供。

不幸的是,这个技术也被恶意的脚本用来区分分析系统和真实的用户环境。例如我们发现下面的代码段:


【技术分享】JScript中逃避沙箱检测的的方法

在这个例子中,这个脚本试图加载一个不存在的COM控件(不可靠的ProgID“dcc”):如果实例化成功,变量BKYMHYNV值为非false(表明脚本在分析环境下运行),否则值为false。在后面的代码这个变量将被校验:如果BKYMHYNV值为false,脚本将执行它的恶意操作,否则没有恶意行为发生。


0x03 Timebombs

一个简单而有效的逃避技术是只在一段时期内才激活恶意行为:如果在这段时间外分析将不能看见任何恶意操作。

这个技术的例子如下:


【技术分享】JScript中逃避沙箱检测的的方法

在这个例子中,这段代码校验了当前日期的年,当Date的返回值是2016时才会有恶意操作。


0x04 执行环境

流行的一类逃避技术是校验脚本执行环境所拥有的特征是否与在常规用户环境中所期待一样。这些特征是与用户的行为相关联的(如“用户最近是否打开至少5个office文件?”);其他是与硬件特征相关的(如“是否至少1G内存?”)。反常的特征将被作为脚本判断执行环境的线索。

我们观察到一些JScript样本用CPU核心数目来区分常规设备和分析系统:


【技术分享】JScript中逃避沙箱检测的的方法

代码中读取%NUMBER_OF_PROCESSORS%环境变量,这个环境变量包含所运行机器的cpu核心数目。如果这个值不在期望内,脚本将立刻停止运行(数量小于1或大于8),否则将下载一个payload。


0x05 总结

我们已经讨论了一些被用于恶意的JScript的逃避技术:提供了一些运行在WSH下的JScript区分分析系统和用户环境的技巧,继而避免触发检测。

我们已经注意到这些技术不是只针对JScript的,他们同样可以用在恶意的可执行样本和恶意的office文档中。


0x06 样本

下面是本文提到的例子的样本:

1f7b32e6db703817cab6c2f7cb8874d17af9d707ce17579dc30aee2cdadf082f

603c5aa66a33f094e2840fc5d5b9f70b8810dd70745f5440d7d74b7a01c3f4be


【技术分享】JScript中逃避沙箱检测的的方法
【技术分享】JScript中逃避沙箱检测的的方法
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:http://labs.lastline.com/evasive-jscript

Viewing all articles
Browse latest Browse all 12749