CVE-2010-2883浅析-Adobe Reader栈溢出漏洞

来源:互联网 发布:手机淘宝 平板 编辑:程序博客网 时间:2024/05/22 14:16

前言

2012年3月29日,纽约时报报道了一个由TrendMicro发布的APT攻击分析报告——Inside an APT Campaign with Multiple Targets in India and Japan。根据这份报告,该攻击针对印度和日本的航空航天、军队、能源等单位进行了长时间的渗透和刺探。报告显示这次攻击行动是通过钓鱼邮件开始的,例如针对日本目标的钓鱼邮件的内容大都跟福岛核电站的核辐射问题有关。攻击利用了很多针对pdf/rtf的漏洞,包括CVE-2010-3333,CVE-2010-2883,CVE-2010-3654,CVE-2011-0611,CVE-2011-2462等。最后,报告将疑似攻击者定位到了一位前川大的学生——Gu Kaiyuan。当事人在腾讯工作,后来腾讯和其本人都澄清了此事。
SHA256: 69dd4a5f606ccbe2a69acd6d7eec98b17d4d8bc4545b08511454b784ef6885a3

使用PDFStreamDumper分析PDF恶意样本

首先用PDFStreamDumper可以看到样本中包含的堆喷的JS代码和TTF对象。
这里写图片描述
这里写图片描述
将TTF对象保存以后用010editor模板查看。TTF表目录项结构如下。
这里写图片描述
这里写图片描述
根据offset定位到具体的内容。
这里写图片描述

CVE-2010-2883

在IDA中打开CoolType.dll,在字符串中搜索SING,通过交叉引用定位到漏洞点。可以看到正是在CoolType.dll中解析SING字体时调用strcat没有对字符串长度进行检测就将其直接复制到固定大小的栈空间从而导致栈溢出。
这里写图片描述
下面来实际调试一下,可以看到strcat的第二个参数是SING字体偏移0x10处的内容,010editor中从0x11C开始。
这里写图片描述
一般情况下应该覆盖返回地址绕过GS了,但是这个漏洞的利用过程中非常巧妙的一点是函数返回之前会调用一个栈上的地址。

0803DDAB    E8 483D1300               call jmp.MSVCR80.strcat0803DEAF    E8 2A8DFDFF               call CoolType.08016BDE    08016C56    E8 C64E0000               call CoolType.0801BB21        0801BB41    FF10                      call dword ptr ds:[eax]            0808B308    FF10                      call dword ptr ds:[eax] // 触发点

这里调用关系很复杂,不过最终call dword ptr ds:[eax]处eax的值是我们可控的。
这里写图片描述
接下来的ROP操作如图所示。
这里写图片描述
经过ROP1和ROP2后栈顶指向了0x0c0c0c0c,这是JS代码堆喷射得到的。接下来的shellcode都比较套路了。主要作用是:
1.调用CreateFileA函数创建一个名为iso88591的隐藏文件;
2.调用CreateFileMappingA函数创建文件映射;
3.调用MapViewOfFile函数映射到本进程的地址空间内;
4.调用memcpy函数复制下一个阶段的shellcode并执行。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
下一个阶段的shellcode经过一系列获取临时文件目录并创建文件之后使用WinExec启动创建的文件。Adobe Reader的沙盒保护是在Adobe Reader 10中加入的,所以这里也不用像CVE-2013-3346那样还需要一个CVE-2013-5065内核漏洞获取权限了。
这里写图片描述

参考资料

1.《漏洞战争》第二章第三节
2.CVE-2010-2883 Analysis

阅读全文
0 0