在过去的一年里,一个复杂的、可能是政府资助的威胁行为者一直在利用面向公众的 ASP.NET 应用程序中的反序列化缺陷来部署无文件恶意软件,从而危害主要的公共和私人组织。该黑客组织被事件响应公司 Sygnia 的研究人员称为 Praying Mantis 或 TG1021,通过使用专为 Internet 信息服务 (IIS) Web 服务器构建的易失性和自定义恶意软件工具集执行凭据收集、侦察,将重点放在检测规避上和横向运动。

Sygnia 研究人员在一份详细报告中说:“活动的性质和一般的作案手法表明 TG1021 是一位经验丰富的隐身演员,高度了解OPSEC(运营安全)。” “TG1021 使用的恶意软件通过主动干扰日志记录机制、成功规避商业 EDR 以及静默等待传入连接,而不是连接回 C2 通道并持续产生流量,显示了避免检测的重大努力。此外,威胁演员在使用它们后主动删除了所有磁盘驻留工具,有效地放弃了持久性以换取隐身。”

新旧反序列化漏洞利用

在编程中,序列化是将数据转换为字节流的过程,通常通过网络传输。反序列化是该过程的逆转,就像软件中的大多数数据解析操作一样,如果用户控制输入,它可能成为漏洞的来源。不安全的反序列化缺陷多年来一直困扰着 Java 应用程序,但 Java 并不是唯一一种反序列化常见的编程语言。

Praying Mantis 利用的漏洞针对 ASP.NET 中的反序列化实现,ASP.NET 是一种用于开发托管在 Windows IIS Web 服务器上的 Web 应用程序的开源框架。ASP.NET 有一种称为 VIEWSTATE 的机制,框架使用它来存储在 POST 请求期间发送到客户端时网页的状态和控件。它存储为名为 _VIEWSTATE 的隐藏输入字段。当客户端执行 POST 操作并将页面发送回服务器时,VIEWSTATE 被反序列化和验证。ASP.NET 提供了一些安全性和完整性检查机制来确保序列化数据有效,但它们的正确使用归结为开发人员实现。

有人看到 Praying Mantis 利用了一个名为 Checkbox 的 ASP.NET 应用程序中的不安全反序列化导致的远程代码执行 (RCE) 漏洞,该应用程序允许网站所有者实施用户调查。在该组织发起攻击时,该漏洞处于零日状态,并影响了使用 VIEWSTATE 功能自定义实现的 Checkbox 版本 6 及更早版本。尽管 Checkbox 版本 7 自 2019 年开始可用且不受影响,但对 Checkbox 版本 6 的官方支持直到 7 月 1 日才结束。

“在 7.0 版之前,Checkbox Survey 通过接受一个 _VSTATE 参数来实现自己的 VIEWSTATE 功能,然后它使用 LosFormatter 反序列化,”CERT/CC 的分析师在 5 月份的一份咨询中说。“由于这些数据是由 Checkbox Survey 代码手动处理的,因此服务器上的 ASP.NET VIEWSTATE 消息身份验证代码 (MAC) 设置被忽略。没有 MAC,攻击者可以创建将被反序列化的任意数据,从而导致任意代码执行.”

Praying Mantis 似乎对一般的反序列化缺陷有很好的理解,以多种方式利用该机制进行横向移动和持久化。例如,即使新版本的 ASP.NET 支持 VIEWSTATE 完整性检查和加密,如果加密和验证密钥被盗或泄露,它们也可用于重新感染服务器或感染同一集群中托管同一应用程序的其他服务器因为密钥是共享的。

“在 Sygnia 的一项调查中,TG1021 利用被盗的解密和验证密钥来利用 IIS Web 服务器,”研究人员说。“VIEWSTATE 反序列化漏洞利用的流程几乎与上面解释的 VSTATE 漏洞相同,只是调整了对 VIEWSTATE 数据进行加密和签名,而不是对其进行压缩。”

该小组还利用了依赖于序列化的会话存储机制。ASP.NET 允许应用程序将用户会话作为序列化对象存储在 MSSQL 数据库中,然后为它们分配唯一的 cookie。当用户的浏览器再次访问应用程序并保存了这些 cookie 之一时,应用程序将从数据库中加载相应的会话对象并将其反序列化。

攻击者利用此功能进行横向移动,方法是使用对先前漏洞之一破坏的 IIS Web 服务器的访问权限,以生成恶意会话对象和关联的 cookie,并将其存储在 Microsoft SQL 数据库中。然后,他们将请求发送到属于同一基础结构并使用同一数据库的其他 IIS 服务器,并在请求中包含恶意 cookie。这迫使在这些服务器上运行的应用程序实例从数据库加载恶意制作的会话对象并将其反序列化,从而导致 RCE。

还观察到 Praying Mantis 利用其他应用程序中的反序列化漏洞,例如 CVE-2019-18935,这是一个 RCE 缺陷,源于 JSON 解析中的不安全反序列化,并影响名为 Telerik UI for ASP.NET AJAX 的产品。Telerik 是一套广泛用于 Web 应用程序的用户界面组件。该组织还使用了一个针对影响 Telerik 的较旧的任意文件上传漏洞 (CVE-2017-11317) 的漏洞。

为 IIS 量身定制的恶意软件框架

黑客利用这些 RCE 漏洞反射性地将恶意 DLL 加载到易受攻击的 Web 服务器的内存中。然后,这个 DLL 反射性地加载了一个恶意软件组件,研究人员将其称为 NodeIISWeb 到 w3wp.exe 进程中。这是 IIS 工作进程,用于处理发送到已配置 IIS 应用程序池的 IIS Web 服务器的 Web 请求。

反射加载是一种将恶意 DLL 注入现有进程并挂钩其功能的技术。这种技术的好处是某些 Windows 机制(例如在运行时将 DLL 注册为模块)被绕过,并且文件实际上并未写入磁盘。缺点是感染缺乏持久性。由于流氓 DLL 仅存在于 RAM 中,因此如果重新启动其父进程,它将消失。由于生产网络服务器的正常运行时间很长,因此隐藏妥协是一种有效的技术。

除了反射 DLL 加载器,Praying Mantis 有时还使用 web shell 来加载 NodeIISWeb。当该组织利用 CVE-2017-11317 等文件上传漏洞而不是基于反序列化的远程代码执行漏洞时,这种情况更为常见,因为 web shell 本质上是上传到服务器文件系统的恶意 web 脚本/应用程序,可通过 HTTP 远程访问。Praying Mantis 的 web shell 通常是短暂的,在部署 NodeIISWeb 后,该组织会删除它们。

NodeIISWeb 恶意软件与 IIS 输入验证功能挂钩,可以读取所有传入服务器的 HTTP 流量。这为攻击者提供了一种控制恶意软件的方法,通过向服务器发送带有恶意软件程序期望和监视的某些 cookie 名称和值的精心设计的请求。由于攻击者可以通过这种 HTTP 机制发送指令,因此 NodeIISWeb 不会生成到可能被流量监控解决方案检测到的命令和控制服务器的传出连接。

也就是说,恶意软件程序为 TCP、HTTP 和 SQL 实现了多种流量转发方法,使其能够作为代理或命令和控制通道本身,用于运行在同一网络内受感染服务器上的其他恶意软件实例,这些实例可能不是直接暴露在互联网上。它还可以执行 JScript 负载并加载扩展其功能的其他 DLL 模块。

NodeIISWeb 通常用于部署另一个名为 ExtDLL.dll 的自定义 Windows 后门,该后门可用于操作文件和目录、收集系统信息、加载和执行 DLL 并实施各种攻击技术,例如代码注入和令牌操作。该组件还挂钩并操纵系统上存在的各种安全功能以隐藏其活动,包括 AV 扫描功能、事件日志报告功能、.NET 代码信任检查和 PowerShell 相关的注册表项。

NodeIISWeb 和 ExtDLL.dll 加载的附加 DLL 模块之一称为 PSRunner.dll,它允许在主机上运行 PowerShell 脚本,而无需生成 PowerShell 进程。另一个称为 Forward.dll 并实现 HTTP 流量转发功能。PotatoEx.dll 是权限提升工具和 Active Directory 映射工具,E.dll 是生成自定义 HTTP 响应的组件,允许攻击者验证漏洞是否已在目标 IIS 服务器上成功执行。

Praying Mantis 利用其对受感染 IIS 服务器的访问权限来修改现有应用程序的登录页面,以捕获用户凭据并将其保存在单独的文件中,并部署公开可用的攻击性安全工具,包括直接加载到内存中而不留下痕迹的 SharpHound 和 PowerSploit盘。该组织还被发现使用泄露的域凭据通过 SMB 访问内部服务器上的共享文件夹。

螳螂检测与预防

由于其内存驻留恶意软件的易失性以及该组织对操作安全的关注,因此检测 Praying Mantis 的活动并不容易。Sygnia 研究人员建议修补 .NET 反序列化漏洞,搜索报告中发布的危害指标,使用旨在检测该组织工具的 YARA 规则扫描面向 Internet 的 IIS 服务器,并积极寻找 IIS 环境中的可疑活动。

验证 ASP.NET VIEWSTATE 的使用或相同机制的自定义实现(例如 Checkbox Survey 中的压缩 VSTATE)对于保护 ASP.NET 应用程序免受 VIEWSTATE 反序列化缺陷至关重要。IIS 配置中的 enableViewStateMac 变量应设置为“True”,而 aspnet:AllowInsecureDeserialization 变量应设置为“False”。注册表项 AspNetEnforceViewStateMac 应设置为“1”,并应小心处理加密和验证键。服务器应使用自动生成的密钥或 IIS 服务器上的机器密钥应定期轮换,以减少因密钥被盗或泄露而被滥用的可能性。

“如果您的 Web 应用程序使用 ASP.NET 会话状态,请确保只能从合法的网络位置访问数据库,”研究人员说。“尽可能在不同的 IIS 服务器/Web 应用程序之间分离会话状态 MSSQL 数据库,或者使用适当的最小 CRUD 权限创建不同的 SQL 用户。确保您的 .NET Web 应用程序以指定的应用程序池标识运行,并具有尽可能低的权限。这会为 TG1021 制造额外的障碍。”

除了 Sygnia 论文之外,澳大利亚政府网络安全中心 (ACSC) 去年发布了一份咨询报告,其中包含与 Sygnia 观察到的 Praying Mantis 活动部分重叠的妥协和攻击技术指标。发布该公告是为了回应当时 ACSC 所说的“一个老练的国家行为者持续针对澳大利亚政府和公司的行为”,这是“澳大利亚政府所观察到的针对澳大利亚机构的最重要、最协调的网络攻击”。