简介
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.exe
和MonitoringHost.exe
来加载恶意 DLL(例如x64bridge.dll
和HealthServiceRuntime.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.exe
和x64bridge.dll
。
通过使用 MSI 工具 ( lessmsi ),我们可以看到aicustact.dll
中的LaunchApp
入口点配置为执行AI_APP_FILE
属性中指定的文件路径。
如果我们导航到这个AI_APP_FILE
属性,我们可以看到与此配置绑定的文件是x64dbg.exe
。这代表安装完成后会执行的文件,合法的NetFxRepairTool.exe
永远不会被执行。
x64bridge.dll 侧载
当执行x64dbg.exe
时,它会从x64bridge.dll
调用BridgeInit
导出。 BridgeInit
是BridgeStart
函数的包装器。
与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_RID
和DOMAIN_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.exe
或lsass.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.dll
的ServiceDll
。如果 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\\DevQueryBrokerService
和SYSTEM\\CurrentControlSet\\Services\\DevQueryBrokerService
来删除先前创建的计划任务和服务。
最后,它会删除C:\ProgramData\Microsoft\DeviceSync\Device\Stage\Data\DevQueryBroker
文件夹中的文件DevQueryBroker.exe
和HealthServiceRuntime.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.exe
或dllhost.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 检索数据。
滴答写文件
ClipboardLogger
和KeyLogger
服务均会收集由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 来禁用任务栏按钮分组。接下来,通过使用SHAppBarMessage 和ABM_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(如CreateCompatibleDC
、 CreateCompatibleBitmap
和CreateDIBSection
设置屏幕捕获结构。 2 导出函数CaptureFirstScreen
和CaptureNextScreen
用于将受害者的桌面截图捕获为 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 中提取的DisplayVersion 、 SystemRoot和CurrentBuildNumber |
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框架来记录威胁针对企业网络使用的常见策略、技术和程序。
战术
策略代表了技术或子技术的原因。 这是对手的战术目标:采取行动的原因。
技术
技术代表对手如何通过采取行动来实现战术目标。
- 劫持执行流程:DLL 侧加载
- 输入捕获:键盘记录
- 进程注入:异步过程调用
- 流程发现
- 隐藏文物:隐藏窗口
- 创建或修改系统进程:Windows 服务
- 非标准端口
- 滥用提升控制机制:绕过用户帐户控制
- 混淆文件或信息
- 削弱防御能力:禁用或修改工具
- 虚拟化/沙盒逃避:基于时间的逃避
缓解 REF3864
检测
- 通过 PowerShell 绕过反恶意软件扫描界面的潜在方法
- 异常的打印后台处理程序子进程
- 从不寻常的目录执行 - 命令行
- 从非浏览器进程查找外部 IP
- 不寻常的亲子关系
- 通过 DllHost 进行异常网络连接
- 通过服务注册表实现异常持久性
- 父进程 PID 欺骗
预防
雅拉
Elastic Security 已创建 YARA 规则来识别此活动。
观察结果
本研究讨论了以下可观察结果:
可观测 | 类型 | 名称 | 参考 |
---|---|---|---|
opera-x[.]net | 域名 | 登陆页面 | |
teledown-cn[.]com | 域名 | 登陆页面 | |
15af8c34e25268b79022d3434aa4b823ad9d34f3efc6a8124ecf0276700ecc39 | SHA-256 | NetFxRepairTools.msi | MSI |
accd651f58dd3f7eaaa06df051e4c09d2edac67bb046a2dcb262aa6db4291de7 | SHA-256 | x64bridge.dll | 萨德布里奇 |
7964a9f1732911e9e9b9e05cd7e997b0e4e2e14709490a1b657673011bc54210 | SHA-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 服务器 |
参考资料
上述研究参考了以下内容:
- https://zcgonvh.com/post/Advanced_Windows_Task_Scheduler_Playbook-Part.2_from_COM_to_UAC_bypass_and_get_SYSTEM_dirtectly.html
- https://www.sonicwall.com/blog/project-androm-backdoor-trojan
- https://www.safebreach.com/blog/process-injection-using-windows-thread-pools/
- https://gist.github.com/api0cradle/d4aaef39db0d845627d819b2b6b30512
附录
哈希算法(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.exe | miner.exe |
avcenter.exe | mongoosagui 工具 |
平均进程 | mpmon.exe |
avgaurd.exe | msmpeng.exe |
执行文件 | 进程管理器 |
avk.exe | nspupsvc.exe |
avp.exe | ntrtscan.exe |
avp.exe | 帕特雷 |
avwatchservice.exe | pccntmon.exe |
ayagent.aye | 安全系统托盘工具 |
baidusdsvc.exe | qqpcrtp.exe |
bkavservice.exe | 执行文件 |
执行程序 | ravmond.exe |
ccSetMgr.exe | remupd.exe |
ccsvchst.exe | 执行程序 |
cksoftshiedantivirus4.exe | 扫描工具 |
清理器8 | 安全狗 |
执行文件 | 进程管理器 |
coranticontrolcenter32.exe | 执行程序 |
执行文件 | spidernt.exe |
egui.exe | spywareterminatorshield.exe |
保护程序 | tmbmsrv.exe |
f-prot.exe | 解除威胁 |
安全工具 | usysdiag.exe |
fortitray.exe | v3svc.exe |
程序 | 执行文件 |
程序托盘 | vsmon.exe |
安全工具 | vsserv.exe |
执行程序 | wsctrl.exe |
kpfwtray.exe | yunsuo_agent_daemon.exe |
安全工具 | yunsuo_agent_service.exe |