Check Point安全研究人员近日在调查多个恶意文档时发现了此次攻击活动,这些文档的目标貌似是俄罗斯。研究人员分析发现这些文件是感染链的一部分,目的是删除与Lazarus组织相关的后门KEYMARBLE的更新变种。
研究人员分析过程发现两个不同的感染流。
主感染流包含以下3个主要步骤:
一个含有2个文档的ZIP文件:非恶意的诱饵PDF文档和含有宏的恶意word文档。
恶意宏从Dropbox URL下载一个VBS脚本,然后执行VBS脚本。
VBS脚本从dropzone服务器下载一个CAB文件,提取出嵌入的EXE后门文件(后门文件使用windows expand.exe工具),然后执行后门。
最开始的时候,感染链包含以上步骤,但在某些特定点,攻击者决定跳过感染链的第二阶段,然后修改恶意word宏来直接下载和执行第3阶段的后门。
图1: 感染流
所有与攻击活动相关的文档从2019年1月26日到31日从俄罗斯的不同源上床到了VirusTotal,其中一些文件名很像原始的文件名。
所有的文档都含有类似的metadata和韩文的代码页,其中home是作者名。
在攻击活动中,攻击者使用多个诱饵图像来说服受害者点击Enable Content按钮以触发恶意宏代码。
“2018.11.2~2019.1.26_ErrorDetail.doc”
First Submission: 2019-01-31 13:45:04
Code Page: Korean
Author: home
Notes: Cyrillic looking characters in the image
SHA-1: 088c6157d2bb4238f92ef6818b9b1ffe44109347
“Serial_Numbers.xls”
First Submission: 2019-01-31 06:56:00
Code Page: Korean
Author: home
SHA-1: 4cd5a4782dbed5b8e337ee402f1ef748***35709
“LosAngeles_Court_report.doc”
First Submission: 2019-01-26 09:59:50
Code Page: Korean
Author: home
SHA-1: e89458183cb855118539373177c6737f80e6ba3f
攻击活动中出现的释放器的XLS和DOC变种的宏代码是类似的。
宏代码本身非常简单没有使用任何高级的混淆技术,最终导致恶意文档可以绕过安全知名厂商产品的检测。
文档的下载页部分非常有意思,在HTTP request header中使用了Dropbox Host域。
图2: HTTP request header中的Dropbox Host域
研究人员在定位了相关样本后,发现感染链的第二阶段下载来源于Dropbox本身,也就是说Dropbox是感染链的第二阶段的源。
图3: 负责从Dropbox下载第二阶段感染的代码
在攻击活动中,至少有一个恶意office文档是通过ZIP文件传播的,还有另一个PDF诱饵文档名为NDA_USA.pdf。
图4: 分发的ZIP文件中含有的诱饵文件和恶意文件
非恶意的文档首先使该文件看起来是合法的,并含有一个NDA文件,是一家提供软件保护方案的俄罗斯公司。
图5: 发送给受害者的非恶意文档
Lazarus组织为该攻击活动使用一系列被黑的服务器,这次攻击活动也是一样的。
攻击活动的final payload也是从一个被黑的服务器上下载的,是以CAB文件的形式下载的,之后被扩展成为KEYMARBLE后门。实际上,CAB文件伪装成被黑主机上的一个JPEG图像(http://37.238.135[.]70/img/anan.jpg)。
被黑的服务器是一个South Oil Company公司信息部的网站,服务器位于伊朗,由EarthLink提供通信和互联网服务。
图6:伊拉克被黑的服务器
KEYMARBLE是NCCIC 2018年8月报道过的一个后门软件。该恶意软件是一款远程管理工具RAT,为其运营者提供从受害者机器获取信息的基本功能。恶意软件运行后,会进行一些初始化操作,与C2服务器通信并等待接收新命令。每个接收的命令都会被后门处理,并对应地收集用户的相关信息或执行对应操作。
前面也介绍过其感染流,前面提到的所有下载KEYMARBL的恶意文档都压缩在一个CAB文件中。
研究人员解压CAB文件中的后门并分析,发现通过这种方式攻击者可以降低安全厂商的检测成功率,将5个检测到的厂商成功降低到2个。
图7: Virus Total中的安全厂商检测结果
恶意软件的实例在流程和功能上都继承了上一版本。都有2个主要阶段,其中初始化阶段建立必要的数据结构并与C2服务器进行通信,主命令循环就从服务器接收命令并传递给对应的处理器(handle)。这些机制都出现在与朝鲜相关的APT组织Lazarus的恶意软件中。
下面对KEYMARBLE的主要特征等进行分析。
后门变种都以一个动态win32 API函数解析开始。这也是多款朝鲜恶意软件的典型特征,运行时会解密一系列函数名然后解析为内存中的全局表。表的地址会被用于之后调用目标API函数。该机制与其他恶意软件家族不同的特征是使用了开源McbDES2 代码来实现DES算法的函数名解密。
图 8: KEYMARBLE不同版本的API解析逻辑比较
图 9: 使用开源McbDoDES模板库进行API函数名解密
然后,KEYMARBLE会开始准备与C2服务器进行通信所需的数据结构。包括WolfSSL相关的数据结构的初始化和与服务器的初始化通信。对前者来说,恶意软件会释放一个硬编码的PEM证书到硬盘%TEMP%,文件名为Thumbss.db,然后将读取的数据传递给内部WolfSSL函数ProcessFile。然后进行语法分析并将从证书中提取的数据分配到用于通信的全局环境结构。样本中使用的证书参见IOC。
图 10: 使用wolfSSL通信的初始化,用于恶意软件通信的数据结构
在与C2服务器进行通信时,恶意软件会创建一个socket,调用ioctlsocket和命令参数0x8004667E来设置为non-blocking,尝试连接到硬编码的IP地址194\.45\.8\.41,端口为443。每个连接会在30分钟内不断尝试直至成功,连接成功后会打断循环并继续执行。
恶意软件和服务器之间的交换的信息都是预定义的结构,如图4所示。恶意软件使用SSL进行通信,因此每个消息都用客户端和服务器进行SSL握手时交换的key进行加密,发送和接收数据的动作是wolfSSL函数进行处理的,分别是SendData和ReceiveData。
图 11: 预定义的协议消息结构
在与C2服务器进行初始连接后,KEYMARBLE会发布一个beacon信标消息。该消息意味着携带着机器的UID,是一个操作的结果:
MD5(ProductID|MAC), 第一个域是查询SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductId注册表获得的,第二个域是调用函数GetAdaptersInfo获得的MAC地址。
但该UID只能通过特定的请求从服务器获得,否则该数据域为空。
图 12: 通过MD5和MAC地址计算UUID
然后恶意软件进行循环等待来自服务器的命令代码。然后传递给一个调度函数,每个命令都有对应的handler进行处理。命令一共从2个部分接收,第一个是服务器发送带有命令数据长度的消息,然后发布真实的命令代码。
命令调度使用switch结构来将控制传递给对应的函数。命令代码从0x1234556到0x1234578,大多数命令都与老版本木马的命令有交叉。但该版本的命令数量更少。与接收命令代码类似,每个发送的命令参数前面都有一个长度消息表明应该给发送的参数分配多大的缓存。
图 14: 新老版本木马的命令调度函数比较
https://research.checkpoint.com/north-korea-turns-against-russian-targets/
本文作者:ang010ela
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/99324.html