鉴于这两个漏洞的相似性,国内很多安全分析、漏洞利用等文章都将针对 Moniker的利用方式的CVE-2017-0199漏洞与CVE-2017-8570漏洞混为一谈,经常张冠李戴,真实的CVE-2017-8570的漏洞利用在2018年1月份才开始出现。
典型样本分析
该漏洞利用样本rtf格式,在rtf文件中包含两个objdata对象,其中一个为package对象,另一个为漏洞利用对象。如下

将其中的第一个objdata保存出来,分析package对象结构,可以看到:

另外一个objdata包含了CVE-2017-8570漏洞的OLE2Link对象,文档通过该OLE2Link对象触发漏洞,漏洞触发成功后会直接加载%tmp%目录下的07XF4PFEPYG3V9E.sct脚本执行。从该ole对象结构中,可以看到CompositeMoniker对象、File Moniker对象和New Moniker对象。如下图。

文档在打开时, CompositeMoniker将File Moniker定义为了一个New Moniker新对象,在此过程中,会调用IMoniker::BindToObject方法对File Moniker进行Bind操作,在File Moniker初始化指定文件时,检测到文件后缀名为.sct,会自动在注册表中查找处理.sct文件的接口,从而使用该接口将sct文件加载起来,从而导致代码执行。
从package对象中,可以看到sct文件的内容如下,该sct的主要功能是加载内置的Pe文件执行。

最终PE文件使用dephi混淆工具处理过,处理掉混淆后可以看到文件为loki家族的窃密软件,主要功能为窃取用户的FTP密码、浏览器密码等凭证信息。反混淆后的部分字符串显示如下:

3.3 CVE-2017-8759
利用趋势
该漏洞于2017年9月份公布,但真正的漏洞利用样本在8月份就已经出现。从8月份开始,腾讯哈勃分析系统捕获的该漏洞利用样本数量及趋势如下:

从趋势图中可以看到,同样是在10月份,利用该漏洞的样本数量开始上涨,在12月期间,样本数量达到最高。
漏洞原理
CVE-2017-8759是SOAP WSDL分析器代码注入漏洞,在解析SOAPWSDL定义的内容中它允许攻击者注入任意代码。
漏洞位于wsdlparser.cs中的PrintClientProxy函数中,该函数用于将解析wsdl文件后得到的信息格式化成.cs 代码

上面代码调用的IsValidUrl的函数功能为在url地址前面加上@”,在url的末尾加上”后将url返回。
对于poc中的示例,如PrintClientProxy函数处理的内容如下面的红框部分内容

经过上面PrintClientProxy函数处理后,会生成如下的代码:

可以看到注释符仅注释了“base.ConfigureProxy(this.GetType(),@”; ”的内容,而下面的代码会csc.exe进程编译成dll,随后该dll会被加载到Office进程中,从而实现代码执行。
典型样本分析
以一个典型的漏洞利用的样本进行分析。
样本为一个rtf文档,文档中嵌入的objdata如下,使用了ojbupdate标签,强制在对象还没显示出来之前就进行对象的自动更新,从而在无须用户交互的情况下就可以直接下载并执行远程文件。

提取出来的ole对象后,对象对应的CLSID为:ECABB0C7-7F19-11D2-978E-0000F8757E2A,其代表SOAP Moniker

远程加载的地址为:[xxxx].pl/[xxx]/BhvMJfZCknfT
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-88458-4.html
从我做起
小王子