专栏名称: 看雪学苑
致力于移动与安全研究的开发者社区,看雪学院(kanxue.com)官方微信公众帐号。
目录
相关文章推荐
51好读  ›  专栏  ›  看雪学苑

【技术探索】EPS文件利用如何逃逸 EMET

看雪学苑  · 公众号  · 互联网安全  · 2017-03-03 18:33

正文

前几天,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. 定义一个函数,用来查找给定模块的导入表中的特定函数,然后返回函数地址。







请到「今天看啥」查看全文