一、简介
在过去的几周里,我们一直在监控针对俄罗斯公司的可疑活动,我们观察到朝鲜对俄罗斯实体开展的一次攻击,这个活动暴露了我们之前从未见过的捕食者-猎物关系。虽然将攻击归因于某个威胁组织或其他组织是有问题的,但下面的分析揭示了其与朝鲜APT组织Lazarus使用的战术、技术和工具的内在联系。
这一发现来自我们正在跟踪的为俄罗斯受害者专门设计和制作的多个恶意Office文档。通过仔细检查这些文档,我们能够看出它们属于感染链的早期阶段,此感染链的终端是一个多功能Lazarus后门的更新版本,被US-CERT称为KEYMARBLE 。
Lazarus有时也被称为Hidden Cobra,是当今世界上最流行和最活跃的APT组织之一。此臭名昭著的组织,据称是朝鲜赞助的威胁行为者,被认为是过去十年中一些重大安全事件的幕后黑手。其中包括Sony Pictures Entertainment hack,孟加拉国银行抢劫案(Bangladesh bank heist)以及众多其他高风险业务,例如从全球至少五种不同的加密货币交换服务中盗窃价值数百万美元的加密货币。
虽然我们的活动时间表与上周EST安全报告(report )中针对韩国安全公司的“Operation Extreme Job”活动重叠,但我们观察到两个活动中采用了不同的策略、技术和程序(TTP)。
长期以来,安全界一直认为,Lazarus至少分为两个分支:第一分支名为Andariel,主要侧重于攻击韩国政府和组织,第二分支是Bluenoroff,其主要关注的是货币化和全球间谍活动。同时进行的两次活动之间的差异再次证实了多个分支同时运作的理论。
然而,这一事件代表了朝鲜威胁行动者对受害者的不寻常选择。通常,这些攻击反映了朝鲜与美国、日本和韩国等国家之间的地缘政治紧张局势。但在本案例中,针对的是俄罗斯机构。
二、感染链
在分析中,我们遇到两种不同的感染流程。
主要感染流程包括以下三个步骤:
1、一个包含两个文件的ZIP文件:良性诱饵PDF文档和携带宏的恶意Word文档。
2、恶意宏从Dropbox URL下载VBS脚本,然后执行。
3、VBS脚本从dropzone服务器下载CAB文件,使用Windows expand.exe实用程序提取嵌入的EXE文件(后门),最后执行它。
起初,感染链由上述所有阶段组成,但在某一时刻,攻击者决定跳过感染链的第二阶段,修改恶意Word宏直接“下载并执行”第三阶段的Lazarus 后门。
图1: 感染流程
1.伪装Office文档
与此活动相关的所有文档在26-31/01/19时间周期,从俄罗斯的不同来源上传到VirusTotal,看起来与原始文件名相似。
所有文档包括类似的元数据,其中“home”作为作者姓名,以及韩语代码页。
在活动期间,攻击者利用多个诱饵图像来说服受害者点击“启用内容”按钮并触发恶意宏代码。
“2018.11.2~2019.1.26_ErrorDetail.doc”
首次提交: 2019-01-31 13:45:04
代码页: Korean
作者: home注意: 图片中的西里尔文字符
SHA-1: 088c6157d2bb4238f92ef6818b9b1ffe44109347
“Serial_Numbers.xls”
首次提交: 2019-01-31 06:56:00
代码页: Korean
作者: homeSHA-1:4cd5a4782dbed5b8e337ee402f1ef748b5035709
“LosAngeles_Court_report.doc”
首次提交: 2019-01-26 09:59:50
代码页: Korean
作者: homeSHA-1:e89458183cb855118539373177c6737f80e6ba3
2.恶意宏
该活动在dropper的XLS和DOC变体中有着非常相似的宏代码。
宏本身非常简单明了,但在本案例中,保持宏简单并且没有任何高级混淆技巧,导致恶意文档无法被Virus Total上许多著名的安全供应商检测到。
其中在一个文档中的下载阶段,HTTP请求标头中出现了Dropbox “Host”字段(无法解释其作用)。
图2: HTTP请求标头中的Dropbox “Host”字段
谜团很快解决了,因为我们找到了另一个相关样本,它从Dropbox下载了感染链的下一阶段。很明显,在此活动期间Dropbox是第二阶段感染的原始来源。
图3: 负责从DropBox下载第二阶段感染的代码
3.诱饵文档
在此活动期间,至少有一个恶意Office文档最初是通过ZIP文件分发的,另外还有另一个名为NDA_USA.pdf的PDF诱饵文档。
图4: ZIP中包含的诱饵和恶意文件
良性文档试图使文件看起来合法,内容为StarForce技术的NDA。StarForce是俄罗斯一家提供软件复制保护解决方案的公司。
图5: 发送给诱饵受害者的良性文档
4.Dropzone
众所周知,Lazarus组织利用一系列受到入侵的服务器进行运营,此次也不例外。
此活动中的最终有效载荷以CAB文件的形式从受感染的服务器下载,稍后将其扩展为KEYMARBLE后门。重要的是要注意CAB文件伪装成受感染主机上的JPEG图像(http://37.238.135 [.]70/img/anan.jpg)。
仔细观察受感染的服务器,可以看出其为South Oil Company信息部门的网站。该服务器位于伊拉克,由EarthLink Ltd. Communications&Internet Services托管。
图6: 伊拉克服务器遭到入侵
三、KEYMARBLE 后门
KEYMARBLE是一个通用的后门,NCCIC在去年八月的报告中描述过。恶意软件是一种远程管理工具(RAT),为操作人员提供从受害者机器获取信息的基本功能。一旦执行,它会进行多次初始化,联系C&C服务器并无限期地等待来自它的新命令。每个接收的命令由后门在适当的函数内处理,该函数收集信息或在目标机器上进行相应动作。
1.AV检测
作为之前描述的感染流程的一部分,所有提到的恶意文档下载的KEYMARBLE均在CAB文件中压缩。
有趣的是,通过将后门封装在CAB文件中,攻击者能够将此样本的检测率从五个供应商降低到仅仅两个。VirusTotal上的检测结果:
图7: AV检测结果
2.版本比较
该恶意软件类似于其前身的流程和功能。二者都有两个主要阶段 – 初始化阶段,建立必要的数据结构并与C&C服务器通联;主命令调度循环,从服务器接收命令并将它们传递给相应的处理程序。这些阶段中的特定机制也出现在源自朝鲜的其他恶意软件中,其中很多都归咎于臭名昭著的Lazarus组织。
话虽如此,该变体与之前报道的同一家族样本存在特殊差异。首先,作者使用了wolfSSL,这是一个开源代码存储库,用于向C2服务器验证客户端的身份并加密通信。这并不是朝鲜恶意软件第一次使用此库。Intezer描述了一种不同的RAT,出现在去年对加密货币交易的攻击中。另外,虽然后门处理的大多数命令代码在新旧版本中都重叠,但是最近的样本中省略了一些代码,并且修改了其他几个代码,以及处理程序的功能。
在接下来的段落中,我们将概述KEYMARBLE的主要特征,重点关注其与US-CERT报告中样本的相关性和区别。
3.初始化
两个后门变体都以动态Win32 API函数解析操作开始。这是一个非常典型的初始阶段,在多个朝鲜恶意软件中出现,其中函数名列表在运行时解密,然后解析为内存中的全局表。随后将使用该表中的地址来调用所需的API函数。此机制中区分此恶意软件与其他恶意软件的一个特征是利用开源McbDES2中的DES算法实现函数名解密。
图8: 两个版本的KEYMARBLE中API解析逻辑的比较
图9: 使用开源McbDoDES库进行API函数名解密
此后,KEYMARBLE将开始准备与C&C服务器通信所需的数据结构。这将包括启动WolfSSL相关结构以及与服务器的初次通联。对于前者,恶意软件会将硬编码的PEM证书释放到磁盘中的%TEMP%下,文件名为“Thumbss.db”,读取数据并传递给名为ProcessFile的内部WolfSSL函数。依次解析,并将从证书派生的数据分配给用于通信的全局上下文结构。此示例中使用的证书可在下面的IOC部分中找到。
图10: 使用wolfSSL初始化通信
至于启动与C2服务器的通联,恶意软件将创建一个套接字,通过调用命令参数设置为0x8004667E的ioctlsocket将其设置为非阻塞,并尝试连接到硬编码的IP地址194 .45 .8 .41通过端口443。这将无限期的发生,每次连接尝试之间间隔30分钟,直到成功,此时恶意软件将从循环中断并继续后续工作。
4.通信协议
在恶意软件和服务器之间交换的每条消息都具有预定义的结构(如图4所示),类似于TLS应用程序记录。如前所述,恶意软件利用SSL进行通信,因此每个此类消息将使用客户端和服务器SSL在握手期间交换的密钥进行加密,发送或接收数据的操作将由指定的wolfSSL函数处理(SendData和 receiveData)。
图11: 自定义协议消息结构,类似于TLS记录。
在启动与C2服务器的首次连接后,KEYMARBLE将发出信标消息。此消息用于发送机器的UID,即MD5(ProductID|MAC)的结果,其中第一个字段是通过查询SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductId注册表项获得的,第二个字段是通过调用GetAdaptersInfo函数获得的MAC地址。但是,只有在来自服务器的显式请求之后才会获取此UID,并且在完成之前信标中的数据字段一直为空。
图12: UUID为ProductID和MAC地址的MD5
在初始信标之后,恶意软件将进入无限循环,等待从服务器获取命令代码。这些命令将被传递给调度函数,其中每个命令将由相应的处理程序处理。该命令分两部分接收 – 首先服务器将发送一条带有命令数据长度的消息,然后它才会发出实际的命令代码。
图13: 信标和主消息循环
5.后门命令
命令调度程序是一种非常基本的机制,它使用一个switch case来将控制权传递给相应的函数。命令代码的范围从0x1234556到0x1234578,并且大多数与旧版后门中出现的命令重叠。但是,此版本的命令数量较少(18对22),其中只有很少一部分的代码和功能与旧版本不同。此外,与接收命令代码相似,发送的每个命令参数(如果需要)将在前面加上一条长度消息,以指示应为发送的参数分配缓冲区的大小。
图14: 比较新旧版本KEYMARBLE的命令调度函数
所有命令,它们的逻辑和响应总结在下表中:
Check Point通过其SandBlast威胁防御解决方案防范此攻击。
IOCs
· 2b4fb64c13c55aa549815ec6b2d066a75ccd248e (新KEYMARBLE样本)
· d1410d073a6df8979712dd1b6122983f66d5bef8 (旧KEYMARBLE 样本)
· 088c6157d2bb4238f92ef6818b9b1ffe44109347 (Maldoc)
· 4cd5a4782dbed5b8e337ee402f1ef748b5035709 (Maldoc)
· e89458183cb855118539373177c6737f80e6ba3f (Maldoc)
· a5b2c704c5cff550e6c47454b75393add46f156f (包含PDF的ZIP )
· 194\.45\.8\.41:443 (KEYMARBLE C2)
· hxxp://37\.238\.135\.70/img/anan.jpg (Dropzone 服务器)
· PEM 证书:
—–BEGIN CERTIFICATE—–
MIIDYjCCAkqgAwIBAgIIAZAXmK+UHF4wDQYJKoZIhvcNAQELBQAwZjELMAkGA1UE
BhMCVVMxGTAXBgNVBAoMEEdsb2JhbFNpZ24gbnYtc2ExPDA6BgNVBAMMM0dsb2Jh
bFNpZ24gT3JnYW5pemF0aW9uIFZhbGlkYXRpb24gQ0EgLSBTSEEyNTYgLSBHMjAi
GA8yMDE4MDkwMjE0NDgwOVoYDzIwMjAwMTE2MTQ0ODA5WjBmMQswCQYDVQQGEwJV
UzEZMBcGA1UECgwQR2xvYmFsU2lnbiBudi1zYTE8MDoGA1UEAwwzR2xvYmFsU2ln
biBPcmdhbml6YXRpb24gVmFsaWRhdGlvbiBDQSAtIFNIQTI1NiAtIEcyMIIBIjAN
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvwzKLRSyHoRCW804H0ryTXUQ8bY1
n9/KfQOY06zeA2buKvHYsH1uB1QLEJghTYDLEiDnzE/eRX3Jcncy6sqQu2lSEAMv
qPOVxfGLYlYb72dvpBBBla0Km+OlwLDScHZQMFuo6AgsfO2nonqNOCkcrMft8nyV
sJWCfUlcOM13Je+9gHVTlDw9ymNbnxW10x0TLxnRPNt2Osy4fcnlwtfaQG/YIdxz
G0ItU5z+Gvx9q3o2P5jehHwFZ85qFDiHqfGMtWjLaH9xICv1oGP1Vi+jJtK3b7Fa
F9c4mQj+k1hv/sMTSQgWC6dNZwBSMWcjTpjtUUUduQTZC+zYKLNLve02eQIDAQAB
oxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBRe7BnZbn005fj
P5in0Pv6FMWy9x7kzjI2e6JcxXr+LuEisfxACkw2g2yFrQAzZguTSGYiSIDtwURE
A+ALRoZFa9gVwtqKQFOQOBcDYINZIqI8Ma7eprcF/O+tAOzHIRoifyYYpv0Is89x
6xI8og9hRzVTyov5eYK0tqjdMZwRWSQz2hmghhqXx43YlRw0f69iKjJ7MpHtv/Ru
uMPlbwo/VRXY8kywL/GkFG3nPxWKXm7T4nBFp5/sYCvfakPpZDuzEN7igXhOWaqL
TwkCOWQf3m6oX56DDpzeHJmLYEukX7QNjVBF3mTW7LIuPT5rR3nJFYJA9Tf0umvd
B30JttH5
—–END CERTIFICATE—–
参考
· https://www.us-cert.gov/ncas/analysis-reports/AR18-221A
· https://www.intezer.com/lazarus-group-targets-more-cryptocurrency-exchanges-and-fintech-companies/
· https://github.com/wolfSSL/wolfssl
· http://read.pudn.com/downloads198/sourcecode/crypt/ca/930917/McbDES2.hpp__.htm
· https://graphics.stanford.edu/~mdfisher/Code/WebPagePreprocessor/zip.cpp
附录
在执行代号0x1234558的处理程序期间枚举的每个文件和目录使用的结构:
用于代码0x123455D处理程序中的收集系统和网络信息的缓冲区如下所述:
其中info_item是以下结构的FAM:
system_info具有以下结构: