原文链接:MalwarebytesLab

原作者:Jérôme Segura

译:Holic (知道创宇404安全实验室)

更新于: 10/11/2016

微软修复了其它指纹识别漏洞. 我们之前提到它“未修复”, 对应 CVE-2016-3298。现在任何指纹识别的尝试都会返回成功的标志(onreadystatechange/onload fire anyway) 即使相关资源并不存在。

实际上,这个补丁是确保内容来自于资源节,除了res://ieframe.dll没有被加载,反而地址栏设置成了默认的 about:blank 页面。

修复信息泄漏漏洞仍然是一个持续的问题。事实上,到Windows更新推送修复漏洞数小时的时间内,[Manuel Caballero](https://twitter.com/magicmac2000 )发现了绕过方法。

更新于: 09/19/2016

Manuel Caballero 已经绕过了 CVE-2016-3351 的补丁。可以去他的博客查看详情。正如我们在这篇博文的结尾所提到的“信息泄漏的漏洞似乎挥之不去,修复后很快又有新的浮出水面”。

更新于: 09/14/2016

经 Proofpoint 和 TrendMicro 的研究发现,微软官方也修复了另一个信息泄漏 bug(CVE-2016-3351) 被称为 ‘MIME type check’ ,影响 IE 和 Edge 浏览器。 我们在下面的博客中有加入相关内容。

Note: IE/Edge 的 res 漏洞 尚未修复 (感谢 Manuel Caballero 的检测).


正文内容:

恶意软件的作者会利用一切工具和手段来保证他们的操作在不被人察觉的模式下进行。指纹识别使得他们拥有了额外的优势,从而在安全研究人员面前瞒天过海,销声匿迹地进行大规模活动。简要描述的话,指纹识别技术利用了浏览器的信息泄露漏洞,允许攻击者读取用户的文件系统查找特定的名称。

有大量的指纹识别成功应用的例子;早在2016年3月时在我们的研究白皮书中就进行了报道,Operation Fingerprinting,但即便如此也只是冰山一角而已。最近,Proofpoint 的研究者揭露了一次大规模的恶意广告活动 ,该活动至少进行了一年甚至更久,这样恶意软件就有了很大的感染范围。它主要依靠指纹识别使其被细分真正的目标用户忽视,即真正运行OEM的计算机。

图1: 在恶意广告活动中使用指纹,隐藏在GIF图片中

当然,在日益增长复杂的线上攻击的层面上,这给防守方上了一课。同时,我们还能够轻松地从坏人的工具集中去除强大的武器,这可以迅速识别他们的活动,至少在他们想起其他技巧之前。

也有像指纹识别这样的隐私相关应用能够用来分析用户,这种是基于探测存在于他们机器上的一系列程序实现的。我们可以想象,A公司的营销人员对访问他们网站的人是否使用B公司的产品感兴趣。

图2:直接从浏览器检查是否安装了诺顿反病毒软件

使用简单的一小行代码即可完成(目前尚未修复,请在附加内容阅读相关细节),虽然这会让很多人大开眼界。不太正直的行动者可能会对监视利益相关者感兴趣,检查他们是否运行特定的类似于 VPN和加密软件的工具。

关于一些能造成漏洞的协议的历史

滥用 IE 协议使得恶意软件制造者运行恶意代码或者获取受害者的敏感信息。我们在此回顾一些过去和现在的技术,包括现在尚未修复并且在漏洞利用工具包和恶意广告中有用到的技术。

File:// protocol

如果我们回到XP SP2之前系统版本的时代,本地计算机域( LMZ,local machine zone )允许你突破其他协议的限制运行二进制文件,即 file:// protocol

图3:微软修复了在IE6及之前版本运行二进制文件的缺陷

file://协议正如字面上所说,在运行本地计算机域上以全权限运行。你可以在页面中这么写:

<iframe src="file://c:/downloads/malicious.html"></iframe>  

实例化 WScript.Shell 后,便可任意代码执行。

XMLDOM loadXML (CVE-2013-7331)

回到2013年,研究者发表了这样一篇文章: Microsoft XMLDOM in IE can divulge information of local drive/network in error messages – XXE。 这项技术被漏洞利用工具包和一些恶意广告广泛利用。XMLDOM 技术在指纹识别方面是最强大的技术之一,因为它允许任何类型的文件进行检查(不仅是二进制文件)。

微软通过检测 XMLDOM 修复了这个漏洞,这里有相关的讨论。

PoC: http://pastebin.com/raw/Femy8HtG

Onload res:// CVE-2015-2413

res:// 是个IE内部协议,运行于 Internet 域 (即使是本地文件),允许网页从本地文件(从资源节)加载资源。同时,IE 对很多这种 res: URLs 进行了“特殊”处理,允许它做的事情就像打开Internet 连接对话框这种行为。

微软允许 res: URLs 被正常的HTTP 网页加载,因为 IE/Edge 需要它来完成浏览器的一些功能,比如默认的错误和信息页面。

它加入了 Magnitude EK ,作为入口的预检测功能,但现在也已经修复了。res技术并不如 XMLDOM 一样好,因为它只能检测二进制文件,需要资源节部分。

图4:通过onload触发的脚本创建图片来检测资源是否被加载

正如在 Proofpoint 所描述的详情,事实上早在2014年二月 MIME 类型检查已经使用了很长一段时间。使用这个漏洞的目的是为了发现是否有文件关联到特定安全或者开放程序上(例如 Wireshark, Fiddler, Python 等),还有一些常规的软件(Skype, VLC 等)。通过这些判断,攻击者可以选择是否继续进行攻击。这便是筛选出安全研究员和真正目标群体的方法。这个bug在2016年9月13日被微软修复。

我们在2014年的11月“偶然”发现了这项技术,这篇文章里有所介绍,启动了各种事件的连锁反应。

我们在2015年中期再次遇到了它,它被成功的应用于大型恶意广告。这一次,恶意代码躲在了假的GIF图片里面。除了检查MIME类型,它也用到了XMLDOM漏洞。

如果你有兴趣检查这个BUG,Manuel Caballero写了一小段代码

Iframe res:// variant (unpatched)

更新于(10/11/2016): 微软已修复,对应 CVE-2016-3298.

受影响的软件:

操作系统:Windows 7, Windows 10 (均已修复).

浏览器: Internet Explorer 10, 11. Microsoft Edge (38.14393.0.0) & Microsoft EdgeHTML (14.14393).

Note:比如 Microsoft Edge 浏览器,指纹识别技术仅对Windows 和 Program Files 文件夹起作用,因为AppContainer 不允许对系统的其它部分进行读取。

图5:利用网页确定 %system32% 路径下 calc.exe 的存在

当前在漏洞利用工具包中的使用:

我们研究了 Neutrino EK 通过相同的 Flash 利用工具过滤安全研究员,用来入侵感染系统的方法(Neutrino EK: fingerprinting in a Flash),以及其预检查的技巧(https://blog.malwarebytes.com/cybercrime/exploits/2016/06/neutrino-ek-fingerprinting-in-a-flash/)。

图6:用来检查本地文件的iframe

使用在 Flash 利用代码中的 ActionScript ,Neutrino EK 能够检查可加载的资源并通过 JavaScript 和 DOM 来猜测那些文件是否存在。

声明:鉴于微软目前正在制作补丁,我们没有共享我们的PoC。虽然这是真实的而且现实环境依然存在,我们写的 PoC 源自 Neutrino 基于 Flash 制作的指纹识别,更易被坏人所利用。如果你感兴趣,请私下联系我们。

解决方案

一个很好的解决方是让IE加载只被自身加载的资源文件,比如mshtml.dll,ieframe.dll等文件。其他的应该被阻止加载。

换句话说,iexplorer.exe(或者其他使用 WebBrowser控件的其他二进制文件)应该只被允许加载 WebBrowser 引擎真正需要资源,其他一律禁止。res协议的唯一合法用途便是IE内部页面/对话框,也许以下旧的工具栏也需要。开发者工具(F12)也在使用它。

图7:在Microsoft Edge浏览器中的 res:// 调用

一些依赖于 res:// 的旧的工具栏可能会停止工作,但它们可以将那些特定的DLL列入白名单,或者采用更好的方法,即让开发者更新代码。

总结

信息泄漏的漏洞似乎挥之不去,修复后很快又有新的浮出水面。这可能是由于没有从根本上解决问题,也许是因为作出重大改变存在兼容性风险。

而这些缺陷相比之下并不严重,假设存在远程代码执行漏洞的话,这就能帮助坏人为真正的受害者保留那些远程代码执行漏洞并且在安全社区中隐藏更久。

致谢

非常感谢 Manuel Caballero激励我更深入地研究这个问题。感谢Eric Lawrence对Edge浏览器和影响路径上进行的额外检查。