您现在的位置:主页 > 2474铁算盘资料 > 正文
2474铁算盘资料

PlugX恶意软件分析报告

发布时间:2019-10-04 浏览次数:

  PlugX恶意软件家族一直都让我非常感兴趣,因此我打算在这篇文章中对其中的一个变种版本进行分析。我在网上搜索相关研究报告的时候,偶然间发现了Fabien Perigaud的研究,并从中了解到了一个老版本的PlugX构建器。接下来,我便搭建了实验环境,并对PlugX攻击活动进行了深入分析。

  在这篇文章中,我将跟大家简单介绍一下关于这个PlugX Builder(构建器)的概况,并对恶意软件的安装过程以及C2流量进行分析和研究。

  现在有很多网络犯罪组织都会在其有针对性的攻击活动中使用PlugX,很多人也将其称之为KORPLUG、SOGU或DestroyRAT,它是一种模块化的后门,而它则需要依靠那些已签名的合法可执行程序去加载恶意代码来实现运行。PlugX一般由三大组件构成:一个DLL文件、一个加密过的二进制文件和一个已签名的合法可执行程序(使用DLL搜索顺序劫持技术来加载恶意软件)。接下来,我们先看看PlugX构建器的大致情况。

  我们所得到的Builder样本为英文版本(MD5: 6aad032a084de893b0e8184c17f0376a),代码日期为2013年8月份,其中包含了功能丰富的模块化指令以及控制接口,可支持的恶意操作如下:

  这样一来,我们就可以利用Builder的功能来定义不同的C2命令、控制密码、IP地址、安装属性和注入代码等等,并构建我们自己的Payload。这个版本Builder(LZ 2013-8-18)所生成的PlugX代码是一种自提取的RAR文档,其中包含了三份文件,运行自提取RAR文档之后将会选择性地在目录中存放这三份文件。我们的测试场景中,目录为“%AUTO%/RasTls”,文件分别为:一个来自卡巴斯基反病毒解决方案的已签名合法可执行程序,文件名为“avp.exe”(MD5:e26d04cecd6c7c71cfbb3f335875bc31),其功能是实现DLL搜索顺序劫持。当“avp.exe”运行时将会加载第二个文件-“ushata.dll”(MD5:728fe666b673c781f5a018490a7a412a),这是PlugX构建器制作的一个DLL,而这个文件将会加载第三个文件-“ushata.DLL.818”(MD5 :b4cdb6149dbd95dff146f),该文件包含了经过混淆处理和封装的Shellcode。

  “ushata.dll”为DLL入口点,其中包含的代码负责验证目标系统日期是否大于或等于20130808,如果条件符合,它将会把恶意内容注入到内存中(调用“ushata.DLL.818”),一肖中特铁算盘。并使用Kernel32.VirtualProtect API来修改内存地址分段权限(RWX),其中“ushata.DLL.818”文件中包含了经过混淆处理的Shellcode,下图显示的是部分Shellcode:

  Shellcode会使用一种自定义的算法来进行解封装,下图显示的是解封装后的Shellcode:

  Shellcode首先会通过访问线程信息块(TIB)来定位kernel32.dll的地址,而TIB中包含了指向进程环境块(PEB)结构体的指针。下图显示的是部分用于搜索kernel32.dll的Shellcode代码段:

  接下来,Payload将会开始执行各种不同的操作以实现持久化感染。在Windows 7以及更高版本的Windows平台中,PlugX会创建一个名叫“%ProgramData%RasTl”的目录,其中“RasTl”是构建器中设置的安装名称。接下来,它会使用SetFileAttributesW API来将文件夹属性修改为“SYSTEMHIDDEN”,然后将之前提到的那三个组件拷贝到这个目录中,并将所有的文件属性修改为“SYSTEMHIDDEN”。

  Payload还会修改已创建目录和文件的时间戳,修改的源数据需要使用SetFileTime API从ntdll.dll中获取。

  为了完成自己的目标,恶意代码首先会创建一个新的“svchost.exe”实例,然后向svchost.exe进程地址空间中注入恶意代码(使用进程Hollowing技术)。下图显示的是进程Hollowing技术的第一个阶段,其中Payload以“挂起”状态创建了一个新的“svchost.exe”实例。

  现在主进程仍然处于挂起状态,但是之后它会调用SetThreadContext API来改变其状态,并最终调用ResumeThread API来执行恶意代码。除此之外,如果又需要的话这个恶意软件还能够绕过用户账户控制(UAC)。

  接下来,我们还要弄清楚整个过程中恶意软件所采用的配置信息。为了导出配置数据,我们需要使用Immunity Debugger和一个Python API。这里我们需要将“plugx_dumper.py”文件复制到Immunity Debugger安装路径下的“PyCommands”文件夹中,然后把调试器挂接到受感染进程(例如“svchost.exe”)并运行插件。接下来,插件便会导出配置信息并提取出解压后的DLL。

  我们可以看到,这个解析器能够寻找到注入的Shellcode,通过解码配置信息之后,我们能够导出攻击者所注入的DLL文件,而其中则包含了恶意软件的核心功能代码。

  接下来我们分析一下恶意软件的网络流量数据。我们通过分析发现,PlugX控制器使用了多种网络协议。网络流量中包含一个16字节长度的Header,随后跟着的便是Payload。Header采用了自定义程序进行编码,而Payload的编码和压缩使用的是LZNT1.下图显示的是反编译后的自定义编码程序:

  在下图中,左手边显示的是编码和压缩前的数据包,右手边是编码和压缩后的数据包,大家可以对比一下:

  在控制器端,当数据包到达之后,Header将会被解码,随后便会对Payload进行解码和解压缩。最终的输出结果如下图所示:

  下图显示的是我们所捕捉到的其中一个数据包,我们使用了一个小型的Python脚本来对其进行解密:

  在这篇文章中,我们对PlugX的功能进行了简单分析,并研究了它的攻击和感染机制、经过混淆处理的Shellcode、持久化机制以及它所使用的进程Hollowing技术。接下来,我们还对恶意软件跟C2服务器的通信方式以及网络流量数据进行了研究。希望本文的研究内容可以给大家平时在分析恶意软件的时候提供帮助。

老钱庄心水论坛| 报码室| 管家婆透码| 摇钱树官网| 玄机图| 财神报| 一肖中特| 大红鹰| 刘佰温正料| 护民图库| 白小姐特网| 抓码王| 跑狗图| 藏宝图| 白小姐中特网一肖中特|