自2019年以来,卡巴斯基一直在跟踪涉及LODEINFO恶意软件家族的活动,寻找迭代版本,并彻底调查利用这些新变体的任何攻击。LODEINFO是一种复杂的无文件恶意软件,最在2020年2月就被发现被命名了。恶意软件被开发人员定期修改和升级,专门针对日本的媒体、外交、政府和公共部门组织和智库。
日本可能是LODEINFO的主要目标
此后,研究人员继续追踪LODEINFO。JPCERT/CC和Macnica Networks都报道过其迭代版本。卡巴斯基研究人员还在2021 HITCON会议上分享了新发现,涵盖2019年至2020年的LODEINFO活动。
在2022年3月,卡巴斯基研究人员观察到一个Microsoft Word文件被用作一些攻击的感染媒介。同年6月,针对日本政府或相关机构的SFX文件被发现,文件中使用了日本著名政治家的名字,并使用了含有日本内容的诱饵文件。还观察到一个名为DOWNIISSA的新的下载程序shellcode,用于部署LODEINFO后门。
接下来,我们将首先介绍新的感染方法的技术分析,如SFX文件和DOWNIISSA以及我们的发现。之后将介绍LODEINFO后门的技术分析,以及每个版本的后门的相关shellcode。
初始感染:VBA + DLL侧加载
在对2022年3月的攻击进行调查期间,我们发现了一封带有恶意附件的鱼叉式钓鱼电子邮件,其中安装了恶意软件持久性模块,该模块由合法的EXE文件和通过DLL侧加载技术加载的恶意DLL文件组成。例如,以下部分描述了一个上传到Virustotal的恶意Microsoft Word文件(MD5: da20ff8988198063b56680833c298113)。一旦目标打开恶意文档文件,就会显示一条日语消息:根据您的网络安全设置,单击上面黄色文档栏上的“启用编辑”和“启用内容”以打开该文件。诱饵受害者点击“启用内容”并启用嵌入式宏。
欺骗目标点击“启用内容”并嵌入VBA代码日文信息
嵌入的VBA代码创建文件夹C:UsersPublicTMWJPA,并在同一文件夹中释放一个名为GFIUFR.zip (MD5: 89bd9cf51f8e01bc3b6ec025ed5775fc)的压缩文件。GFIUFR.zip包含两个文件:NRTOLF.exe和K7SysMn1.dll。NRTOLF.exe (MD5: 7f7d8c9c1b6735807aefb0841b78f389)是一个数字签名的合法EXE文件,来自K7Security Suite软件,用于DLL侧加载。K7SysMn1.dll (MD5: cb2fcd4fd44a7b98af37c6542b198f8d)是NRTOLF.exe附带加载的恶意DLL。恶意DLL文件包含LODEINFO shellcode的加载程序。这个DLL是一个已知的LODEINFO加载程序模块。它包含一个由0.5.9版本内部识别的单字节XOR加密LODEINFO外壳代码。在我们调查的前几次攻击中,攻击者也使用了这种感染方法。
除此之外,我们还发现了另外两个与LODEINFO相关的植入程序。
初始感染2:SFX + DLL侧加载
其中一个植入程序是RAR格式的自解压存档(SFX)文件(MD5 76cdb7fe189845a0bc243969dba4e7a3),该文件也上传到了Virustotal。类似地,归档文件包含三个文件,分别为1.docx、K7SysMn1.dll和K7SysMon.exe,其中包含如下所示的自解压脚本命令。恶意软件开发者还添加了一条用日语写的评论,可以翻译为“以下评论包含一个自解压脚本命令”:
当目标用户执行这个SFX文件时,归档文件将其他文件放置到%temp% dir,并将1.docx作为一个仅包含几个日语单词的诱饵打开,如下图截图所示。
来自1.docx的简单诱饵文档内容
在向用户显示一个诱饵文件时,归档脚本启动K7SysMon.exe,它通过DLL侧加载从K7SysMn1.dll (MD5: a8220a76c2fe3f505a7561c3adba5d4a)加载恶意DLL。k7sysmm1 .dll包含一个BLOB,其中有一个模糊的例程,在过去的活动中没有观察到。嵌入式BLOB被划分为4字节块,每个部分存储在DLL二进制文件的50个随机命名的导出函数中的一个中。这些导出函数在分配的缓冲区中重构BLOB,然后使用一个单字节的XOR键解码LODEINFO shellcode。
重新组装有效负载BLOB
最终由该植入程序部署的负载是LODEINFO v0.6.3。
初始感染3:SFX + DLL侧加载+额外的BLOB文件
我们还发现了另一个类似的SFX文件,名为<masked>的sns电影的传播请求。攻击者利用了一位著名日本政治家的名字。嵌入的自解压脚本和文件与本文的初始感染2部分中讨论的前一个示例非常相似。但是,这个示例包含一个名为K7SysMon.Exe.db的附加文件。以前观察到的加载程序模块在可执行文件中嵌入了一个带有加密shellcode的BLOB,但是在这个示例K7SysMn1.dll中不包含BLOB。相反,加载程序模块读取K7SysMon.Exe.db文件作为加密的BLOB,并解密shellcode,这是LODEINFO v0.6.3后门。SFX文件的标题和文件的内容都是要求在SNS(社交网络服务)上传播这位著名政治家的视频的内容。根据最后的归档时间戳,我们认为该SFX文件是在2022年6月29日通过鱼叉式网络钓鱼邮件传播的。从文件名称和诱饵文件来看,目标是日本执政党或相关机构。
2022年7月4日,另一个SFX文件(MD5 edc27b958c36b3af5ebc3f775ce0bcc7)被发现。存档文件、有效载荷和C2地址与前面的示例集非常相似。唯一明显的区别是这份诱饵文件的日文标题:投保申请。我们认为这个SFX文件可能被用来针对日本媒体公司。
初始感染4:VBA +未发现的下载程序shellcode downniissa
早在2020年8月,我们发现了一个名为DOWNJPIT的无文件下载程序shellcode,这是LODEINFO恶意软件的一个变体,并在HITCON 2021上就其进行了演示。2022年6月,我们发现了另一个无文件下载程序shellcode,它由一个有密码保护的Microsoft Word文件提供。文件名为增强日美同盟的威慑力和应对能力.doc。该文档文件包含的恶意宏代码与之前调查的样本完全不同。打开后,该文档文件显示一条日文消息,以启用以下VBA代码。
2022年6月发现MS Word文件中的恶意VBA代码
与过去的示例(如本文初始感染1中描述的示例)不同的是,恶意VBA宏被用来释放DLL侧加载技术的不同组件,在这种情况下,恶意宏代码直接在WINWORD.exe进程的内存中注入并加载嵌入的shellcode。这个植入程序在过去的活动中是不存在的,shellcode也是LODEINFO v0.6.5的一个新发现的多级下载程序shellcode。
这个下载程序的shellcode完全不同于DOWNJPIT的变体。新的下载程序shellcode里面有两个URL:
http://172.104.112[.]218/11554.htm
http://www.dvdsesso[.]com/11554.htm
我们将这个新的下载程序命名为DOWNIISSA,其中IISSA是url中找到的文件名中的11554派生的字符串。下图显示了从恶意文档文件到DOWNIISSA下载的最终有效负载的复杂感染流程。
通过DOWNIISSA的LODEINFO感染过程
如上所述,嵌入式宏生成DOWNIISSA shellcode并将其注入到当前进程(WINWORD.exe)中。主要的下载程序代码是base64编码的,并放在DOWNIISSA shellcode的开头,由shellcode本身进行解码和修补。
DOWNIISSA base64解码和自修复
在它被解码后,一些重要的字符串被发现是用一个字节的异或加密。例如,两个C2目的地址用以下代码解密。
DOWNIISSA shellcode主函数中嵌入的异或C2目的地
DOWNIISSA使用URLDownloadToFileA() API函数从URL地址下载BLOB,并将其释放在%TEMP%/${TEMP}.tmp。然后,它将文件读入当前进程中分配的内存中,并立即释放下载的临时文件。我们确认了这两个URL都提供了相同的二进制数据,该数据与存储在BLOB本身末尾的一字节XOR键进行了XOR。异或解密后,发现LODEINFO后门shellcode v0.6.5。在感染的最后阶段,DOWNIISSA创建一个msiexec.exe实例,并在进程的内存中注入LODEINFO后门shellcode。
这个涉及DOWNIISSA shellcode的新感染流在之前使用LODEINFO的活动中没有出现过,这是2022年的一个新的TTP。
除了在这个示例中找到的11554.htm文件,我们还发现了其他名称的文件,如3390.htm, 5246.htm和16412.htm,在2022年7月托管在相同的C2服务器上。3390.htm (MD5: 0fcf90fe2f5165286814ab858d6d4f2a)和11554.htm (MD5: f7de43a56bbb271f045851b77656d6bd)是通过downniissa恶意软件下载的单字节异或lodeinfo v0.6.5 shellcode。每个示例的XOR键都在文件末尾找到。5246.htm (MD5: 6780d9241ad4d8de6e78d936fbf5a922)和16412.htm (MD5: 15b80c5e86b8fd08440fe1a9ca9706c9)文件是单字节异或唯一数据结构。5246.htm文件中的数据结构如下所示:
该数据结构包含三个文件的名称:K7SysMon.exe, K7SysMn1.dll (MD5: c5bdf14982543b71fb419df3b43fbf07)和K7SysMon.exe.db (MD5: c9d724c2c5ae9653045396deaf7e3417)。这表明一个未被发现的下载程序模块从C2下载5246.htm,以协助在受害者的设备上安装一些嵌入式文件。
LODEINFO首次发现于2019年,LODEINFO及其感染方法不断更新和改进,成为针对日本组织的更复杂的网络间谍工具。LODEINFO植入程序和加载程序模块也不断更新,以规避安全产品,并使安全研究人员的手动分析复杂化。
LODEINFO后门shellcode的演变
如上所述,我们已经介绍了初始感染方法在不同的攻击场景中有所不同,并且LODEINFO shellcode定期更新以用于每个感染媒介。接下来,我们将介绍2022年LODEINFO后门shellcode的改进。
卡巴斯基分别在3月、4月和6月调查了LODEINFO shellcode的新版本,即v0.5.9、v0.6.2、v0.6.3和v0.6.5。下图显示了该恶意软件自发现以来的演变时间线。
LODEINFO发布时间表
LODEINFO v0.5.6:使用古老的加密算法对C2通信进行多重加密
这个从加载程序模块中提取的LODEINFO v0.5.6 shellcode演示了针对某些安全产品的几种增强规避技术,以及开发人员实现的三个新的后门命令。
在感染目标计算机之后,LODEINFO后门信标将计算机信息发送到C2,例如当前时间、ANSI代码页(ACP)标识符、MAC地址和主机名。信标还包含一个硬编码密钥(NV4HDOeOVyL),后来被古老的Vigenere密码所使用。此外,随机生成的垃圾数据被附加到数据的末尾,可能是为了逃避基于包大小的信标检测。
在LODEINFO v0.5.6中增加了Vigenere密码密钥和随机生成的垃圾数据
2021年12月,我们发现了LODEINFO v0.5.8,并进行了轻微修改,在Vigenere密码密钥后面添加了LODEINFO植入版本号。
用于发送数据的加密函数也被修改了,使其更加复杂。正如在前面的变体中观察到的,它取要发送的数据的SHA512哈希值的前48个字节。然后,它使用一个等于运行时间的四字节XOR键XOR数据,并在数据之前进行预处理。发送的前16个字节来自另一个SHA512哈希值,这一次来自前面提到的硬编码AES密钥(NV4HDOeOVyL)。它在base64编码的有效负载的末尾加密11个字节(用从“=”到“.”替换的填充),以动态生成第二个Vigenere密码密钥和最终生成数据的变量。Vigenere密码使用第二个密钥加密base64编码的标头(url-safe替换了从“=”到“.”的填充)。
C2通信中的加密算法和数据流
最后,通过上面描述的复杂步骤,使用第二个密钥、加密标头和有效负载生成要发送到C2的数据。最终的数据包结构如下:
LODEINFO v0.5.6:用于后门命令标识符的2字节异或混淆
这次更新包括修改的加密算法和后门命令标识符,这些标识符在以前的LODEINFO shellcode中定义为四字节硬编码值。LODEINFO v0.5.6后门命令标识符被一个双字节的异或操作混淆了。在比较命令标识符之前,对每个命令应用异或操作。对于每个命令,硬编码的异或键不同,如下所示:
用于后门命令标识符的四字节堆栈字符串的两字节异或
我们还观察到攻击者在LODEINFO v0.5.6及更高版本中实现了新的后门命令,如“comc”、“autorun”和“config”。LODEINFO后门中嵌入了21条后门命令,包括3条新命令,用于控制受害主机。
LODEINFO v0.5.9:获取API函数的哈希算法
与v0.5.8相比,v0.5.9有一个新的哈希计算算法。该哈希算法被恶意软件用来计算API函数名的哈希值,以解析函数地址。在本示例中,它似乎是由开发者开发的自定义算法。哈希计算的逻辑有一个XOR运算,在末尾有一个两字节的键和一个硬编码的XOR键,这在每个示例中都是不同的。
更改了哈希计算算法和v0.5.9中附加的双字节异或键
这一修改表明,攻击者的目标是逃避基于签名的检测,并使反向工程过程对安全研究人员来说更加困难。
LODEINFO v0.6.2:规避en_US环境
在LODEINFO v0.6.2及更高版本中,shellcode有一个新特性,它在递归函数中查找受害者设备上的“en_US”区域设置,如果找到该区域设置,则停止执行。
如果找到“en-US”区域设置,则递归调用
根据卡巴斯基的调查,以及收集到的这个恶意软件的开源情报,这些攻击的主要目标是日本机构。因此,此功能的目的是避免在沙盒和研究人员设备上执行,这在英语语言环境中最常见。
LODEINFO v0.6.2:生成C2通信的用户代理
负责生成C2通信的用户代理的函数也从v0.6.2更新了,恶意软件使用以下硬编码的格式化字符串生成用户代理字符串,其中%s被替换为安装的chrome.exe应用程序的版本号:
“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36″
恶意软件从以下其中一个文件路径的EXE文件中获取已安装chrome.exe的版本号:
C:Program Files (x86)GoogleChromeApplicationchrome.exe
C:Program FilesGoogleChromeApplicationchrome.exe
C:UsersAdministratorAppDataLocalGoogleChromeApplicationchrome.exe
否则,如果系统上没有这些文件,恶意软件使用硬编码版本98.0.4758.102创建以下用户代理字符串:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
LODEINFO v0.6.2:支持在 ‘memory’ 命令中注入64位shellcode
基于我们对该版本的深入分析,我们发现了一个非常有趣的更新,即从v0.6.2版本实现的shellcode加载方案,在处理’ memory ‘命令的函数中。
检查操作系统架构和下一个shellcode架构
在内存注入过程中,使用负责内存命令的函数执行,恶意软件检查第二阶段shellcode的第一个字节,使用一个神奇的十六进制值确定shellcode体系结构。如果第一个字节为0xE9,则表示架构为32位。如果第一个字节为0x8D,则表示架构为64位。检查完成后,如果第一个字节是0x8D,它将被替换为0xE9,以便shellcode正确执行。在下面的函数中,恶意软件检查被感染设备的操作系统架构,并根据操作系统架构和shellcode架构处理适当的加载方案。
在v0.6.2中支持64位shellcode的内存注入
在shellcode注入过程中,它使用基本的Windows API,如VirtualAllocEx()、WriteProcessMemory()和CreateRemoteThread(),进行32位shellcode的内存注入,使用NtAllocateVirtualMemory()、NtWriteVirtualMemory()和RtlCreateUserThread()来支持64位shellcode的内存注入。
LODEINFO v0.6.3:缓解后门命令
对于在LODEINFO后门命令中实现的更新,使用两字节XOR加密对后门命令标识符以及调试字符串进行模糊处理的方法在0.5.6版本之前保持不变。然而,在0.6.3版本中,攻击者删除了一些不必要的后门命令,以提高后门的效率。后门命令的数量从v0.6.2中的21个减少到v0.6.3中的11个。对C2命令列表的修改如下表所示。
总结
LODEINFO恶意软件更新非常频繁,并继续针对日本组织发起攻击。LODEINFO shellcode的核心技术迭代是支持Intel 64位体系结构,以扩展目标受害者环境。更新的TTP以及LODEINFO和相关恶意软件的改进,如Vigenere密码的实现、无文件恶意软件的复杂感染流、部分XOR加密、具有唯一数据结构和可变长度的C2通信包以及密码保护的文档,表明攻击者特别擅长反分析。由于这个原因,跟踪这个组织发起的攻击变得越来越困难。
参考及来源:
https://securelist.com/apt10-tracking-down-lodeinfo-2022-part-i/107742/
https://securelist.com/apt10-tracking-down-lodeinfo-2022-part-ii/107745/
原文始发于微信公众号(嘶吼专业版):APT 10利用自定义后门LODEINFO向日本各类机构发起攻击