概括
9 月底,GTSC 报告了 8 月份发生的对关键基础设施的攻击。在调查过程中,专家发现此次攻击利用了Microsoft Exchange Server中的两个0-day漏洞。第一个后来被确定为 CVE-2022-41040,是一个服务器端请求伪造 (SSRF) 漏洞,允许经过身份验证的攻击者远程触发下一个漏洞 CVE-2022-41082。反过来,当攻击者可以访问 MS Exchange PowerShell 时,第二个漏洞允许远程代码执行 (RCE)。正如 GTSC 报告中所指出的,这两个漏洞在野外被一起利用,在易受攻击的服务器上创建后门,并执行横向移动。
在 CVE-2022-41040 和 CVE-2022-41082 被发现后,Microsoft 提供了缓解指南,随后进行了一些更新。据该公司称,这些漏洞影响了 MS Exchange Server 2013、MS Exchange Server 2016 和 MS Exchange Server 2019。
2022 年 10 月 11 日,Microsoft 发布了补丁以覆盖这些漏洞,作为其补丁星期二更新的一部分。之后,在 11 月 17 日,一名安全研究人员发布了第一个工作 PoC。这是一个接受以下参数的 Python 脚本:用户、密码、邮件地址和要在受害者主机上执行的命令行。
网络安全社区将这对漏洞称为ProxyNotShell。该名称指的是最近的 ProxyShell 攻击链,其中包含 2021 年披露的 Exchange 服务器中的类似漏洞。ProxyShell 是一组三个漏洞:CVE-2021-34473、CVE-2021-34523 和 CVE-2021-31207。攻击者使用它们创建 Web shell 并在易受攻击的 Microsoft Exchange 服务器上执行任意代码。
ProxyNotShell 利用细节
此攻击的第一步是利用CVE-2022-41040访问 PowerShell API 端点。在 Exchange自动发现机制中使用不充分的输入数据过滤,具有已知注册帐户登录名和密码组合的攻击者可以访问 Exchange Server API 的特权端点(https://% exchange server domain% /PowerShell)。此访问允许攻击者在服务器计算机上的 Exchange 环境中执行 PowerShell 命令,并通过 XML SOAP 协议将它们传递到有效负载中。
在下一步中,攻击者必须通过WSMAN 协议访问基于 Web 的企业管理 (WBEM)。攻击者在易受攻击的系统上启动 shell,以通过Windows 远程管理 (PsRemoting)进一步执行 PowerShell 脚本。
带有 XML SOAP 的 HTTP POST 请求以启动 PsRemoting
启动外壳后,攻击者应立即延长其生命周期;否则,shell 将被关闭,因为它的过期时间默认太短。这是在 Exchange Server 上进一步执行命令所必需的。为此,攻击者立即通过启用保持活动选项的WSMAN发送特殊请求。
使用 XML SOAP 的 HTTP POST 请求以延长 shell 的生命周期
之后,攻击者利用了第二个漏洞——CVE-2022-41082。通过使用 PowerShell Remoting,攻击者发送创建地址簿的请求,将编码和序列化的数据与特殊负载作为参数传递。在已发布的 PoC 中,此编码数据包含一个名为System.UnitySerializationHolder的小工具,它会生成System.Windows.Markup.XamlReader类的对象。此类处理来自负载的 XAML 数据,该负载创建System.Diagnostics类的新对象并包含用于在目标系统上打开新进程的方法调用。在已发布的 PoC 中,此进程为calc.exe。
带有 XML SOAP 的 HTTP POST 请求启动新进程
执行 calc.exe 进程的主要负载部分