【技术分享】CVE-2017-8625:使用自定义CHM文件绕过Windows 10的Device Guard

https://p3.ssl.qhimg.com/t01cb9d9d679a0a8073.png

译者:blueSky

预估稿费:160RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

Device Guard是什么?

Device Guard将 Windows 10 操作系统限制为仅运行由受信任的签署人签名的应用程序,该功能有助于抵御0day攻击,并且还能有效地应对多态病毒的挑战。它是硬件和软件安全功能的结合,当两者一起配置时,Windows将锁定设备,以使其只能运行受信任的应用程序。如果系统中的应用程序不受信任,则该应用程序将无法运行。在现实情况中,即使攻击者能够获取到Windows内核的控制权,由于设备保护能够对何时可以运行哪些可信任的应用程序具有严格的决策权,因此在计算机重新启动后,恶意软件运行的可能性也将大幅降低。


如何绕过Device Guard?

你可以通过自定义CHM文件来绕过Device Guard UMCI (用户模式代码完整性)并执行任意不可信的代码。

在过去6个月的时间里,出于兴趣的使然,我利用业余时间对如何绕过Device Guard进行了一些安全研究。在此期间,我很幸运地找到了另一个有效绕过设备保护 UMCI的方法,并将该安全漏洞报告给了微软安全应急响应中心(secure@microsoft.com)。

在与微软应急响应中心的安全研究人员进行沟通之后得知:在此之前,这个安全漏洞已经被另一个安全研究人员发现,不过令我十分兴奋的是,我上报的这个安全漏洞将以我的名字命名并被收录到CVE(公共漏洞库)中。微软应急响应中心的安全研究人员们并不知道另一位研究人员是谁,但是Matt Graeber知道:另一位研究员是马特•纳尔逊,他在之前就已经发现这个绕过Device Guard UMCI的安全漏洞了,这个家伙真的很厉害。

在这篇博文中,我将阐述我是如何发现这个安全漏洞的以及跟这个安全漏洞相关的一些PoC代码。由于我不是一个资深的逆向工程师,所以在这篇博文中,我将不会对微软针对该安全漏洞发布的补丁进行逆向分析,而是专注于阐述我是如何发现这个安全漏洞的。

对我来说,我经常在Windows系统以及system32文件夹中查找一些二进制文件来进行研究和分析,这样做的目的是希望可以发现一些新的、有趣的东西去研究和分析。果然,在某些文件夹中,我发现了一个名为hh.exe的二进制文件。接着,我在命令行里运行“hh.exe /?”这个命令,通过情况下,运行这条命令要么会得到一些关于该命令的帮助信息,要么就是一些错误信息。但是,当我在运行上述那条命令的时候,上述两种情况都没有发生,我得到了如下图所示的结果:

 http://p6.qhimg.com/t018251f9f868682e94.png

上面这张图片触发了我对hh.exe这个程序的好奇心,这个小技巧在最新的Windows 10操作系统中仍然适用,我猜我们如果需要在一个锁定的系统环境(终端服务器等)中打开一个资源管理器,我们可以通过运行“hh.exe c:”这条命令来做到这一点。

在尝试了很多不同的操作后,我意识到我们也可以通过hh.exe浏览互联网。只需要在命令行中输入

hh.exe "http://www.google.com"

就可以做到这一点。(以下测试仍然在最新的Windows 10操作系统中进行)执行上述命令后,我得到了如下图所示的结果:

 http://p0.qhimg.com/t012f8d6096c72c3968.png

在所有的尝试操作之后,第一件令我想到的就是去检查hh.exe这个进程的完整性等级,结果如下图所示:

 http://p6.qhimg.com/t01c094a1ec2532cf75.png

正如上图所示,在我的系统中,通过hh.exe打开的浏览器是以中等完整性模式运行的,而通过普通方式打开的iexplore进程运则是以低级完整性模式运行,针对我们现在发现的有关hh.exe这个程序相关的信息使得我们有更多的工作需要去研究。

尝试了很多不同的方法后,我想我应该去创建一个包含有某些代码的自定义帮助文件,因为hh.exe这个应用程序主要用于显示帮助文件。我在网上搜索了与创建自定义帮助文件相关的开源项目,并在下面这篇文章中找到了解决方法:

https://raw.githubusercontent.com/samratashok/nishang/master/Client/Out-CHM.ps1

要运行此脚本,我必须首先下载并安装“HTML Help Workshop and Documentation”,下载链接如下所示:

http://www.microsoft.com/en-us/download/details.aspx?id=21138

我最终创建了我自己的脚本程序,因为我只想证明我的PoC的正确性并试图弹出一个计算器,所以在PoC脚本里我没有去做其他的一些操作。我的PoC脚本可以在这里找到:

https://gist.githubusercontent.com/api0cradle/95ae3c7120f16255d94088bd8959f4b2/raw/fa25b85e85bbb64c5cf021adf92b125357086a6f/GenerateCHM_1.0.ps1

此脚本生成一个简单的自定义的CHM文件,并通过ActiveX启动Calc.exe,不过除了弹出计算器程序之外,或者可以有更有意思的事情可以做,例如,运行Cn33liz StarFighters以获取Empire 代理:https://github.com/Cn33liz/StarFighters/

下图所示的是我的PoC脚本中的部分代码截图:

 http://p9.qhimg.com/t0190f4bd444f96328a.png

下面这个gif显示了绕过Device Guard相关的一些操作:

 https://p3.ssl.qhimg.com/t01837f5521a5b8090c.gif

微软在Windows 10 Creators更新版v1703(又叫Redstone 2)中已解决此问题,或者如果要在旧版本的Windows 10上进行修补,可以通过下面这个链接下载补丁包:https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-8625

之后,我将机器更新到Windows 10的v1703,当我尝试运行自定义的CHM文件时,我的系统中得到了如下图所示的报错信息:

https://p0.ssl.qhimg.com/t01aa8d6a57dbbac6dc.png

 

总结

希望这篇博文能够启发你去进行自己的安全研究,以使得Windows更安全。如果你有兴趣了解有关Device Guard的更多信息,我建议你阅读Microsoft官方文档和Matt Graeber的一些博客:

https://docs.microsoft.com/en-us/windows/device-security/device-guard/device-guard-deployment-guide

http://www.exploit-monday.com/2016/09/introduction-to-windows-device-guard.html

http://www.exploit-monday.com/2016/09/using-device-guard-to-mitigate-against.html

http://www.exploit-monday.com/2016/10/code-integrity-policy-reference.html

http://www.exploit-monday.com/2016/11/code-integrity-policy-audit-methodology.html

http://www.exploit-monday.com/2016/11/Effectiveness-of-Device-Guard-UMCI.html

http://www.exploit-monday.com/2016/12/updating-device-guard-code-integrity.html

(完)