首页 > 开发 > JS > 正文

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

2016-04-06 13:04:27  来源:极客头条

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

  根据360安全中心监测,js敲诈者病毒主要通过网页挂马和钓鱼邮件两种途径进行传播,本文将对此类病毒的传播方法及反查杀技巧进行分析。
  网页挂马传播
  黑客会利用部分网站的漏洞,将js敲诈者病毒植入到网页中,当用户访问带有恶意代码的网页时,电脑就会自动下载并执行此病毒。
  http://p9.qhimg.com/t0121b55f74622b61d1.png
  图 1:样本1
  如图1所示的样本,它利用十六进制对代码进行简单的加密,因此对它进行解密相对来说比较简单,解密后的代码如图2所示:
  http://p1.qhimg.com/t01636dea5c9adbf27d.png
  图 2:解密后的样本1
  通过分析解密后的代码可以看出,它利用IE的ActiveX控件来获取远程的PE文件,执行过程包括下载文件,保存文件和运行文件三个步骤。它首先创建MSXML2.XMLHTTP对象来与远程服务器进行通信,获取服务器中的数据,然后使用创建的ADODB.Stream对象将获取的数据保存到用户的TEMP目录下,最后利用创建的WScript.Shell对象直接运行此文件。
  样本1由于加密方式比较简单,所以很容易被杀毒软件查杀,为了进行反查杀,它的变种进行更加复杂的加密,如图3所示的样本就是目前比较流行的加密方式。
  http://p4.qhimg.com/t013e68fda9f1805b00.png
  图 3:样本2
  首先它为字符串定义一个daughters函数,通过此函数来完成对字符串的截取。
  http://p4.qhimg.com/t013846e2fbdd06b05f.png
  图 4:字符截取操作
  然后在代码中插入一些无意义的变量进行混淆,如图5所示的变量abeUtGplX、ojfdmCwgalh、yHoFUfYVm和GapGRiqoRoK就是起到混淆代码的作用。
  http://p4.qhimg.com/t0198d78104942a349d.png
  图 5:代码混淆
  最后为了进一步达到免查杀目的,它将代码中将要使用的关键字定义到了一个数组nUvahxKnc中,它或者将关键字与和一些无意义的字符进行组合,或者将一个关键字拆分成几个不同的字符,在使用的时候再对字符进行拆分或者拼接操作。它还会在数组中插入一些无意义的字符进行代码混淆,而在脚本执行中动态地修改数组的长度从而去除那些无意义的字符,具体代码如图6所示。
  http://p1.qhimg.com/t015ef876129f7eabea.png
  图 6:使用数组进行代码混淆
  样本最终的解密结果如图7所示:
  http://p8.qhimg.com/t01084c2ffdaffceef3.png
  图 7:解密后的样本2
  邮件传播
  黑客通过社会工程学,利用人们的好奇心,精心构造一封钓鱼邮件,将js敲诈者脚本放入到邮件附件中,当用户双击运行js文件时便会中招,常见的邮件形式如下图所示。
  http://p7.qhimg.com/t015b7d227f1cbd3f20.png
  图 8:钓鱼邮件1
  http://p2.qhimg.com/t01ca79e9d58bef5456.png
  图 9:钓鱼邮件2
  为了达到反查杀的目的,钓鱼邮件1中的js文件首先用到了字符拆分和拼接的方法,这些方法由于前面已经提到,不再进行分析。
  其次它将主要的恶意代码放到一个if条件表达式中,通过调用Date.getMilliseconds和WScript.Sleep函数来获取几个不同的毫秒数,然后通过判断这几个变量值是否相等来决定是否执行if条件中的内容,如图10。
  http://p8.qhimg.com/t018de3ab05b413df5c.png
  图 10:if表达式
  钓鱼邮件1中的样本解密后如图11所示。
  http://p1.qhimg.com/t013687af1bfe02a816.png
  图 11:解密后的样本
  通过分析加密后的代码,可以看出通过钓鱼邮件方式传播的js敲诈者和挂马传播方式不同的,它没有利用ActiveX控件来进行运行,而是选择使用WScript对象。由于windows操作系统中wscript.exe会为js脚本文件提供一个宿主环境,因此当邮件保持到本地后,双击js文件便会直接运行。
  钓鱼邮件2中的样本是钓鱼邮件1的变种,为了达到进一步的反查杀效果,它在如下几个方面发生了变化。
  首先它的if条件表达式发生了变化,它使用了/*@cc_on @*/条件编译,首先将Kcm赋
  值为false,然后在条件编译中将Kcm的值赋值为true,如果杀毒软件对此没有特殊处理的话,就很难检测到下面的内容,具体代码见图12。
  http://p5.qhimg.com/t010f75bdf4fe78c63f.png
  图 12:变化后的if条件表达式
  其次在计算毫秒时,它使用的不再是Date.getMilliseconds函数,而换成了Date.getUTCMilliseconds函数来进行计算,具体见图12。
  钓鱼邮件2的样本解密后如图13所示。
  http://p1.qhimg.com/t011689600c06d4bfa8.png
  图 13:解密后的样本
  还有一种类型的js样本,样本中经过加密的关键字需要使用特定的函数进行解密。如图14,样本中加密的值要调用adjurepe6函数才能进行解密,而它为了提高复杂性,在adjurepe6函数中需要再次调用btoa函数,只有经过这两个函数的解密才能得到最终的结果。
  http://p7.qhimg.com/t01949204df52d87f1b.png
  图 14:使用函数加密
  js代码使用escape函数进行加密而躲避查杀的情况也比较常见,此函数会同eval函数一起使用。使用时首先通过unescape函数对字符串进行解码,然后通过eval函数将字符串转化为js代码。此种手法在以前的js敲诈者样本中也经常碰到,但是以前是对整个js脚本进行加密,而现在它们只对部分代码进行加密,而未加密的部分又要使用加密部分定义的函数和变量,如图15和16所示。
  http://p7.qhimg.com/t01c8c2a0acd7354593.png
  图 15:加密的代码
  http://p1.qhimg.com/t01341c7fae13fd72ae.png
  图 16:未加密的代码
  可以看到detectDuplicates、matchesSelector、fragment和string函数中所使用的addHandle在未加密代码中是无法找到的,而加密代码解密后,可以看到addHandle值为eval。代码经过解密后,主要的代码如图17所示。
  http://p2.qhimg.com/t01a895a6a12a873346.png
  图 17:解密后的脚本
  通过上面的分析可以看到为了达到反查杀的目的,js敲诈者使用了各种代码混淆和加密的方法,甚至使用了类似于/*@cc_on @*/条件编译的用法。由于这种病毒有经济上的利益,因此它们的更新速度特别快,360安全中心会密切关注这类病毒的最新动向,第一时间为用户提供有效的防护方案。
  本文由 360安全播报 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/2827.html