Lazarus APT组织是如何利用藏匿于 BMP 图片中恶意代码来下载远控软件的

阅读量    433364 |

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

Lazarus APT是目前最顶尖的攻击组织之一,至少从2009年开始就一直活跃在网络攻击的最前沿。众所周知,这个组织的主要攻击目标是美国、韩国、日本和其他一些国家。在他们最近的一次攻击活动中,Lazarus对安全研究人员发动了复杂的定向网络钓鱼攻击。

众所周知,Lazarus在攻击过程中经常采用新的技术和定制的工具集,以提高其攻击的有效性。在今年的4月13日,我们发现了这个组织用来攻击韩国的一份文件。在这次攻击活动中,Lazarus采用了一种非常先进的技术,即利用嵌入了恶意HTA对象的BMP文件来投递其Loader。

 

攻击流程

这次攻击很可能是从分发钓鱼邮件开始的,该邮件携带了武器化的恶意文件。下图显示了这次攻击的完整过程。在接下来的章节中,我们将对这个过程进行详细的分析。

图1:攻击流程

 

分析相关文件

打开文档时,显示一个蓝色的韩文主题,并要求用户启用宏来查看文档。

图2:蓝色主题

启用宏后,会弹出一个信息框,点击后,其中的诱饵文档就会被加载。

图3:诱饵文档

该文档的名称为韩文“참가신청서양식.doc”,内容为韩国某个城市的博览会的参展申请表。文件的创建时间是2021年3月31日,这与攻击发生在同一时间。

该文件已被武器化,在打开时会执行一个宏程序。

图4:宏程序

该宏程序首先从调用MsgBoxOKCancel函数开始。这个函数将向用户弹出一个消息框,声称是微软Office的一个旧版本。在显示消息框后,它将执行以下步骤:

图5:Document_Open

以base64格式定义所需的变量,如WMI对象、Mshta与文件扩展名,然后调用Decode函数对其进行base64解码。

  • 获取活动文档的名称并将名称与扩展名分开。
  • 使用ActiveDocument.SaveAs以wDFormatHTML为参数创建一个HTML格式的活动文档的副本。将文档保存为HTML格式时,会在FILENAME_files目录下存储该文档的所有图片。

    图6: 保存为HTML
  • 调用show函数来使文档处于受保护状态。通过使文档处于受保护状态,可以确保用户无法对文档做任何修改。

图7:保护文档

  • 获取嵌入了zlib对象的图像文件(image003.png)。
  • 通过调用WIA_ConvertImage将PNG格式的图像转换为BMP格式。由于BMP文件格式是非压缩的图形文件格式,因此,将PNG文件格式转换为BMP文件格式会自动解压从PNG嵌入到BMP的恶意zlib对象。这是攻击者用来绕过可以检测图像内嵌入对象的安全机制的一种巧妙方法——由于该文件包含一个PNG图像,其中含有一个经过压缩的zlib恶意对象,由于该对象是压缩格式的,所以静态检测无法发现它。然后,攻击者只需通过一个简单的转换机制来解压恶意内容即可。

图8:在png和bmp文件中嵌入的对象

图9:在bmp中嵌入的hta文件

  • 获得一个WMI对象来调用Mshta,以达到执行bmp文件的目的。解压缩后的BMP文件会包含一个HTA文件,该文件将执行Java Script来投递payload。
  • 删除目录中的所有图像,同时删除由SaveAs函数生成的目录。

 

分析BMP文件(image003.zip)

实际上,宏代码会在图像转换过程中将扩展程序名zip添加到BMP文件中,以便将其伪装成zip文件。该BMP文件含有一个嵌入式的HTA文件。而该HTA文件又包含一个JavaScript脚本,该JavaScript脚本会在“C:\Users\Public\Libraries\AppStore.exe”目录中创建文件“AppStore.exe”,并向该文件填充相应的内容。

首先,它会定义一个数组,其中包含脚本所需的函数和参数:OpenTextFile、CreateTextFile、Close、Write、FromCharCode、“C:/Users/Public/Libraries/AppStore.exe”以及一些垃圾值。当这个脚本想要执行相关操作时,它将调用带有十六进制值的第二个函数,该函数负责建立索引,以便从第一个数组中检索所需的值。

例如,它首先会使用0x1dd值来调用第二个函数。这个函数将从0x1dd中减去0x1dc以获得第一个数组的索引,该索引将为1。然后,它使用该索引来检索第一个数组的第一个元素,即“C:/Users/Public/Libraries/AppStore.exe”。按照相同的方法,它会继续调用CreateTextFile来创建AppStore.exe,然后将MZ写入其中。然后,它通过调用fromCharCode函数将十进制格式的数据转换为字符串,并且使用的方法与将其写入AppStore.exe的方法完全一致。最后,它会调用Wscript.Run,以执行下载的payload。

图10:嵌入的HTA对象

 

分析Payload(AppStore.exe)

AppStore.exe将加载一个base64编码的payload,该payload将被添加到该程序的末尾。在有效载荷之前,有一个字符串,它其实就是相应的解密密钥(by7mJSoKVDaWg*Ub)。

图11:嵌入的payload

为了解密第二阶段的payload,它首先将自己写入由VirtualAlloc创建的缓冲区,然后寻找加密的payload并将其复制到另一个缓冲区中。

图12:分配内存

之后,它实现了自己的base64解码器,对分配的缓冲区进行解码,并使用memset和memmove将其写入另一个缓冲区。最后,将对这个经过加密的payload进行解密:通过硬编码的解密密钥进行XOR处理,以生成第二阶段的payload。

图13:XOR解密

解密过程结束后,它将跳转到第二阶段payload的起始地址并开始运行。

 

分析第二阶段payload

这个payload是由AppStore.exe加载到内存中的,但是没有被写入磁盘。首先,它会执行一个初始化过程,具体步骤如下所示:

图14:初始化过程

  • 创建互斥锁:检查计算机上是否存在带有“ Microsoft32”名称的互斥锁:如果存在,则退出;否则,就意味着该计算机尚未感染此RAT,并开始其恶意活动。
  • 解析API调用:由于所有重要的API调用都经过了base64编码和RC4加密,因此,需要在运行时进行相应的解码和解密处理。其中,RC4解密的密钥是 “MicrosoftCorporationValidation@#$%^&*()!US”。

图15:API解析器

  • 向指挥和控制服务器发送HTTP请求。实际上,该服务器的地址已经过了base64编码处理,并使用自定义的加密算法进行了加密。另外,读者可以在这里找到相应的解码器/解密器。这种自定义加密算法类似于US-CERT报告的与Lazarus相关的BISTROMATH RAT所使用的加密算法。

图16:自定义的解密算法

http://mail.namusoft.kr/jsp/user/eam/board.jsp
http://www.jinjinpig.co.kr/Anyboard/skin/board.php

初始化任务完成后,它将检查与C&C服务器的通信是否成功:如果成功,则转到下一步,以便从服务器接收命令并根据命令执行不同的操作。

此外,从C&C接收到的命令,也使用其自定义得加密算法进行了base64编码和加密处理(图16)。去混淆后,它会根据命令代码执行下面展示的命令。此时,与服务器的通信已通过发送和接收套接字功能完成。

  • 8888:它尝试以两种不同的方式执行在命令代码之后收到的命令。首先,它尝试通过创建一个新线程来执行命令(图17)。该线程在命令代码之后获取命令,并使用cmd.exe来执行它。这个过程所通过CreatePipe和CreateProcessA来完成的。然后,它将使用ReadFile函数来读取cmd.exe命令的输出结果。

图17:创建线程

cmd.exe的输出将进行相应的编码和加密处理,并使用HTTP POST请求作为test.gif发送给服务器(图18)。

图18:将cmd.exe的输出作为test.gif进行发送

如果CreateThread进程不成功,则通过调用WinExec执行命令,然后发送“8888 Success!”。此外,使用自定义的加密算法对邮件进行加密后,还会进一步使用base64将该邮件编码为test.gif,之后才会将其发送给服务器。

图19: WinExec

  • 1234: 它用于调用CreateThread,以执行它从服务器收到的缓冲区中的代码(第三阶段的payload)。最后,它对字符串“1234 Success!”进行编码和加密处理,并将其作为test.gif图片发送给服务器。
  • 2099: 它用于创建了一个批处理文件并执行,然后退出。这个批处理文件将会从受害者的机器上删除了AppStore.exe程序。

图20:创建批处理文件

  • 8877: 它用于把从服务器收到的缓冲区中的内容存储到一个文件中。
  • 1111:它用于调用shutdown函数来禁止针对套接字的发送或接收操作。

这个第二阶段的payload使用了自定义编码的用户代理进行通信。实际上,所有这些用户代理都经过了base64编码,并使用相同的自定义加密算法对服务器地址进行加密。下面展示的是这个RAT所使用的用户代理清单。

Mozilla/%d.0  (compatible; MSIE %d.0; Windows NT %d.%d; WOW64; Trident/%d.0; Infopath.%d)

Mozilla/18463680.0  (compatible; MSIE -641.0; Windows NT 1617946400.-858993460; WOW64; Trident/-858993460.0; Infopath.-858993460)

Mozilla/18463680.0  (compatible; MSIE -641.0; Windows NT 1617946400.-858993460; Trident/-858993460.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Infopath.-858993460)

Mozilla/%d.0  (Windows NT %d.%d%s) AppleWebKit/537.%d (KHTML, like Gecko) Chrome/%d.0.%d.%d Safari/%d.%d Infopath.%d

 

归属关联分析

这次攻击和过去的Lazarus入侵活动有多个相似之处,我们认为这些都是将这次攻击判断为Lazarus组织所为的有力证据。

第二阶段的Payload使用的加密算法,与该APT组织相关的BISTROMATH RAT所使用的自定义加密算法极为类似。
第二阶段的Payload综合使用了base64编码和RC4加密处理来混淆数据,这是该APT组织惯用的一个伎俩。
这次攻击中使用的第二阶段Payload,与一些已知的Lazarus恶意软件家族(包括Destover)的代码非常相似。
在过去的Lazarus入侵活动中,包括AppleJeus攻击、针对韩国的供应链攻击和DreamJob攻击,就已经观察到以GIF形式向服务器发送数据和信息了。
这次网络钓鱼攻击的目标是韩国,而韩国是该组织的主要攻击目标之一。
众所周知,该组织使用Mshta.exe来运行恶意脚本和下载程序,这与本次攻击中使用的方法非常相似。 

 

小结

Lazarus黑客组织是最活跃和最前沿的APT组织之一,在过去的几年里,它针对多个国家发动过网络攻击,包括韩国、美国和日本。众所周知,该组织不仅开发了一系列的定制款恶意软件,并在其入侵过程中经常采用各种新技术。在这篇文章中,我们对该组织针对韩国的鱼叉式网络钓鱼攻击进行了深入的分析。

在这次入侵活动中,该组织使用了一种巧妙的方法来绕过安全机制:将恶意的HTA文件作为压缩的zlib文件嵌入到PNG文件中,然后在运行期间通过将自身转换为BMP格式进行解压。同时,被植入的payload其实是一个加载器,用于对第二阶段的payload进行解码并解密到内存中。之后,第二阶段的payload用于接收并执行相关的命令/hellcode,以及完成数据外传任务,并负责与命令和控制服务器进行通信。

 

IOC

文档

F1EED93E555A0A33C7FEF74084A6F8D06A92079E9F57114F523353D877226D72

下载的可执行文件

ED5FBEFD61A72EC9F8A5EBD7FA7BCD632EC55F04BDD4A4E24686EDCCB0268E05

C2服务器

jinjinpig[.]co[.]kr
mail[.]namusoft[.]kr
分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多