在最近的周二补丁日(10月17日)中,微软发布了62个漏洞补丁,其中有个补丁负责修复СVE-2017-11826漏洞。СVE-2017-11826漏洞是一个非常严重的零日漏洞,攻击者可借此实施针对性攻击行动,所有版本的Microsoft Office软件都会受此漏洞影响。
攻击者所使用的漏洞利用程序为一个RTF文档,其中包含一个DOCX文档,该文档利用Office Open XML解析器中存在的СVE-2017-11826漏洞。
漏洞利用载荷本身为word/document.xml格式,如下所示:
根据Office Open XML文件格式标准(ECMA-376)中的描述,“font”元素用来描述文档中使用的字体,正常的“font”元素如下所示:
在漏洞利用程序主体中并没有出现/w:font这个闭合标签。紧跟在w:font标签之后的是o:idmap/对象元素,这种情况会导致OOXML解析器出现“类型混淆(type confusion)”现象。使用任何对象元素都可以成功利用这个漏洞。在漏洞利用点之前,我们必须通过某个检查步骤,具体方法是在w:font标签之前设立一个OLEObject元素,其中的name属性值从UTF-8编码转换为Unicode编码后长度必须大于或等于32个字节。
从UTF-8编码转换为Unicode编码后,E8 A3 AC E0 A2 80会变成EC 88 88 08。
如果这些条件全部满足,这个指针会被解除引用,控制流程会移交给“该地址+4”处所对应的内容。
如果想控制0x088888EC地址处的内存内容,攻击者需要将常见的heap spraying技术与ActiveX组件结合使用。
漏洞利用程序使用msvbvm60.dll中的ROP以及gadget(指令代码)来绕过ASLR(地址空间布局随机化)以及DEP(数据执行保护)机制。RTF文档会使用与msvbvm60.dll文件相关联的CLSID来加载这个DLL模块。
ROP的第一部分功能是设置ESP寄存器的值:
ROP的第二部分内容会被忽略掉,其作用是将EIP寄存器设置为0x088883EC。最后的“pop eax; retn”指令会将0x729410D0地址填充到EAX中。这个地址是msvbvm60.dll导入(Imports)表中VirtualProtect指针所对应的地址(VirtualProtect位于Kernel32.dll中)。
下一个ROP gadget会使用这个VirtualProtect指针来调用VirtualProtect(0x8888C90, 0×201, 0×40, 0x72A4C045)函数。执行这个操作后,程序控制权会移交给0x8888F70地址处的shellcode,这段shellcode会解密并执行内嵌的DLL:
0×00 附录卡巴斯基实验室安全解决方案将СVE-2017-11826漏洞利用程序标记为:
MSWord.Agent.ix
MSOffice.CVE-2017-11826.a
HEUR:Exploit.MSOffice.Generic
对应的IOC为:
cb3429e608144909ef25df2605c24ec253b10b6e99cbb6657afa6b92e9f32fb