利用CVE-2018-0950漏洞自动窃取Windows密码

辞客堂数位杂谈版 2018-04-16

i春秋作家:浅安

0×00 前言

记得还在2016年的时候,我的一个同事那时还在使用CERT BFF(自动化模糊测试工具),他向我询问到如何将微软办公软件中看起来可利用的漏洞转化成可以运行的病毒程序并进行概念论证。考虑到现代微软平台中所使用的随机空间地址分配策略(ASLR),这项工作的实施并不像从前那么容易。在某些情况下,可以绕过随机空间地址分配的一种策略是利用内存泄漏来公开内存地址;另一种方法便是通过漏洞进行暴力破解从而使得随机空间地址分配策略无法发挥作用。然而,在这种情况下,阻力最小的方法便是使用Rich Text Format(RTF)内容来利用对象链接和嵌入技术加载未选择使用ASLR的库。

当我开始加入富文本格式和对象链接和嵌入技术时,我发现了比ASLR旁通更严重的漏洞。在下文中,随着我的研究,你将会发现这一缺陷能够导致Windows系统崩溃和密码被盗等情况的发生。

在继续深入分析我的研究之前,先介绍一下相关基础知识:

0×01 对象连接与嵌入(OLE)

OLE是Microsoft于1990年发布的一项技术,它允许将来自一个程序的内容嵌入到另一个程序处理的文档中。 例如,在Windows 3.x中,Microsoft Write提供了嵌入“画笔图片”对象以及“声音”或“包”的功能。 这些是可以插入Write文档中的三个可用的OLE对象:

利用CVE-2018-0950漏洞自动窃取Windows密码

一旦插入,我们就有一个嵌入了画笔内容的文档。

利用CVE-2018-0950漏洞自动窃取Windows密码

0×02 服务器报文块协议(SMB)

SMB是一种协议,它扩展了用于本地文件访问的DOS API(中断21h)以包含网络功能。也就是说,操作者可以像访问本地驱动器上的文件一样访问远程服务器上的文件。微软在Windows for Workgroups3.1中包含了SMB功能,该版本于1992年发布。

利用CVE-2018-0950漏洞自动窃取Windows密码

2.1 Microsoft Outlook

Microsoft Outlook是Microsoft Office附带的电子邮件客户端。 Outlook包括发送富文本(RTF)电子邮件的功能。 这些消息可以包含OLE对象。

当使用Microsoft Outlook客户端查看电子邮件时,富文本电子邮件将会以更为酷炫的方式展现邮件内容。

0×03 前述内容小结

你可能已经知道我的想法了,如果仍不明晰,就让我们总结一下目前为止所了解到的内容:

1.Microsoft Outlook可以创建和呈现RTF电子邮件。

2.RTF文档(包括电子邮件消息)可以包含OLE对象。

3.由于SMB,OLE对象可以位于远程服务器上。

3.1 观察Microsoft Outlook行为

互联网上的HTML电子邮件比富文本电子邮件更为常见,因此,让我们首先查看在Web服务器上具有远程图像的HTML消息时Microsoft Outlook的行为:

利用CVE-2018-0950漏洞自动窃取Windows密码

在这里我们可以看到远程图像没有自动加载。为什么会出现这样的情况?原因是如果Outlook允许远程映像自动加载,它可能会泄露客户端系统的IP地址和其他元数据,例如查看电子邮件的时间。 此限制有助于防止电子邮件中使用的网络错误。现在让我们以富文本格式的形式来查看同样的内容,现在它并不是远程图像文件,而是从远程SMB服务器上加载的OLE文档:

利用CVE-2018-0950漏洞自动窃取Windows密码

这种现象是意料之外的。由于网络错误的隐私风险,Outlook会阻止远程Web内容。 但是,如果使用富文本电子邮件,则OLE对象将被加载而没有用户交互。让我们看一下Wireshark(网络封包分析软件)中的流量来弄清由于这种自动远程对象加载泄露了什么内容:

利用CVE-2018-0950漏洞自动窃取Windows密码

在这里我们可以看到,SMB连接正在自动协商。触发此协商的唯一操作是Outlook对发送给它的电子邮件进行了预览操作。 在上面的屏幕截图中,我可以看到以下内容正在泄露:

1、IP地址

2、域名

3、用户名

4、主机名

5、SMB会话密钥

富文本电子邮件中的远程OLE对象的作用就类似于网络错误中的兴奋剂。在2016年末的分析中,我通知了微软这个问题。

0×04 OLE网络错误的影响

这个错误将导致两个主要的问题,如下所述:

4.1 客户端崩溃

我们知道在这一点上,我们可以出发Outlook启动到任意主机的SMB连接。2017年2月1日,披露了Windows SMB客户端漏洞(VU#867968)。 连接到恶意SMB服务器时,Windows会崩溃。如果我们在Outlook中创建了富文本电子邮件,但指向利用此漏洞的SMB服务器,该怎么办?

利用CVE-2018-0950漏洞自动窃取Windows密码

如上所述,一旦Outlook预览了这样一封电子邮件,Windows就会崩溃,出现蓝屏死机(蓝屏)。除此之外,每次遇到这种情况后Outlook都会启动,Windows将再次崩溃,因为Outlook会记住最后一封打开的电子邮件。这相当于拒绝服务攻击行为。在这一点上,我与微软分享了攻击细节。最终,微软解决了这个SMB漏洞,幸运的是,我们没有听说任何基于邮件的大规模电子邮件攻击。

4.2 收集密码哈希值

除了SMB的漏洞之外,我决定深入挖掘客户端试图启动SMB连接到攻击者服务器的风险。 根据我在Wireshark(网络封包分析软件)中看到的,我已经知道它泄露的不仅仅是受害者的IP地址。这次我同时使用了Responder)(响应系统)和John the Ripper(快速密码破解工具)。

首先,我发送了一个富文本电子邮件,该电子邮件具有指向运行响应程序的系统的远程OLE对象。在响应系统上,我在Outlook中预览电子邮件后立即看到以下内容:

[SMB] NTLMv2-SSP Client : 192.168.153.136[/size]

[size=3][SMB] NTLMv2-SSP Username : DESKTOP-V26GAHF\test_user[/size]

[size=3][SMB] NTLMv2-SSP Hash : test_user::DESKTOP-V26GAHF:1122334455667788:571EE693342B161C50A73D502EB49B5A:010100000000000046E1992B4BB2D301FFADACA3241B6E090000000002000A0053004D0042003100320001000A0053004D0042003100320004000A0053004D0042003100320003000A0053004D0042003100320005000A0053004D004200310032000800300030000000000000000100000000200000D3BDB30B62A8937256327776471E072C7C6DE9F4F98458D1FEA17CBBB6AFBA770A001000000000000000000000000000000000000900280063006900660073002F003100390032002E003100360038002E003100350033002E003100330038000000000000000000

这里我们有一个NTLMv2哈希,我们可以将它交给John the Ripper(快速密码破解工具)。 如下所示,我将哈希复制并粘贴到名为test_user.john的文件中:

john test_user.john[/size]

[size=3]Using default input encoding: UTF-8[/size]

[size=3]Loaded 1 password hash (netntlmv2, NTLMv2 C/R [MD4 HMAC-MD5 32/64])[/size]

[size=3]Will run 24 OpenMP threads[/size]

[size=3]Press ‘q’ or Ctrl-C to abort, almost any other key for status[/size]

[size=3]test (test_user)[/size]

[size=3]Session completed

在不到1秒的时间内,我就可以确定打开我富文本电子邮件的用户“test_user”的密码是“test”。 更强密码的散列(更长和更多类型的字符)需要更长时间才能破解。我已经做了一些基本的测试,在单个中档GPU(NVIDIA GTX 960)上破解8字符密码的整个解决方案空间需要多长时间:

1、小写字母 – 16分钟

2、混合大小写字母 – 3天

3、混合大小写字母和数字 – 12天

4、混合大小写字母,数字和符号 – 1年

以上统计数据是暴力破解随机生成密码的最坏情况。任何文字(比如“test”)或模式(比如“asdf”)的密码比随机生成的密码更容易破解,因为大多数破解工具都有规则来检查这些事情。

另外,攻击者可以访问具有多个高端GPU的系统,这些GPU可以将他们的时间缩减为上述数字的一小部分。不过,添加到密码长度的每个字符对暴力破解密码所需的时间都有指数效应。例如,虽然我的中档GPU需要1年的时间才能耗尽8个字符的密码(混合大小写字母,数字和符号)的整个解决方案空间,但将密码长度增加到9个字符也会增加耗时,将需84年来获取全部解决方案空间!

0×05 微软的修复

微软针对Outlook自动加载远程OLE内容(CVE-2018-0950)的问题发布了一个修复程序。一旦安装了此修复程序,预览的电子邮件将不再自动连接到远程SMB服务器。 此修复有助于防止上面列出的攻击。但意识到即使使用这个补丁,用户仍然只需点击一下即可成为上述攻击类型的受害者,这一点很重要。例如,如果电子邮件消息具有以“\\”开头的UNC样式链接,则单击此链接会启动到指定服务器的SMB连接。

利用CVE-2018-0950漏洞自动窃取Windows密码

其他详细信息可在CERT漏洞注释VU#974272中找到。

0×06 结论与建议

在Windows平台上,有几种方法可以使客户端启动SMB连接。 任何时候SMB连接启动时,客户端的IP地址,域名,用户名,主机名和密码哈希都可能泄漏。 为了防止涉及导致受害者机器启动SMB连接的攻击,请考虑以下缓解措施:

安装Microsoft更新CVE-2018-0950。此更新防止在预览富文本电子邮件时自动检索Microsoft Outlook中的远程OLE对象。 但是,如果用户单击SMB链接,此行为仍会导致密码散列泄漏。

在您的网络边界处阻止入站和出站SMB连接。这可以通过阻止端口445/tcp,137/udp,139/udp以及137/udp和139/udp来完成。

按照Microsoft安全通报ADV170014中的规定,阻止NTLM单点登录(SSO)身份验证。从Windows10和Server2016开始,如果创建EnterpriseAccountSSO注册表值并将其设置为0,则将禁用外部和未指定网络资源的SSO身份验证。通过此注册表更改,仍然允许访问SMB资源,但外部和未指定的SMB资源将需要用户输入凭据,而不是自动尝试使用当前登录的用户的散列。

假设您的客户端系统在某个时候会尝试与攻击者的服务器建立SMB连接。 因此,请确保任何Windows登录名都有足够复杂的密码,以防止破解。以下两种策略可以帮助实现这一目标:

1.使用密码管理器来帮助生成复杂的随机密码 此策略可以帮助确保跨所用资源使用唯一密码,并确保密码具有足够的复杂性和随机性。

2.使用更长的密码(使用混合大小写字母,数字和符号)而不是密码。这种策略可以产生令人难忘的凭证,不需要额外的软件来存储和检索。

  • 作者:Will Dormann
  • 翻译:i春秋翻译小组
  • 责任编辑:F0rmat、浅安
  • 发表于Vulnerability Discovery
  • 转载请注明来自bbs.ichunqiu.com
  • 参考来源:(https://insights.sei.cmu.edu/cer … utlook-and-ole.html),

相关推荐

kikaylee / 0评论 2020-05-06