CVE-2015-1641及利用样本分析
字数 2205 2025-08-19 12:41:20

CVE-2015-1641 Microsoft Word类型混淆漏洞分析与利用

漏洞概述

CVE-2015-1641是Microsoft Word中的一个类型混淆漏洞,影响多个Word版本:

受影响版本

  • Microsoft Word 2007 SP3
  • Office 2010 SP2
  • Word 2010 SP2
  • Word 2013 SP1
  • Word 2013 RT SP1
  • Word for Mac 2011
  • Office Compatibility Pack SP3
  • Word Automation Services on SharePoint Server 2010 SP2 & 2013 SP1
  • Office Web Apps Server 2010 SP2 & 2013 SP1

漏洞成因:Word在处理displacedByCustomXml属性时未对customXml标签对象进行有效性验证,攻击者可以通过传入其他标签对象(如smartTag),导致类型混淆进而实现任意内存写入。

漏洞分析环境

  • 操作系统:Windows 7 SP1 (x86)
  • Word版本:2007
  • WWLIB.DLL版本:12.0.4518.1014
  • 样本MD5:A69F778D1F511268019B1080F5E3B98B

漏洞利用机制

1. 类型混淆到任意地址写入

漏洞利用的核心在于通过displacedByCustomXml属性触发类型混淆:

  1. 文档结构:恶意RTF文档包含多个OLE对象

    • 0号对象:用于加载OTKLOADR.DLL以引入MSVCR71.DLL(绕过ASLR)
    • 1号对象:完成堆喷及Shellcode布局
    • 2号对象:触发CVE-2015-1641漏洞
  2. 触发点:位于styles.xml中的displacedByCustomXml属性

  3. 内存写入计算

    • 写入地址计算公式:[[Parameter 1]+0x8]*[Parameter 2]+[[Parameter 1]+0xC]+[Parameter 1]
    • 通过精心构造的smartTag标签属性值控制写入地址
  4. 关键写入操作

    • 第一次写入:向0x7c38bd74地址处写入0xffffe696(用于后续计算)
    • 第二次写入:覆盖MSVCR71.DLL虚函数表中函数调用地址
    • 第三次写入:准备第四次写入所需的值
    • 第四次写入:覆盖函数调用参数

2. 执行流劫持

  1. 堆喷布局:通过1号对象中的activeX1.bin完成内存布局
  2. ROP链
    • 从0x7c3651EB开始执行ROP链
    • 调用VirtualProtect绕过DEP保护
  3. Shellcode执行
    • 跳转到activeX1.bin内的Shellcode部分

3. Shellcode分析

activeX1.bin Shellcode

  1. 遍历当前进程的文件句柄,查找特定大小的文件
  2. 将文件映射到内存中
  3. 通过文件头特征判断是否为样本文件及Shellcode起始位置
  4. 复制Shellcode到新分配的内存空间
  5. 跳转到第二部分Shellcode执行

RTF文档Shellcode

  1. 解密后续Shellcode
  2. 执行恶意行为(如文件创建、注册表修改等)

实际利用样本分析(Patchwork组织样本)

样本MD5:2C22EA1CED258346351EAD09B1DC6074

攻击链分析

  1. 初始感染

    • 创建隐藏文件:~$Normal.dat
    • 在注册表中创建项:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\PLAs_NEW_ORBAT
    • 删除注册表禁用项
  2. VBE脚本执行

    • 通过wscript.exe执行Normal.domx(VBE格式)
    • 解密并写入迷惑性文档:PLAs_NEW_ORBAT.doc
    • 释放三个PE文件并设置隐藏属性
  3. 白文件利用

    • 执行带有数字签名的白文件MicroScMgmt.exe
    • 加载恶意DLL:jli.dll
  4. 最终载荷

    • jli.dll与Patchwork组织的BADNEWS木马相似
    • 提供完整的后门功能

漏洞修复与防御

补丁信息
微软已发布安全更新修复此漏洞,建议用户及时更新。

防御措施

  1. 保持Office软件最新
  2. 启用DEP和ASLR等缓解措施
  3. 谨慎打开来源不明的Office文档
  4. 使用杀毒软件检测恶意文档
  5. 禁用Office的ActiveX控件(如非必要)

技术细节补充

正常情况下的XML处理

  • 解析customXml标签时会开辟新空间
  • 解析smartTag标签时处理方式不同
  • 漏洞利用这种差异控制目标写入地址

内存布局技巧

  • 利用堆喷技术布置Shellcode
  • 通过多次内存写入精确控制执行流
  • 结合ROP绕过DEP保护

参考资源

  1. 微软官方安全公告
  2. CVE-2015-1641漏洞描述
  3. RTF文件格式文档
  4. Office内存管理机制文档
  5. 相关样本分析报告

总结

CVE-2015-1641是一个典型的Office类型混淆漏洞,通过精心构造的RTF文档触发,结合内存操作和Shellcode技术实现远程代码执行。该漏洞被多个攻击组织利用,具有较高的危害性。理解其利用机制有助于更好地防御类似攻击。

CVE-2015-1641 Microsoft Word类型混淆漏洞分析与利用 漏洞概述 CVE-2015-1641是Microsoft Word中的一个类型混淆漏洞,影响多个Word版本: 受影响版本 : Microsoft Word 2007 SP3 Office 2010 SP2 Word 2010 SP2 Word 2013 SP1 Word 2013 RT SP1 Word for Mac 2011 Office Compatibility Pack SP3 Word Automation Services on SharePoint Server 2010 SP2 & 2013 SP1 Office Web Apps Server 2010 SP2 & 2013 SP1 漏洞成因 :Word在处理 displacedByCustomXml 属性时未对 customXml 标签对象进行有效性验证,攻击者可以通过传入其他标签对象(如 smartTag ),导致类型混淆进而实现任意内存写入。 漏洞分析环境 操作系统:Windows 7 SP1 (x86) Word版本:2007 WWLIB.DLL版本:12.0.4518.1014 样本MD5:A69F778D1F511268019B1080F5E3B98B 漏洞利用机制 1. 类型混淆到任意地址写入 漏洞利用的核心在于通过 displacedByCustomXml 属性触发类型混淆: 文档结构 :恶意RTF文档包含多个OLE对象 0号对象:用于加载OTKLOADR.DLL以引入MSVCR71.DLL(绕过ASLR) 1号对象:完成堆喷及Shellcode布局 2号对象:触发CVE-2015-1641漏洞 触发点 :位于 styles.xml 中的 displacedByCustomXml 属性 内存写入计算 : 写入地址计算公式: [[Parameter 1]+0x8]*[Parameter 2]+[[Parameter 1]+0xC]+[Parameter 1] 通过精心构造的smartTag标签属性值控制写入地址 关键写入操作 : 第一次写入:向0x7c38bd74地址处写入0xffffe696(用于后续计算) 第二次写入:覆盖MSVCR71.DLL虚函数表中函数调用地址 第三次写入:准备第四次写入所需的值 第四次写入:覆盖函数调用参数 2. 执行流劫持 堆喷布局 :通过1号对象中的 activeX1.bin 完成内存布局 ROP链 : 从0x7c3651EB开始执行ROP链 调用 VirtualProtect 绕过DEP保护 Shellcode执行 : 跳转到 activeX1.bin 内的Shellcode部分 3. Shellcode分析 activeX1.bin Shellcode : 遍历当前进程的文件句柄,查找特定大小的文件 将文件映射到内存中 通过文件头特征判断是否为样本文件及Shellcode起始位置 复制Shellcode到新分配的内存空间 跳转到第二部分Shellcode执行 RTF文档Shellcode : 解密后续Shellcode 执行恶意行为(如文件创建、注册表修改等) 实际利用样本分析(Patchwork组织样本) 样本MD5:2C22EA1CED258346351EAD09B1DC6074 攻击链分析 初始感染 : 创建隐藏文件: ~$Normal.dat 在注册表中创建项: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\PLAs_NEW_ORBAT 删除注册表禁用项 VBE脚本执行 : 通过 wscript.exe 执行 Normal.domx (VBE格式) 解密并写入迷惑性文档: PLAs_NEW_ORBAT.doc 释放三个PE文件并设置隐藏属性 白文件利用 : 执行带有数字签名的白文件 MicroScMgmt.exe 加载恶意DLL: jli.dll 最终载荷 : jli.dll 与Patchwork组织的BADNEWS木马相似 提供完整的后门功能 漏洞修复与防御 补丁信息 : 微软已发布安全更新修复此漏洞,建议用户及时更新。 防御措施 : 保持Office软件最新 启用DEP和ASLR等缓解措施 谨慎打开来源不明的Office文档 使用杀毒软件检测恶意文档 禁用Office的ActiveX控件(如非必要) 技术细节补充 正常情况下的XML处理 : 解析 customXml 标签时会开辟新空间 解析 smartTag 标签时处理方式不同 漏洞利用这种差异控制目标写入地址 内存布局技巧 : 利用堆喷技术布置Shellcode 通过多次内存写入精确控制执行流 结合ROP绕过DEP保护 参考资源 微软官方安全公告 CVE-2015-1641漏洞描述 RTF文件格式文档 Office内存管理机制文档 相关样本分析报告 总结 CVE-2015-1641是一个典型的Office类型混淆漏洞,通过精心构造的RTF文档触发,结合内存操作和Shellcode技术实现远程代码执行。该漏洞被多个攻击组织利用,具有较高的危害性。理解其利用机制有助于更好地防御类似攻击。