在6月10日,F5实验室的威胁研究人员发现了一起针对Apache Struts 2服务器的新活动,使用了Apache Struts 2 Jakarta Multipart Parser插件漏洞(CVE-2017-5638)。这起活动被认为拥有一些在之前从未发现过的独有特征:

  • 采用C#语言编译自己的dropper;
  • 下载一个.NET恶意软件;
  • 将我国国内一个网络论坛作为它的命令和控制(C&C)服务器;
  • 使用自己的解码器解码C&C命令。

而研究人员还强调,这些还只是这起活动所有特征中的一部分。

杀死监视应用程序

这起活动采用多个阶段进行,其中所有命令注入都使用Apache Struts 2 Jakarta Multipart Parser插件漏洞实现。

第一阶段涉及终止受感染设备上用于恶意软件检测和常用的监视工具。

攻击者使用taskkill命令强制(/f标记被使用)终止多个应用程序。

图1:使用Apache Struts 2漏洞来传递命令以强制终止QQProtect.exe进程

在这些应用程序中,我们可以看到奇虎360的360 Total Security、AhnLab的杀毒软件、KingSoft PC Doctor可执行文件以及Windows任务管理器。以下是此活动试图终止的应用程序的完整列表:

  • QQProtect.exe
  • QQPCTray.exe
  • 360safe.exe
  • 360sd.exe
  • 360tray.exe
  • 360leakfixer.exe
  • 360rp.exe
  • ZhuDongFangYu.exe
  • AhnSD.exe
  • ACASP.exe
  • AYAgent.exe
  • KSafetray.exe
  • KSafe.exe
  • taskmgr.exe
  • alg.exe

C#下载器在运行时编译

恶意Java有效载荷在受感染系统上的C:\ProgramData\update.cs中创建一个C#源代码文件。

图2:注入命令来创建C#下载器的Apache Struts 2请求有效载荷部分

接下来的两个请求会注入命令,以在两个通用的.NET框架(v2.0.50727和v4.0.30319)上编译C#代码,生成的二进制可执行文件保存在C:\ProgramData\update.exe中。

图3:Apache Struts 2请求注入命令以编译C#下载器的有效载荷部分

下一个命令注入运行生成的下载器可执行文件,以从hxxp://119.29.183.32:8080/netxmr4.exe下载恶意软件,并将下载的文件保存到被利用系统上的C:\ProgramData\usb.exe中。

图4:注入命令来下载恶意软件的Apache Struts 2请求有效载荷部分

运行恶意软件并删除痕迹

一旦恶意软件被下载到受感染系统中,攻击者就会注入一条命令来运行它。

图5:攻击者注入命令运行恶意文件

运行恶意软件后,攻击者会尝试删除操作痕迹,包括C#下载器的源代码和可执行文件,以及恶意软件文件。研究人员表示,他们没有能够找到或重建攻击者试图删除的另一个文件——C:\ProgramData\d.txt,但假设它是某种日志文件。

图6:注入命令删除恶意痕迹

Windows服务器兼容性?

在发出上述所有请求之后,攻击者再次发送每个请求,这次使用C:\wmpub\路径而不是C:\ProgramData\,这可能是针对运行微软Windows Server操作系统的设备。

图7:向运行微软Windows Server操作系统的目标服务器注入的众多命令之一

用户个人设置文件页面作为C&C

一旦恶意软件启动,它会下载hxxp://www.sufeinet.com/space-uid-97643.html。这个URL链接到一个用户个人设置页面,其中的文本似乎是base64编码的。

图8:发送恶意软件请求以获取用户个人设置页面

图9:用户个人设置页面,包含似乎是base64编码的文本

尝试使用base64解码页面中的文本并不会成功,因此研究人员推断,这可能是一个私有的加密或编码方法。为了解码文本,需要深入挖掘并分析恶意软件。

恶意软件的自我保护

试图反汇编下载的恶意软件只能提供很少的信息,而且几乎无关紧要。经过一些额外的分析后,研究人员发现该恶意软件使用了ConfuserEx v1.0.0进行打包(混淆),这是一个免费且开源的.NET应用程序打包程序,v1.0.0是其最新版本。

ConfuserEx v1.0.0 有一个开源的解包器——ConfuserEx-Unpacker。不过,研究人员表示他们并没有使用它。相反,他们放弃了恶意软件进程内存,并将相关的恶意文件内存提取到一个单独的文件中,该文件没有经过打包,分析起来会相对容易。

使用.NET反编译器,研究人员表示他们能够轻松浏览解压缩的恶意软件代码,这揭示了一些有趣的发现。

图10:使用.NET反编译器浏览解压缩恶意软件中的类

解码C&C命令

在一个名为GetXmrCommand的类中,一个名为GetExeCmd的函数包含一个有趣的字符串,它看起来像一个base64编码的字符串,但实际上并非如此。这与在C&C用户个人设置页面中看到的文本类似。在同一个类中名为“Base64”的函数使用这个字符串作为参数,然后将结果传递给.Net函数WebRequest.Create,该函数将接收URL作为参数。这意味着“Base64”函数用于将编码的字符串转换为可读的URL。

图11:使用名为“Base64”的函数对GetExeCmd(一个编码字符串)进行解码以生成URL

查看名为“Base64”的函数,揭示了解码代码,该代码对字符串进行解读,然后使用真实的base64解码器获取明文。

图12:“Base64”函数,它解码URL编码的字符串

在实现了一个小型解码器后,能够接收到解码后的字符串,即hxxp://www.sufeinet.com/space-uid-97643.html。与恶意软件启动时访问的页面完全相同——一个用户个人设置页面。话虽如此,构建这个小型解码器并不是白费力气,因为在几行之后,个人设置页面将被解析以提取编码的命令,现在便可以解码它了。

下载profile html文件后,代码搜索字符串“xMF0R”第一次出现,然后跳过编码字符串中的这些字符,并解码字符串的其余部分。

图13:在用户个人设置页面中解码字符串的GetExeCmd代码片段

当使用相同的机制解码字符串时,能够得到以下文本:

“-a cryptonight -o stratum+tcp://pool.supportxmr.com:3333 -u 44873Xameckc4wR21AdrM5fnoFHKZJSVj6cBADTgFTrEEN94jP2XfQZ74PMRiqoYHnBu2cCe32wLx7gKHnQpfFqCLb6Ryn2 -p x --donate-level=1”

我们能够看到,用户个人设置页面上的C&C字符串原来是Monero矿工的命令行参数。

挖矿作业

作为恶意软件操作的一部分,有几个文件被下载,其中一个是XMRig门罗币矿工。回顾在前面提到的XMrig参数,揭示了以下内容:

  • “-o stratum+tcp://pool.supportxmr.com:3333” 是挖矿服务器的URL;
  • “-u 44873Xameckc4wR21AdrM5fnoFHKZJSVj6cBADTgFTrEEN94jP2XfQZ74PMRiqoYHnBu2cCe32wLx7gKHnQpfFqCLb6Ryn2”是付款地址;
  • “-px”是挖矿服务器的密码;
  • “--donate-level = 1”是XMRig创建者配置用于捐赠的时间百分比;攻击者将其设置为最小可能的1%。

查看挖矿服务器上的付款地址,可以看到有关于此次活动的更多详细信息。

图14:攻击者的门罗币挖矿付款地址的统计信息

到目前为止,攻击者已经获得了8.76枚门罗币,目前每枚门罗币的价格为110.79美元,总计为970.52美元。

根据挖矿服务器网站提供的信息,这起活动开始于6月1日左右。

作为参考,一台配备2GB DDR3内存条和NVIDIA GEFORCE GT 710显卡的挖矿设备可以达到约50H/s,而一台大约价值12,000美元的顶配挖矿设备可以达到24,000H/s或24KH/s。对于这起挖矿活动,平均哈希速率大约为60KH/s。因此可以得出结论,有多台设备参与了这起挖矿作业。

声明:本文来自黑客视界,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。