【技术分享】如何绕过受保护视图发起钓鱼攻击

https://p5.ssl.qhimg.com/t01aafdcf314f734d62.jpg

译者:興趣使然的小胃

预估稿费:190RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

一、前言

微软Office中有个名为受保护的视图(Protected View)的安全功能,如果Office文档来自于互联网,那么该功能会以受限方式打开该文档。这个功能的目的是限制可运行的Office组件,以防止攻击者自动利用诸如OLEFlash以及ActiveX等对象中存在的漏洞。2016年,微软修复了Excel附件的受保护的视图中存在的一个漏洞(CVE-2016–4117)。@HaifeiLi在这一领域做了许多卓有成效的研究,你可以访问这些研究成果了解更多技术细节。此外,MWR实验室也发表了一份白皮书,你可以阅读该白皮书深入理解受保护的视图沙箱相关知识。在本文中,我会重点介绍绕过受保护视图的某些技术,在利用这些技术的同时,我们也能继续使用红方操作人员熟知并喜欢的其他技术。

根据我个人的经验,终端用户很有可能不会点击Office的对话框来退出受保护视图。之所以给出这个猜测,是因为在受保护视图中,用户仍然可以访问文档的内容,这样对他们来说已经足够。进行钓鱼攻击时,减少用户所需的点击次数总归不是件坏事。受保护视图让我们多了一次点击,如果能摆脱这个限制,我们会取得更好的结果。

注意:这些问题已经于2017年4月20日报告给MSRC,他们认为这些都不属于安全问题,只是正常的功能设计理念。


二、正常情况

在深入分析具体操作前,我们需要先了解一下正常的操作过程。攻击者通常会使用一些技术达到目标系统上的命令执行。这些技术通常会涉及Office宏、OLE对象以及通过DDE的Excel公式注入。如果我们通过OLE将一个LNK嵌入Excel文档中,我们可以在本地主机上看到如下界面:

https://p5.ssl.qhimg.com/t01aed8a692493ea5fe.png

现在,如果我们托管此文档,受保护视图就会被激活,如果我们不退出受保护视图,我们就无法通过双击来启用内嵌的OLE对象:

https://p4.ssl.qhimg.com/t01a8e9731090f571f5.png

当文档来自于互联网时就会出现这种情况。除非用户点击“启用编辑”选项,否则类似OLE、ActiveX以及DDE之类的对象就会处于被阻止状态。


三、具体操作

现在我们已经了解了受保护视图的正常工作过程,我们可以深入分析绕过这种机制的一些方法。首先我想要介绍的一种方法是通过Publisher文件中的OLE来执行文件。与Word及Excel一样,微软Office中通常会附带安装Publisher产品,Publisher也包含了类似的功能,如OLE嵌入功能。攻击者通常会借助OLE来嵌入LNK文件,因此在这个例子中我们会执行相同的操作。Publisher提供了许多功能,使用户热衷于使用OLE对象。为了文章的简洁性,这里我不会深入分析这些功能。

在这个例子中,我们会使用一个简单的LNK载荷,其作用是执行“C:WindowsSystem32cmd.exe /c calc.exe”命令。我不会去介绍如何将OLE嵌入到Publisher中,因为这个过程与其他Office格式几乎完全一致。如果我们将嵌有LNK文件的OLE对象托管到Web中,你会发现受保护视图并不会被激活。当用户点击OLE对象时,会弹出如下对话框:

https://p2.ssl.qhimg.com/t01e0f148f5b8f8c636.png

点击“Open”按钮,就会执行LNK:

https://p1.ssl.qhimg.com/t0135bf4fb367cdc71e.png

如你所见,在“打开文件”对话框后,双击OLE对象就可以执行LNK。然而通常情况下,除非用户显式退出受保护视图,否则该功能本应该能够禁止激活OLE。

接下来,让我们来看看OneNote的表现。OneNote支持将文件附加到笔记文件中。LNK文件被添加到OneNote中时会变得有点奇怪,因此这里我们使用VBScript作为实验对象。在这个例子中,VBScript文件的作用是通过WScript.Shell COM对象的Run方法来运行calc.exe程序。为了简单起见,这里我不会精心伪造文件内容,虽然这样的确能吸引用户的眼球。

如果我们将附有VBScript文件的OneNet文件(.ONE文件)托管在Web上,你可以发现受保护视图并不会被激活。用户会看到如下对话框。

https://p2.ssl.qhimg.com/t014709354643f4cdcf.png

点击“OK”按钮后,会执行VBScript脚本:

https://p3.ssl.qhimg.com/t01ab10ce3a40e8c7cc.png

到目前为止,经过测试后,我们发现Publisher文件以及OneNote文件在嵌入OLE对象或类似对象的情况下,并不会触发受保护视图。最后,我们还需要测试一下Excel符号链接(Symbolic Link)文件。这种文件格式会限制我们可以托管的内容。在测试过程中,我发现保存文件时,SLK文件会清除掉OLE对象以及任何已有的宏。幸运的是,我们还可以使用其他攻击方法,如通过DDE实现Excel公式注入(Formula Injection)。如果你还不了解这种技术,你可以参考此处链接了解技术细节。

通常情况下,受保护视图会阻止单元格(cell)自动更新,这种情况下,这类攻击技术会毫无作用。如果我们添加一条恶意公式,并将其保存为符号链接(.SLK)文件,我们就能绕过受保护试图对此类攻击的限制。

在这个例子中,我们会使用如下格式的公式:

=cmd|‘ /C calc’!A0

需要注意的是,在DDE注入攻击中,用户的确会看到两个安全警告。除DDE之外,Excel SLK还有其他功能,可以避免弹出两个安全对话框,欢迎读者充分发挥想象力。

如果我们将这个文件保存为普通的Excel文件,你会发现受保护视图会禁用自动弹出的“Enable”对话框,要求用户先退出受保护视图:

https://p4.ssl.qhimg.com/t013207136e09faf8cb.png

现在,如果我们将其保存为.SLK文件,托管在Web上,你会发现受保护视图没有被激活,用户会自动看到“启用、禁用”对话框。

https://p5.ssl.qhimg.com/t017859dd605244477b.png

点击“Enable”选项,用户会看到如下对话框。我觉得用户会点击其中的“Yes”按钮。

https://p0.ssl.qhimg.com/t0102306099f13c4ede.png

点击“Yes”按钮后,我们提供的命令就会被执行:

https://p0.ssl.qhimg.com/t01a6bc34fe5ad8f48f.png

虽然在.SLK攻击中,用户会看到2个提示对话框,然而相对于退出受保护视图,用户还是更愿意点击他们能看到的对话框。从红队的角度来看,只要能够绕过受保护视图,都应该尝试任何方法来投放载荷。


四、预防措施

目前,我还不知道有什么办法能够手动将Publisher、OneNote以及.SLK文件纳入到受保护视图中,建议相关机构开展用户安全意识培训课程。如果用户不需要使用OneNote或者Publisher,建议直接卸载这些产品。

本文最早于2017年7月13日发布于enigma0x3.net上。

(完)