深入解析PowerPoint二进制格式漏洞分析与防护策略

本文详细分析了PowerPoint二进制文件格式解析漏洞(CVE-2009-0556),提供了临时防护措施包括禁用二进制格式和使用MOICE沙箱,并给出了使用WinDbg动态分析恶意文档中木马程序的实用技术方法。

调查新的PowerPoint问题

今天下午,我们发布了安全公告969136,描述了PowerPoint在解析传统二进制文件格式时存在的新漏洞。不幸的是,我们发现该漏洞已被用于在定向攻击中部署恶意软件。我们希望这篇博客文章能够:

  • 帮助您保护组织免受利用
  • 帮助您分析可疑的PowerPoint文件

我们看到的利用此漏洞的恶意软件样本是我们在野外看到的第一个可靠利用Office 2003 SP3(具有最新安全更新)的漏洞。Office 2003 SP3(2007年9月发布)在防范坏人方面表现良好,但我们在将Office 12模糊测试工作中发现的修复程序向后移植到Office 2003 SP3时遗漏了这个错误。SP3是一个大规模的安全推送,我们建议所有Office 2003客户应用(尽管存在此漏洞)。

您可以在环境中应用几个变通方法来保护自己免受使用此漏洞的潜在攻击。首先,较新的XML文件格式中的PowerPoint文件无法访问易受攻击的代码。如果您的环境大部分已经迁移到使用PPTX,您可以使用安全公告中描述的FileBlock注册表配置暂时禁用组织中的二进制文件格式。或者,您可以暂时强制所有传统PowerPoint文件在Microsoft隔离转换环境(MOICE)中打开。启用MOICE的步骤在公告中列出。除了MOICE在转换过程中使用的深度防御沙箱外,PowerPoint转换器不易受此错误的影响,因此可以安全地使用MOICE来“拧出”不安全的记录配置。

最后,我们想分享一些分析我们看到的此漏洞利用的技巧。如果您可以访问MMPC博客文章中列出的任何样本,您可以按照这个迷你教程来从定向攻击中提取特洛伊木马。这是一种动态分析方法,甚至不需要您识别汇编。但是,您需要一个易受攻击的Office版本(在这种情况下是Office 2003 SP3)和WinDbg。

首先设置映像文件执行选项以为“POWERPNT.EXE”设置默认调试器:

  • 开始->运行->Regedit.exe
  • 转到HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
  • 创建一个名为“powerpnt.exe”的新键(无引号)
  • 单击新的“powerpnt.exe”键,并创建一个名为“Debugger”的新REG_SZ值,并将其值设置为“windbg.exe”(确保windbg.exe在您的PATH中)

接下来,双击恶意PowerPoint文件。您将看到WinDBG窗口弹出,要求您输入命令。设置这些断点:

1
2
3
4
5
bp kernel32!CreateFileW ".printf \"CreateFileW(%mu) RetAddr 0x%08x\\n\", poi(esp+0x4), poi(esp);dds esp L1; g"
bp kernel32!CreateFileA ".printf \"CreateFileA(%ma) RetAddr 0x%08x\\n\", poi(esp+0x4), poi(esp);dds esp L1; g"
bp kernel32!LoadLibraryW ".printf \"LoadLibraryW(%mu) RetAddr 0x%08x\\n\", poi(esp+0x4), poi(esp);dds esp L1"
bp kernel32!LoadLibraryA ".printf \"LoadLibraryA(%ma) RetAddr 0x%08x\\n\", poi(esp+0x4), poi(esp);dds esp L1"
bp kernel32!WinExec ".printf \"WinExec(%ma) RetAddr 0x%08x\\n\", poi(esp+0x4), poi(esp);dds esp L1"

这会导致在调用CreateFile、LoadLibrary和WinExec时打印出相关参数。这样,我们将能够看到漏洞利用创建了哪些文件,包括完整路径。DataRescue的Eric Landuyt使用这种方法分析了一个恶意软件(嗨,Eric!)。在我们的场景中,我们将其应用于shellcode。我们还设置了一个“WinExec”断点,因为我们知道这个特定的shellcode将使用WinExec来执行特洛伊木马文件。有时shellcode使用CreateProcess代替。重要的是要注意,我们没有为WinExec断点放置“g”,因为我们不希望它执行。我们只想要路径。要继续该过程,请按“g”让PowerPoint执行。现在,您将看到屏幕上出现大量消息,因为PowerPoint实际上将CreateFile/LoadLibrary用于合法目的;shellcode也会使用它,但会在最后。这是一个示例输出:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
0:000> g
<b>CreateFileA(C:\DOCUME~1\user\LOCALS~1\Temp\~AC0810.tmp) RetAddr 0x7c802039</b>
00133598  7c802039 kernel32!GetStartupInfoA+0x14b
<b>CreateFileW(C:\DOCUME~1\user\LOCALS~1\Temp\~AC0810.tmp) RetAddr 0x7c801a4f</b>
00133574  7c801a4f kernel32!CreateFileA+0x2b
<b>WinExec(C:\DOCUME~1\user\LOCALS~1\Temp\~AC0810.tmp) RetAddr 0x7c802039</b>
001335ac  7c802039 kernel32!GetStartupInfoA+0x14b
eax=7c86114d ebx=7c802039 ecx=00000000 edx=7c802039 esi=001860f8 edi=001861f8
eip=7c86114d esp=001335ac ebp=00186087 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00200202
kernel32!WinExec:
7c86114d 8bff            mov     edi,edi
0:000>

从输出中很容易看出特洛伊木马被放置的位置。您现在处于断点处,因此可以安全地获取恶意EXE文件并执行任何您想要的分析。

果然,~AC0810.TMP是一个恶意的PE二进制文件:

![恶意PE二进制文件]

您可以将这种快速、简单、通用的技术应用于分析EXE恶意软件、PDF、IE和其他类型的漏洞利用。如果您有反馈或其他分析技术想要分享,请告诉我们。

  • Bruce Dang和Jonathan Ness,MSRC工程部 发布内容“按原样”提供,不提供任何保证,也不授予任何权利。

更新(2009年4月3日):对LoadLibrary断点命令进行了微小编辑。感谢Julio Auto指出这一点。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计