导语:在这一篇文章中,我们会讲述攻击者如何绕过传统的过滤机制对HTA文件进行传输。同时我们也会讲述一下如何防御这种攻击方式。
背景
当在为客户开展渗透测试检测时,和现实的攻击者一样我们经常会使用带有攻击性质的payload执行命令。随着杀毒软件对攻击载荷的防御能力越来越强, 并且很多客户都将重点放在了检测这一方面,所以攻击者需要找到更新颖的技术才能在其目标上执行命令。
使用java程序以及flash漏洞的时代已经过去了,现在的浏览器都正在实现点击播放,而且一些情况下,他们已经废除了这些经常被攻击者采用的技术方法。
你现在可以通过组策略禁用office软件中的宏,导致攻击者以前常用的方式失效。对象链接和绑定(OLE)是另外一种流行的攻击方法,在过去一年中变得很普遍,攻击者将可执行文件和office文档进行绑定,进而执行命令。这可能是由于大多数人都将焦点放在了禁止宏运行上,而没有在意文档本身导致的吧。
很快,微软通过限制文档嵌入程序类型来缓解这一攻击。进而大大减少了通过office进行入侵的可能性。也许你听到在IE以及Edge浏览器中仍然还支持解析HTA文件可能不是很惊喜,这是一种非常老的攻击方式,不过最近攻击者一直在使用这种方式进行攻击。
最近,Hancitor malspam研究员在研究恶意攻击链中发现了使用HTA文件进行密码盗窃。HTA文件同样也在CVE-2017-0199中被大量使用。
厂商以及个人都将检测重点放在了禁止宏和OLE嵌入上,你也许会想为什么HTA文件到目前还是一个隐患。答案是尽管他们已经存在了很长时间,但因为来自厂商和第三方的努力,将这一攻击范围进行最小化处理,并且对HTA文件进行监控。因此,攻击者只能通过监管最弱的方法执行HTA文件(很庆幸,它们还是可以执行的)。
什么是HTA文件?
HTA文件通常是由HTML和像JScript和VBScript这样的脚本构成,它就相当于一个普通的web页面。但是HTA文件不同之处在于它们以完全信任模式进行,可以访问普通页面访问不了的内容,比如通常标记为'不安全脚本'的ActiveX控件。
这就意味着如果攻击者在服务端提供了HTA文件(比如通过恶意网址),并且通过某种方法让用户点击两次警告,进而攻击者就可以在用户机器上执行任何命令。这种方式根本不用绕过任何windows采取的措施。
攻击
从攻击者角度来看,通常可能会拦截这种攻击的是用户使用的一些安全产品,比如web内容检测代理,和URL扫描”沙箱”。
这些安全产品常常会对可执行文件进行监控,比如正在监视从用户浏览器中下载的exe可执行文件,在未确认其安全性之前,将其锁住使其无法运行。以及有些产品会执行沙盒,也就是说如果安全产品判断这一软件可能是病毒,那么可执行文件会在沙盒中运行。
这两件事情为正在想办法传输恶意软件的攻击者出了一个难题。对于这些问题,我们开发了Demiguise。我们最近在执行检测时,有一用户使用了上述安全产品,然而我们需要将HTA可执行文件在不触发这两种安全产品的情况下传输到客户机器上面,同时不会在沙箱中运行。
Demiguise通过创建包含HTA有效载荷的加密版本的HTML文件来开展工作。这就意味着web内容检测代理对网页内容看成一次普通的http请求,并且不会报警。
当html文件在用户浏览器中显示时,其中的javascript代码会在调用msSaveBlob之前对HTA文件进行解压缩和解密,从而直接从浏览器中下载已经解压过的文件。
然后用户会在运行hta文件时得到两个提示,如果用户接受了这两个提示,那么HTA文件就会成功执行。当然所有的过程,使用的文件类型都是简简单单的http请求,不是可执行文件类型,所以安全防护软件不会发出警告和拦截。
环境密钥
为了改善这次攻击,避免程序在沙盒中运行,这一工具提供了'环境密钥'的概念。
这一想法的概念是不在HTML中对加密密钥直接采用硬编码,而是通过javascript代码在用户工作环境中提取密钥。它可以被认为是一个签名,表明javascript代码正在预期的环境中运行,而不在其他环境中。
通过javascript代码做到这一点的好的方法是在目标网络上找到一些只能在在该网络存在的东西。举个例子,内部网络进行托管的映像,或者客户端的外网ip地址。
至于你如何确定一个环境密钥,这对你来说就是一个很好的锻炼方式了。但是,很多工具都可以做到的,比如BeEF和WebFEET,都可以在主动攻击前进行一定的信息收集。
通过导出只有在特定网络中才存在的加密密钥,你可以保证你的攻击载荷不会在其他环境中运行,比如在沙箱中。事实上,不仅不会起作用,而且沙箱甚至不知道他是什么文件,因为没有进行解密。
在github上有对工具的介绍,如工具攻击的完整流程以及环境密钥的确定。其中还包括了一些演示视频,比如运行hta文件时两次警告,以及该工具输出的典型内容。
防御
由于攻击者可以任意调用像msSaveBlob这样的函数,导致检测攻击者签名有些困难。更全面的方法就是完全禁用hta文件。可以通过使用软件限制策略(SRP[10]),或者Device Guard对hta文件进行禁用。
另外一种方法就是修改hta文件的默认打开方式,使用记事本打开它,这样就hta文件就不会被执行了。
注意:在Windows 10中测试时,使用Applocker阻止使用mshta.exe似乎无法正常工作。Windows
Update和Search bar等应用程序似乎无法正常运行。这可能由于其作为一些内部Windows应用程序一部分,因此如果您选择使用Applocker来阻止HTA文件,则建议更多的研究。
结论
我们希望这篇文章可以证明即使供应商做了很大的努力,采取了很多措施,但是一些比较旧的攻击方式做一些调整还是同样有效的。
我们已经证明了HTA文件的风险,并展示了为什么应该考虑阻止HTA文件。希望这一工具对您的工作有帮助。
参考链接:
[1] https://msdn.microsoft.com/en-us/library/ms536471(VS.85).aspx
[2] https://blog.chromium.org/2017/07/so-long-and-thanks-for-all-flash.html?m=1
[4] https://twitter.com/enigma0x3/status/888443907595526144
[5] https://www.fireeye.com/blog/threat-research/2017/04/cve-2017-0199-hta-handler.html
[6] https://msdn.microsoft.com/en-us/library/hh779016(v=vs.85).aspx
[7] https://github.com/beefproject/beef
[8] https://github.com/nccgroup/WebFEET
[9] https://github.com/nccgroup/demiguise
[10] https://technet.microsoft.com/en-gb/library/bb457006.aspx
[11] https://docs.microsoft.com/en-us/sccm/protect/deploy-use/use-device-guard-with-configuration-manager