危机四伏的Office高危漏洞CVE-2017-11882

2017-12-29 15:23:36
针对Office高危漏洞CVE-2017-11882,腾讯电脑管家第一时间发布预警通告,并对利用其进行攻击的样本进行严密监控,捕获拦截了大量野外攻击样本;此外,对漏洞进行深入分析时,在同组件中发现了其他未公开的漏洞以及其他文字处理程序中的类似漏洞,第一时间通知给微软和其他相关厂商并进行全网预警。

针对Office高危漏洞CVE-2017-11882,腾讯电脑管家第一时间发布预警通告,并对利用其进行攻击的样本进行严密监控,捕获拦截了大量野外攻击样本;此外,对漏洞进行深入分析时,在同组件中发现了其他未公开的漏洞以及其他文字处理程序中的类似漏洞,第一时间通知给微软和其他相关厂商并进行全网预警。

一、 事件时间线

2017.11.14 微软发布11月补丁,修复了包括CVE-2017-11882在内的多个漏洞

2017.11.14 微软补丁发布后,安全公司EMBEDI在其官方微博上公开了CVE-2017-11882的分析报告。

2017.11.15 腾讯电脑管家发布CVE-2017-11882的预警通告。

2017.11.17 腾讯电脑管家发现Eqnedit.exe还存在其他高危漏洞尚未修复第一时间报告微软并再次预警。

2017.11.20 CVE-2017-11882的漏洞利用代码被公开,腾讯电脑管家发布第3次预警。

2017.11.21 腾讯电脑管家监控到1个利用CVE-2017-11882的野外攻击样本。

2017.11.22 腾讯电脑管家监控到多个野外攻击样本,发布第4次预警。

2017.11.22 腾讯电脑管家发现除微软Office之外,其他一些办公软件也受该漏洞影响,第一时间同步相关厂商,并发布第5次预警。

2017.11.22 腾讯电脑管家发布部分攻击样本的分析报告,并保持持续追踪

2017.11.23 微软MSRC官方邮件回复,确认Eqnedit.exe还存在其他高危漏洞,并表示会尽快处理。

二、 一个隐藏17年之久的漏洞

1、漏洞披露过程

1114日,微软按照惯例发布了11月的安全更新,随后不久,安全公司EMBEDI在官方博客上公开了其向微软提交的编号为CVE-2017-11882Office远程代码执行漏洞:

https://embedi.com/blog/skeleton-closet-ms-office-vulnerability-you-didnt-know-about

讲述了他们如何发现这个漏洞的过程,并揭露了该漏洞的部分技术细节,不过没有公开漏洞验证代码(PoC)。

我们根据EMBEDI的这篇报告,并结合自身的分析,第一时间构造出了可以弹出计算器的PoC,并得出结论:该漏洞的利用代码非常简单而且稳定,极易用于黑客攻击,特别是钓鱼邮件攻击:利用漏洞可以很容易构造出包括恶意代码的Office文档,点击后无需任何用户交互就可以远程执行任意代码。同时,漏洞影响所有的Microsoft Office版本以及Office 365。意识到问题的严重性之后,我们发布了CVE-2017-11882的第一次预警通告

 

2、 漏洞关键点分析

1) 关键数据结构

漏洞存在于Office的公式编辑器组件Eqnedit.exeEquation Editor)中。Equation EditorMathType都是Design Science开发的公式编辑软件,都采用MTEF(MathType’s Equation Format)格式来存储公式数据。Equation Editor生成的公式数据汇存放在Office 文档的一个OLE Object中,该object classEquation.3,而obj data区存放的是公式的私有数据OLE Equation ObjectsOLE Equation Objects包括两部分,头部是28字节的EQNOLEFILEHDR结构,其后则是MTEF数据:

 

MTEF数据则包括两部分,一部分是MTEF Header,一部分是描述公式内容的MTEF Byte Stream

 

MTEF Byte Stream包括一系列的记录records,每一个record以tag byte开始,tag byte的低4位描述该record的类型,高4位描述该record的属性。下面就是一个MTEF结构的二进制数据:

 

2) 漏洞溢出分析

该漏洞发生在从MTEF Byte Stream中解析Font Record时出现栈溢出。下图是Font Record的二进制数据:

 

Font Record结构如下:

 

对照上图的二进制数据,tag type 8,tface 0x5A,style为0x5A,剩下的则是字体名字。在拷贝字体名字的过程中,eqnedt32会将字体名字拷贝到栈上一个大小为0x24字节的缓冲区中,而此时PoC样本中的字体长度为0x30,这样就可以成功的用0x430C12重写栈上的返回地址。存在漏洞的函数如下:

 

调试如下,进入处理字体函数:

 

完成栈溢出后,成功控制程序的执行流:

 

 

3) 漏洞利用技巧

由于默认状态下Office文档中的OLE Object需要用户双击才能生效。与CVE-2017-0199一样,需要设置OLE Object的属性为自动更新,这样无需交互,点击打开文档后恶意代码就可以执行。

 

 三、 脆弱的Eqnedt32

前面提到Eqnedt32是由Design Science公司开发的一款公式编辑软件。微软在Office 2000Office 2003中使用该工具进行公式的编辑。在Office文档中插入或编辑公式时,Office进程(如winword.exeexcel.exe)会通过RPC启动一个独立的eqnedt32.exe进程来完成公式的解析和编辑等需求。Microsoft Office 2007及之后的版本已经用内置的公式编辑工具替代了EQNEDT32.exe,但为了保证对老版本的兼容,所有Microsoft Office 和Office365支持EQNEDT32.exe编辑的公式

 

该模块编译于2000.9.11,最早是由Design Science Inc.开发,后交由微软维护。遗憾的是微软一直未对其脆弱的安全性进行升级和加固。下图是EMBEDI用ProcessMitigations工具的扫描结果,该模块没有启用DEP、SafeSEHASLR、CFG等安全防护机制:

 

 

也就是说漏洞一旦触发无需使用信息泄露ROP等漏洞利用技巧构造攻击代码变得非常简单

同时Eqnedt32模块的编写者似乎没有安全编码规范的意识,如下图,代码中大量使用了strcpy,没有对长度进行校验

 

也就是说Eqnedt32模块极可能存在其他一些漏洞。事实也如此,我们在最新版本,也就是补丁后的Eqnedt32模块中发现了另外的高危漏洞。虽然在最新版本中,微软出于安全性的考虑上,对Eqnedt32模块加上了ASLR(地址随机化),但能起到的效果非常有限:

 

我们第一时间向微软报告了新的漏洞,并发布了第二次预警:

 

预警通告中包含了一段演示视频,演示了最新版本的Eqnedt32模块仍然存在漏洞而且可以被利用。演示视频链接:

http://www.miaopai.com/show/Q0GtHUqSt4Gh9c66dT6aIlRIDeBmg2j400JYqA__.htm

四、 漏洞结束潜伏期

1、公开漏洞利用代码

1120日,EMBEDI在Github上公开了该漏洞的利用代码,所有人都可以拿去研究,或者干其他一些事情:

https://github.com/embedi/CVE-2017-11882

 

1121日,Github上出现了一键制作包含任意攻击代码的脚本,给网络黑客和网络犯罪分子打开了方便之门:

https://github.com/iBearcat/CVE-2017-11882

 

我们推测利用这个漏洞的真实攻击很快会出现紧急发布了第三次预警

 

2、出现野外攻击样本

果然漏洞利用代码公布后没多久,包括腾讯反病毒实验室、启明星辰金睛安全研究团队以及360在内的多个国内安全厂商,均监控到了多个利用CVE-2017-11882发起的野外攻击1122日,腾讯哈勃分析系统就捕获到了多个利用漏洞执行恶意功能的样本。这些样本利用rtf文档进行传播,文档打开后触发漏洞,漏洞成功利用后调用mshta.exeCC地址中获取并执行恶意脚本代码,恶意脚本代码加载本地的powershell从另一个CC地址中获取并解密一个加密的dll到本地,然后调用regsvr32加载该恶意dll,该恶意dll为一个恶意远程后门木马:

 

该样本的详细分析报告可见

https://weibo.com/ttarticle/p/show?id=2309404176984103069232

同时我们也发布了第四次预警:

 

五、 发现新的危机

进一步研究后,我们发现,漏洞CVE-2017-11882不仅影响所有的OfficeOffice365,其他一些支持EQNEDT的办公软件和windows自带的写字板程序也受该漏洞影响

 

更为严重的是,部分软件使用的是自带的EQNEDT,打了最新的补丁也没用。电脑管家第一时间将漏洞细节通知给相关厂商,并发布了第五次预警:

 

六、 结语

从目前来看,安装微软的最新补丁:https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-11882,并不能完全避免漏洞攻击的风险比较保险的方式是禁用Eqnedt模块,方式如下:

64位:

reg add "HKLM\SOFTWARE\Microsoft\Office\XX.X\Common\COM Compatibility\{0002CE02-0000- 0000-C000-000000000046}" /v "Compatibility Flags" /t REG_DWORD /d 0x400

32位:

reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\XX.X\Common\COM Compatibility\{0002CE02-0000-0000-C000-000000000046}" /v "Compatibility Flags" /t REG_DWORD /d 0x400

此外,安装腾讯电脑管家等专业安全防护软件也可以防御漏洞攻击。

生命不止,我们在网络安全战线上奋斗不止!与诸君共勉!

最新资讯