在对最近的网络钓鱼攻击进行分析时我们发现,攻击者开始使用 PowerPoint 自定义操作来代替宏触发恶意 Payload。虽然使用 PowerPoint 附件并不新鲜,但这种攻击还是很有趣的,因为他们可以绕过 Office 附件启用宏的控制器。
1. 攻击者创建一个新的 PowerPoint 文档并插入恶意脚本或可执行文件。插入的文件会被嵌入为一个 OLE 对象中。
2. 自定义操作设置为进行“上一张”操作并自动触发“活动内容”来执行嵌入的 OLE 对象。

3. 最后将文档保存为 PowerPoint 放映文件,这样当文件被打开时就会立刻进入放映视图。
当用户打开演示文档时,文档会进入放映视图并开始播放第一张幻灯片,这样就会触发自定义操作来执行嵌入的恶意 Payload。当执行嵌入内容时,用户会收到一个安全警告询问是否要打开/执行文件。
在我们发现的样本中,脚本被命名为 Powerpoint.vbe 来诱使用户执行恶意的 Payload。

在分析演示文档的内容后,我们很明显的发现攻击者采用了一系列的方法来隐藏脚本。首先,使用一幅看起来像是幻灯片头部的图片盖住嵌入式对象的图标,我们可以很容易的将这幅图像移开来开展进一步的检测。

默认情况下,被插入的对象会存储在文档的 ppt/embeddings 目录下并命名为 oleObject1.bin,名字中的数字会随着嵌入对象数量的增加而增加。

使用工具 psparser.py 我们可以检查被嵌入文件的文档中对象的元数据并提取出恶意的 Payload。

这个样本中嵌入的脚本 (Powerpoint.vbe) 会从 hxxp://secureemail[.]bz/updater.exe 下载并执行文件 “updater.exe”(c098a36309881db55709a759df895803)。
下面这个脚本来源于微软 TechNet 库中常用于解码经过编码的 VB 脚本:https://gallery.technet.microsoft.com/Encode-and-Decode-a-VB-a480d74c
检测恶意演示文档
攻击者希望利用自定义操作来作为 Payload 的载体需要确保以下两件事情:
1. 在幻灯片开始播放时操作就会被触发
2. 操作会执行被嵌入的 Payload
此外,攻击者常常也会混淆 Payload 的名称以诱使用户点击执行。而我们的防御者也可以结合这个特点来帮助识别恶意的演示文档。
为了能让演示文档打开后自动开始播放,攻击者需要将文档保存为 PowerPoint 播放文档(ppsx),这样 [Content Types].xml 文件会被定义如下:
application/vnd.openxmlformats-officedocument.presentationml.slideshow
注:攻击者可以通过重命名为传统的 .pps 扩展名来绕过包含这个内容类型,这样当文档被打开时会直接进入幻灯片播放视图,尽管文档并不是二进制文档类型。而在重命名为现代的 .ppsx 扩展名时会导致 PowerPoint 抛出一个错误。
攻击者还需要嵌入在被触发时可以被执行的内容,这往往是一个脚本或可执行文件。所有这些要插入的文件都会被 packager.dll 作为一个 OLE 对象嵌入到演示文档中。
默认情况下,被嵌入的对象会被包含在 graphicFrame 中并被幻灯片里 XML 标记的一个 oleObj 节点所引用。注意:如果攻击者修改了输出,则 oleObj 标签还可以包含其他对象,即同时包含嵌入标识和被嵌入的对象。
这种情况下,被嵌入的内容为一个脚本或可执行程序,其 progId 为 Package 表示本地服务不会处理这个对象内容。

过去,攻击者常常会对在传统的 Office 文档(二进制复合文档)中插入的内容进行混淆,而现代的 Office 文档(OpenXML 文档)则是基于 XML 标记语言的,可以很容易的被研究者进行分析。相比之下,传统的格式是一个由若干 OLE 流组成的二进制文档,这在 MS-PPT 的官方文档中有具体说明
官方说明大约有650页,幸运的是我们不需要全部看完,只需要了解 OLE 对象是如何被引用及如何被存储的即可。
通过结合官方文档分析样本得出以下记录类型被用于引用或链接 OLE 对象。

样本存在 RT_ExternalOleEmbed 容器及原子类型 RT_ExternalOleEmbedAtom 和 RT_ExternalOleObjectAtom 表示样本内有被嵌入的内容或链接的 OLE 对象,这强烈表示样本可能存在问题,需要被进一步进行关于是否包含恶意内容的分析。
事件相应
以下主要指标可以用于帮助识别可能的感染,防御者也可以使用 Yara 规则来帮助识别恶意的文档。
样本哈希值
d7c6e591c0eb1e7ab23c036fd1c93003
2968fb5744433a7a8fabf65228f57801
f4abbd6f97f035cfadd43962ee5c0e20
主要网络指标
hxxp://secureemail[.]bz/updater.exe
c098a36309881db55709a759df895803
hxxp://secureemail[.]bz/pending.exe
982a2161673245c3eaa80313238f4037
对现有 PhishMe Triage 的客户我们使用如下规则进行检查恶意文档:
PM_PPT_With_OLEObject
PM_PowerPoint_Show_Embedded_OLE
PM_PowerPoint_Single_Slide_Presentation
总结
这是另一中攻击者如何利用现有的应用特性绕过安全控制的例子。攻击者使用幻灯片动画和自定义操作代替宏来触发嵌入的 Payload。此外,不同于传统的使用宏,用户不需要进行操作允许执行脚本语言,取而代之是让用户确认他们想运行 Payload。这就为攻击者提供了更多的选择来伪造可执行文件或脚本的名字,以达到最终欺骗用户的目的。