Swf攻击样本分析

1580阅读 0评论2014-12-24 水中游于
分类:网络与安全

延续了近期通过flash利用ie浏览器漏洞的趋势,CVE-2014-6332的样本在很多地方接二连三的被捕获,这一趋势的最著名的例子是cve-2014-0322和cve-2014-1776的利用。

我们还没有遇到最原始的SWF利用样本,但是通过分析SWF,很明显是几个构造函数的内存破坏。

这个exploit中有趣的部分是flash组件,通过反编译ActionScript乍一看相当简单,exploit中相当多的代码以前见过。

CVE-2014-6332Swf攻击样本分析

这篇文章将不细讲 spray漏洞,因为它们和以前出现的时候几乎一样,简而言之,

信号处理函数启动,ExternalInterface 调用一个/ VBScript函数触发浏览器的漏洞。

一旦信号处理函数通过扫描检测到vector变长,它就停止检测并继续到下一个段落。

下一个被损坏的vector覆盖到整个内存,并定义读/写

通过向后扫描,确定Flash_*.ocx的一个指针泄露

之后,VirtualAlloc和GetProcAddress的地址从导入表中计算,等以后编写shellcode时使用。

ROP链通过覆盖以前创建的Sound对象的虚函数表来触发,并调用toString方法,完成第一个ROP小部件(Gadget)

CVE-2014-6332Swf攻击样本分析

这有一个行为值得一提,之前的shellcode,stack pivot之后,原堆栈地址(现在是eax)保存在ESI)保存在esi,然后放回esp作为的shellcode的一部分,确保shellcode可以在原堆栈上运行。

The shellcode

shellcode有趣的是,它似乎是为了绕过Microsoft EMET保护而定制的,其他的安全产品可能也是如此。

首先根据EMET,可以看到shellcode设置其数据段(包括大部分以后解决的函数的hash。

CVE-2014-6332Swf攻击样本分析

shellcode通过调用GetProcAddress解析NtSetContextThread的地址,开始运行,地址是通过ActionScript代码,在之前写到 heap spray (由ecx指向的)里面的。

CVE-2014-6332Swf攻击样本分析

按照2012年Piotr Bania证明的方法,shellcode建立了一个CONTEXT结构,调用NtSetContextThread,覆盖debug寄存器和消除EMET的EAF特征。

这一步完成后,shellcode面临的困难大大降低。

然后继续解决之前函数里输入的hash。

CVE-2014-6332Swf攻击样本分析

它在两个独立的loops中处理来自kernel32和ntdll的函数,如下:

LoadLibraryA
GetProcAddress
VirtualAlloc
IsBadReadPtr
WriteProcessMemory
GetModuleHandleA
Sleep
VirtualProtect
CreateThread
GetProcessHeap
CreateFileA
WriteFileA
CloseHandle
WinExec
GetTempPathA
SetUnhandledExceptionFilter
RtlAllocateHeap
Memcpy
ZwGetContextThread
ZwSetContextThread

一旦所有的函数处理之后,它通过Flash组件,进去读取一个paload PE,置于shellcode结尾,

Payload PE 通过一个名为“show.jpg”的文件到达,被魔法值0xDEADBEEF41414141标记,另一个DWORD包含它整体大小。

它被复制到内存中,然后写入到Local\Temp目录下的“windump.exe”文件(使用GetTempPathA检索)。

这个店由另一块 evasive代码介绍。

CVE-2014-6332Swf攻击样本分析

shellcode检查进程中是否存在 EMET.dll

如果这样,他正常调用WinExec,并且payload运行。否则,重置UnhandledExceptionFilter,保存当前esp值,调用第一次控制最后一个SEH handler的wapper函数,(由TEB指向)跳转到WinExec。

返回后,它将重置esp到之前的值,并无痕迹退出。

无论哪种方式,从损坏的sound对象的 toString method方法返回的已经恢复到正常执行。

结论

这个漏洞很有趣,因为它首先瞄准了受EMET保护的机器(准确的说是 EMET 4.1)。

奇怪的是,未完成bypass——这个exploit会在VirtualAlloc被EMET的堆栈检查抓到。

禁用或bypass这个单一的测试——这个exploit成功bypass EMET 4.1.

事实上,通过对customizations的小设置,也可以使这个exploit bypass EMET 5.1

尽管不是很熟悉,这个exploit展示了一个 bypass EMET的重大进展,而在同类型的以前的exploit中,攻击者通过 一个之前的IE补丁信息泄露(CVE-2014-7331),来避免运行了EMET的机器。

值得注意的是,Palo Alto Networks Traps通过大量的冗余制止这种利用,我们将继续研究这些漏洞并适时更新。

上一篇:FAT32驱动内核溢出分析
下一篇:运维85条军规