对PDF _CVE-2009-3459分析文章的翻译
翻译附注:一直在分析关于PDF方面的漏洞,CVE-2009-3459是之前刚爆出来的漏洞,网上有这么一篇分析文章
自己试着翻译了一遍,并记录为以下文章,其中必然有语句不通,翻译错误的地方,还望指正。
在黑防上看到 泉哥 很多篇翻译的文章,请多多指点。
另附上:PDF格式及doc 格式文档各一份
Smashing Adobe's Heap Memory Management Systems for... Profit
原文地址为:
http://www.fortiguard.com/analysis/pdfanalysis.html
深入分析最新PDF 0day利用
2009. October.17
Research and Analysis: Haifei Li
Editors: Guillaume Lovet, Derek Manky(作者和编辑,不作翻译)
目录:
导言
概览
1. 漏洞
2. 开发
2..1神秘函数
2.2控制执行流程
2.3填充堆
2.4击溃PDF堆内存管理系统
3.记录嵌入的ShellCode的行为
结论
导言:
正如一份最近的Blog文章中的记录所指出的那样,通过比较计算机犯罪形式,安全行业对PDF漏洞的关注程度在持续不断的提升当中。
最近,一个高危险级别的新PDF 0day漏洞(CVE-2009-3459),在Adobe的Blog中被公布出来,在网络中正被积极利用。
至截稿时,此漏洞的补丁已经发布,并且我们强烈建议使用它。与此同时,修补此漏洞,安全厂商(AV(杀毒软件),IDS(入侵检测系统),IPS(入侵防御系统),等等)必须做出调整来阻止恶意PDF
文档利用此漏洞。
为此,为深入了解这个漏洞,本篇文档提供了一篇对网络上截获的恶意PDF的分析。
概述:
PDF格式文档大都有标签,参数和流组成,并且可以包含JavaScript代码。这个漏洞是Adobe Reader在处理一个特定参数触发的一个整数溢出漏洞。
当前,整数溢出是相当普遍的,但是利用它去执行任意代码却往往是非常困难并且相当有技巧性。成功利用此漏洞的人,采用了一中新颖的策略(尽管并不普遍,它只能在Adobe公司的应用程序上利用)。有5个基本步骤在这个利用中:
●一个参数被设置成一个特定的极大值在一个PDF文档中,Adobe Reader在一个操作中使用这个参数,触发整数溢出。后果:操作的结果值小于程序通过参数值所预期的大小。
●溢出值被用于在堆中分配一段缓冲区,这段缓冲区会因此小于给定的参数值。
●程序沿着正常流程,在PDF文档中,上述被溢出调整的调整的内容会按照Bit-Encoded编码在PDF文档的一个流中。一旦处理的流大于被分配的小的缓冲区,结果就回在堆内存中被覆盖(堆溢出),
●BitStream(比特流)控制的“调整”被攻击者给定(在PDF文档中),它精心特定的覆盖堆内存一段极小的部分。
由于可能的“调整”非常有限,最理想的情况是攻击者使用一个单字节来改变一个函数的指针(在堆上的一个C语言结构)。这个函数指针最终作为恶意代码(控制EIP)的一个传输点被调用。
当然确保恶意代码每次都会执行(不被Crash,等等)无疑是最难的一部分。如何确保在执行流程紧接着函数指针最终被改变后的而已代码仍然有效?
●通过填充填充NOP块,使其执行到ShellCode。这是理想的JavaScript嵌入PDF文档(典型的堆填充方法)。
这些步骤会在1,2节进行分析。
有人会说,当攻击者获得程序执行流程后会做什么仅仅是理论上的。这的确涉及到具体攻击实例,不同于一般的攻击利用:攻击部分代码将会在第三节进行分析。
1:漏洞
触发初始整数溢出(此利用样本)在恶意PDF文档的如下位置:
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
