近期js敲诈者的反查杀技巧分析

阅读量237010

|

发布时间 : 2016-04-01 18:16:19

https://p2.ssl.qhimg.com/t01c614326eb2aeb8f1.jpg

最近不少网友反映电脑中了敲诈者病毒(又名“Locky勒索软件”),电脑中的文档,图片等重要资料被病毒加密。此类病毒载体为js脚本,由js脚本下载远程服务器的pe文件,并使此pe文件在本地运行,从而完成对受害电脑数据的加密。

根据360安全中心监测,js敲诈者病毒主要通过网页挂马和钓鱼邮件两种途径进行传播,本文将对此类病毒的传播方法及反查杀技巧进行分析。

网页挂马传播

黑客会利用部分网站的漏洞,将js敲诈者病毒植入到网页中,当用户访问带有恶意代码的网页时,电脑就会自动下载并执行此病毒。

https://p3.ssl.qhimg.com/t0121b55f74622b61d1.png

图 1:样本1

如图1所示的样本,它利用十六进制对代码进行简单的加密,因此对它进行解密相对来说比较简单,解密后的代码如图2所示:

https://p1.ssl.qhimg.com/t01636dea5c9adbf27d.png

图 2:解密后的样本1

通过分析解密后的代码可以看出,它利用IE的ActiveX控件来获取远程的PE文件,行过程包括下载文件,保存文件和运行文件三个步骤。它首先创建MSXML2.XMLHTTP对象来与远程服务器进行通信,获取服务器中的数据,然后使用创建的ADODB.Stream对象将获取的数据保存到用户的TEMP目录下,最后利用创建的WScript.Shell对象直接运行此文件。

样本1由于加密方式比较简单,所以很容易被杀毒软件查杀,为了进行反查杀,它的变种进行更加复杂的加密,如图3所示的样本就是目前比较流行的加密方式。

https://p2.ssl.qhimg.com/t013e68fda9f1805b00.png

图 3:样本2

首先它为字符串定义一个daughters函数,通过此函数来完成对字符串的截取。

https://p1.ssl.qhimg.com/t013846e2fbdd06b05f.png

图 4:字符截取操作

然后在代码中插入一些无意义的变量进行混淆,如图5所示的变量abeUtGplX、ojfdmCwgalh、yHoFUfYVm和GapGRiqoRoK就是起到混淆代码的作用。

https://p2.ssl.qhimg.com/t0198d78104942a349d.png

图 5:代码混淆

最后为了进一步达到免查杀目的,它将代码中将要使用的关键字定义到了一个数组nUvahxKnc中,它或者将关键字与和一些无意义的字符进行组合,或者将一个关键字拆分成几个不同的字符,在使用的时候再对字符进行拆分或者拼接操作。它还会在数组中插入一些无意义的字符进行代码混淆,而在脚本执行中动态地修改数组的长度从而去除那些无意义的字符,具体代码如图6所示。

https://p2.ssl.qhimg.com/t015ef876129f7eabea.png

图 6:使用数组进行代码混淆

样本最终的解密结果如图7所示:

https://p2.ssl.qhimg.com/t01084c2ffdaffceef3.png

图 7:解密后的样本2

邮件传播

黑客通过社会工程学,利用人们的好奇心,精心构造一封钓鱼邮件,将js敲诈者脚本放入到邮件附件中,当用户双击运行js文件时便会中招,常见的邮件形式如下图所示。

https://p4.ssl.qhimg.com/t015b7d227f1cbd3f20.png

图 8:钓鱼邮件1

https://p4.ssl.qhimg.com/t01ca79e9d58bef5456.png

图 9:钓鱼邮件2

为了达到反查杀的目的,钓鱼邮件1中的js文件首先用到了字符拆分和拼接的方法,这些方法由于前面已经提到,不再进行分析。

其次它将主要的恶意代码放到一个if条件表达式中,通过调用Date.getMilliseconds和WScript.Sleep函数来获取几个不同的毫秒数,然后通过判断这几个变量值是否相等来决定是否执行if条件中的内容,如图10。

https://p2.ssl.qhimg.com/t018de3ab05b413df5c.png

图 10:if表达式

钓鱼邮件1中的样本解密后如图11所示。

https://p3.ssl.qhimg.com/t013687af1bfe02a816.png

图 11:解密后的样本

通过分析加密后的代码,可以看出通过钓鱼邮件方式传播的js敲诈者和挂马传播方式不同的,它没有利用ActiveX控件来进行运行,而是选择使用WScript对象。由于windows操作系统中wscript.exe会为js脚本文件提供一个宿主环境,因此当邮件保持到本地后,双击js文件便会直接运行。

钓鱼邮件2中的样本是钓鱼邮件1的变种,为了达到进一步的反查杀效果,它在如下几个方面发生了变化。

首先它的if条件表达式发生了变化,它使用了/*@cc_on @*/条件编译,首先将Kcm赋

值为false,然后在条件编译中将Kcm的值赋值为true,如果杀毒软件对此没有特殊处理的话,就很难检测到下面的内容,具体代码见图12。

https://p5.ssl.qhimg.com/t010f75bdf4fe78c63f.png

图 12:变化后的if条件表达式

其次在计算毫秒时,它使用的不再是Date.getMilliseconds函数,而换成了Date.getUTCMilliseconds函数来进行计算,具体见图12。

钓鱼邮件2的样本解密后如图13所示。

https://p1.ssl.qhimg.com/t011689600c06d4bfa8.png

图 13:解密后的样本

还有一种类型的js样本,样本中经过加密的关键字需要使用特定的函数进行解密。如图14,样本中加密的值要调用adjurepe6函数才能进行解密,而它为了提高复杂性,在adjurepe6函数中需要再次调用btoa函数,只有经过这两个函数的解密才能得到最终的结果。

https://p3.ssl.qhimg.com/t01949204df52d87f1b.png

图 14:使用函数加密

js代码使用escape函数进行加密而躲避查杀的情况也比较常见,此函数会同eval函数一起使用。使用时首先通过unescape函数对字符串进行解码,然后通过eval函数将字符串转化为js代码。此种手法在以前的js敲诈者样本中也经常碰到,但是以前是对整个js脚本进行加密,而现在它们只对部分代码进行加密,而未加密的部分又要使用加密部分定义的函数和变量,如图15和16所示。

https://p5.ssl.qhimg.com/t01c8c2a0acd7354593.png

图 15:加密的代码

https://p0.ssl.qhimg.com/t01341c7fae13fd72ae.png

图 16:未加密的代码

可以看到detectDuplicates、matchesSelector、fragment和string函数中所使用的addHandle在未加密代码中是无法找到的,而加密代码解密后,可以看到addHandle值为eval。代码经过解密后,主要的代码如图17所示。

https://p0.ssl.qhimg.com/t01a895a6a12a873346.png

图 17:解密后的脚本

通过上面的分析可以看到为了达到反查杀的目的,js敲诈者使用了各种代码混淆和加密的方法,甚至使用了类似于/*@cc_on @*/条件编译的用法。由于这种病毒有经济上的利益,因此它们的更新速度特别快,360安全中心会密切关注这类病毒的最新动向,第一时间为用户提供有效的防护方案。

本文由360安全卫士原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/83718

安全客 - 有思想的安全新媒体

分享到:微信
+10赞
收藏
360安全卫士
分享到:微信

发表评论

内容需知
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全客 All Rights Reserved 京ICP备08010314号-66