如何使用JavaScript混淆来躲避AV


如何使用JavaScript混淆来躲避AV


介绍

前不久,Cybaze-Yoroi ZLAB的安全研究人员发现了一个值得深入研究的可疑JavaScript文件:这个恶意JavaScript文件利用了多种技术来躲避所有AV产品的检测,在著名的VirusTotal平台上,总共58中反病毒解决方案没有一个能够检测到这个JavaScript文件。因此,我们打算对其进行更加深入的分析,并弄清楚这个恶意软件到底使用了怎样的技术。

如何使用JavaScript混淆来躲避AV

技术分析

这个恶意文件采用JavaScript开发,Windows脚本主机系统组件默认是支持该文件运行的。而且该文件所占空间要比常见脚本文件的要大很多,这个脚本大约有1MB左右,脚本内容乍看之下跟乱码差不多。

如何使用JavaScript混淆来躲避AV

脚本内容一眼看去倒是有个挺有趣的地方:整个脚本主体使用的是非ASCII码字符集:

如何使用JavaScript混淆来躲避AV

这些字符/字符串看起来似乎没有任何逻辑可言,但是仔细分析之后,我们发现这是恶意软件的开发人员所使用的第一种技术。首先,使用了ASCII和Unicode字符来混合组成长字符串,并用这种长字符来声明变量。有些地方甚至还涉及到了西里尔字符:

ыNиpsфбm3nxsцвиеKEсыBLQBеnьVWC

而且所有的变量名都有一个特征,即可见的变量名都在“_“字符之后,该字符前面的内容我们是看不到的,因此我们推测攻击者在声明所有变量时使用了常见的前缀。我们可以看到如下所示的变量:

var =[…]_0x5e24

那么第一步就是对这些代码进行反混淆处理,并使用其他的字符来替换掉这些变量前缀,增强代码的可读性。结果如下:

var A_0x5e24=[‘fromCharCode’,’function\\x20H2B([string]$s){$H=@();for\\x20($i=0;$i\\x20-lt\\x20$s.Length;$i+=2){$H+=[Byte]::Parse($s.Substring($i,2),[System.Globalization.NumberStyles]::HexNumber);};return\\x20$H;};$_b=(get-itemproperty\\x20-path\\x20\\x27HKCU:\\x5cSOFTWARE\\x5cMicrosoft\\x5cRun\\x27\\x20-name\\x20\\x27Microsoft\\x27).Microsoft;

在分析过程中,我们还发现了另一种混淆技术,这里攻击者结合了ASCII码字符和十六进制字符来处理脚本代码。因为代码中可以看到类似如下图所示的十六进制字符:

0x27
0x20
0x5c

把这些十六进制值转义并进行ASCII编码之后,我们得到了它们所代表的实际意义:

0x27→ ‘
0x20→ empty space
0x5c→ \

经过反混淆处理之后,得到的脚本内容如下:

如何使用JavaScript混淆来躲避AV

这里,每一个十六进制字符前面的反斜杠必须配合一个以ASCII编码的十六进制值。现在,我们可以清楚地看到代码以及JavaScript Dropper中隐藏的可执行代码(部分)了:

如何使用JavaScript混淆来躲避AV

上述代码的第一行,用‘$’字符和_b变量替换了字符‘5’。手动执行整个操作后,我们就可以获取到格式化的可执行文件了,也就是目标设备受感染后最终的攻击Payload:

如何使用JavaScript混淆来躲避AV

我们可以看到,前四个字符为“4D5A”,这在Windows环境下的可执行文件中有着重要意义。经过解码后,Payload为了实现持久化感染,会写入下列注册表键:

HKCU\SOFTWARE\Microsoft\Run\Microsoft

此时,我们提取出来的经过解码的可执行文件就可以被VirusTotal平台上大多数AV解决方案检测到了:

其中的代码来自于著名的Remote Access木马,这也是很多网络犯罪分子经常会使用的一款木马病毒,这个变种使用的命令控制服务器如下:

networklan[.]asuscomm[.]com

总结

通过对这个恶意JavaScript脚本进行分析后,我们也了解了目前恶意攻击者的确可以轻松绕过反病毒技术的检测,即使他们使用的是著名的RevengeRAT,在引入了高级混淆技术或其他方式之后他们仍可以“逍遥法外”。

另一个需要引起大家注意的就是,即使该变种被发现了多日并已将后续样本提交到了VirusTotal,几天之后也仅有两个AV解决方案检测到了这个恶意脚本文件,这是不是有点不太合适啊?


分享到:


相關文章: