本系列文章讨论如何利用Windows Server Update Services(WSUS)进行攻击,这是第二篇文章。
Part 1里,我们在Windows 10上创建工具PyWSUS,成功复现了2015 WSUS攻击,同时,我们认为该模块可以用于其他目的。
用WSUS进行部署,用户可以为其会话设置本地代理。如果WSUSpect-proxy模块只用来修改部分流量的MITM代理,同时我们也有代理本地流量的能力,那么我们就能在本地运行WSUSpect-proxy,以System权限在目标上运行代码。
CVE-2020-1013的影响
Windows 10的所有版本,Windows 7 SP1,Windows 8.1,Windows Server 2008,Windows Server 2012,Windows Server 2016,Windows Server 2019和Windows Server 1903/1909/2004(配置为使用HTTP或HTTPS WSUS服务器)容易受到从低权限帐户升级到“ NT AUTHORITY \ SYSTEM”的本地权限的攻击。
Microsoft在此安全更新指南中跟踪哪些更新解决了该问题。你可以根据自己的Windows版本申请更新。例如,KB4571756追踪最新的Windows 10,KB4577041可以解决Windows 10 1709。注意,CVE的描述是错误的,但确认是针对我们所披露的错误。过段时间它可能就会修复。
技术分析
调试Windows 10版本的WSUSpect-proxy时,可以把IE浏览器的代理设置为通过我们控制的主机转发Windows Update流量。成功将WSUSpect-proxy模块移植到Windows 10计算机上后,我们认为这种行为也许可以用于其他目的,例如本地权限升级。
2016年,Steve Breen记录了一个叫“ Hot Potato”的漏洞。攻击者可以利用这个漏洞来滥用Windows系统服务,进行HTTP到SMB的中继并提升权限。因为目标服务(即使它们以“ NT AUTHORITY \ SYSTEM”帐户运行)正在使用当前用户的代理设置,而不是系统的代理设置。
查看有关这个漏洞的文章时,会出现以下声明:
在Windows的最新版本中,Windows Update不再遵守 “ Internet选项”里设置的代理设置,也不会检查WPAD,而是用“ netsh winhttp proxy…”控制Windows Update的代理设置。
在WSUS上,结合该声明和Microsoft的文档,以及不同Windows版本的的行为不同,导致在研究WSUS期间引起了许多争论,因为它和我们的观察结果相悖。
如果我们有权修改本地用户代理, Windows Updates用IE浏览器里配置的代理,那么我们就可以在本地运行PyWSUS来拦截自己的流量,并以资产上提升权限的用户身份运行代码。
此外,由于WSUS服务使用当前用户的设置,所以它还会用到证书存储。如果给WSUS主机名生成一个自签名证书,把这个证书添加到当前用户的证书存储中,就可以拦截HTTP和HTTPS WSUS的流量。WSUS不需要类似HSTS的机制来对证书实施首次使用信任类型验证。如果提供的证书受用户信任且具有正确的主机名,那么服务接受该证书。
这个漏洞在5月份的时候就报告给了Microsoft,并命名为CVE-2020-1013。我们开发了一种工具来自动利用这个漏洞,这在下一部分会介绍到。
WSuspicious简介
WSuspicious是一个C#程序,可以代替用户本地代理,在拦截WSUS流量注入恶意有效负荷的同时强制计算机查找更新。如前所述,这能让低权限用户在计算机上以“ NT AUTHORITY \ System”的身份运行代码。
该工具已在Windows 10计算机(1809和1909)上进行了测试。该模块要在特定的条件才能工作:用户能设置其本地HTTP和HTTPS代理,还能执行侦听TCP端口的程序。
根据@msftsecresponse的政策,我们需要等待30天才能发布该工具。注意,不要因为工具的延迟发布就推迟修补这个漏洞。
演示
工具制作完成后,我们会在实验室测试各种环境和有效载荷。最简单的演示如下。低权限用户用WSuspicious模块和PsExec来运行net localgroup Administrators {username} /add命令,提升其权限。
有效载荷的选择和OpSec注意事项
截至目前为止,已知哪几种类型的有效载荷可以和WSUS服务一起使用。出于许可原因,WSuspicious触发的二进制文件没有嵌入到工具中,必须由用户提供。虽然可以更改代码,直接把可执行文件捆绑到二进制文件中,在内存中运行整个程序,但这违反了Sysinternals的许可,不建议这样做。
执行
PsExec是Sysinternals二进制文件,除了其他功能外,它还可以在远程计算机上执行命令。它是一个功能强大的工具,但在IT管理团队通常不使用的环境中执行它时,通常会被检测到。
可以一起用PsExec和WSuspicious,如下所示:
WSuspicious.exe /exe:"./PsExec64.exe" /command:" -accepteula -s -d cmd /c "echo 1 > C:\\wsuspicious.txt" /autoinstall
检测
若要捕获这种类型的有效载荷,需要专注于工具行为产生的事件。该工具会连接到本地网络共享,上传服务二进制文件(Windows事件5140和sysmon事件11),在计算机上创建一个新服务,指向刚上传的二进制文件(Windows事件4697),然后启动该服务,依次启动已上传的二进制文件(Windows事件4688或sysmon事件1)
可以用某些标记来更改服务和二进制文件的名称。因此,标记PSExecSVC服务名称不适合用来捕获有效载荷。
如果在日常操作中不常用此工具,检测HKEY_USERS\{SID}\SOFTWARE\Sysinternals\PsExec\EulaAccepted注册表项的创建也有助于检测该工具。
BgInfo
BgInfo是另一个Sysinternal二进制文件,可以和WSuspicious一起使用,能运行Visual Basic脚本(VBS),在计算机的墙纸上显示信息。但是,VBS文件的内容可以用来执行恶意命令。
可以一起用BgInfo和WSuspicious,如下所示:
WSuspicious.exe /exe:"./BgInfo.exe" /command:" C:\Users\lowpriv\config.bgi /nolicprompt /timer:0" /autoinstall
检测
如果公司内部没用过BgInfo,只要检测BgInfo启动(Windows事件4688或sysmon事件1)。如果某些公司用了BgInfo,要确保低权限用户无法编辑BgInfo启动的文件,检测包含意外文件的BgInfo的启动。
tttracer
在研究过程中,我们试图找到更多能和WSuspicious一起用的二进制文件。我们注意到的是二进制文件必须满足多个条件。首先,二进制文件必须由Microsoft签名。其次,它必须独立运行,不能有任何中断。如果它要求某些用户交互,该过程挂起,Windows Update停止运行。但如果需要dll运行程序,那很有可能失败。
知道了这一点,我们从C:\Windows\System32文件夹中列出了多个二进制文件,并尝试了其中一些,但多数都失败了。
但是,Windows Updates服务允许安装该程序,所以tttracer二进制文件可以用上了。触发有效载荷后,Windows Updates服务挂起“正在安装”的状态。
用WMI进行调试,可以看到该程序是由Windows Updates服务用指定的有效载荷启动的。
C:\WINDOWS\system32>wmic process where name="tttracer.exe" get name,commandLine
如果尝试在Windows Update文件夹运行tttracer二进制文件,系统会提示我们接受最终用户许可协议。该程序停止执行,直到被接受为止, Windows Updates服务也跟着停止。若用户接受EULA,程序会设置一个注册表项,避免将来再次提示用户并开始执行有效载荷。
C:\WINDOWS\system32>C:\WINDOWS\SoftwareDistribution\Download\Install\tttracer.exe
我们当前的结论是,如果计算机可以在HKLM:\SOFTWARE\Microsoft\TTD\EULASigned设置注册表项,绕过某些检测用例,那么就能在这上面使用该有效载荷。如果它要滥用特定条件,和PsExec或BGInfo有效载荷比起来,它对攻击者就没多大用处,但它可以用其他文档较少的有效载荷来避免检测。
要进一步研究,看看是否存在一种动态接受EULA的方法,能让这个有效载荷在任何条件下都能正常工作。
进一步完善
这个漏洞影响了HTTPS部署,但Microsoft已经纠正,我们仍然建议配置WSUS,用HTTPS协议,因为基于网络的漏洞仍然存在。
另一保护措施是使用Windows Components > Internet Explorer > Disable changing proxy settings GPO防止用户设置其本地代理。
时间线
2020年5月6日–在MSRC门户把该漏洞报告给Microsoft。
2020年5月6日–为该漏洞分配了一个ticket。
2020年6月15日–漏洞确认。测试团队沟通补丁日期。
2020年6月26日– Windows Insider Preview Bounty Program授予20,000.00美元的赏金。
2020年9月8日– Microsoft发行该漏洞的补丁程序。
结论
Microsoft的反应非常积极,许多漏洞披露程序可以将它们建立的披露流程和平台用作示例。禁用基于HTTP的WSUS,消除相关风险,是缓解这个漏洞的正确方法。我们的下一篇文章将探索把WSUS与其他协议结合使用,来实现新型攻击。敬请关注!
特别感谢Mathieu Novis,Julien Pineault,Romain Carnus,Olivier Bilodeau和Laurent Desaulniers对WSUS所作的研究以及对WSUSpicious、文章攥写和披露过程的协助。
木星安全实验室(MxLab),由中国网安·广州三零卫士成立,汇聚国内多名安全专家和反间谍专家组建而成,深耕工控安全、IoT安全、红队评估、反间谍、数据保护、APT分析等高级安全领域,木星安全实验室坚持在反间谍和业务安全的领域进行探索和研究。