Sandworm Attack小结

 

     这个漏洞刚出来时就分析过,当时大致弄明白了原理,但对很多细节和原理还是一知半解。后来开始找工作……今天终于有时间来把欠的这部分功课补上。

     这个漏洞网上的各种中英文分析已经很多了,因此这里我只根据自己的情况做一个小的整理和总结,并将参考的各种相关资料贴上来供自己温故知新。

 

1. CVE-2014-4114

     首先,CVE-2014-4114这个逻辑漏洞的核心在于当PPT调用IPersistStorage接口的Load方法来加载storage对象(OLE复合文档)对应的OLE复合文档对象时,未对所有类型的复合文档进行MOTW(Mark On The Web)处理导致的。从而使得攻击者可以通过伪造OLE复合文档的CLSID来绕过MOTW保护。其执行过程如下图所示:

 

 

图1 执行路径[1]

 

    CVE-2014-4114攻击样本中复合文档对应的CLSID [2]如图所示:


 图2 CLSID

 

    通过查询注册表,{00022602-0000-0000-C000-000000000046} 对应的是Video Clip。由图1可见,CPackage::Load调用了ReadClassStg来获取复合文档的文件类型,并根据CLSID分两类处理。

    而样本中两个文档的类型都为0x22602(对应_CLSID_AVIFile),因此CPackage::Load调用LoadMMSStorage进一步处理。LoadMMSStorage内部根据具体类型,调用CPackage::OLE2SoundRecReadFromStream --> CPackage::CreateTempFileName --> CopyStreamToFile最终将文件写入临时目录。

    由图1可见,CopyFileW和CopyStreamToFile之后,未将读取到文件进行MOTW处理,即未调用MarkFileUnsafe。

 


图3 MarkFileUnsafe

 

---------------------------------------------------------------------------------------------------

MarkFileUnsafe

    MarkFileUnsafe的作用是通过调用IZoneIdentifier::SetId来设置文件的Security Zone。此处设置的URLZONE值为3,即URLZONE_INTERNET类型(图4),从而标明此文件来自于其他计算机(图5)。

 

图4 URLZONE

 


 图5 Security Zone

 

    注意,Security Zone是通过NTFS文件系统的Alternate Data Streams (ADS)特性实现的,而不属于Windows的ACL机制。它通过给文件创建一个名为Zone.Identifier:$DATA的Alternate Streams来保存Zone信息。如图6所示。

 

图6 Zone.Identifier:$DATA

 

    随后,当用户试图运行、安装此类文件时,Windows会检测文件的Zone信息,阻塞执行并弹出一个警告提示,提示用户将有不可信的文件执行。

 

图7 安全警告

 

---------------------------------------------------------------------------------------------------

    最终,写入临时目录的slides.inf和slide1.gif未经MOTW处理,如图8所示。


 图8 样本释放的文件

 

    随后,PPT通过OLE复合文档对象IOleObject接口的DoVerb方法来响应终端用户的动作。这里PPT根据幻灯片xml的定义,调用DoVerb方法(iVerb == 3)。如下图所示

 

 

图9 slide1.xml

 

    IOleObject::DoVerb()内部根据iVerb的值进行不同的处理。当iVerb大于等于3时,执行流程来到图10所示的位置。其功能与“右键单击文件,在Popup菜单中选择第2个(3-2=1)选项来运行文件”一致,而对于inf文件,其Popup菜单第二个选项刚好为“安装”(如图11所示),因此最终通过InfDefaultInstall.exe安装了inf。

 

 

图10 IOleObject::DoVerb() with iVerb=3 [3]

 

 

图11 Popup菜单

 

2. CVE-2014-6352

    MS14-060发布3天后,就爆出补丁依旧可以被绕过,并在野外发现了相应的样本。随后微软发布了临时解决方案Fix it (Security Advisory 3010060)在MS14-064发布前缓解漏洞利用。

    首先,看一下MS14-060补丁的修补方案,通过二进制对比工具可以发现MS14-060只完善了所有类型复合文档的MOTW处理,如下图所示。

 

图12 添加MOTW保护 [1]

 

    然而,本次漏洞的问题不止这一处,前面的分析已经指出攻击者可以同时通过操控“OLE复合文档的CLSID”和“xml中的OLE Verb”来改变执行流程。

    但问题在于并不是所有被“MOTW保护”标记的文件在打开时都会弹出警告窗口。例如从网上下载的docx、pdf、zip等等文件,打开它们时并不会被提示安全警告(注:docx等office文件会在保护视图模式下打开)。