译者:興趣使然的小胃
预估稿费:190RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
一、前言
微软Office中有个名为受保护的视图(Protected View)的安全功能,如果Office文档来自于互联网,那么该功能会以受限方式打开该文档。这个功能的目的是限制可运行的Office组件,以防止攻击者自动利用诸如OLE、Flash以及ActiveX等对象中存在的漏洞。2016年,微软修复了Excel附件的受保护的视图中存在的一个漏洞(CVE-2016–4117)。@HaifeiLi在这一领域做了许多卓有成效的研究,你可以访问这些研究成果了解更多技术细节。此外,MWR实验室也发表了一份白皮书,你可以阅读该白皮书深入理解受保护的视图沙箱相关知识。在本文中,我会重点介绍绕过受保护视图的某些技术,在利用这些技术的同时,我们也能继续使用红方操作人员熟知并喜欢的其他技术。
根据我个人的经验,终端用户很有可能不会点击Office的对话框来退出受保护视图。之所以给出这个猜测,是因为在受保护视图中,用户仍然可以访问文档的内容,这样对他们来说已经足够。进行钓鱼攻击时,减少用户所需的点击次数总归不是件坏事。受保护视图让我们多了一次点击,如果能摆脱这个限制,我们会取得更好的结果。
注意:这些问题已经于2017年4月20日报告给MSRC,他们认为这些都不属于安全问题,只是正常的功能设计理念。
二、正常情况
在深入分析具体操作前,我们需要先了解一下正常的操作过程。攻击者通常会使用一些技术达到目标系统上的命令执行。这些技术通常会涉及Office宏、OLE对象以及通过DDE的Excel公式注入。如果我们通过OLE将一个LNK嵌入Excel文档中,我们可以在本地主机上看到如下界面:
现在,如果我们托管此文档,受保护视图就会被激活,如果我们不退出受保护视图,我们就无法通过双击来启用内嵌的OLE对象:
当文档来自于互联网时就会出现这种情况。除非用户点击“启用编辑”选项,否则类似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对象时,会弹出如下对话框:
点击“Open”按钮,就会执行LNK:
如你所见,在“打开文件”对话框后,双击OLE对象就可以执行LNK。然而通常情况下,除非用户显式退出受保护视图,否则该功能本应该能够禁止激活OLE。
接下来,让我们来看看OneNote的表现。OneNote支持将文件附加到笔记文件中。LNK文件被添加到OneNote中时会变得有点奇怪,因此这里我们使用VBScript作为实验对象。在这个例子中,VBScript文件的作用是通过WScript.Shell COM对象的Run方法来运行calc.exe程序。为了简单起见,这里我不会精心伪造文件内容,虽然这样的确能吸引用户的眼球。
如果我们将附有VBScript文件的OneNet文件(.ONE文件)托管在Web上,你可以发现受保护视图并不会被激活。用户会看到如下对话框。
点击“OK”按钮后,会执行VBScript脚本:
到目前为止,经过测试后,我们发现Publisher文件以及OneNote文件在嵌入OLE对象或类似对象的情况下,并不会触发受保护视图。最后,我们还需要测试一下Excel符号链接(Symbolic Link)文件。这种文件格式会限制我们可以托管的内容。在测试过程中,我发现保存文件时,SLK文件会清除掉OLE对象以及任何已有的宏。幸运的是,我们还可以使用其他攻击方法,如通过DDE实现Excel公式注入(Formula Injection)。如果你还不了解这种技术,你可以参考此处链接了解技术细节。
通常情况下,受保护视图会阻止单元格(cell)自动更新,这种情况下,这类攻击技术会毫无作用。如果我们添加一条恶意公式,并将其保存为符号链接(.SLK)文件,我们就能绕过受保护试图对此类攻击的限制。
在这个例子中,我们会使用如下格式的公式:
=cmd|‘ /C calc’!A0
需要注意的是,在DDE注入攻击中,用户的确会看到两个安全警告。除DDE之外,Excel SLK还有其他功能,可以避免弹出两个安全对话框,欢迎读者充分发挥想象力。
如果我们将这个文件保存为普通的Excel文件,你会发现受保护视图会禁用自动弹出的“Enable”对话框,要求用户先退出受保护视图:
现在,如果我们将其保存为.SLK文件,托管在Web上,你会发现受保护视图没有被激活,用户会自动看到“启用、禁用”对话框。
点击“Enable”选项,用户会看到如下对话框。我觉得用户会点击其中的“Yes”按钮。
点击“Yes”按钮后,我们提供的命令就会被执行:
虽然在.SLK攻击中,用户会看到2个提示对话框,然而相对于退出受保护视图,用户还是更愿意点击他们能看到的对话框。从红队的角度来看,只要能够绕过受保护视图,都应该尝试任何方法来投放载荷。
四、预防措施
目前,我还不知道有什么办法能够手动将Publisher、OneNote以及.SLK文件纳入到受保护视图中,建议相关机构开展用户安全意识培训课程。如果用户不需要使用OneNote或者Publisher,建议直接卸载这些产品。
本文最早于2017年7月13日发布于enigma0x3.net上。