Windows 更新降级攻击复现与分析

最近,SafeBreach的安全研究员 Alon Leviev 在 Black Hat 2024 上揭示了两个漏洞CVE-2024-38202 和 CVE-2024-21302,可用于破坏 Windows 更新的完整性并重新引入数千个以前修复的漏洞,从而将修补后的系统重新变成 0day 漏洞的目标。这两个漏洞允许攻击者通过降级Windows更新,来重新引入数千个已经被修复的漏洞,从而将已经被完全修补过的Windows操作系统置于极度危险的安全风险中。

漏洞复现

为了深入Windows降级漏洞会造成地实际危害,我们对一台Windows 11靶机进行了攻击实验,实验过程参考了SafeBreach的安全研究员Alon Leviev在Black Hat 2024上展示的漏洞利用方法。

实验环境准备

靶机系统:Windows 11 消费者版本 23H2(2024年6月更新)x64,安装在VMware虚拟机中。

靶机版本

攻击工具:使用SafeBreach Labs开发的“Windows Downdate”工具,该工具提供了漏洞利用的概念验证(PoC)代码。

攻击过程

  1. 下载并运行PoC工具:以管理员权限运行“Windows Downdate”工具(POC程序),其会根据提供的配置XML文件,将系统组件降级到易受攻击的版本。此时我们将AFD驱动程序降级到CVE-2023-21768可攻击的版本。见图 2‑2 POC程序运行。

运行命令:windows_downdate.py –config-xml examples/CVE-2023-21768-AFD-Driver-EoP-Patch-Downgrade/Config.xml

POC程序运行

  • 重启系统:完成降级操作后,需要重启系统以使更改生效。重启后,系统报告已完全更新,但实际上关键组件已被降级。
  • 利用降级后的漏洞:需要重启,重启完成后运行cmd。切换到CVE-2023-21768利用程序目录,运行 whomai 可知目前是普通用户。找到当前 cmd 的pid,并运行相应的漏洞利用程序,指定要提升权限的进程为当前cmd进程。

运行命令:

tasklist | find “cmd.exe”

.\Windows_AFD_LPE_CVE-2023-21768.exe <pid>

利用漏洞CVE-2023-21768提权

  • 验证攻击效果:再次运行whoami命令,发现当前用户已从普通用户提升为system权限。

成功获取system权限

攻击结果与漏洞分析

通过此次实验,我们成功地利用Windows降级漏洞在Windows 11靶机上实现了权限提升,从普通用户权限提升为system权限。这表明黑客可以利用降级漏洞使完全修补的Windows 机器容易受到数千个过去漏洞的影响,将修复的漏洞变成0 Day漏洞,并使“完全修补”一词在世界上任何 Windows 机器上都毫无意义。

Windows 更新架构

Windows 更新架构包括一个更新客户端和一个更新服务器,它们通过 COM(Windows 上的进程间通信方法)进行通信。通常在客户端强制执行管理员权限,而在服务器端始终强制执行受信任的安装程序,这意味着 Windows 更新拥有的系统文件只能由受信任的安装程序访问。因此,即使是管理员和 NT SYSTEM 也无法直接修改系统文件。

Windows 更新架构图

Windows 更新流程包括以下步骤:

  1. 首先,客户端要求服务器执行其提供的更新文件夹中的更新。
  2. 服务器随后验证更新文件夹的完整性。
  3. 在验证之后,服务器在更新文件夹上运行以完成更新文件。这些文件被保存在一个由服务器控制的文件夹中,该文件夹对客户端不可访问。
  4. 服务器将操作列表保存到服务器控制的文件夹中,客户端无法访问。操作列表命名为 Pending.xml,其中包含要执行的操作更新。例如,它指定了哪些文件需要更新、源文件和目标文件等。
  5. 最后,当操作系统重启时,将操作动作列表,并在重启过程中执行更新操作。

其中第5步的更新是由受信任的安装程序在服务器端强制执行的,管理员想要提权到受信任安装程序权限会被 EDR(Endpoint Detection and Response) 阻止。因此想要代替更新服务器来完成更新是不可能的。

作者一开始的目标是更新文件夹中的差异文件。但是 manifest 里硬编码了更新文件的哈希值,而更改这个值会破坏 manifest 文件的签名(在 catalog 文件中)。

漏洞点

作者把目标放在了操作列表(pending.xml)的修改上,并发现了注册表一个名为PoqexecCmdline的有趣的 key,它包含了一个可以解析操作列表和操作列表路径的可执行程序。其路径为HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide\Configuration\PoqexecCmdline。

而且这个key不是由受信任的安装程序强制执行,意味着我们可以用管理员权限来修改添加这个key并修改其值。这个key的作用是:它标志着需要更新,受信任安装服务在检测到这个key后,会将其值作为命令执行,而这个命令可以用于解析操作列表及其路径,这意味着修改这个key也就完全控制了操作列表。

源代码中调用后就可以发现程序生成了一行完整的poqexec.exe命令并将其写为了这个key的值,其中pending_xml_path也由我们控制,其相应文件中内容就是我们之前运行的命令中–config-xml选项后指定的 xml 文件内容。

这个xml,即操作列表(pending.xml)提供创建文件、删除文件、移动文件、硬链接文件、创建注册表键和值、删除键和值等功能。例如,为了降级,可以使用硬链接文件操作,source 文件将替换 destination。将 destination 设置为要降级的目标文件,将 source 替换为降级后的文件就可以达到我们想要的效果。

攻击流程

攻击的主要思想就是修改操作列表。但是还需要经过一些验证/找到触发更新操作的方式,

主要流程如下:

  1. 将受信任安装服务设置为自启动,这样重启系统后会检查是否需要更新。
  2. 在注册表中添加PoqexecCmdline及相应的值,指定操作列表路径。
  3. 添加操作列表的标识符:标识符是一个动态数字,出于完整性目的,将它与操作列表的标识符进行比较。从代码中可以看到,在 xml 中设置的标识符要和在注册表中 PendingXmlIdentifier 的值一样。

先前,在执行 PoC 代码后,我们重启并完成了对另一个漏洞的攻击。
在这个过程中:

  1. Windows 更新机制中的受信任安装服务自启动。
  2. 检测到PoqexecCmdline,执行其中命令设置操作列表路径。
  3. 受信任安装程序根据我们构建的 xml 文件进行更新,导致文件被替换成低版本脆弱文件。
  4. 降级攻击完成。

由于这个过程被 Windows 更新机制接管,因此十分隐蔽。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇