首页
社区
课程
招聘
[原创]Microsoft RTF栈溢出漏洞分析(CVE-2010-3333)
发表于: 2019-4-15 20:27 6473

[原创]Microsoft RTF栈溢出漏洞分析(CVE-2010-3333)

2019-4-15 20:27
6473

每当出现一些热点事件,黑客总会借此当做诱饵,将一些包含热点新闻的恶意文档通过邮件等方式发送给受害者,用户在未知情况下,打开恶意文档就会执行恶意文档中的恶意代码,在受害者主机上植入恶意木马,并借此监视受害者,控制受害者计算机,甚至窃取受害者资料。

在“林疯狂”时期,趋势科技公司捕获到APT文档,该恶意文档主要利用CVE-2010-3333漏洞,通过邮件以附件形式发送给受害者打开附件,在受害者者计算机上植入恶意程序,然后通过C&C服务器进行通信和控制,并将窃取的敏感信息回传到C&C服务器上。

Microsoft Office XP SP3,Office 2003 SP3,Office 2007 SP2,Office 2010等多个版本的Office软件中的Open XML文件格式转换器存在栈溢出漏洞,主要是在处理RTF中的“pFragments”属性时存在栈溢出,导致远程攻击者可以借助特制的RTF数据执行任意代码,因此又称之为“RTF栈缓冲区溢出漏洞”。

操作系统:Windows XP SP3

调试器:Windbg

反汇编器:IDA Pro

漏洞软件:Microsoft Office Word(2003 SP3)

RTF(Rich Text Format)格式是Microsoft公司为进行文本和图像信息格式的交换而制定的一种文件格式,它适用于不同的设备和操作系统,RTF文件的基本元素是正文(Text),控制字(Control Word),控制符号(Control Symbol)和群组(Group)


第一行


首先通过Metasploit生成可触发漏洞的POC样本,特别是一些经典漏洞,Metasploit上会提供利用代码,通过它可以直接生成样本以供分析漏洞,通过Metasploit获取样本一直是漏洞分析人员的不二选择。

利用search搜索cve-2010-3333相关的的漏洞利用代码

这是mso.dll上的一处栈溢出漏洞,由于在循环复制内存数据到栈空间时,未检测复制的内存大小,导致覆盖到edi(0x00130000)这个只读内存地址,最后造成访问违例。

触发异常的指令地址0x30e9eb88位于函数sub_30ED4406中,暂且标记为CrashFun函数,用Windbg重新加载程序运行,在0x30e9eb88上下断点,然后打开rtf文件运行后断下:

由于msf.rtf中复制的内存数据较大,导致复制的过程中覆盖到不可写的内存地址而触发异常,因此没有去执行覆盖到的返回地址或者SEH中的异常处理函数

总结上面的分析过程,由于Word中的RTF分析器在解析pFragment属性值时,没有正确计算属性值所占用的空间大小,只要复制的数据大小超过0x14字节即可覆盖到返回地址,若继续覆盖下去还可以覆盖到SEH结构,进而控制程序的执行流程,用于执行任意代码。

将漏洞成因分析清楚后,利用该漏洞还是比较容易的,只需将返回地址用jmp esp指令地址覆盖,也就是复制数据的大小的值之后再偏移0x14字节,就可以覆盖到返回地址;然后将shellcode放置到后面,就可以执行任意代码。

由于在漏洞函数的结尾处,它在返回时会弹出0x14大小的栈空间,因此我们在jmp esp中填充一些垃圾字节以此来填充这一空缺

某个实际病毒样本的分析情况:

当漏洞函数返回后,会先从栈顶弹出0x14字节空间,然后执行0x7d1f5fb7处的JMP ESP指令,进而跳入shellcode的起始地址,导致执行任意代码

除了利用jmp esp覆盖返回地址的方法,还可以利用jmp 06+ pop pop ret指令地址覆盖SEH结构,也同样可以达到溢出利用的目的。

上面例子中的0x7d1f5fb7指令地址并不稳定,这种硬编码地址可能受到软件和系统版本影响,较难实现通用性利用,为了实现Office 2003和Office 2007的通用性利用,我们可以在返回地址上用0x0026762f覆盖,它在Office 2003上相当于call esp指令:



该地址适用于Office 2003 SP0和SP3等各个子版本,属于稳定的跳转地址,对于Office 2007,0x0026762f上已经不再是call/jmp es等类似指令,当我们用0x0026762f这个地址覆盖Office 2007上的返回地址,只要能够让它触发异常,就可以执行SEH结构。

这样的话,只需要加大内存拷贝的大小,使其覆盖醉经的SEH结构就可以劫持EIP,也就是说,我们需要同时覆盖返回地址和SEH结构

构造覆盖栈的数据如下,长度为0x2a18:



关于SEH结构地址的定位,可以使用MSF上的两个工具:pattern_create和pattern_offset定位偏移量

下载补丁后,提取安装后的mso.dll文件和未打补丁之前的mso.dll进行补丁比较,就可以找到针对漏洞的修复方法,首先用ID分别加载上面两个dll文件,点击保存按钮就会在当前目录下生成相应的idb文件,然后用BinDiff插件比对这两个idb文件,然后打开其中一个idb文件(直接拖入IDA),按“ctrl+6”单击“Diff Database”按钮,在弹出的对话框中选择另一个idb文件,之后BinDiff就会对这两个Dll进行补丁比较:




选择“Matched Functions”匹配函数进行对比,其中“similarity”一列代表函数的相似度,通常漏洞函数修改不会太大,多数在0.7~0.9之间,而且在“change”一列中大多数带有G标志,也就是图表视图发生了改变

之前已经分析过漏洞成因,漏洞函数位于unpatch_mso.dll中的0x30f0b5c2,因此直接定位此函数和patch_mso.dll中的匹配函数0x30f39832的对比情况:



红色部分就是微软在漏洞函数中加入的内容, 但是上面补丁后的代码并没有看到有检测复制内存大小的行为,因此我们可以认为检测内存大小的函数位于上面某个调用函数中,但是里面调用的函数都是通过eax偏移来索引的,不便于静态分析,要动态调试来分析

用Windbg加载打补丁后的WINWORD.exe,在漏洞修函数0x30f39832上下断点,先用未打补丁的WINWORD.exe看一下:



单步跟下去,直到call dword ptr [eax+30h],然后跟入:



获取复制内存大小



样本中代表复制内存大小的0xc8ac,若size>4则跳转,并清零后返回



微软在修复CVE-2010-3333漏洞时,主要通过检测RTF文件中的pFragments属性值的大小是否大于4字节,若大于则跳走并且返回,不再进行内存复制,从而解决了栈溢出问题


参考信息:泉哥《漏洞战争》

1.{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}
2.{\colortbl ;\red255\green255\blue0;\red255\green0\blue0;\red0\green0\blue255;}
3.{\viewkind4\uc1\pard\cf1\lang2052\f0\fs20 Osamu\cf2  Naga\cf0 y\cf3 am\cf0 a,\par
was unable to pinpoint.//PRD#
\cf1 OQS\par it \cf0 signed a \cf1 definitive\cf0  agreement\par \par }

fcd格式说明

第一行


{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}

{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}

‘;;’rtf1–>RTF版本 
ansi–> 字符集 
ansicpg936–>简体中文 
deff0–>默认字体0 
deflang1033–>美国英语 
deflangfe2052–>中国汉语 
fonttb–>字体列表 
f0->字体0 
fcharset134 ->GB2312国标码 
‘cb\’ce\’cc\’e5–>宋体 
引用方式 f0

‘;;’rtf1–>RTF版本 
ansi–> 字符集 
ansicpg936–>简体中文 
deff0–>默认字体0 
deflang1033–>美国英语 
deflangfe2052–>中国汉语 
fonttb–>字体列表 
f0->字体0 
fcharset134 ->GB2312国标码 
‘cb\’ce\’cc\’e5–>宋体 
引用方式 f0

第二行

{\colortbl ;\red255\green255\blue0;\red255\green0\blue0;\red0\green0\blue255;}
\colortbl 颜色表 ;颜色1;颜色2;颜色3; 
引用方式 cf1 cf2 cf3

{\colortbl ;\red255\green255\blue0;\red255\green0\blue0;\red0\green0\blue255;}
\colortbl 颜色表 ;颜色1;颜色2;颜色3; 
引用方式 cf1 cf2 cf3

第三行

\viewkind4\uc1\pard\cf1\lang2052\f0\fs20 Osamu\cf2  Naga\cf0 y\cf3 am\cf0 a,\par
\viewkind4正常视图 
uc1->单字节 
pard->默认段落属性 
cf1->颜色1 
lang->2052中国汉语 
f0->字体0 
fs20->字体大小20磅 
Osamu Naga 原文 
\cf0 默认颜色 
y 
\cf2 颜色2 
am\ 
\cf0默认颜色 a, 
\par换行

\viewkind4\uc1\pard\cf1\lang2052\f0\fs20 Osamu\cf2  Naga\cf0 y\cf3 am\cf0 a,\par
\viewkind4正常视图 
uc1->单字节 
pard->默认段落属性 
cf1->颜色1 
lang->2052中国汉语 
f0->字体0 
fs20->字体大小20磅 
Osamu Naga 原文 
\cf0 默认颜色 
y 
\cf2 颜色2 
am\ 
\cf0默认颜色 a, 
\par换行

看看EXP中的部分数据:



5.基于栈回溯的漏洞分析方法

首先通过Metasploit生成可触发漏洞的POC样本,特别是一些经典漏洞,Metasploit上会提供利用代码,通过它可以直接生成样本以供分析漏洞,通过Metasploit获取样本一直是漏洞分析人员的不二选择。

利用search搜索cve-2010-3333相关的的漏洞利用代码




利用use命令指定exploit,并用info命令生成关于此exploit的相关信息,包括:参数值,漏洞描述,参考资料





我们主要的目的是分析漏洞成因,因此选择可触发崩溃的POC样本,直接通过set命令即可设置target参数值,漏洞描述,





获取样本后,打开WINWORD.exe,用WinDbg附加进程,然后选择打开msf.rtf文件,触发异常:

(ee0.e34): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=0000c8ac ebx=05000000 ecx=0000019b edx=00000000 esi=1104c24c edi=00130000
eip=30e9eb88 esp=00123d98 ebp=00123dd0 iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010206
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\Program Files\Common Files\Microsoft Shared\office11\mso.dll - 
mso!Ordinal6426+0x64d:
30e9eb88 f3a5            rep movs dword ptr es:[edi],dword ptr [esi]

(ee0.e34): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=0000c8ac ebx=05000000 ecx=0000019b edx=00000000 esi=1104c24c edi=00130000
eip=30e9eb88 esp=00123d98 ebp=00123dd0 iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010206
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\Program Files\Common Files\Microsoft Shared\office11\mso.dll - 
mso!Ordinal6426+0x64d:
30e9eb88 f3a5            rep movs dword ptr es:[edi],dword ptr [esi]

0:000> db esi
1104c24c  4c 74 36 4c 74 37 4c 74-38 4c 74 39 4c 75 30 4c  Lt6Lt7Lt8Lt9Lu0L
1104c25c  75 31 4c 75 32 4c 75 33-4c 75 34 4c 75 35 4c 75  u1Lu2Lu3Lu4Lu5Lu
1104c26c  36 4c 75 37 4c 75 38 4c-75 39 4c 76 30 4c 76 31  6Lu7Lu8Lu9Lv0Lv1
1104c27c  4c 76 32 4c 76 33 4c 76-34 4c 76 35 4c 76 36 4c  Lv2Lv3Lv4Lv5Lv6L
1104c28c  76 37 4c 76 38 4c 76 39-4c 77 30 4c 77 31 4c 77  v7Lv8Lv9Lw0Lw1Lw
1104c29c  32 4c 77 33 4c 77 34 4c-77 35 4c 77 36 4c 77 37  2Lw3Lw4Lw5Lw6Lw7
1104c2ac  4c 77 38 4c 77 39 4c 78-30 4c 78 31 4c 78 32 4c  Lw8Lw9Lx0Lx1Lx2L
1104c2bc  78 33 4c 78 34 4c 78 35-4c 78 36 4c 78 37 4c 78  x3Lx4Lx5Lx6Lx7Lx

0:000> db esi
1104c24c  4c 74 36 4c 74 37 4c 74-38 4c 74 39 4c 75 30 4c  Lt6Lt7Lt8Lt9Lu0L
1104c25c  75 31 4c 75 32 4c 75 33-4c 75 34 4c 75 35 4c 75  u1Lu2Lu3Lu4Lu5Lu
1104c26c  36 4c 75 37 4c 75 38 4c-75 39 4c 76 30 4c 76 31  6Lu7Lu8Lu9Lv0Lv1
1104c27c  4c 76 32 4c 76 33 4c 76-34 4c 76 35 4c 76 36 4c  Lv2Lv3Lv4Lv5Lv6L
1104c28c  76 37 4c 76 38 4c 76 39-4c 77 30 4c 77 31 4c 77  v7Lv8Lv9Lw0Lw1Lw
1104c29c  32 4c 77 33 4c 77 34 4c-77 35 4c 77 36 4c 77 37  2Lw3Lw4Lw5Lw6Lw7
1104c2ac  4c 77 38 4c 77 39 4c 78-30 4c 78 31 4c 78 32 4c  Lw8Lw9Lx0Lx1Lx2L
1104c2bc  78 33 4c 78 34 4c 78 35-4c 78 36 4c 78 37 4c 78  x3Lx4Lx5Lx6Lx7Lx

0:000> db esp
00123d98  f0 10 4d 01 88 3f 12 00-96 cc f4 30 f0 10 4d 01  ..M..?.....0..M.
00123da8  c0 3d 12 00 00 00 00 00-00 00 00 00 00 00 00 00  .=..............
00123db8  00 00 00 00 78 a8 5c 59-41 61 30 41 61 31 41 61  ....x.\YAa0Aa1Aa
00123dc8  32 41 61 33 41 61 34 41-61 35 41 61 36 41 61 37  2Aa3Aa4Aa5Aa6Aa7
00123dd8  41 61 38 41 61 39 41 62-30 41 62 31 41 62 32 41  Aa8Aa9Ab0Ab1Ab2A
00123de8  62 33 41 62 34 41 62 35-41 62 36 41 62 37 41 62  b3Ab4Ab5Ab6Ab7Ab
00123df8  38 41 62 39 41 63 30 41-63 31 41 63 32 41 63 33  8Ab9Ac0Ac1Ac2Ac3
00123e08  41 63 34 41 63 35 41 63-36 41 63 37 41 63 38 41  Ac4Ac5Ac6Ac7Ac8A


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//