首页
论坛
专栏
课程

[翻译]EPS文件利用如何逃逸 EMET(CVE-2015-2545) —— 一次技术探索

2017-3-2 21:46 2352

[翻译]EPS文件利用如何逃逸 EMET(CVE-2015-2545) —— 一次技术探索

2017-3-2 21:46
2352

前几天,@PhysicalDrive0 (恶意软件猎人) 公布了一个新的 word 文档样本,我们被这个样本所吸引,并在 Morphisec 实验室里面检验了这个样本。我们想要知道是否我们的产品能够做到立即防御目标。如预期的那样,它做到了。当我们打开这个 word 文档的时候,这个恶意文档立即尝试去执行并感染我们的机器,然而我们的 WinWord应用程序被 Morphisec Protector, 所保护,所以这次攻击马上被防护了,并且被围困,看下面:

我打算深入看一下这个相当聪明的方法,并且研究了来自 Morphisec interception 的日志。我们发现相当有趣的是恶意行为来自 EPS(image) 文件的处理过程。


我们决定关闭  Morphisec protection,想验证一下会发生什么。我们很惊讶地发现这个样本完全逃逸了最新版 EMET 5.5 的检测,见下面(现在最新版为 5.5.2)

需要指出的是,关于这个特别的漏洞,CVE-2015-2545,“微软畸形 EPS(Encapsulated Post Scrip) 文件漏洞”,从 2015年11月开始(MS15-099),一个补丁已经被发布,可以用来修复这个漏洞。所以任何已经打了这个补丁的系统都可以被保护。但就像经常发生的那样,许多系统在没有打补丁的环境中还会保持很长一段时间,鉴于无止境地打打补丁既浪费时间又会对系统造成损害。


与我们的研究同时进行的 @r41p41 ,在这篇博客里公布了他对这个利用的发现(基于一个稍微有些不同的样本)。鉴于  @r41p41 已经描述了逃逸 EMET 的具体细节(我想感谢 @r41p41 对于我们这次研究的贡献),我决定采用另一个不同的方法,一种不同的视角进行说明,与其用我们广博的辩论(这里可能意指写很多文字夸夸其谈)这种低级的方式,我们选择以一种更高级的方式做研究。


我们对 PostScript 抽象层的研究


这里我将通过描述 PostScript 文件里面对于 ROP 的寻找当时来关注  PostScript 抽象层(在一些反混淆之后)。


我们分析的这个样本的哈希值是:23368088b183a8b7dc59f33413a760daa06fa0e027a1996677c97db2aeec22b8


在接下来的技术描述中,我主要关注 32位 程序(的利用),尽管这个利用也可以在 64位程序上工作。这些代码片段代表已经去混淆的代码。值得一提的是几乎所有已存在的这个利用的样本都包含相同的 EPS文件,只是稍微做了一些修改,因此完全理解它是如何工作是重要的。


1. 首先,触发一次漏洞,目的是为了判断操作系统是 32位 还是 64位

2. 接着,再次触发漏洞去破坏一个新的 vector


3. 然后,进行堆喷射,以 64KB 对齐将堆喷内容写入


4. 随后,定义一系列辅助函数


5. 定义一个函数,来查找从模块泄露出来的地址对应的"MZ"的基地址,这个函数以 64KB 的步进回退搜索,直到发现 "MZ" 头部,并且校验 NT 头


6. 查找从 EPSIMP32 模块中泄露的地址,然后用之前定义的函数搜索 "MZ"


7. 定义一个函数,用来查找 EPSIMP32 的导入表中的一个模块名,然后返回相关的导入信息


8. 定义一个函数,用来查找给定模块的导入表中的特定函数,然后返回函数地址


9. 定义一个函数,返回导入表中给定模块名的模块基地址


10.定义一个函数,查找一个给定系统调用号的函数的调用地址。如果该地址处(正常情况下是 mov reg, system_call_num)被安全产品 HOOK 了,它会继续搜索下一个系统调用,直到发现一个没有被 Hook 的此类函数地址。此过程中,它会统计被扫描过的 ret 的数量(通过 0xC2 特征码)(这代表了有多少个系统函数调用被略过),在它发现一个合理的没有被 Hook 过的系统调用地址后,它会从自己的调用序号处减去扫描时遇到的系统调用函数的数量。


11.在上述所有函数被定义之后,构造主 ROP:

 - 找到 stack pivoting 和 ret gadgets

 - 执行 VirtualProtect 系统调用(通过使用 NtCreateEvent + 0x5, 但使用 NtVirtualProtect 函数的调用号)

 - 写入 ShellCode ,该 ShellCode 会加载 plugin.dll,该 dll 利用了一个内核提权漏洞(CVE-2015-1701)。(译者注:这个样本使用了组合漏洞 — CVE-2015-2545 + CVE-2015-170 有样本的同学可以在虚拟机里面看到一个具有 system 权限的 winword.exe)


正如你可以看到的那样,通过在word文档内嵌入一个带有漏洞的 EPS文档,黑客使用了一个聪明的方法来帮助它在人们的终端间传播。今天的应用程序已经几乎能在里面嵌入任何东西——如果你打开一个微软 Office 文档,你永远不知道里面有一个视频,还是图像,亦或是其他东西嵌入在里面。


原文最后两句广告打得有点过,我就不翻译了...英文好的同学可以直接看原文。

原文发表于 2016年2月16号:http://blog.morphisec.com/exploit-bypass-emet-cve-2015-2545

翻译 by 看雪翻译小组 银雁冰


最后,再附上几篇关于 CVE-2015-2545 的博客,对这个漏洞有兴趣的同学可以阅读一下:

https://technet.microsoft.com/en-us/library/security/ms15-099.aspx

https://securelist.com/analysis/publications/74828/cve-2015-2545-overview-of-current-threats/

https://www.fireeye.com/blog/threat-research/2015/12/the_eps_awakens.html

https://www.fireeye.com/blog/threat-research/2015/12/the-eps-awakens-part-two.html

https://www.fireeye.com/content/dam/fireeye-www/blog/pdfs/twoforonefinal.pdf

http://seclab.dbappsecurity.com.cn/?p=603



[公告]安全服务和外包项目请将项目需求发到看雪企服平台:https://qifu.kanxue.com

最新回复 (4)
CCkicker 2017-3-3 10:39
2
0
用心之作
仙果 19 2017-3-3 13:36
3
0
翻译的相当不错!
银雁冰 8 2017-3-3 13:45
4
0
仙果 翻译的相当不错!
谢谢版主,其实还有许多翻译不到位的地方,我会在后面继续改进
dalerkd 1 2017-3-3 14:14
5
0
游客
登录 | 注册 方可回帖
返回