-
-
[翻译]EPS文件利用如何逃逸 EMET(CVE-2015-2545) —— 一次技术探索
-
发表于:
2017-3-2 21:46
9998
-
[翻译]EPS文件利用如何逃逸 EMET(CVE-2015-2545) —— 一次技术探索
前几天,@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"
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!