Daniel Stepanic

Elastic 安全实验室发现 LOBSHOT 恶意软件

对通过 Google Ads 传播的 hVNC 恶意软件家族 LOBSHOT 的分析。

阅读时间:20 分钟恶意软件分析
Elastic Security Labs discovers the LOBSHOT malware

关键要点

  • 攻击者继续滥用并扩大恶意广告(例如 Google Ads)的传播范围,冒充合法软件。
  • Elastic 安全实验室正在揭露一个未被发现的 hVNC 恶意软件,该恶意软件一直在默默地收集大量的安装。
  • 我们称之为 LOBSHOT 的这个恶意软件似乎被用于金融目的,它采用了银行木马和信息窃取功能。

前言

Elastic 安全实验室以及研究界注意到,今年早些时候恶意广告的采用率大幅飙升。攻击者利用精心策划的虚假网站(通过 Google Ads)来推广其恶意软件,并在用户看来是合法安装程序的程序中嵌入后门。在这篇文章中,我们将重点介绍我们从这次飙升中观察到的一个恶意软件家族,我们将其命名为 LOBSHOT。LOBSHOT 仍在继续收集受害者,同时保持低调。

LOBSHOT 的核心功能之一是其 hVNC(隐藏虚拟网络计算)组件。这些模块允许直接且不被察觉地访问机器。此功能在绕过欺诈检测系统方面继续取得成功,并且经常作为插件嵌入到许多流行的家族中。

我们将逐步介绍 LOBSHOT 的感染链及其行为。此外,我们将提供此家族的 YARA 签名和配置提取器。

在我们的分析过程中,我们观察到已知属于TA505的基础设施。TA505 是一个臭名昭著的网络犯罪组织,与 Dridex、Locky 和 Necurs 恶意软件活动有关。Proofpoint 记录的一个名为Get2的加载程序也与我们之前在 LOBSHOT 中观察到的相同域名相关联。我们有中等程度的信心认为 LOBSHOT 是 TA505 从 2022 年开始利用的一种新的恶意软件能力。

活动背景

今年早些时候,Elastic 安全实验室观察到多次感染,其事件链很有趣,最终导致执行了一个未知的 hVNC 恶意软件,我们将其命名为 LOBSHOT。大约在同一时间,安全社区中也观察到了类似的感染链,其共同点是用户搜索合法软件下载,最终从 Google 推广的广告中获得了非法软件[1234]。

在一个例子中,恶意广告是针对合法的远程桌面解决方案 AnyDesk。仔细检查 URL,会发现链接到https://www.amydecke[.]website,而不是合法的 AnyDesk URL,https://www.anydesk[.]com

登录页面非常具有说服力,与合法软件的品牌相似,并且包含指向 MSI 安装程序的“立即下载”按钮。

感谢安全研究员Will Dormann,我们能够查看 AnyDesk 活动的屏幕截图。

在发布时,我们还没有看到关于 LOBSHOT 的任何先前公开信息,因此我们将把研究重点放在 LOBSHOT 的功能和能力上。

LOBSHOT 代码分析

为了关注 LOBSHOT 恶意软件,我们将跳过初始感染链。有关这些初始详细信息,这是一个很好的沙箱报告,可以查看一般的 TTP(攻击技术)。自去年 7 月以来,我们已经观察到超过 500 个独特的 LOBSHOT 样本。我们观察到的样本被编译为 32 位 DLL 或 32 位可执行文件,大小通常在 **93** KB 到 **124** KB 之间。为了分析目的,请考虑以下样本作为 LOBSHOT 的代表。

动态 API 解析

在我们的 LOBSHOT 样本中,与我们今天看到的多数恶意软件一样,它采用动态导入解析来规避安全产品并减缓对其功能的快速识别。此过程涉及在运行时解析恶意软件所需的 Windows API 的名称,而不是预先将导入放在程序中。

Defender 模拟检查

加载初始库后,LOBSHOT 通过验证计算机名称是否与字符串 **HAL9TH** 匹配以及用户名是否与 **JohnDoe** 匹配来执行 Windows Defender 反模拟检查。这些是 Defender 模拟层中的硬编码值,如果存在这些值,恶意软件将立即停止运行。这种验证已包含在许多其他窃取器中,包括 Arkei、Vidar 和 Oski。以下是使用Qiling 框架突出显示这些验证检查的模拟输出。

字符串混淆

此恶意软件通过使用不同的按位运算符的简单加密函数来隐藏其主要字符串。为了执行字符串解密,LOBSHOT 使用来自对 **WTSEnumerateSessionsA** 的调用的WTS_SESSION_INFO 结构的初始种子。

在这种情况下,恶意软件开发人员通过对 **SessionID**(始终为 **0**)和“Services”中的字符 **S** 执行异或运算来设置初始种子。

初始枚举

在发送任何出站网络请求之前,LOBSHOT 会构建一个自定义结构,其中包含从机器中枚举的数据,包括:

  • 从 **SOFTWARE\Microsoft\Cryptography\MachineGuid** 派生的机器 GUID
  • Windows 版本、用户名、计算机名称
  • 虚拟机检查、正在运行的进程数、进程 ID、恶意软件的父进程
  • Windows 桌面对象详细信息
    • 屏幕高度/宽度
    • 显示设备信息
    • 对桌面对象和窗口的句柄
    • 显示器的 DPI

执行流程

LOBSHOT 执行后,它会将自身的一个副本移动到 **C:\ProgramData** 文件夹,使用 **explorer.exe** 生成一个新进程,终止原始进程,最后删除原始文件。这种设计选择是为了尝试破坏进程树祖先关系;使分析师更难发现它。

以下是初始执行后的屏幕截图,恶意软件现在已无父进程,并从 **C:\ProgramData** 目录运行。

持久性

为了持久性,LOBSHOT 利用注册表运行键持久性方法。在我们的样本中,这放置在 **HKEY_CURRENT_USER** 注册表配置单元中,并使用指向位于 **C:\ProgramData** 中的恶意软件的随机生成的名称。

此外,它在 **Software\Microsoft\Windows NT\CurrentVersion\Devices** 键路径下设置注册表键数据,用于检查硬编码的全局标识符键,该键指示系统是否已被感染。在我们的样本中,**Display** 值设置为字符串 **134a1160**。窃取器功能的结果记录在 **Default Printer** 值中。我们将在下一节中讨论窃取器功能。

窃取器功能

持久化机制建立后,LOBSHOT启动一个新线程,启动窃取功能。它首先针对处理加密货币钱包的特定Google Chrome扩展程序。以下是Procmon输出,显示LOBSHOT尝试访问32个Chrome钱包扩展程序、9个Edge钱包扩展程序和11个Firefox钱包扩展程序。

有关映射到其扩展ID的不同加密货币的完整列表,请参见附录

如果与任何这些扩展程序匹配,则结果将作为二进制数据插入Software\Microsoft\Windows NT\CurrentVersion\Devices注册表键值中,格式为浏览器名称_扩展程序名称。以下是注册表修改后的示例:Chrome_Yoroi

枚举浏览器扩展程序后,会检查C:\ProgramData目录中是否存在名为hmr_*.dat的硬编码文件。如果此文件存在,它将使用rundll32.exe和以下命令行参数执行

rundll32.exe "C:\ProgramData\hmr_1.dat", #1 hmod

虽然我们没有直接观察到这种行为,但此功能似乎展示了开发人员内置的功能,允许使用其他执行选项,例如加载他们自己的DLL。

网络通信

对于我们审查的每个LOBSHOT样本,都存在一个硬编码的IP和端口,这些IP和端口从二进制文件中解密,用作主C2。恶意软件每5秒发出信标,使用以下调用进行通信

  • ws2_32.socket
  • ws2_32.connect
  • ws2_32.send
  • ws2_32.select
  • ws2_32.recv
  • ws2_32.shutdown
  • ws2_32.closesocket

在这些出站请求中,它发送伪随机硬编码数据以及缩短的GUID值和模块版本号。

以下是初始出站请求期间发送的发送请求缓冲区的示例,显示了上述硬编码值和版本号。

搜索上述mov指令和硬编码值的第一个DWORD (C7 06 25 56 0A DC) 显示在过去一年中VirusTotal中有超过550个样本。一些最早的样本出现在2022年7月下旬。这些硬编码值的普遍存在表明它已被积极使用并开发了很长时间,并且可能在未来继续使用。

在此初始握手之后,LOBSHOT将通过此端口发送先前包含枚举数据的自定义数据结构,例如主机名、用户名、Windows对象等。

功能

LOBSHOT的核心功能之一是其hVNC(隐藏虚拟网络计算)模块。

与传统的VNC(虚拟网络计算)不同,VNC在软件在用户同意的情况下提供对机器的远程访问,并且可以清楚地观察到在机器上采取的操作的可视性。hVNC的作用方式相反,旨在保持隐秘,攻击者采取的所有操作都在同一台机器上进行,但受害者无法观察到。hVNC成为银行木马领域中绕过设备和欺诈检测解决方案的流行解决方案。有关hVNC的更多详细信息,请点击此处

LOBSHOT通过使用CreateDesktopW Windows API生成隐藏桌面,然后使用SetThreadDesktop API将桌面分配给恶意软件来实现hVNC功能然后在新隐藏桌面的上下文中创建一个新的Windows explorer.exe进程。

在此阶段,受害者机器将开始发送屏幕截图,这些截图代表发送到攻击者控制的侦听客户端的隐藏桌面。攻击者通过控制键盘、单击按钮和移动鼠标来与客户端交互,这些功能为攻击者提供了对设备的完全远程控制。

在LOBSHOT的hVNC模块中,有一个内置的GUI菜单,允许攻击者快速运行以下命令

  • 启动新的explorer.exe进程
  • 启动Windows运行命令
  • 使用提供的命令启动新的Windows进程
  • 启动浏览器(Internet Explorer、Edge、Firefox)
  • 终止现有的explorer.exe进程并启动新的explorer.exe进程
  • 篡改Windows声音设置
  • 设置/检索剪贴板文本
  • 激活开始菜单
  • 修改DPI感知设置

虽然主要功能集中在LOBSHOT的hVNC模块上,但它还具有其他功能。例如,它能够替换操作员提供的C2;它通过在注册表键路径Software\Microsoft\Windows NT\CurrentVersion\Devices下的Video值中写入新的C2详细信息来管理此操作。

LOBSHOT还包含一个更新机制,它将删除对注册表的先前修改,例如删除“显示”值和运行键持久性,启动一个新进程,最后退出现有进程。

LOBSHOT配置提取器

Elastic Security Labs已发布一个在Elastic 2.0许可证下的开源工具,该工具允许从LOBSHOT样本中提取配置。可以在此处下载该工具。

提取器可以在单个文件或目录级别运行,示例如下

  • python lobshot_config_extractor.py --file sample.bin
  • python lobshot_config_extractor.py --directory samples

摘要

威胁组织继续利用恶意广告技术将合法软件伪装成LOBSHOT之类的后门。这些类型的恶意软件看起来很小,但最终包含了重要的功能,这些功能有助于威胁参与者在初始访问阶段快速移动,并具有完全交互式的远程控制功能。我们每周都会看到与该家族相关的新的样本,并预计它会存在一段时间。

检测逻辑

预防

检测

EQL查询

使用Kibana中安全解决方案的“时间线”部分下的“关联”选项卡,您可以使用以下EQL查询来查找类似的行为

可以使用以下EQL查询来检测在LOBSHOT中观察到的可疑祖父母、父母和子女关系。

sequence by host.id, user.id with maxspan=1m
 [process where event.type == "start" and not startsWith~(process.executable, process.parent.executable)] by process.parent.name, process.entity\_id
 [file where event.type == "deletion"] by file.name, process.entity\_id
 [process where event.type == "start" and not startsWith~(process.executable, process.parent.executable)] by process.name, process.parent.entity\_id
until [process where event.type == "end"] by process.name, process.entity\_id

YARA规则

rule Windows_Trojan_Lobshot {
    meta:
        author = "Elastic Security"
        creation_date = "2023-04-18"
        last_modified = "2023-04-18"
        license = "Elastic License v2"
        os = "Windows"
        threat_name = "Windows.Trojan.Lobshot"
        reference_sample = "e4ea88887753a936eaf3361dcc00380b88b0c210dcbde24f8f7ce27991856bf6"
    strings:
        $str0 = "HVNC Remote Control" ascii fullword
        $str1 = " Error # %d - %08lx" ascii fullword
        $str2 = "Set  clipboard text failed." ascii fullword
        $str3 = "OK %08lx %08lx %d" ascii fullword
        $str4 = "\") & (rundll32.exe \"" wide fullword
        $str5 = "%LOCALAPPDATA%\\svc.db" wide fullword
        $str6 = "cmd.exe /c (ping -n 10 127.0.0.1) & (del /F /Q \"" wide fullword
        $seq_str_decrypt = { 8A 5A ?? 8D 52 ?? 80 EB ?? 85 FF 74 ?? C0 E0 ?? 2C ?? 0A C3 32 C1 32 C7 88 06 32 E8 83 C6 ?? 83 C5 ?? EB ?? }
        $seq_emu_check = { 8B 35 ?? ?? ?? ?? 8D 44 24 ?? 50 8D 44 24 ?? C7 44 24 ?? 48 41 4C 39 50 C7 44 24 ?? 54 48 00 00 FF D6 }
        $seq_enum_xor = { FF 15 ?? ?? ?? ?? 84 C0 0F 84 ?? ?? ?? ?? 83 7C 24 ?? 00 0F 84 ?? ?? ?? ?? 8B 4C 24 ?? 68 07 80 00 00 8B 41 ?? 8A 00 32 01 A2 ?? ?? ?? ?? }
        $seq_create_guid = { 8D 48 ?? 80 F9 ?? 77 ?? 2C ?? C1 E2 ?? 46 0F B6 C8 0B D1 83 FE ?? 7C ?? 5F 8B C2 5E C3 }
    condition:
        2 of ($seq*) or 5 of ($str*)
}

观察到的对手战术和技术

Elastic使用MITRE ATT&CK框架来记录高级持续性威胁针对企业网络使用的常见战术、技术和程序。

战术

战术代表技术或子技术的“为什么”。这是对手的战术目标:执行操作的原因。

技术/子技术

技术和子技术代表对手如何通过执行操作来实现战术目标。

观察

所有可观察项也可以ECS和STIX格式下载。此外,我们还创建了一个包含所有指标的VirusTotal集合

指标类型参考
95.217.125.200IP地址LOBSHOT C2
e4ea88887753a936eaf3361dcc00380b88b0c210dcbde24f8f7ce27991856bf6SHA-256LOBSHOT

参考

在上述研究中参考了以下内容

附录

Chrome钱包扩展程序

钱包名称扩展程序ID
Yoroiffnbelfdoeiohenkjibnmadjiehjhajb
TronLinkibnejdfjmmkpcnlpebklmnkoeoihofec
Nifty Walletjbdaocneiiinmjbjlgalhcelgbejmnid
MetaMasknkbihfbeogaeaoehlefnkodbefgpgknn
Math Walletafbcbjpbpfadlkmhmclhkeeodmamcflc
Coinbase Wallethnfanknocfeofbddgcijnmhnfnkdnaad
Binance Walletfhbohimaelbohpjbbldcngcnapndodjp
Brave Walletodbfpeeihdkbihmopkbjmoonfanlbfcl
Guardahpglfhgfnhbgpjdenjgmdgoeiappafln
Equal Walletblnieiiffboillknjnepogjhkgnoapac
Jaxx Libertycjelfplplebdjjenllpjcblmjkfcffne
BitApp Walletfihkakfobkmkjojpchpfgcmhfjnmnfpi
iWalletkncchdigobghenbbaddojjnnaogfppfj
Wombatamkmjjmmflddogmhpjloimipbofnfjih
Oxygenfhilaheimglignddkjgofkcbgekhenbh
MyEtherWalletnlbmnnijcnlegkjjpcfjclmcfggfefdm
GuildWalletnanjmdknhkinifnkgdcggcfnhdaammmj
Saturn Walletnkddgncdjgjfcddamfgcmfnlhccnimig
Ronin Walletfnjhmkhhmkbjkkabndcnnogagogbneec
Station Walletaiifbnbfobpmeekipheeijimdpnlpgpp
Harmonyfnnegphlobjdpkhecapkijjdkgcjhkib
Coin98 Walletaeachknmefphepccionboohckonoeemg
EVER Walletcgeeodpfagjceefieflmdfphplkenlfk
KardiaChain Walletpdadjkfkgcafgbceimcpbkalnfnepbnk
Phantombfnaelmomeimhlpmgjnjophhpkkoljpa
Pali Walletmgffkfbidihjpoaomajlbgchddlicgpn
BOLT Xaodkkagnadcbobfpggfnjeongemjbjca
Liquality Walletkpfopkelmapcoipemfendmdcghnegimn
XDEFI Wallethmeobnfnfcmdkdcmlblgagmfpfboieaf
Namilpfcbjknijpeeillifnkikgncikgfhdo
MultiversX DeFi Walletdngmlblcodfobpdpecaadgfbcggfjfnm

Edge钱包扩展程序

钱包名称扩展程序ID
Yoroiakoiaibnepcedcplijmiamnaigbepmcb
MetaMaskejbalbakoplchlghecdalmeeeajnimhm
Math Walletdfeccadlilpndjjohbjdblepmjeahlmm
Ronin Walletkjmoohlgokccodicjjfebfomlbljgfhk
Station Walletajkhoeiiokighlmdnlakpjfoobnjinie
BDLT Walletfplfipmamcjaknpgnipjeaeeidnjooao
Glowniihfokdlimbddhfmngnplgfcgpmlido
OneKeyobffkkagpmohennipjokmpllocnlndac
MetaWalletkfocnlddfahihoalinnfbnfmopjokmhl

Firefox钱包扩展程序

钱包名称扩展程序ID
Yoroi{530f7c6c-6077-4703-8f71-cb368c663e35}.xpi
Ronin Wallet[email protected]
MetaMask[email protected]
TronLink{5799d9b6-8343-4c26-9ab6-5d2ad39884ce}.xpi
{aa812bee-9e92-48ba-9570-5faf0cfe2578}.xpi
{59ea5f29-6ea9-40b5-83cd-937249b001e1}.xpi
{d8ddfc2a-97d9-4c60-8b53-5edd299b6674}.xpi
Phantom{7c42eea1-b3e4-4be4-a56f-82a5852b12dc}.xpi
{b3e96b5f-b5bf-8b48-846b-52f430365e80}.xpi
{eb1fb57b-ca3d-4624-a841-728fdb28455f}.xpi
{76596e30-ecdb-477a-91fd-c08f2018df1a}.xpi