恶意软件研究人员 Marco Ramilli 发现了一款在野 2 年未被发现发现的恶意软件,然后进行了逆向分析。研究人员发现恶意软件使用了许多混淆的步骤和实现语言。
分析发现,只有很少一部分反病毒软件(6/60)能够检测出样本。事实上,没有反病毒软件检测出恶意样本,只有一些反病毒软件触发了不需要的软件(generic unwanted software)签名。
反病毒软件检测
样本(SHA256: e5c67daef2226a9e042837f6fad5b338d730e7d241ae0786d091895b2a1b8681)是以 JAR 文件的形式呈现的。作为一个有经验的恶意软件逆向工程师,正常的逻辑是对其逆向和调试,但反编译该样本时,出现了下面的内容:
Stage1: JAR invoking JavaScript
这是一种 Java 方法,可以激活嵌入的 Javascript 文件。提取的 Javascript 文件如下图所示,使用了 OOoo00 的混淆方法。这种混淆方法很难解密,研究人员只能一个字符一个字符的替换。
Stage 2: 评估过的 Javacript(混淆后)
在完成所有替换之后,就可以看到可读性很好的 Javacript 脚本了:
Stage 2: 手动解混淆的 JavaScript
有趣的是攻击者在这里滥用了 JS-JVM 集成。JavaScript 使用 Java 环境来说明使用 Java 函数调用环境 java 类。在这一阶段,JS 会从原始的 JAR 文件中加载加密的内容,使用 key 解密内容,最后在内存中加载动态类加载器(Dynamic Class Loader)。
使用的加密算法是 AES,所以研究人员使用一个简单的 python 脚本来打印出解密参数。下图是重构 AES-KEY 和环境参数的解码脚本。
注:该 python 脚本只做实验用,未进行保护。
解码 AES-KEY 的 python 脚本
有了解码的参数后,还需要用下面的数据来解密类:
ClassName 类名
Resource 资源
Byte to be decrypted 需要解密的字节
Secret Key 密钥
Byte Length to be decrypted 要解密的字节长度
研究人员开发了一个简单的 java 解密器来解密恶意软件源码,运行后,就解密出下面的代码:
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 命令的结果:
Stage 4 VBS 运行文件
在这里攻击者使用了新的脚本语言— VBS,最开始的时候攻击者需要 Java 环境,在入口点,解密的 payload 是 Javascript,然后最后一阶段又使用了 VBS。攻击者使用 VBS 来查询 WMI 信息来提取安装的反病毒软件防火墙信息。使用 .reg 文件可以枚举大量的安全工具,这也是恶意软件分析人员常用的技巧。
攻击者一共枚举出 571 中目标设备上不应该安装的分析工具。事实上,该恶意样本并不能绕过系统的查杀,但它强制系统杀掉这些进程,无论是否安装。样本会复制 xcopy.exe 整个 Java VM 到 AppData-Roaming-Oracle,通过改变本地环境 classpath,用来执行后续动作。最终释放和执行一个名为 plugins 的 payload。
最后释放的文件(_RandomDec 和 plugins)
乍一看,恶意软件逆向工程师会注意到最早的样本最终会释放 AdWind/JRat 恶意软件,来窃取受害者设备上的文件和个人信息。已经又许多分析 AdWind/JRat 的文章了,但研究人员感兴趣的是其传播方式。攻击者混合了混淆技术、解密技术、无文件技术、多语言阶段和绕过技术来传播 AdWind/JRat 恶意软件。
在分析过程中,研究人员发现攻击者使用了多种变成分格。每个阶段都使用特定的编程语言,也就是说是分别运行的。所有这些都说明了恶意软件样本是使用 Malware builder 构建的,而且非常匹配 AdWind 哲学,以服务平台的方式运行。
| 留言与评论(共有 0 条评论) |