导语:在这篇文章中,我将展示两种诱骗受害者运行恶意代码的方法,这两种方法都需要一定量的用户交互。
前言
Microsoft Office文档为攻击者提供了各种方法来诱骗受害者运行任意代码。当然,攻击者可能会尝试利用Office漏洞,但更常见的情况是向受害者发送包含恶意宏的Office文档或包含嵌入式(Packager)可执行文件的文档。
为了使这些攻击更加困难,微软一直在向Office添加旨在保护受害者免于运行恶意代码的安全措施。一个众所周知的措施是在从互联网下载文档时,在“受保护视图”中打开它们。Office 2016和Office 365包含其他安全措施(如GPO),以便在从Internet下载文档时,可以完全禁用宏,和Packer文件扩展名黑名单一起阻止黑名单文件类型的运行。
当然,这些保护并不是万无一失,但它们有助于减少这类攻击。最近,Matt Nelson演示了SettingContent-ms文件可用于运行任意命令。这些文件最初不在文件扩展名黑名单中,因此可用于欺骗受害者从Office文档运行嵌入式SettingContent-ms文件,但是现在,此文件类型已添加到黑名单中,以保护Office 2016/365用户。在2018年8月“补丁星期二”期间,微软还发布了一个修复程序,如果不从%WinDir%\ ImmersiveControlPanel打开这些文件,该软件则会阻止打开这些文件。
在这篇文章中,我将展示另外两种诱骗受害者运行恶意代码的方法,这两种方法都需要一定量的用户交互。MSRC指出,这种技术需要大量的社会工程:受害者必须对安全警告说“是”,而不是在保护模式下运行,因此不会针对此问题发布修复程序。
Shell.Explorer.1
所述Shell.Explorer.1 OLE对象(CLSID {EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B} )作为嵌入式Windows Explorer或嵌入式Internet Explorer。此OLE对象可以嵌入Office文档中,并作为持久对象保存在文档中。专有格式用于持久化Shell.Explorer.1对象,在偏移量76(0x4C)处可以找到熟悉的结构。看起来位于此偏移处的结构是ShellLink(LNK)结构[ MS-SHLLINK ]。
初始化(加载)Shell.Exporer.1对象时,ShellLink结构将被解析为常规LNK文件。然后,该对象从ShellLink 获取ID列表,并使用它来导航(浏览)到提供的文件、(shell)文件夹或网站。
图1:将ShellLink结构的ID列表传递给CWebBrowserOC :: BrowseObject()
Embedded Explorer
当提供文件夹路径时,该对象的行为类似于Windows Explorer,可以浏览文件或文件夹,甚至可以通过双击来执行文件。攻击者可能会滥用此功能来嵌入Windows Explorer,以打开包含可执行文件的远程共享。如果攻击者可以说服其受害者双击攻击者控制的文件,则可以从该远程共享运行可执行代码。
看起来这种攻击似乎难以实现。首先,OLE对象需要单击才能激活,其次,用户需要双击OLE对象才能实际获得可用的Windows Explorer视图,最后,用户还需要双击Windows Explorer视图中的文件。
在管理员限制浏览某些文件夹或驱动器的可能性的情况下,嵌入Windows Explorer对象会很方便。例如,如果限制对C:驱动器的访问,则本地用户可以使用包含嵌入式Windows Explorer的Office文档来规避此限制。此外,该对象可用于窃取NetNTLM哈希值,但由于使用Office文档并不难做到这一点,因此使用单击的OLE对象进行激活是没有意义的。
图2:使用嵌入式Windows Explorer浏览本地计算机
IE浏览器
当Shell.Explorer.1充当嵌入式Internet Explorer时,事情会变得更有趣。除了可以在文档中嵌入网络浏览器之外,它还允许浏览本地计算机上的文件,以及浏览到远程位置(共享和网站)上的文件。要说没有任何用户交互,这是不可能的。单击激活也适用于此模式——单击该对象将触发Internet Explorer的文件下载功能,这意味着将向用户显示“文件下载”对话框。如果用户单击“ 运行”或“ 打开”(取决于文件格式),就会执行该文件。
图3:单击嵌入式Internet Explorer对象后显示的“文件下载”对话框
某些文件类型(如EXE文件)将触发另一个警告对话框,但是,通过使用其他可执行文件类型可以轻松避免此对话框,例如Matt找到的SettingContent-ms文件(也有可行的其他文件格式)。
图4:某些文件类型将触发另一个警告对话框
该控件禁用了受保护模式IE,这会阻止显示其他对话框,如UAC对话框。因此,只需要两次单击就可以运行恶意代码,即第一次单击激活,第二次单击运行/打开。对于Office 2016/365中的文件扩展名黑名单,Shell.Explorer 1对象也是一个很好的解决方法,因为Shell.Explorer 1没有使用该黑名单。
概念证明
下面的PowerShell脚本将尝试创建包含嵌入式Internet Explorer对象的Word文档。该脚本使用Packager对象创建一个看起来像嵌入式文件的对象,单击该对象将触发文件下载功能。
图5:嵌入式Internet Explorer,用于从启动Calculator的远程网站打开Internet快捷方式文件
Microsoft Forms 2.0 HTML控件
Microsoft Forms 2.0对象库包含许多可以在Office文档中使用的“HTML”ActiveX控件。这些控件最初被标记为安全,并且不要求用户为嵌入它们的文档启用ActiveX,其存储格式比Shell.Explorer.1对象简单得多。本质上,它由对象的CLSID和HTML片段(UTF-16编码)组成,HTML片段不一定必须格式正确,对象只会搜索它支持的属性。两个对象支持action属性,该属性采用URL。这些对象是:
· Forms.HTML:Image.1(CLSID {5512D112-5CC6-11CF-8D67-00AA00BDCE1D})
· Forms.HTML:Submitbutton.1(CLSID {5512D110-5CC6-11CF-8D67-00AA00BDCE1D})
若单击设置了action属性的嵌入对象,将导致打开已定义的URL。常规URL将在默认浏览器中打开,但文件URL(包括共享文件)将直接打开。此时,会显示一个警告对话框,但此对话框与其他警告对话框略有不同,如图6所示。此警告对话框对于所有文件类型都是相同的。
图6:从HTML控件打开文件URL时的警告对话框
Forms.HTML:Image.1接受一个src,该src可用于配置文档中显示的图像。使用图像可以伪装对象,例如将其伪装成嵌入文档以诱使受害者点击它。
应该注意的是,当Office文档包含Web标记时,会显示另一个警告对话框,表明它是从Internet下载的。此对话框更明确,从远程攻击者的角度来看,这种技术的用处不大。
图7:从Internet下载文档时显示的警告对话框
概念证明
以下PowerShell脚本可用于创建具有嵌入式Forms.HTML:Image.1对象的Word文档,单击该对象将导致Calculator被打开。
图8:嵌入式Forms.HTML:Image.1单击时打开Calculator
受保护的视图
如上所述,文档可能包含Web标记,用于将文件标记为是从Internet下载的。如果是,文档将在受保护的视图中打开。在此模式下,文档中存在的任何嵌入式对象都会被禁用。除非攻击者使用允许绕过受保护视图的漏洞,否则需要额外的社交工程来欺骗用户单击“启用编辑”。
图9:从受保护的视图中打开从Internet下载的文档
如何防御
防御者应该注意包含以下任何对象的文档:
· Shell.Explorer.1 / {EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B}
· Forms.HTML:Image.1 / {5512D112-5CC6-11CF- 8D67-00AA00BDCE1D}
· Forms.HTML:Submitbutton.1 / {5512D110-5CC6-11CF-8D67-00AA00BDCE1D}
对于Shell.Explorer.1对象,从对象中提取LNK文件并检索ID列表,以找出单击该对象时打开的内容。我们的GitHub页面上的ShellLink .NET类库可用于从LNK文件中读取ID列表(https://github.com/securifybv/ShellLink)。通常,LNK文件在持久化的Shell.Explorer.1对象的偏移量为76。
HTML Forms对象更容易解析,因为它们是带有16字节GUID的UTF-16编码的HTML片段。防御者应该知道有多种方法可以在Office文档中存储对象。例如,ActiveX控件也可以嵌入为PersistPropertyBag对象,其中对象的属性设置在XML文件中(例如activeX1.xml)。
总结
诱使受害者运行恶意可执行文件,仍然是一种在组织中站稳脚跟的流行方法。由于微软不断提高Office和Windows的标准,因此攻击者也会寻找其他方法来攻击受害者。从本文提供的两个备选方案中,Shell.Explorer.1技术似乎对攻击者最有用,因为在Internet上打开的文档中显示了HTML Forms对象的附加警告对话框。
众所周知,人们可能会被欺骗点击Office文档中的“启用编辑/启用目录”。不难想象,用户会单击额外的警告对话框,以往的DDE攻击和最近利用SettingContent-ms文件进行的攻击也演示了这一点。
红队人员(还有攻击者)一直在寻找攻击的新方法,他们并不关心什么符合安全修复的标准,如果他们看到机会,他们就会马上行动。作为一名防守者,你必须知道什么样的攻击有助于阻止他们,当然了,还得通过部署应用程序白名单和攻击面减少规则之类的东西来提高攻击者的门槛。但更重要的是,确保网络上发生的事情的可见性,并追捕入侵者。