0x1 概况
近日,腾讯电脑管家捕捉到一个新的office文档病毒样本,经分析为9月12号刚被微软修复的.NET Framework漏洞(CVE-2017-8759)的野外攻击样本。该漏洞跟之前的rtf漏洞(CVE-2017-0199)一样,只要用户打开恶意的Office文档就会中招。
0x2 CVE-2017-8759漏洞执行分析
CVE-2017-8759本质上是一个.net framework漏洞,影响所有主流的.NET Framework版本:
Microsoft .NET Framework 4.6.2Microsoft .NET Framework 4.6.1
Microsoft .NET Framework 3.5.1
Microsoft .NET Framework 4.7
Microsoft .NET Framework 4.6
Microsoft .NET Framework 4.5.2
Microsoft .NET Framework 3.5
Microsoft .NET Framework 2.0 SP2
……
当前主流的windows 7、windows 10等操作系统中都默认安装了.NET Framework,任何使用SOAP服务的软件都能通过.NET Framework触发。同时它可以被集成到office文档中,用户只要双击打开office文档,无需其他操作,即可触发该漏洞,实现任意代码执行。漏洞位于https://referencesource.microsoft.com/#System.Runtime.Remoting/metadata/wsdl的PrintClientProxy函数中,该函数用于将解析wsdl文件后得到的信息格式化成.cs代码parser.cs:
图1:parser.cs部分代码
soap:address中的location指定了SOAP的URL地址,在6142行、6149行中,调用了WsdlParser.IsValidUrl()函数来格式化location指定的URL地址:
这个函数功能很简单,将解析得到的URL地址前面加上@”,末尾再加上”,就返回了,例如:
string value输入的URL地址是https://guanjia.qq.com,会被格式化成@”https://guanjia.qq.com”返回给调用者。6148行、6149行、6150行三行代码会格式化成如下所示的代码:
// base.ConfigureProxy(this.GetType(), @"”https://guanjia.qq.com”
一个wsdl文件 中可以指定多个location,从以上代码中可以看到,只有第一个location才是有效的,从第二个开始,会加上注释符//,整个URL地址会被当作注释内容输出到.cs代码中,然后会创建csc.exe进程,由它编译生成一个名字类似于http*****.dll,这个DLL会被加载到office进程中,由于最终编译生成的.dll里面不会包含注释的URL地址,在正常情况下,这里不会有任何问题。
但是WsdlParser.IsValidUrl()函数中没有考虑输入的string value会包含一个换行符的情况,例如,我们捕获的样本中指定了如下所示的一个location:
WsdlParser.IsValidUrl()函数格式化后,会生成如下的代码:
我们可以看到注释符//只注释了base.ConfigureProxy(this.GetType(), @";,由于换行符的存在,它不会注释掉接下来的4行代码,这些代码会被编译到最后生成的http*****.dll中,被office进程加载后执行。
因此,恶意样本只要构造特殊的soap xml,如
然后通过System.Diagnostics.Process.Start(_url.Split('?')[1], _url.Split('?')[2]);这行代码就可以创建了mshta.exe进程,然后拉取对应的脚本执行恶意的代码。
0x3 样本分析
捕捉到的野外利用样本通过邮箱进行传播,主要的攻击对象包含外贸工作从业者。攻击者给攻击目标发送钓鱼邮件,然后附带利用漏洞构造的order.doc文档,诱惑被攻击用户打开。而一旦不小心打开该文档,就会触发漏洞,被种植上远控木马,导致隐私信息的泄漏。
样本的进程启动关系如下:
图6:样本启动关系链
1、 文档执行分析:
文档打开后,会从服务器https://endlesspaws[.]com/plas/word[.]db拉取db文件,而该文件中内嵌了一段VBScript脚本,会由mshta.exe解析执行:
它首先会清理掉当初解析生成的.cs代码文件、编译生成的.pdb、.dll文件,然后会进一步从攻击者控制的远程服务器中继续下载木马文件a:
https://endlesspaws[.]com/plas/under[.]php?hhh=5。2、 病毒a分析:
该样本为一个downloader,会继续从病毒服务器下载病毒文件b:
https://endlesspaws[.]com/plas/under[.]php?hhh=2
图8:木马下载代码片段
下载回来后,会把文件放到启动目录,使得可以开机启动:
%AppData%\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\icloud.exe"
接着,会从https://endlesspaws[.]com/plas/dd[.]zip下载回来一个空的doc文档,然后命名为%Temp%\New Document.doc,并且执行。
3、 病毒b分析:
该文件为该次攻击的核心文件,是一款远控木马,木马操纵者可以完全控制受害者的机器,包括获取受害者的系统详细的信息、定向收集和下放任意文件、删除文件和目录、远程执行任意程序。该木马的一大特点是,所有的敏感信息全部都加密存放,只有在使用时才临时解密,同时,每次加密采用的方法也完全不一样,增加逆向分析的难度。同时,该远控与传统远控相比,最大的特点是没有使用传统的C&C,而是利用及时通信软件AIM(AOL(American Online) Instant Messenger)来传递控制命令和数据,这种方法增加了静态分析的难度,同时,也可以轻易逃过流量感知层的监控。
3.1:与控制端通信
木马根据AIM使用的OSCAR通信协议在本地模拟一个AOL Apple客户端Apple iChat,随机选择之前注册好的9个小号登录,每个小号都已经与主号成为了朋友,这样主号就可以向小号发送命令和数据。下表是9个小号的账号和密码和主号的账号:
账号 |
密码 |
Hatwoman00@hotmail.com |
qndlsRod00& |
Hatwoman10@hotmail.com |
qndlsRod10& |
Hatwoman30@hotmail.com |
qndlsRod30& |
Hatwoman40@hotmail.com |
qndlsRod40& |
Hatwoman50@hotmail.com |
qndlsRod50& |
Hatwoman60@hotmail.com |
qndlsRod60& |
Hatwoman70@hotmail.com |
qndlsRod70& |
Hatwoman80@hotmail.com |
qndlsRod80& |
Hatwoman90@hotmail.com |
qndlsRod90& |
hatmainman@hotmail.com |
未知 |
3.2:远控功能
病毒通过不同的控制码来控制不同的功能,对应关系如下表:
控制码 |
对应功能 |
0x6 |
获取磁盘信息 |
0x10 |
获取指定文件的信息 |
0x31 |
上传指定文件内容 |
0x41 |
下放或修改文件 |
0x51 |
删除文件或目录 |
0x53 |
重命名文件 |
0x55 |
移动文件 |
0x81 |
获取当前系统运行的进程列表 |
0x83 |
结束任意进程 |
0x61 |
启动任意进程 |
0x4 补丁分析
微软已经于9月12号发布了针对该漏洞的补丁,微软在补丁中修改了WsdlParser.IsValidUrl()函数,它循环遍历location中指定的每一个字符,对于换行符这样的特殊符号,不会输出它,对于不是数字也不是字母的字符,打印成\u****十六进制形式输出,例如,上述攻击者指定的有问题的location最终生成如下的代码:
这样就有效避免了最终生成的代码中出现换行符的情况,也确保了注释符//能注释掉location中指定的内容。
0x5 结语
利用钓鱼邮件进行攻击,由于攻击成本低廉,并且攻击广度大,有着可观收益,因此一直是攻击者喜欢使用的攻击方式。而文档类的漏洞攻击更是被攻击者所青睐。我们推测该漏洞CVE-2017-8759可能会和之前的rtf漏洞CVE-2017-0199一样,被越来越多的攻击者所使用。
我们建议用户及时修复该补丁,并且使用电脑管家进行防护。目前腾讯电脑管家可以对该漏洞攻击方式进行拦截。
图12:电脑管家漏洞拦截