利用Office文档结合社会工程学手段欺骗用户执行恶意代码

2018 年 9 月 9 日 FreeBuf

写在前面的话

Microsoft Office文档为攻击者提供了各种欺骗受害者运行任意代码的方法。当然,攻击者可能会尝试直接利用Office漏洞,但更常见的情况是向受害者发送包含恶意代码的文档。 与此同时,微软也一直在制定安全措施。一般措施当文档从internet上下载时,并不会直接打开,而是在受保护视图中打开它们。

Office 2016和Office 365使用其他安全措施(如GPO),以便在从Internet下载文档时完全禁用宏。而且Packer文件扩展名黑名单,阻止黑名单文件类型的运行。 当然,这些保护并不完美,但它们有助于减少这类攻击。最近,Matt Nelson演示了SettingContent-ms文件可用于运行任意命令。这些文件最初不在黑名单中,因此可用于欺骗受害者从Office文档运行SettingContent-ms文件。但此文件类型现已添加到黑名单中,以保护Office 2016/365用户。在2018年8月补丁周二期间,微软还发布了一个修复程序,如果这些文件没有从%WinDir%\ImmersiveControlPanel打开,就阻止它们被打开。在这篇博客中,我将展示另外两种诱导受害者运行恶意代码的方法。两种方法都需要一定量的用户交互。

Shell.Explorer.1

所述Shell.Explorer.1OLE对象(CLSID {EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B})充当嵌入Windows资源管理器或嵌入式的Internet Explorer。此OLE对象可以嵌入Office文档中,并作为持久对象保存在文档中。专有格式用于持久化Shell.Explorer.1对象,可以在偏移量76(0x4C)处找到。位于此偏移处的结构是ShellLink(LNK)结构的 MS-SHLLINK 。 初始化(加载)Shell.Exporer.1对象时,ShellLink结构将被解析为常规LNK文件。然后,该对象从ShellLink 获取ID列表,并使用它来导航(浏览)到提供的文件,文件夹或网站。

Embedded Explorer

提供文件夹路径时,该对象的行为类似于Windows资源管理器。可以浏览文件或文件夹,甚至可以通过双击来执行文件。攻击者可能会滥用此功能来嵌入Windows资源管理器。如果攻击者可以说服其受害者双击攻击者控制的文件,则可以远程运行可执行代码。 但是这种攻击似乎很难实现。首先,OLE对象需要单击才能激活,其次,用户需要双击OLE对象才能实际获得可用的Windows资源管理器视图。最后,用户还需要双击Windows资源管理器视图中的文件。 在管理员限制浏览某些文件夹或驱动器的可能性的情况下,嵌入Windows资源管理器对象会很方便。例如,如果限制对C:驱动器的访问,则本地用户可以使用包含嵌入式Windows资源管理器的Office文档来规避此限制。此外,该对象可用于窃取NetNTLM哈希值,但由于这对Office文档并不难,因此使用单击的OLE对象进行激活是没有意义的。

IE浏览器

Shell.Explorer.1充当嵌入式Internet Explorer时,事情会变得更有意思。除了可以在文档中嵌入Web浏览器之外,它还允许浏览本地计算机上的文件,以及浏览到远程位置(共享和网站)上的文件。没有一些用户交互,这是不可能完成的。单击激活也适用于此模式,单击该对象将触发Internet Explorer的文件下载功能,这意味着将向用户显示“文件下载”对话框。如果用户单击“ 运行”或“ 打开”(取决于文件格式),则将执行该文件。 

某些文件类型(如EXE文件)将触发另一个警告对话框。但是通过使用其他可执行文件类型可以轻松避免此对话框。

保护模式IE被禁用用于控件,这确实会阻止显示其他对话框——如UAC对话框。因此,只需要两次单击就可以运行恶意代码,即单击以激活,然后运行/打开。

Poc

下面的PowerShell脚本将尝试创建包含嵌入式Internet Explorer对象的Word文档。该脚本使用Packager对象创建一个嵌入文件的对象,单击该对象将触发文件下载功能。

Microsoft Forms 2.0 HTML控件

Microsoft Forms 2.0对象库包含许多可以在Office文档中使用的“HTML”ActiveX控件。这些控件标记为可安全初始化,并且不要求用户为嵌入它们的文档启用ActiveX。存储格式比Shell.Explorer.1对象简单得多。本质上,它由对象的CLSID和HTML片段(UTF-16编码)组成。HTML片段不一定必须格式正确,对象只会搜索它支持的属性。两个对象支持action属性,该属性采用URL。这些对象是:

单击设置action属性的嵌入对象,将导致打开定义的URL。常规URL将在默认浏览器中打开,但文件URL(包括共享文件)将直接打开。将显示一个警告对话框,但此对话框与其他警告对话框略有不同,如图6所示。此警告对话框对于所有文件类型都是相同的。

Forms.HTML:Image.1接受一个src,可用于配置文档中显示的图像。使用图像可以伪装对象,例如将其伪装成嵌入文档以诱使受害者点击它。 应该注意的是,当Office文档包含Web标记时,会显示另一个警告对话框,表明它是从Internet下载的。此对话框更明确,从远程攻击者的角度来看,这种技术没什么用。

Poc

以下PowerShell脚本可用于创建具有嵌入的Forms.HTML:Image.1对象的Word文档,单击该对象将导致计算器打开。

受保护的视图

如上所述,文档可能包含Web标记以将文件标记为从因特网下载。如果存在,文档将在受保护的视图中打开。在此模式下,将禁用文档中存在的任何嵌入对象。除非攻击者使用绕过受保护视图的漏洞,否则需要额外的社交工程来欺骗用户单击“ 启用编辑”。

如何防御

用户应该注意包含以下任何对象的文档:

对于Shell.Explorer.1对象从对象中提取LNK文件并检索ID列表以找出打开时的内容单击对象。我们的GitHub页面上的ShellLink .NET类库可用于从LNK文件中读取ID列表。通常,LNK文件在Shell.Explorer.1对象的偏移量76处开始。 HTML Forms对象更容易解析,因为它们是带有16字节GUID的UTF-16编码的HTML片段。防御者应该知道有多种方法可以在Office文档中存储对象。例如,ActiveX控件也可以嵌入为PersistPropertyBag对象,其中对象的属性设置在XML文件中(例如activeX1.xml)。

最后的话

Red Teamers(和攻击者)一直在寻找新方法,他们并不关心什么符合安全修复的标准。作为一名防守者,知道什么样的攻击有助于阻止他们(工具者)。他不应止步于此,通过部署应用程序白名单和攻击面减少规则(或类似替代方案)之类的东西来提高攻击者的门槛。但更重要的是,确保能够了解网络上发生的事情,并寻找入侵者。

*参考来源:securify,由周大涛编译,转载请注明来自FreeBuf.COM

登录查看更多
1

相关内容

【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
【WWW2020-微软】理解用户行为用于文档推荐
专知会员服务
35+阅读 · 2020年4月5日
安全和健壮的医疗机器学习综述,附22页pdf
专知会员服务
46+阅读 · 2020年1月25日
【GitHub实战】Pytorch实现的小样本逼真的视频到视频转换
专知会员服务
35+阅读 · 2019年12月15日
漏洞预警丨Xstream远程代码执行漏洞
FreeBuf
4+阅读 · 2019年7月25日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
“黑客”入门学习之“windows系统漏洞详解”
安全优佳
8+阅读 · 2019年4月17日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
社会工程学之伪装
计算机与网络安全
4+阅读 · 2019年1月2日
逆向 | C++ 加壳程序的编写思路
计算机与网络安全
9+阅读 · 2019年1月1日
Arxiv
14+阅读 · 2018年4月18日
Arxiv
10+阅读 · 2018年2月4日
VIP会员
相关资讯
漏洞预警丨Xstream远程代码执行漏洞
FreeBuf
4+阅读 · 2019年7月25日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
“黑客”入门学习之“windows系统漏洞详解”
安全优佳
8+阅读 · 2019年4月17日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
社会工程学之伪装
计算机与网络安全
4+阅读 · 2019年1月2日
逆向 | C++ 加壳程序的编写思路
计算机与网络安全
9+阅读 · 2019年1月1日
Top
微信扫码咨询专知VIP会员