在 SADBRIDGE 下使用 GOSAR:QUASAR 获得 Golang 重写

Elastic 安全实验室分享了有关 SADBRIDGE 加载器和 GOSAR 后门的详细信息,这些恶意软件用于针对中文受害者的活动。

阅读时间:30 分钟恶意软件分析
在 SADBRIDGE 与 GOSAR 的协作下:QUASAR 进行了 Golang 重写

简介

Elastic 安全实验室最近观察到一组针对华语地区的新入侵事件,追踪编号为 REF3864。这些有组织的活动伪装成网络浏览器或社交媒体消息服务等合法软件来瞄准受害者。这些活动背后的威胁组织在跨 Linux、Windows 和 Android 等多个平台传播恶意软件方面表现出了中等程度的多功能性。在这次调查中,我们的团队发现了一个独特的 Windows 感染链,其中有一个我们称之为 SADBRIDGE 的自定义加载器。该加载器部署了基于 Golang 的 QUASAR 重新实现,我们称之为 GOSAR。这是我们团队第一次观察到用 Golang 编程语言重写 QUASAR。

关键要点

  • 正在进行的针对中文使用者的攻击活动,使用伪装成 Telegram 和 Opera 网络浏览器等合法软件的恶意安装程序
  • 感染链使用自定义加载器 (SADBRIDGE) 进行注入和 DLL 侧载
  • SADBRIDGE 部署了用 Golang 编写的 QUASAR 后门新变种(GOSAR)
  • GOSAR 是一款多功能后门,正在积极开发中,其功能尚不完善,但随着时间的推移,其功能不断迭代改进
  • Elastic Security 针对此攻击链提供了全面的预防和检测功能

REF3864 活动概述

11 月,Elastic 安全实验室团队在引爆上传到 VirusTotal 的几个不同样本时观察到了独特的感染链。这些不同的样本通过伪装成合法软件(例如 Telegram 或 Opera GX 浏览器)的登陆页面托管。

在本次调查中,我们发现了多条涉及类似技术的感染链:

  • 被木马感染的 MSI 安装程序,检测率较低
  • 使用与恶意 DLL 捆绑的合法软件进行伪装
  • 已部署定制的 SADBRIDGE 加载器
  • 最后阶段 GOSAR 已装载

我们认为,这些活动由于存在多个抽象层次而没有受到关注。通常,第一阶段涉及打开包含 MSI 安装程序的存档文件 (ZIP)。合法软件(例如 Windows x64dbg.exe调试应用程序)在后台被用来加载已修补的恶意 DLL ( x64bridge.dll )。该 DLL 启动一个新的合法程序( MonitoringHost.exe ),在其中侧载另一个恶意 DLL( HealthServiceRuntime.dll ),最终执行注入并通过注入将 GOSAR 植入程序加载到内存中。

恶意软件研究人员提取了 SADBRIDGE 配置,揭示了对手指定的活动日期,并表明自至少 2023 年 12 月以来一直在进行具有类似 TTP 的行动。GOSAR 的命令和控制 (C2) 基础设施通常伪装成可信服务或软件,以显得无害并符合受害者对软件安装程序的期望。在整个执行链中,重点是枚举中文 AV 产品(例如360tray.exe ,以及中文的防火墙规则名称和描述。由于这些定制,我们认为这种威胁是针对中文使用者的。此外,大量使用中文日志表明攻击者也是中文使用者。

自 2017 以来,QUASAR 就曾被用于国家支持的间谍活动、非国家黑客行动主义和以经济犯罪为动机的攻击(Qualys, 《Quasar RAT 的演变》 ),其中包括与中国有关的APT10 。使用 Golang 进行重写可能会利用在此期间获得的机构知识,从而实现更多功能,而无需对之前有效的 TTP 进行大量的再培训。

GOSAR 扩展了 QUASAR,增加了信息收集功能、多操作系统支持以及增强了对防病毒产品和恶意软件分类器的逃避能力。然而,通用的诱饵网站,以及缺乏额外的目标信息或目标行动,使我们没有足够的证据来识别攻击者的动机。

SADBRIDGE 介绍

SADBRIDGE 恶意软件加载器被打包为 MSI 可执行文件以便交付,并使用 DLL 侧加载和各种注入技术来执行恶意负载。SADBRIDGE 滥用合法应用程序(例如x64dbg.exeMonitoringHost.exe来加载恶意 DLL(例如x64bridge.dllHealthServiceRuntime.dll ),从而导致后续阶段和 shellcode。

持久性是通过服务创建和注册表修改实现的。通过滥用ICMLuaUtil COM 接口的UAC 绕过技术,可以悄无声息地将权限提升至管理员。此外,SADBRIDGE 还通过 Windows 任务计划程序集成权限提升绕过功能,以 SYSTEM 级权限执行其主要有效载荷。

SADBRIDGE 配置使用对配置字符串的每个字节进行简单减法0x1进行加密。加密阶段均附加有.log扩展名,并在运行时使用 XOR 和 LZNT1 解压缩算法解密。

SADBRIDGE 采用PoolParty 、APC 队列和令牌操作技术进行进程注入。为了避免沙盒分析,它使用了长的Sleep API 调用。另一种逃避防御的技术涉及 API 修补,以禁用 Windows 安全机制,例如反恶意软件扫描接口 (AMSI) 和 Windows 事件跟踪 (ETW)。

以下深入探索旨在探索执行链,根据所分析样本的配置,逐步介绍重要文件和阶段的功能。该分析旨在强调各个组件之间的相互作用以及它们在到达最终有效载荷过程中的作用。

SADBRIDGE代码分析

MSI 分析

初始文件使用Advanced Installer打包在 MSI 中,主要感兴趣的文件是x64dbg.exex64bridge.dll

通过使用 MSI 工具 ( lessmsi ),我们可以看到aicustact.dll中的LaunchApp入口点配置为执行AI_APP_FILE属性中指定的文件路径。

如果我们导航到这个AI_APP_FILE属性,我们可以看到与此配置绑定的文件是x64dbg.exe 。这代表安装完成后会执行的文件,合法的NetFxRepairTool.exe永远不会被执行。

x64bridge.dll 侧载

当执行x64dbg.exe时,它会从x64bridge.dll调用BridgeInit导出。 BridgeInitBridgeStart函数的包装器。

BLISTER中的技术类似,SADBRIDGE 修补了合法 DLL 的导出。

在恶意软件初始化例程期间,SADBRIDGE 首先使用主机名和魔法种子0x4E67C6A7生成哈希值。该哈希用作存储加密配置文件的目录名。加密配置写入C:\Users\Public\Documents\<hostname_hash>\edbtmp.log 。该文件包含属性 FILE_ATTRIBUTE_SYSTEM、FILE_ATTRIBUTE_READONLY 和 FILE_ATTRIBUTE_HIDDEN,以在普通目录列表中隐藏自身。

解密配置很简单,加密块由空字节分隔。对于加密块中的每个字节,我们可以将其增加0x1

配置包括:

  • 可能的竞选日期
  • 用于创建服务的字符串
  • MonitoringHost.exe 的新名称 ( DevQueryBroker.exe )
  • 由 MonitoringHost.exe ( HealthServiceRuntime.dll ) 旁加载的 DLL 的 DLL 名称
  • 附加阶段的绝对路径( .log文件)
  • 托管 GOSAR 的主要注入目标 ( svchost.exe )

DevQueryBroker目录 ( C:\ProgramData\Microsoft\DeviceSync\Device\Stage\Data\DevQueryBroker\ ) 包含在运行时解密的所有加密阶段 ( .log文件)。文件 ( DevQueryBroker.exe ) 是 Microsoft 合法应用程序 ( MonitoringHost.exe ) 的重命名副本。

最后,它会创建一个进程来运行DevQueryBroker.exe ,从而将恶意HealthServiceRuntime.dll侧载到同一文件夹中。

HealthServiceRuntime.dll

该模块将加密和部分解密的 shellcode 放在用户的%TEMP%目录中。Shellcode 的文件名遵循以下格式: log<random_string>.tmp 。然后将部分解密的 shellcode 的每个字节减0x10以进行完全解密。shellcode 在同一进程的新线程中执行。

该恶意软件利用与 SonicWall 发布的研究中相同的算法进行 API 哈希处理,该哈希算法列在附录部分。Shellcode 将DevQueryBroker.log解密为 PE 文件,然后对文件前三分之一处的单个字节 ( 0x42)执行简单的 XOR 运算,然后使用 LZNT1 算法解压缩结果。

然后,shellcode 使用NtUnmapViewOfSection取消映射 PE 文件的首选基地址处的任何现有映射,确保对VirtualAlloc的调用将从首选基地址开始分配内存。最后,它将解密的 PE 文件映射到该分配的内存并将执行转移到其入口点。SADBRIDGE 识别和执行的所有 shellcode 都具有相同的代码结构,仅在解密和执行时引用的特定.log文件方面有所不同。

查询代理日志

该恶意软件动态加载amsi.dll以禁用Windows中的关键安全机制。它通过插入指令将返回值修改为0x80070057来修补amsi.dll中的AmsiScanBuffer ,标准化的 Microsoft 错误代码E_INVALIDARG表示参数无效,并过早返回,以有效地绕过扫描逻辑。类似地,它修补AmsiOpenSession以始终返回相同的错误代码E_INVALIDARG 。此外,它还在ntdll.dll中修补了EtwEventWrite ,将第一条指令替换为ret指令,以禁用 Windows 事件跟踪 (ETW),从而抑制任何恶意活动的记录。

修补后,加密的 shellcode 被写入路径 ( C:\ProgramData\Microsoft\DeviceSync\Device\Stage\Data\DevQueryBroker\temp.ini ) 的temp.ini
恶意软件检查当前进程令牌的组成员身份以确定其特权级别。它通过使用SECURITY_LOCAL_SYSTEM_RID初始化 SID 并调用CheckTokenMembership来验证该进程是否属于 LocalSystem 帐户。如果不是,它会尝试通过使用SECURITY_BUILTIN_DOMAIN_RIDDOMAIN_ALIAS_RID_ADMINS创建 SID 并执行类似的令牌成员资格检查来检查管理员组中的成员资格。

如果当前进程没有 LocalSystem 或管理员权限,则首先利用ICMLuaUtil COM 接口通过UAC 绕过机制将权限提升到管理员权限。它精心设计一个名字字符串"Elevation:Administrator!new:{3E5FC7F9-9A51-4367-9063-A120244FBEC7}"来创建具有管理员权限的CMSTPLUA对象的实例。一旦创建对象并获取ICMLuaUtil接口,恶意软件就会使用接口公开的ShellExec方法来运行DevQueryBroker.exe

如果没有创建任务或服务来定期运行DevQueryBroker.exe ,恶意软件会检查防病毒进程360tray.exe是否正在运行。如果它没有运行,则会创建一个服务以将权限提升到 SYSTEM,该服务具有以下属性:

  • 服务名称: DevQueryBrokerService
    二进制路径名: “C:\ProgramData\Microsoft\DeviceSync\Device\Stage\Data\DevQueryBroker\DevQueryBroker.exe -svc”
  • 显示名称: DevQuery Background Discovery Broker Service
  • 描述:使应用程序能够通过后台任务发现设备。
  • 启动类型:系统启动时自动
  • 权限:本地系统

如果检测到360tray.exe正在运行,恶意软件会将加密的 PE 文件写入DevQueryBrokerService.log ,然后将下一阶段的 PE 文件(第 1 阶段)映射到当前进程内存中,并将执行转移到该进程。

一旦使用 SYSTEM 级别权限重新触发DevQueryBroker.exe并到达链的这一部分,恶意软件就会检查 Windows 版本。对于运行 Vista 或更高版本的系统(Windows 7 除外),它将另一个下一阶段(第 2 阶段)映射到内存中并在那里传输执行。

然而,在 Windows 7 上,它会执行 shellcode,解密并运行DevQueryBrokerPre.log文件。

阶段 1 注入 (explorer.exe)

SADBRIDGE 利用PoolParty Variant 7通过瞄准其线程池的 I/O 完成队列将 shellcode 注入explorer.exe 。它首先复制目标进程的 I/O 完成队列的句柄。然后它在explorer.exe内分配内存来存储 shellcode。分配额外的内存来存储精心设计的TP_DIRECT结构,其中包括 shellcode 的基地址作为回调地址。最后,它调用ZwSetIoCompletion ,并将指针传递给TP_DIRECT结构,以将数据包排队到目标进程的工作工厂(工作线程管理器)的I / O完成队列中,从而有效地触发注入的shellcode的执行。

此 shellcode 解密DevQueryBrokerService.log文件、取消映射占用其首选基地址的任何内存区域、将 PE 文件映射到该地址,然后执行其入口点。此行为与之前观察到的 shellcode 类似。

阶段 2 注入 (spoolsv.exe/lsass.exe)

对于第 2 阶段,SADBRIDGE 使用与第 1 阶段相同的注入技术将 shellcode 注入spoolsv.exelsass.exe如果spoolsv.exe不可用)。shellcode 表现出与早期阶段类似的行为:它将DevQueryBrokerPre.log解密为 PE 文件,取消映射占用其首选基地址的任何区域,映射 PE 文件,然后将执行转移到其入口点。

DevQueryBrokerService.log

上一节中提到的从DevQueryBrokerService.log解密的 shellcode 利用了使用 Windows 任务计划程序的权限提升技术。SADBRIDGE 集成了公共 UAC绕过技术,使用IElevatedFactorySever COM 对象间接创建计划任务。此任务配置为每天以 SYSTEM 级别权限运行DevQueryBroker.exe ,使用任务名称DevQueryBrokerService

为了掩盖其踪迹,恶意软件通过直接修改进程环境块 (PEB) 来欺骗图像路径和命令行,可能是为了试图将 COM 服务伪装成来自explorer.exe

DevQueryBrokerPre日志

SADBRIDGE 在注册表子项SYSTEM\CurrentControlSet\Services\DevQueryBrokerServiceSvc下创建一个名为DevQueryBrokerServiceSvc的服务,具有以下属性:

  • 描述:使应用程序能够通过后台任务发现设备。
  • 显示名称:DevQuery 后台发现代理服务
  • 错误控制:1
  • 图像路径%systemRoot%\system32\svchost.exe -k netsvcs
  • 对象名称:本地系统
  • 开始: 2 (自动启动)
  • 类型:16.
  • 失败操作
    • 每 24 小时重置一次失败计数。
    • 执行三次重启尝试:第一次延迟 20 毫秒,第二次和第三次延迟 1 分钟。

服务参数指定位于C:\Program Files (x86)\Common Files\Microsoft Shared\Stationery\<hostname_hash>\DevQueryBrokerService.dllServiceDll 。如果 DLL 文件不存在,它将立即被放到磁盘上。

DevQueryBrokerService.dll 具有与HealthServiceRuntime.dll类似的代码结构,可在执行链的早期阶段看到。它负责解密DevQueryBroker.log并运行它。服务启动时, ServiceDll将加载并执行svchost.exe

此外,它还修改SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost\netsvcs键以包含DevQueryBrokerServiceSvc的条目,从而将新创建的服务集成到netsvcs服务主机组管理的服务组中。

然后,SADBRIDGE 通过删除注册表子项SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Schedule\\TaskCache\\Tree\\DevQueryBrokerServiceSYSTEM\\CurrentControlSet\\Services\\DevQueryBrokerService来删除先前创建的计划任务和服务。

最后,它会删除C:\ProgramData\Microsoft\DeviceSync\Device\Stage\Data\DevQueryBroker文件夹中的文件DevQueryBroker.exeHealthServiceRuntime.dll ,因为新的持久性机制已经到位。

GOSAR 注射

在代码的后半部分,SADBRIDGE 使用WTSEnumerateSessionsA API 枚举本地机器上的所有活动会话。

如果找到会话,它会遍历每个会话:

  • 对于每个会话,它会尝试使用WTSQuerySessionInformationA检索用户名 ( WTSUserName )。如果查询失败,它将转到下一个会话。
  • 如果WTSUserName不为空,代码将以svchost.exe为目标,并将其路径、会话 ID 和加载器配置的内容传递给注入最后阶段的子例程。
  • 如果WTSUserName为空,但会话的WinStationName"Services" (表示服务会话),则会转而以dllhost.exe为目标,并将相同的参数传递给最后阶段的注入子例程。

如果没有找到会话,它会进入无限循环,重复枚举会话并调用注入最后阶段的子程序,同时执行检查以避免重复注入。

已登录会话以svchost.exe为目标,而服务会话或未登录用户的会话以dllhost.exe为目标。

如果会话 ID 可用,代码将尝试复制该会话的用户令牌,并将重复令牌的完整性级别提升至S-1-16-12288 (系统完整性)。然后,它使用提升的令牌通过CreateProcessAsUserA创建子进程( svchost.exedllhost.exe )。

如果令牌操作失败或没有可用的会话 ID(系统进程的会话 ID 可以为 0),则会使用CreateProcessA创建没有令牌的进程。

加密的 shellcode C:\ProgramData\Microsoft\DeviceSync\Device\Stage\Data\DevQueryBroker\temp.ini使用与之前解密.log文件相同的 XOR 和 LZNT1 解压缩技术进行解密,并且使用 APC 注入将 shellcode 排队以便在新创建的进程的线程中执行。

最后,注入的 shellcode 将DevQueryBrokerCore.log解密为 GOSAR 并在新创建的进程的内存中运行它。

GOSAR 简介

GOSAR 是一种多功能远程访问木马,针对 Windows 和 Linux 系统。该后门具有检索系统信息、截屏、执行命令、键盘记录等功能。GOSAR 后门保留了 QUASAR 的大部分核心功能和行为,同时结合了几处与原始版本不同的修改。

通过用 Go 等现代语言重写恶意软件,可以降低检测率,因为许多防病毒解决方案和恶意软件分类器难以在这些新的编程结构下识别恶意字符串/特征。下面是解压后的 GOSAR 在上传时仅收到 5 检测的一个很好的例子。

值得注意的是,该变体支持多种平台,包括适用于 Linux 系统的 ELF 二进制文件和适用于 Windows 的传统 PE 文件。这种跨平台能力与 Go 的适应性相一致,使其比原始基于 .NET 的 QUASAR 更加通用。在下一部分中,我们将重点介绍 GOSAR 的代码结构、与开源版本(QUASAR)相比的新功能和新增功能。

GOSAR 代码分析概述

GOSAR 代码结构

由于二进制文件保留了所有符号,我们能够重建源代码结构,该结构是从版本样本中提取的 0.12.01

  • vocalize/config :包含恶意软件的配置文件。
  • vocalize/proto : 包含所有 Google 协议缓冲区 (proto) 声明。
  • vocalize/network : 包括与网络相关的功能,例如主连接循环、代理处理以及配置防火墙和设置监听器的线程
  • vocalize/msgs/resolvers :定义恶意软件处理的命令。这些命令被分配给vibrant_msgs_init*函数内的对象。
  • vocalize/msgs/services : 引入新的功能,例如运行键盘记录器、剪贴板记录器等服务,这些服务在vibrant_network._ptr_Connection.Start函数中启动。
  • vocalize/logs : 负责记录恶意软件的执行。日志使用存储在配置中的 AES 密钥加密。该恶意软件使用 AES 分块解密日志。
  • vocaloid/pkg/helpers :包含在各种恶意软件命令和服务中使用的辅助函数。
  • vocaloid/pkg/screenshot : 处理受感染系统上的屏幕截图捕获功能。
  • vocaloid/pkg/utils :包括实用功能,例如生成随机值。
  • vibric/pkg/native :提供调用Windows API(WINAPI)函数的功能。

GOSAR 新增内容

沟通与信息收集

这个新变种继续采用与原版相同的通信方式,基于TCP TLS 。连接后,它首先向 C2 发送系统信息,并添加 4 新字段:

  • IP 地址
  • 防病毒
  • 剪贴板设置
  • 钱包

防病毒软件和数字钱包列表在函数vibrant_pkg_helpers_init中初始化,可在本文档的底部找到。

服务

该恶意软件处理在客户端首次连接到 C2 时启动的 3 服务:

  • vibrant_services_KeyLogger
  • vibrant_services_ClipboardLogger
  • vibrant_services_TickWriteFile

KeyLogger

GOSAR 中的键盘记录功能是在vibrant_services_KeyLogger函数中实现的。此功能依赖于 Windows API,通过使用SetWindowsHookEx和参数WH_KEYBOARD_LL设置全局 Windows 钩子来拦截和记录受感染系统上的击键,以监视低级键盘事件。该钩子函数名为vibrant_services_KeyLogger_func1

ClipboardLogger

剪贴板日志记录功能非常简单,依赖于 Windows API。它首先使用IsClipboardFormatAvailable检查剪贴板数据的可用性,然后使用GetClipboardData API 检索数据。

滴答写文件

ClipboardLoggerKeyLogger服务均会收集由TickWriteFile定期写入目录 ( C:\ProgramData\Microsoft\Windows\Start Menu\Programs\diagnostics ) 的当前日期文件下的数据,例如2024-11-27
可以通过先减去值0x1f然后将其与值0x18进行异或来解密,如 CyberChef 配方中所示。

网络设置

初始化其服务后,恶意软件会生成三个专用于其网络设置的线程

  • vibrant_network_ConfigFirewallRule
  • vibrant_network_ConfigHosts
  • vibrant_network_ConfigAutoListener

处理网络设置的线程

配置防火墙规则

该恶意软件为端口范围51756-51776创建入站防火墙规则,其中文名称翻译为Distributed Transaction Coordinator (LAN) ,允许所有程序和 IP 地址入站,描述设置为: Inbound rules for the core transaction manager of the Distributed Transaction Coordinator service are managed remotely through RPC/TCP.

配置主机

此函数将一个条目添加到c:\Windows\System32\Drivers\etc\hosts以下127.0.0.1 micrornetworks.com中。添加此条目的原因尚不清楚,但很可能是因为恶意软件当前开发阶段缺少功能或特性不完整。

ConfigAutoListener

该恶意软件的此功能在51756-51776范围内的第一个可用端口上运行 HTTP 服务器侦听器,这是防火墙规则之前允许的。有趣的是,该服务器不处理任何命令,这证明该恶意软件仍在开发中。我们当前的版本仅处理对 URI /security.js GET请求,并以字符串callback();进行响应,任何其他请求都会返回 404 错误代码。这种最小响应可能表明该服务器是一个占位符或处于早期开发阶段,以后可能会添加更复杂的功能

日志

该恶意软件将其运行时日志保存在目录中: %APPDATA%\Roaming\Microsoft\Logs ,文件名格式为: windows-update-log-<YearMonthDay>.log .
每个日志条目都使用 HMAC-AES 算法加密;密钥在vibrant_config函数中硬编码,以下是示例:

攻击者可以通过发出命令ResolveGetRunLogs来远程检索恶意软件的运行时日志。

Plugins

该恶意软件具有执行插件的能力,插件是从 C2 下载的 PE 文件,并使用 XOR 算法加密存储在磁盘上。这些插件保存在路径: C:\ProgramData\policy-err.log 。要执行插件,需要调用命令ResolveDoExecutePlugin ,它首先检查插件是否可用。

然后,它以反射方式加载以 base64 格式存储在名为plugins.dll的二进制文件中的本机 DLL,并执行其导出函数ExecPlugin

ExecPlugin 使用参数/package /quiet创建C:\Windows\System32\msiexec.exe的暂停进程。然后它将异步过程调用(APC) 排队到进程的主线程中。当线程恢复时,排队的 shellcode 将被执行。

shellcode 读取存储在C:\ProgramData\policy-err.log加密插件,使用硬编码的 1 字节 XOR 密钥对其进行解密,然后反射性地加载和执行它。

HVNC

该恶意软件通过现有套接字支持隐藏的 VNC(HVNC),它会暴露 5 命令

  • 解析HVNC命令
  • 解析GetHVNCScreen
  • 解决StopHVNC
  • ResolveDoHVNCKeyboardEvent
  • ResolveDoHVNCMouseEvent

执行的第一个命令是ResolveGetHVNCScreen ,它将首先初始化它并设置一个视图,它使用 base64 格式的嵌入式本机 DLL HiddenDesktop.dll ,该 DLL 被反射加载到内存中并执行。

该 DLL 负责执行低级 API 来设置 HVNC,总共有 7 导出函数:

  • 执行命令
  • 鼠标滚动
  • 鼠标右击
  • 鼠标移动
  • 鼠标左键单击
  • 按下按键
  • 截屏

调用的第一个导出函数是Initialise ,用于使用CreateDesktopA API 初始化桌面。此 HVNC 实现总共处理 17 命令,可以在ExcuteCommand导出中找到,如前所述,它的名称确实有一个拼写错误,命令 ID 是从恶意软件的命令ResolveHVNCCommand转发的,该命令将调用ExcuteCommand

命令ID描述
0x401该函数首先通过将TaskbarGlomLevel注册表项设置为Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced下的2来禁用任务栏按钮分组。接下来,通过使用SHAppBarMessageABM_SETSTATE命令并将状态设置为ABS_ALWAYSONTOP ,确保任务栏始终可见且位于顶部。
0x402通过执行shell32.dll的第 61 个导出函数生成 RUN 对话框。 C:\Windows\system32\rundll32.exe shell32.dll,#61
0x403运行一个实例 powershell.exe
0x404执行存储在 C:\\ProgramData\\shell.log
0x405运行一个实例 chrome.exe
0x406运行一个实例 msedge.exe
0x407运行一个实例 firefox.exe
0x408运行一个实例 iexplore.exe
0x409运行一个实例 360se.exe
0x40A运行360ChromeX.exe的实例。
0x40B运行一个实例 SogouExplorer.exe
0x40C关闭当前窗口
0x40D最小化指定窗口
0x40E激活窗口并将其显示为最大化窗口
0x40F杀死一个窗口的进程
0x410设置剪贴板
0x411清除剪贴板

屏幕截图

恶意软件反射性地加载第三个也是最后一个以 base64 格式嵌入的 PE DLL,名为Capture.dll ,它有 5 导出函数:

  • 截取第一屏
  • 捕捉下一屏
  • GetBitmapInfo
  • GetBitmapInfoSize
  • 设置质量

该库首先通过调用resolvers_ResolveGetBitmapInfo进行初始化,然后以反射方式加载并执行其DllEntryPoint ,而后者将使用常见的 Windows API(如CreateCompatibleDCCreateCompatibleBitmapCreateDIBSection设置屏幕捕获结构。 2 导出函数CaptureFirstScreenCaptureNextScreen用于将受害者的桌面截图捕获为 JPEG 图像。

观察

有趣的是,原始的 .NET QUASAR 服务器仍然可用于接收来自 GOSAR 样本的信标,因为它们保留了相同的通信协议。然而,它在实际使用中需要进行重大修改才能支持 GOSAR 功能。

目前尚不清楚作者是否更新或扩展了开源 .NET QUASAR 服务器,或者开发了一个全新的服务器。值得一提的是,他们保留了默认监听端口1080,与原来的实现一致。

新功能

下表提供了所有新添加的命令的描述:

新命令
解决DoRoboCopy执行RoboCopy命令来复制文件
解决压缩文件问题以 zip 格式压缩文件
解析并提取文件解压 zip 文件
解析复制文件复制受感染机器中的目录或文件
解析GetRunLogs获取可用日志
解析HVNC命令执行 HVNC 命令
解析GetHVNCScreen启动 HVNC
解决StopHVNC停止 HVNC 会话
ResolveDoHVNCKeyboardEvent发送键盘事件到 HVNC
ResolveDoHVNCMouseEvent向 HVNC 发送鼠标事件
ResolveDoExecutePlugin执行插件
解析获取进程获取正在运行的进程列表
ResolveDoProcessStart启动进程
解析DoProcessEnd终止进程
解析获取位图信息检索当前屏幕显示设置的BITMAPINFO结构
解析获取监视器使用EnumDisplayMonitors API 枚举受害者的显示器
解析获取桌面启动屏幕捕获功能
ResolveStopGetDesktop停止屏幕捕获功能
ResolveNewShellExecute打开通往生成的 cmd.exe 进程的管道并向其发送命令
解析GetSchTasks通过运行命令获取计划任务 schtasks /query /fo list /v
解析获取屏幕截图截取受害者桌面的截图
解析获取服务使用WMI查询获取服务列表: select * from Win32_Service
ResolveDoServiceOperation启动或停止服务
ResolveDoDisableMultiLogon通过将键HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer下的值fSingleSessionPerUser设置为 1 ,可禁用用户的多个会话
解决执行恢复NLA恢复远程桌面协议 (RDP) 的安全设置,启用网络级别身份验证(NLA) 并强制实施SSL/TLS加密以实现安全通信。
ResolveGetRemoteClientInformation获取已启用的所有本地用户的列表、 RDP 端口LAN IP以及操作系统特定信息:从注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion中提取的DisplayVersionSystemRootCurrentBuildNumber
ResolveDoInstallWrapper设置隐藏的远程桌面协议( HRDP
ResolveDoUninstallWrapper卸载HRDP
ResolveDoRecoverPrivileges恢复在HRDP安装期间发生更改之前的原始HKEY_LOCAL_MACHINE\\SAM\\SAM注册表
ResolveGetRemoteSessions检索有关计算机上的 RDP 会话的信息。
ResolveDoLogoffSession使用** WTSLogoffSession ** API 注销 RDP 会话
解析获取系统信息获取系统信息
ResolveGetConnections获取机器中的所有连接
ResolveDoCloseConnection未实施

恶意软件和 MITRE ATT&CK

Elastic 使用MITRE ATT&CK框架来记录威胁针对企业网络使用的常见策略、技术和程序。

战术

策略代表了技术或子技术的原因。 这是对手的战术目标:采取行动的原因。

技术

技术代表对手如何通过采取行动来实现战术目标。

缓解 REF3864

检测

预防

雅拉

Elastic Security 已创建 YARA 规则来识别此活动。

观察结果

本研究讨论了以下可观察结果:

可观测类型名称参考
opera-x[.]net域名登陆页面
teledown-cn[.]com域名登陆页面
15af8c34e25268b79022d3434aa4b823ad9d34f3efc6a8124ecf0276700ecc39SHA-256NetFxRepairTools.msiMSI
accd651f58dd3f7eaaa06df051e4c09d2edac67bb046a2dcb262aa6db4291de7SHA-256x64bridge.dll萨德布里奇
7964a9f1732911e9e9b9e05cd7e997b0e4e2e14709490a1b657673011bc54210SHA-256戈萨尔
ferp.googledns[.]io域名GOSAR C2 服务器
hk-dns.secssl[.]com域名GOSAR C2 服务器
hk-dns.winsiked[.]com域名GOSAR C2 服务器
hk-dns.wkossclsaleklddeff[.]is域名GOSAR C2 服务器
hk-dns.wkossclsaleklddeff[.]io域名GOSAR C2 服务器

参考资料

上述研究参考了以下内容:

附录

哈希算法(SADBRIDGE)

def ror(x, n, max_bits=32) -> int:
    """Rotate right within a max bit limit, default 32-bit."""
    n %= max_bits
    return ((x >> n) | (x << (max_bits - n))) & (2**max_bits - 1)

def ror_13(data) -> int:
    data = data.encode('ascii')
    hash_value = 0

    for byte in data:
        hash_value = ror(hash_value, 13)
        
        if byte >= 0x61:
            byte -= 32  # Convert to uppercase
        hash_value = (hash_value + byte) & 0xFFFFFFFF

    return hash_value


def generate_hash(data, dll) -> int:
    dll_hash = ror_13(dll)
    result = (dll_hash + ror_13(data)) & 0xFFFFFFFF
    
    return hex(result)

在 GOSAR 中检查的 AV 产品

360SD 工具kswebshield 工具
360托盘kvmonxp.exe
守护进程kxetray.exe
广告监视程序麦克盾
弧形任务服务麦克盾
ashdisp.exeminer.exe
avcenter.exemongoosagui 工具
平均进程mpmon.exe
avgaurd.exemsmpeng.exe
执行文件进程管理器
avk.exenspupsvc.exe
avp.exentrtscan.exe
avp.exe帕特雷
avwatchservice.exepccntmon.exe
ayagent.aye安全系统托盘工具
baidusdsvc.exeqqpcrtp.exe
bkavservice.exe执行文件
执行程序ravmond.exe
ccSetMgr.exeremupd.exe
ccsvchst.exe执行程序
cksoftshiedantivirus4.exe扫描工具
清理器8安全狗
执行文件进程管理器
coranticontrolcenter32.exe执行程序
执行文件spidernt.exe
egui.exespywareterminatorshield.exe
保护程序tmbmsrv.exe
f-prot.exe解除威胁
安全工具usysdiag.exe
fortitray.exev3svc.exe
程序执行文件
程序托盘vsmon.exe
安全工具vsserv.exe
执行程序wsctrl.exe
kpfwtray.exeyunsuo_agent_daemon.exe
安全工具yunsuo_agent_service.exe