简介
2025 年 9 月, 德克萨斯 A& M 大学系统 (TAMUS) 网络安全公司( 一家托管检测和响应提供商)与 Elastic Security Labs 合作,发现了一个会说中文的威胁行为者安装了恶意 IIS 模块(我们称之为 TOLLBOOTH)后的漏洞活动。在此期间,我们观察到哥斯拉分叉 webhell框架、远程监控和管理 (RMM) 工具 GotoHTTP 的使用,以及用于隐藏其活动的恶意驱动程序。威胁者利用配置错误的 IIS 网络服务器,使用在公共资源(如 Microsoft 文档或 StackOverflow 支持页面)中发现的 ASP.NET 机器密钥。
今年早些时候,微软在 2 月份首次报道了一连串类似事件。我们的团队认为,根据类似的恶意软件和行为,这是四月份 AhnLab 也曾详述过的相同威胁活动的延续。在这次活动中,我们利用与德克萨斯 A&M 系统网络安全部门的合作关系,收集了有关活动的见解。此外,通过与Validin 合作,利用其全球扫描基础设施,我们确定全球各地的组织都受到了此次活动的影响。以下报告将详细介绍该活动组(即 REF3927)中的事件和工具。我们希望提高维权者和组织对这一活动的认识,因为它正在全球范围内被滥用。
关键要点
- 威胁者利用公开暴露的机器密钥滥用配置错误的 IIS 服务器
- 入侵后的行为包括使用恶意驱动程序、远程监控工具、凭证转储、webshell 部署和 IIS 恶意软件
- 威胁行动者利用开源 "Hidden "rootkit 项目来隐藏自己的存在
- 主要目的似乎是安装一个名为 TOLLBOOTH 的 IIS 后门,其中包括搜索引擎优化隐形和 webhell 功能
- 这项活动包括跨地域和跨行业的大规模开发
活动概述
攻击向量
上个月,Elastic Security Labs 和 Texas A&M System 网络安全部门调查了一起涉及配置错误的 Windows IIS 服务器的入侵事件。这与配置了 ASP.NET 机器密钥的服务器直接相关,而这些机器密钥之前已在互联网上公布。ASP.NET 应用程序中使用的机器密钥是指用于加密和验证数据的加密密钥。这些密钥由ValidationKey 和DecryptionKey 两部分组成,用于保护ViewState 和身份验证 cookie 等 ASP.NET 功能。
ViewState 是ASP.NET网络应用程序用于跨 HTTP 请求保存页面及其控件状态的一种机制。由于 HTTP 是一种无状态协议,ViewState 允许在页面提交和再次呈现时收集数据。这些数据存储在页面的一个隐藏字段 (__VIEWSTATE) 中,该字段以 Base64 格式进行序列化和编码。ViewState 字段容易受到反序列化攻击,攻击者可利用应用程序的机器密钥伪造有效载荷。我们有理由相信,这是针对使用公开暴露的机器密钥的 Windows 网络服务器的机会主义活动的一部分。
下面是这类反序列化攻击的一个示例,使用开放源码 .NET 反序列化有效载荷生成器在虚拟环境中通过 POST 请求进行了演示。__VIEWSTATE 字段包含一个经过 URL 编码和 Base64 编码的有效载荷,它将执行whoami 并将文件写入目录。开发请求成功后,服务器将回复HTTP/1.1 500 Internal Server Error 。
妥协后的活动
在通过 ViewState 注入进行初始访问后,观察到 REF3927 部署了 webhell(包括 Godzilla shell 框架),以促进持续访问。然后,他们列举了权限,并试图创建自己的用户账户(未成功)。当尝试创建账户失败后,该行为者上传并执行了 GotoHTTP 远程监控和管理 (RMM) 工具。威胁行为者创建了一个管理员账户,并试图使用 Mimikatz 倾倒凭证,但 Elastic Defend 阻止了这一行为。
由于进一步扩大入侵范围的尝试受阻,威胁行为者部署了流量劫持 IIS 模块 TOLLBOOTH,作为其访问货币化的一种手段。该行为者还试图部署一个修改版的开源 Hidden rootkit,以混淆其恶意软件。在观察到的入侵事件中,Elastic Defend 阻止了 TOLLBOOTH 和 rootkit 的执行。
哥斯拉 EKP 分析
该小组使用的主要工具之一是由ekkoo-z 编写的名为Z-Godzilla_ekp 的哥斯拉分叉框架。该工具借鉴了之前的 "哥斯拉 "项目,增加了 AMSI 旁路插件等新功能,并伪装其网络流量,使其看起来更合法。该工具包允许操作员生成 ASP.NET、Java、C# 和 PHP 有效载荷,连接到目标,并提供不同的加密选项来隐藏网络流量。该框架使用由图形用户界面驱动的插件系统,具有多种功能,包括
- 发现/枚举能力
- 权限升级技术
- 命令执行/文件执行
- Shellcode 加载器、meterpreter、内存 PE 执行
- 文件管理、压缩工具
- 凭证窃取插件 (
lemon) - 检索 FileZilla、Navicat、WinSCP 和 Xmanager 凭证 - 浏览器密码搜索
- 端口扫描、HTTP 代理配置、记笔记
下面是一个网络流量示例,显示了操作员使用Z-Godzilla_ekp 访问 webshell (error.aspx) 的流量。webshell 将从 HTTP POST 请求中获取 Base64 编码的 AES 加密数据,然后在内存中执行 .NET 程序集。这些请求通过在 HTTP POST 参数中嵌入加密数据来伪装,以混入正常网络流量。
根基工具包分析
攻击者通过部署内核 rootkit 隐藏了自己在受感染机器上的存在。该 rootkit 与一个名为 HijackDriverManager 的用户态应用程序(其界面字符串是用中文编写的)协同工作,与驱动程序进行交互。在分析过程中,我们同时检查了恶意 rootkit 和原始 "隐藏 "开源项目的代码。在内部,我们调用 rootkitHIDDENDRIVER 和用户态应用程序HIDDENCLI 。
该恶意软件是开源 rootkitHidden 的修改版,多年来一直在 GitHub 上提供。恶意软件作者在编译前稍作修改。例如,rootkit 使用直接内核对象操纵 (Direct Kernel Object Manipulation, DKOM) 来隐藏自己的存在,并在被入侵系统中保持持久性。编译后的驱动程序在编译路径字符串中仍带有 "hidden",表明他们使用了 "Hidden "rootkit 项目。
初始载入内核时,驱动程序会优先执行一系列关键的初始化步骤。它首先调用七个初始化函数:
InitializeConfigsInitializeKernelAnalyzerInitializePsMonitorInitializeFSMiniFilterInitializeRegistryFilterInitializeDeviceInitializeStealthMode
在填充驱动程序对象和相关字段(如主要函数)之前,准备好内部组件。
下文将逐一阐述这七个关键的初始化功能,并详细说明其用途。
初始化配置
rootkit 的初始操作是运行InitializeConfigs 函数。该函数的唯一目的是从 Windows 注册表中的驱动程序服务键中读取 rootkit 的配置。这些值被提取出来并放入全局配置变量中,随后将被 rootkit 使用。
下表总结了 rootkit 从注册表中提取的配置参数:
| 登记处名称 | 描述 | 类型 |
|---|---|---|
Kbj_WinkbjFsDirs | 要隐藏的目录路径列表 | 字符串 |
Kbj_WinkbjFsFiles | 要隐藏的文件路径列表 | 字符串 |
Kbj_WinkbjRegKeys | 要隐藏的注册表键值列表 | 字符串 |
Kbj_WinkbjRegValues | 要隐藏的注册表值列表 | 字符串 |
Kbj_FangxingImages | 要列入白名单的进程图像列表 | 字符串 |
Kbj_BaohuImages | 要保护的流程图像列表 | 字符串 |
Kbj_WinkbjImages | 要隐藏的进程图像列表 | 字符串 |
Kbj_Zhuangtai | 从用户界面设置的全局杀死开关 | bool |
Kbj_YinshenMode | 该标志表示 rootkit 必须隐藏其伪装。 | bool |
初始化内核分析器
其目的是动态扫描内核内存,找到需要的PspCidTable 和ActiveProcessLinks 的地址。
内核 PspCidTable是内核结构,用作进程和线程 ID 表,而 ActiveProcessLinks是内核结构,用作进程和线程 ID 表,而_EPROCESS 结构下的它允许系统跟踪和遍历所有活动进程。通过从该列表中删除条目,可以从进程资源管理器等枚举工具中隐藏进程。
LookForPspCidTable
它通过反汇编函数库PspCidTable PsLookupProcessByProcessIdZydis 并进行解析。
查找活动进程链接
该函数用于确定ActiveProcessLinks 字段在_EPROCESS 结构中的偏移量。它使用针对不同 Windows 版本的硬编码偏移值。它有一个快速扫描过程,依靠这些硬编码值找到ActiveProcessLinks 字段,并由另一个函数进行验证。如果用硬编码值找不到,它就会采取暴力方法,从硬编码的相对偏移量开始,直到可能的最大偏移量。
初始化 PsMonitor
InitializePsMonitor 设置 rootkit 的进程监控和操纵引擎。这是它能够隐藏进程的核心所在。
它首先初始化三个AVL 树结构,用于保存排除、保护和隐藏进程的信息(规则)。它使用 RtlInitializeGenericTableAvl进行高速查询,并用配置中的数据填充。然后,它会设置不同的内核回调,利用规则集监控系统。
使用 (ObRegisterCallbacks) 注册对象管理器回调
此钩子注册ProcessPreCallback 和ThreadPreCallback 函数。内核对象管理器在完成任何创建或复制进程或线程句柄的请求之前,都会执行这段代码。
当一个进程试图获取另一个进程的句柄时,就会调用回调函数ProcessPreCallback 。它首先会检查目标进程是否是受保护进程(在列表中)。如果是这种情况,它不会不授予访问权限,而会简单地将其对受保护进程的权限降级,并将访问权限设置为SYNCHRONIZE | PROCESS_QUERY_LIMITED_INFORMATION 。
这将确保进程无法与受保护进程交互/检查或杀死该进程。
同样的机制也适用于线程。
进程创建回调(PsSetCreateProcessNotifyRoutineEx)
rootkit 会在创建进程时向 PsSetCreateProcessNotifyRoutineExAPI 注册一个回调。当启动一个新进程时,该回调会运行一个函数CheckProcessFlags ,根据配置的图像路径列表检查进程的图像。然后,它会在内部跟踪表中为这个新进程创建一个条目,并相应设置其excluded 、protected 和hidden 标志。
基于标志的行为:
- 已排除
- rootkit 会忽略进程,让它按预期运行。
- 受保护
- rootkit不允许任何其他进程对其进行特权处理,类似于
ProcessPreCallback。
- rootkit不允许任何其他进程对其进行特权处理,类似于
- 隐藏
- rootkit 会通过直接内核对象操作 (DKOM) 隐藏进程。在创建进程的瞬间直接操作进程的内核结构可能不稳定。在进程创建回调中,如果需要隐藏某个进程,就会将其从 ActiveProcessLinks 列表中取消链接。不过,它会设置一个
postponeHiding标志,下文将对此进行解释。
- rootkit 会通过直接内核对象操作 (DKOM) 隐藏进程。在创建进程的瞬间直接操作进程的内核结构可能不稳定。在进程创建回调中,如果需要隐藏某个进程,就会将其从 ActiveProcessLinks 列表中取消链接。不过,它会设置一个
图像加载回调(PsSetLoadImageNotifyRoutine)
LoadProcessImageNotifyCallback 这样就可以使用 PsSetLoadImageNotifyRoutine,每当可执行映像(.exe 或.dll )加载到进程内存时,内核都会调用该映像。
加载图像时,回调程序会检查postponeHiding 标志;如果设置了该标志,则会调用UnlinkProcessFromCidTable 将其从主进程 ID 表中删除 (PspCidTable)。
InitializeFSMiniFilter
函数在 FilterRegistration structure(FLT_REGISTRATION).该结构告诉操作系统在进行哪些类型的文件系统操作时需要调用哪些函数。它为以下请求注册回调:
IRP_MJ_CREATE:拦截任何打开或创建文件或目录的尝试。IRP_MJ_DIRECTORY_CONTROL:拦截任何列出目录内容的尝试。
FltCreatePreOperation(IRP_MJ_CREATE)
这是一个操作前回调,当进程尝试创建/打开文件时,会触发该函数。它会根据要隐藏的文件列表检查路径。如果发现匹配,则会将 IRP 请求的操作结果更改为STATUS_NO_SUCH_FILE ,向请求进程表明文件不存在,除非该进程包含在排除列表中。
FltDirCtrlPostOperation(IRP_MJ_DIRECTORY_CONTROL)
这是一个操作后回调;所执行的钩子基本上是拦截系统生成的目录监听,并通过删除任何列为隐藏的文件对其进行修改。
初始化注册表过滤器
隐藏进程和文件后,rootkit 的下一步就是删除 Windows 注册表中的条目。InitializeRegistryFilter 函数通过安装注册表过滤回调来拦截和修改注册表操作。
它使用 CmRegisterCallbackExAPI 注册一个回调,其原理与文件相同。如果注册表键值或值位于隐藏注册表列表中,回调函数将返回状态STATUS_NOT_FOUND 。
初始化设备
InitializeDevice 函数完成所需的驱动程序初始化,并设置一个 IOCTL communication以便用户界面应用程序可以直接与之通信
下表列出了驱动程序处理的每条 IOCTL 命令。
| IOCTL 命令 | 描述 |
|---|---|
HID_IOCTL_SET_DRIVER_STATE | 通过设置全局状态标志,软启动/禁用 rootkit 功能。 |
HID_IOCTL_GET_DRIVER_STATE | 读取 rootkit 的当前状态(启用/禁用)。 |
HID_IOCTL_ADD_HIDDEN_OBJECT | 添加新规则以隐藏特定文件、目录、注册表键值或值。 |
HID_IOCTL_REMOVE_HIDDEN_OBJECT | 根据唯一 ID 删除一条隐藏规则。 |
HID_IOCTL_REMOVE_ALL_HIDDEN_OBJECTS | 删除特定对象类型(注册表键值/值、文件、目录)的所有隐藏对象。 |
HID_IOCTL_ADD_OBJECT | 添加新规则,根据进程的图像路径自动隐藏、保护或排除进程。 |
HID_IOCTL_GET_OBJECT_STATE | 通过 PID 查询特定运行进程的当前状态(隐藏、保护或排除)。 |
HID_IOCTL_SET_OBJECT_STATE | 该命令修改特定运行进程的状态(隐藏、保护或排除),该进程由其 PID 标识。 |
HID_IOCTL_REMOVE_OBJECT | 通过唯一 ID 删除单个进程规则(隐藏、保护或排除)。 |
HID_IOCTL_REMOVE_ALL_OBJECTS | 此命令将清除特定类型的所有进程状态和图像规则。 |
初始化隐身模式
成功设置配置、进程回调和文件系统过滤器后,rootkit 执行最后的初始化例程:InitializeStealthMode 。如果启用配置标志Kbj_YinshenMode ,它将使用上述相同技术隐藏与 rootkit 相关的所有人工制品,包括注册表键值、.sys 文件和其他相关组件。
代码变化
虽然该恶意软件在很大程度上基于HIDDENDRIVER 源代码,但我们在分析中发现了一些细微的改动。下文将对我们观察到的显著代码差异进行细分。
IsProcessExcluded 函数中的原始代码始终将系统进程(PID 4)排除在 rootkit 操作之外。不过,如截图所示,恶意 rootkit 有一个针对其他进程名称的排除列表。
原始代码过滤系统信息(包括文件、目录和注册表)的回调使用IsDriverEnabled 函数来验证驱动程序功能是否启用。不过,所观察到的 rootkit 针对使用图像名称劫持的进程引入了额外的自动白名单检查,这与用户态应用程序相对应。
RMM 使用情况
GotoHTTP 工具是一个合法的远程监控和管理 (RMM) 应用程序,由威胁行为者部署,以便更轻松地访问被入侵的 IIS 服务器。它的 "浏览器到客户端 "架构允许攻击者通过通用网络端口(80/443 )从任何标准网络浏览器控制服务器,通过 GotoHTTP 自己的平台路由所有流量,防止直接网络连接到攻击者自己的基础设施。
RMM 在网络杀伤链的多个环节和各种威胁行为体中的使用日益普及。大多数反恶意软件供应商并不认为它们是孤立的恶意软件,因此不会直接阻止它们。RMM C2 也只流向合法的 RMM 提供商网站,因此对基于网络的保护和监控具有相同的动态性。
最佳的保护机制是阻止大量当前激活的 RMM,只允许使用企业首选的 RMM。然而,只有具备正确的技术知识、防御工具、成熟的组织政策和跨部门协调的企业才能采用这种模式。
IIS 模块分析
据观察,该威胁行为者同时部署了 32 位和 64 位版本的 TOLLBOOTH(恶意 IIS 模块)。此前,Ahnlab和安全研究员@Azaka 已经讨论过 TOLLBOOTH。该恶意软件的一些主要功能包括搜索引擎优化隐形、管理通道和可公开访问的 Webhell。我们发现本机版本和 .NET 托管版本都在野外部署。
恶意软件配置结构
TOLLBOOTH 从hxxps://c[.]cseo99[.]com/config/<victim_HTTP_host_value>.json, 动态获取配置,每个受害者的 JSON 配置文件由威胁行为体的基础架构创建。不过,hxxps://c[.]cseo99[.]com/config/127.0.0.1.json 做出了回应,显示缺乏反分析检查--允许我们检索配置文件副本进行分析。我们可以在GitHub 的 Gist 中查看它,并将酌情参考某些字段的使用方法。
对于本地模块,配置文件和其他临时缓存文件都经过 Gzip 压缩,并存储在本地硬编码路径C:\\Windows\\Temp\\_FAB234CD3-09434-8898D-BFFC-4E23123DF2C\\ 上。对于托管模块,这些信息通过 AES 加密,密钥为YourSecretKey123 ,IV 为0123456789ABCDEF ,经过 Gzip 压缩,存储在C:\\Windows\\Temp\\AcpLogs\\ 。
网络外壳
TOLLBOOTH 在/mywebdll 路径上公开了一个 webhell,要求输入hack123456! 的密码才能上传文件和执行命令。表单提交会向/scjg 端点发送POST 请求。
密码在二进制文件中进行了硬编码,TOLLBOOTH 原生版本的v1.6.0 和v1.6.1 中都有此 webhell 功能。
文件上传功能包含一个错误,该错误源于它对multipart/form-data 字段的顺序解析。标准 HTML 表格的结构是,文件输入字段出现在目录输入字段之前。处理请求部分的服务器会尝试在目标目录之前处理文件数据,从而产生依赖冲突,导致标准上传失败。通过手动重新排序multipart/form-data ,仍然可以成功上传文件。
管理渠道
TOLLBOOTH 为 C2 运营商的管理/调试目的提供了一些额外的端点。只有将用户代理设置为以下其中之一,才能访问它们(尽管可以配置):
Hijackbot
gooqlebot
Googlebot/2.;
Googlébot
Googlêbot
Googlebót;
Googlebôt;
Googlebõt;
Googlèbot;
Googlëbot;
Binqbot
bingbot/2.;
Bíngbot
Bìngbot
Bîngbot
Bïngbot
Bingbót;
Bingbôt;
Bingbõt;
/health 端点提供了一种快速评估模块健康状况的方法,它返回访问存储在c[.]cseo99[.]com 的配置的文件名、磁盘空间信息、模块安装路径和 TOLLBOOTH 版本。
/debug 端点提供更多详细信息,包括配置摘要、缓存目录、HTTP 请求信息等。
解析后的配置可通过/conf 访问。
/clean 端点允许操作员通过删除本地存储的配置文件(clean?type=conf )来清除当前配置,以便在受害者服务器上进行更新;清除恶意软件使用的任何其他临时缓存(clean?type=conf );或者同时清除C:\\Windows\\Temp\\_FAB234CD3-09434-8898D-BFFC-4E23123DF2C\\ 路径中的所有内容(clean?type=all )。
搜索引擎伪装
TOLLBOOTH 的主要目标是搜索引擎优化隐形,即向搜索引擎爬虫展示经过关键字优化的内容,同时隐藏这些内容,不让用户随意浏览,从而提高网页的搜索排名。一旦人类访客点击了增强搜索结果中的链接,恶意软件就会将其重定向到恶意或欺诈页面。与直接网络钓鱼等其他方法相比,这种策略是增加恶意网页流量的有效方法,因为用户更信任他们请求的搜索引擎结果,而不是未经请求的电子邮件。
TOLLBOOTH 通过检查用户代理(User Agent)和引用头(Referer headers)中的配置值来区分机器人和访客。
本地模块和托管模块的实现方式几乎完全相同。唯一的区别是,本地模块v1.6.0 和v1.6.1 根据seoGroupRefererMatchRules 清单检查用户代理和引用者,而 .NET 模块v1.6.1 根据seoGroupUaMatchRules 清单检查用户代理,根据seoGroupRefererMatchRules 清单检查引用者。
根据当前配置,seoGroupUaMatchRules 和seoGroupRefererMatchRules 的值分别为googlebot 和google 。GoogleBot 爬虫会有 User Agent 匹配,但没有 Referer 匹配,而人类访客会有 Referer 匹配,但没有 User Agent 匹配。从包含bing 和yahoo 的后备列表来看,这些搜索引擎过去也曾是攻击目标。
下面的代码片段负责创建一个页面,页面上充斥着搜索引擎爬虫会看到的关键字链接。
该模块分两个阶段构建链接农场。首先,为建立内部链接密度,它会从affLinkMainWordSeoResArr 配置字段中定义的资源 URI 中检索随机关键词列表。对于每个关键词,它都会生成一个"本地链接" ,指向同一受损网站上的另一个搜索引擎优化页面。接下来,它通过从affLinkSeoResArr 字段检索"关联链接资源" 来构建外部网络。这些资源是指向其他外部域 SEO 页面的 URI 列表,这些外部域也感染了 TOLLBOOTH。在配置中,URI 看起来像hxxps://f[.]fseo99[.]com/<date>/<md5_file_hash><.txt/.html> 。然后,该模块会创建从当前网站到这些其他受害者的超链接。这种被称为 "链接养殖"的技术旨在人为提高整个受攻击网站网络的搜索引擎排名。
下面是爬虫机器人访问感染了 TOLLBOOTH 的网站服务器的登陆页面时看到的示例。
SEO 页面的 URL 路径前缀包含seoGroupUrlMatchRules 配置字段中的单词或短语。针对访客的网站重定向逻辑中也会提到这一点。目前有
stockinvestsummarydataminingmarket-outlookbullish-onnews-overviewnews-volatilityvideo/app/blank/
搜索引擎优化页面的模板和内容也可以从外部从配置中类似hxxps://f[.]fseo99[.]com/<date>/<md5_file_hash><.txt/.html> 的 URI 获取。下面是一个搜索引擎优化页面的示例:
在用户重定向逻辑方面,该模块首先收集访问者的指纹,包括其 IP 地址、用户代理、推荐人和搜索引擎优化页面的目标关键词。然后,它通过 POST 请求将这些信息发送到hxxps://api[.]aseo99[.]com/client/landpage 。如果请求成功,服务器会响应一个 JSON 对象,其中包含一个特定的landpageUrl ,成为重定向的目的地。
如果通信因任何原因失败,TOLLBOOTH 会重新创建一个指向相同 C2 端点的新 URL,但会将访问者的信息直接编码为 URL 中的 GET 参数。最后,所选 URL(无论是从成功的 C2 响应还是从回退中选择的 URL)会被嵌入到 JavaScript 代码段 (window.location.href) 中,并发送到受害者的浏览器,迫使其立即重定向。
网页劫持者
对于本地模块,如果 URI 路径包含xlb ,TOLLBOOTH 将以包含脚本标签的自定义加载器页面作出响应。该脚本的 src 属性指向动态生成的 URLmlxya[.]oss-accelerate[.]aliyuncs[.]com/<12_random_alphanumeric_characters> ,该 URL 用于检索经过混淆处理的下一阶段 JavaScript 有效载荷。
经过解混淆处理的有效载荷似乎是一个页面替换工具,可根据 URL 中的特定触发关键字(如xlbh,mxlb )执行。一旦触发,它就会在asf-sikkeiyjga[.]cn-shenzhen[.]fcapp[.]run/index/index?href= 或ask-bdtj-selohjszlw[.]cn-shenzhen[.]fcapp[.]run/index/index?key= 与攻击者控制的其中一个端点联系,并将当前页面的 URL 作为 Base64 编码参数附加上去,以识别被攻击的网站。然后,脚本会使用document.write() 完全清除当前页面的 DOM,代之以服务器的响应。虽然在撰写本文时无法检索到最终有效载荷,但这种技术旨在注入攻击者控制的内容,最常见的是恶意 HTML 页面或指向另一个恶意网站的 JS 重定向。
活动目标
在对 TOLLBOOTH 及其相关 Webhell 进行分析时,我们发现了通过主动和半被动收集方法识别其他受害者的多种机制。
随后,我们与 Validin 的 @SreekarMad 合作,利用他的专业知识和他们的扫描基础设施,努力开发出一份更全面的受害者名单。
截至发稿时, 571 IIS 服务器受害者已被确认感染了活跃的 TOLLBOOTH 病毒。
这些服务器分布在全球各地(有一个主要例外,如下所述),并不适合任何整齐划一的行业垂直分类。由于这些原因,再加上行动规模庞大,我们相信受害者的选择是没有针对性的,而是利用自动扫描来识别重复使用公开列出的机器密钥的 IIS 服务器。
与 Validin 和 Texas A&M System Cybersecurity 的合作产生了大量有关其他 TOLLBOOTH 感染受害者的元数据。
也可能采用自动开发,但 TAMUS 网络安全公司注意到,开发后的活动似乎是交互式的。
Validin 发现了其他通过 SEO 耕作链接配置链接的潜在感染域,但在检查 webshell 界面时,发现有些域无法访问。在对这些服务器进行更深入的人工调查后,我们确定这些服务器确实受到了 TOLLBOOTH 的感染,但不是服务器所有者修复了问题,就是攻击者自己退出了。
随后的扫描发现,许多相同的服务器被重新感染。我们认为这表明补救措施没有完成。一个合理的解释是,仅仅消除威胁并不能关闭机器密钥重复使用留下的漏洞。因此,省略这最后一步的受害者很可能会通过同样的机制再次感染。更多详情,请参阅下文 "补救 REF3927 "部分。
地理
受害者的地理分布明显不包括中国境内的任何服务器。有一台服务器被发现位于香港,但托管的域名是.co.uk 。这种可能的地理围栏与其他犯罪威胁的行为模式相一致,即他们实施机制,确保不以本国的系统为目标。这降低了他们被起诉的风险,因为这些国家的政府往往对针对外国人的犯罪活动视而不见,甚至完全认可。
钻石模型
Elastic Security Labs 利用钻石模型来描述对手、能力、基础设施和入侵受害者之间的高层关系。虽然钻石模型最常用于单个入侵事件,并利用活动线程(第 8 节)来创建事件之间的关系,但以敌方为中心(第 7.1.4 节)的钻石模型也可以创建事件之间的关系。这种方法允许使用单一钻石。
补救 REF3927
对感染本身的补救可通过行业最佳实践来完成,如恢复到清洁状态、处理恶意软件和持久机制。然而,面对潜在的自动扫描和利用,重用机器密钥的漏洞仍然存在,无论哪个坏人想接管服务器,都会被利用。
因此,补救措施必须包括将机器密钥更换为正确生成的新密钥。
结论
REF3927 活动凸显了一个简单的配置错误(如使用公开暴露的机器密钥)是如何导致严重危害的。在此事件中,德克萨斯 A&M 大学系统网络安全部门和受影响的客户迅速采取了行动,对服务器进行了修复,但根据我们的研究,仍有其他受害者使用相同的技术成为攻击目标。
威胁行为者将开源工具、RMM 软件和恶意驱动程序有效地结合在一起,这在他们的行动中已被证明是成功的。公开暴露的 IIS 环境的管理员应审计其机器密钥配置,确保稳健的安全日志记录,并在潜在事件发生时利用Elastic Defend等端点检测解决方案。
检测逻辑
检测规则
预防规则
YARA 签名
Elastic Security 创建了以下 YARA 规则,以防止在 REF3927 中观察到的恶意软件:
REF3927 通过 MITRE ATT&CK
Elastic 使用MITRE ATT&CK框架来记录威胁针对企业网络使用的常见策略、技术和程序。
战术
策略代表了技术或子技术的原因。 这是对手的战术目标:采取行动的原因。
技术
技术代表对手如何通过采取行动来实现战术目标。
- Exploit Public-Facing Application
- 服务器软件组件:IIS 组件
- 操作系统凭据转储
- Hide Artifacts: Hidden Files and Directories
- 来自本地系统的数据
- Rootkit
- 有效帐户
观察结果
本研究讨论了以下观测指标。
| 可观测 | 类型 | 名称 | 参考 |
|---|---|---|---|
913431f1d36ee843886bb052bfc89c0e5db903c673b5e6894c49aabc19f1e2fc | SHA-256 | WingtbCLI.exe | 希登克里 |
f9dd0b57a5c133ca0c4cab3cca1ac8debdc4a798b452167a1e5af78653af00c1 | SHA-256 | Winkbj.sys | HIDDENDRIVER |
c1ca053e3c346513bac332b5740848ed9c496895201abc734f2de131ec1b9fb2 | SHA-256 | caches.dll | 电话薄 |
c348996e27fc14e3dce8a2a476d22e52c6b97bf24dd9ed165890caf88154edd2 | SHA-256 | scripts.dll | 电话薄 |
82b7f077021df9dc2cf1db802ed48e0dec8f6fa39a34e3f2ade2f0b63a1b5788 | SHA-256 | scripts.dll | 电话薄 |
bd2de6ca6c561cec1c1c525e7853f6f73bf6f2406198cd104ecb2ad00859f7d3 | SHA-256 | caches.dll | 电话薄 |
915441b7d7ddb7d885ecfe75b11eed512079b49875fc288cd65b023ce1e05964 | SHA-256 | CustomIISModule.dll | 电话薄 |
c[.]cseo99[.]com | 域名 | TOLLBOOTH 配置服务器 | |
f[.]fseo99[.]com | 域名 | TOLLBOOTH SEO 农业配置服务器 | |
api[.]aseo99[.]com | 域名 | TOLLBOOTH 爬虫报告& 页面重定向 API | |
mlxya[.]oss-accelerate.aliyuncs[.]com | 域名 | TOLLBOOTH 网页劫持者有效载荷托管服务器 | |
asf-sikkeiyjga[.]cn-shenzhen[.]fcapp.run | 域名 | TOLLBOOTH 网页劫持者内容获取服务器 | |
ask-bdtj-selohjszlw[.]cn-shenzhen[.]fcapp[.]run | 域名 | TOLLBOOTH 网页劫持者内容获取服务器 | |
bae5a7722814948fbba197e9b0f8ec5a6fe8328c7078c3adcca0022a533a84fe | SHA-256 | 1.aspx | 哥斯拉叉式 webhell(VirusTotal 中的类似样本) |
230b84398e873938bbcc7e4a1a358bde4345385d58eb45c1726cee22028026e9 | SHA-256 | GotoHTTP.exe | GotoHTTP |
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101213 Opera/9.80 (Windows NT 6.1; U; zh-tw) Presto/2.7.62 Version/11.01 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 | 用户代理 | 在通过 IIS ViewState 注入进行攻击时观察到的用户代理 |
参考资料
上述研究参考了以下内容:
- https://www.microsoft.com/en-us/security/blog/2025/02/06/code-injection-attacks-using-publicly-disclosed-asp-net-machine-keys/
- https://asec.ahnlab.com/en/87804/
- https://unit42.paloaltonetworks.com/initial-access-broker-exploits-leaked-machine-keys/
- https://blog.blacklanternsecurity.com/p/aspnet-cryptography-for-pentesters
- https://github.com/ekkoo-z/Z-Godzilla_ekp
- https://x.com/AzakaSekai_/status/1969294757978652947
增编
HarfangLab 在本帖发布的同一天发布了他们对这一威胁的研究草案。其中还有更多的补充见解:
