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

i春秋做家:浅安html

0×00 前言安全

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

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

在继续深刻分析个人研究以前,先介绍一下相关基础知识:tcp

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

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

image.png

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

image.png

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

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

image.png

2.1 Microsoft Outlook

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

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

0×03 前述内容小结

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

1.Microsoft Outlook能够建立和呈现RTF电子邮件。

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

3.因为SMB,OLE对象能够位于远程服务器上。

3.1 观察Microsoft Outlook行为

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

image.png

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

image.png

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

image.png

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

一、IP地址

二、域名

三、用户名

四、主机名

五、SMB会话密钥

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

0×04 OLE网络错误的影响

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

4.1 客户端崩溃

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

image.png

如上所述,一旦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字符密码的整个解决方案空间须要多长时间:

一、小写字母 – 16分钟

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

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

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

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

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

0×05 微软的修复

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

image.png

其余详细信息可在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.使用更长的密码(使用混合大小写字母,数字和符号)而不是密码。这种策略能够产生使人难忘的凭证,不须要额外的软件来存储和检索。

相关文章
相关标签/搜索