导语:恶意软件研究人员Marco Ramilli发现了一款在野2年未被发现发现的恶意软件,然后进行了逆向分析。研究人员发现恶意软件使用了许多混淆的步骤和实现语言。

恶意软件研究人员Marco Ramilli发现了一款在野2年未被发现发现的恶意软件,然后进行了逆向分析。研究人员发现恶意软件使用了许多混淆的步骤和实现语言。

分析发现,只有很少一部分反病毒软件(6/60)能够检测出样本。事实上,没有反病毒软件检测出恶意样本,只有一些反病毒软件触发了不需要的软件(generic unwanted software)签名。

Screen Shot 2018-08-15 at 08.11.17.png

反病毒软件检测

样本(SHA256: e5c67daef2226a9e042837f6fad5b338d730e7d241ae0786d091895b2a1b8681)是以JAR文件的形式呈现的。作为一个有经验的恶意软件逆向工程师,正常的逻辑是对其逆向和调试,但反编译该样本时,出现了下面的内容:

0.png

Stage1: JAR invoking JavaScript

这是一种Java方法,可以激活嵌入的Javascript文件。提取的Javascript文件如下图所示,使用了OOoo00的混淆方法。这种混淆方法很难解密,研究人员只能一个字符一个字符的替换。

1.png

Stage 2: 评估过的Javacript(混淆后)

在完成所有替换之后,就可以看到可读性很好的Javacript脚本了:

Screen Shot 2018-08-15 at 11.42.14.png

Stage 2: 手动解混淆的JavaScript

有趣的是攻击者在这里滥用了JS-JVM集成。JavaScript使用Java环境来说明使用Java函数调用环境java类。在这一阶段,JS会从原始的JAR文件中加载加密的内容,使用key解密内容,最后在内存中加载动态类加载器(Dynamic Class Loader)。

使用的加密算法是AES,所以研究人员使用一个简单的python脚本来打印出解密参数。下图是重构AES-KEY和环境参数的解码脚本。

注:该python脚本只做实验用,未进行保护。

Decoding4.png 

解码AES-KEY的python脚本

有了解码的参数后,还需要用下面的数据来解密类:

    ClassName类名

    Resource资源

    Byte to be decrypted需要解密的字节

    Secret Key密钥

    Byte Length to be decrypted要解密的字节长度

研究人员开发了一个简单的java解密器来解密恶意软件源码,运行后,就解密出下面的代码: 

Screen Shot 2018-08-16 at 06.22.14.png

Stage 3 解密的JavaClass

加密后,就到了stage 3阶段。但stage 3反映的还是老代码,是stage 2的一个副本。但需要解密新的类(图中红色标签),研究人员使用了同样的算法(图中橘色)、新的key(明文,图中橘色)和同样的反射技术。攻击者利用反射技术可以加载Java.loader中的内存解密内容,并用于下一步的解密,然后重复地回复该代码。

不同的是stage 3通过在加密section(图中浅蓝色)中加入静态GZIpped内容来构建新的内存中阶段(stage 4)。通过使用该技术,攻击者可以随意到达任意的解密阶段。

在解密的最后,样本会在AppData – Local – Temp中保存一个文件:_ARandomDecimalNumber.class。这个.class文件是携带了完整函数集的JAR文件。在结束之前,最后一阶段会运行代码:

java -jar _ARandomDecimalNumber.class

该命令的执行会在本地硬盘(AppData-Local-Temp)中释放三个文件,分别是RetrieveRandomNumber.vbs (2x) 和RandomName.reg。下图是cat命令的结果:

 7externalVBS_ScriptUsage.png

Stage 4 VBS运行文件

在这里攻击者使用了新的脚本语言—VBS,最开始的时候攻击者需要Java环境,在入口点,解密的payload是Javascript,然后最后一阶段又使用了VBS。攻击者使用VBS来查询WMI信息来提取安装的反病毒软件防火墙信息。使用.reg文件可以枚举大量的安全工具,这也是恶意软件分析人员常用的技巧。

攻击者一共枚举出571中目标设备上不应该安装的分析工具。事实上,该恶意样本并不能绕过系统的查杀,但它强制系统杀掉这些进程,无论是否安装。样本会复制xcopy.exe整个Java VM到AppData-Roaming-Oracle,通过改变本地环境classpath,用来执行后续动作。最终释放和执行一个名为plugins的payload。

10pluginToDecode and loadDropper.png

最后释放的文件(_RandomDec和plugins)

乍一看,恶意软件逆向工程师会注意到最早的样本最终会释放AdWind/JRat恶意软件,来窃取受害者设备上的文件和个人信息。已经又许多分析AdWind/JRat的文章了,但研究人员感兴趣的是其传播方式。攻击者混合了混淆技术、解密技术、无文件技术、多语言阶段和绕过技术来传播AdWind/JRat恶意软件。

在分析过程中,研究人员发现攻击者使用了多种变成分格。每个阶段都使用特定的编程语言,也就是说是分别运行的。所有这些都说明了恶意软件样本是使用Malware builder构建的,而且非常匹配AdWind哲学,以服务平台的方式运行。

 final_consideration.png

源链接

Hacking more

...