锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

CVE-2013-3346:十全九美的 Adobe Reader ToolButton UAF 漏洞

时间:2022-09-06 22:30:00 dd70f120三社二极管模块

0x01 “Epic Turla” 网络间谍行动

  • 在 2014 年 8 月,被誉为 世界十大最危险的网络攻击行动 之一的 “Epic Turla当时就这样 APT 影响网络间谍行动的国家超过 45 此外,攻击目标是政府部门、大使馆、军事组织、研究、教育组织等。根据可靠的消息,这次袭击可能与俄罗斯政府有关
  • 当时攻击用了两个 0day 漏洞,一个用于 Adobe Reader 另一个是沙箱提权 CVE-2013-3346 UAF 漏洞的原理和一般原理 UAF 漏洞没有什么不同。释放对象后的悬挂指针也被使用。但是,如果你想彻底研究,你需要进行深入的逆向研究 Adobe Reader 对象的创建和释放机制仍然需要付出很大的努力
  • 分析环境:Windows 7(开启ASLR)
  • 漏洞软件:Adobe Reader 9(提取码:yc76)
  • 调试分析工具:IDA Windbg PdfStreamDumper(恶意 PDF 文档分析工具)
  • 恶意样本:能够触发异常的 PDF 样本文件(提取码:ztok)

0x02 恶意样本分析

  • 要了解漏洞对象的释放过程,首先要创建对象 JS 从代码分析开始,本次分析的样本是 PDF 使用类型文件,样本未加密 PdfStreamDumper 很容易理解 PDF 文件格式及提取 PDF 中的 JS 代码。如下图所示,将恶意文档拖入后,可以发现 JS 代码(由于时间关系,不分析 PDF 对象格式,直接找到 JS 代码)在这里插入图片描述
  • 创建一个 .js 恶意文件中的新文件 JS 将代码复制到新文件中并使用 Sublime Text 打开,这一步的操作纯粹是为了代码的美观,五颜六色
  • 有一定的 JS 使用分析经验的环境堆漏洞,看看这个 JS 代码可以快速分析各种功能之间的关系,如 ROP 绕过,堆放喷射等。首先是堆放喷射的使用,主要作用是 ROP ShellCode 代码喷到固定地址,方便释放后的悬挂指针调用地址,从而执行恶意代码
  • 堆喷射后,需要结构 ROP ShellCode 该代码的主要目的是执行恶意代码,下载病毒进一步渗透。如下图所示:

注:通过使用 scdbg(ShellCode 可以分析分析工具 ShellCode 的执行 API 的步骤(将 Shellcode 复制后改为 .sc 可以分析文件)
根据 scdbg 可以看到显示结果 ShellCode 通过Socket 连接远程服务器的端口是 4444,之后使用 recv 但这是数据的传输 ShellCode 不完整,木马操作缺乏执行,不影响后续分析

  • 继续往下分析,这一段代码的作用根据不同的 Adobe Reader 不同版本结构的返回地址和 ROP ShellCode,主要是实现多版本的通杀性
  • 最后是触发漏洞的代码。前一段的功能是构建与释放对象大小相同的内存,以覆盖之前释放对象的内存空间
  • 之后主要看这个代码,从下往上创建了一个 evil 对象之后创建了一个子对象 xxx,创建子对象后,创建孙对象销毁 evil 对象和内存地址准确覆盖销毁对象,用于引用悬挂指针和标准 UAF 漏洞实现原理

0x03 漏洞触发点的调试分析

  • 知道用来触发漏洞的代码,下面用 Windbg 看多线程调试,使用 Windbg 打开 Adobe Reader 将恶意拖入软件后 PDF 样本后断在了如下图所示的地方:

注:使用 Windbg 开启 hpa htc 便于捕捉内存异常

  • 检查异常点的栈空间
  • 之后跟踪 0x06e024dc 地址代码,ecx 由对象的地址表示 esi 传入 ecx,eax 表示虚表指针,最后调用虚表偏移 268h 地址的虚拟函数
  • 查询对象的内存信息,即 esi 所指向的内存地址已被覆盖成 f0f0f0f包括虚表指针在内的0,最后调用虚表偏移 268h 地址也就是 f0f0f414
This exception may be expected and handled. eax=f0f0f0f0 ebx=00000000 ecx=1b3fae54 edx=1b3f37b0 esi=1b3fae54 edi=00000001 eip=06e02841 esp=0018d810 ebp=0018d830 iopl=0         nv up ei pl zr ac pe cy cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00210257 *** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\Program Files (x86)\Adobe\Reader 9.0\Reader\AcroRd32.dll -  AcroRd32!AVAcroALM_IsFeatureEnabled 0xd9c:
06e02841 ff9024030000    call    dword ptr [eax+324h] ds:002b:f0f0f414=????????
0:000> kv
ChildEBP RetAddr  Args to Child              
WARNING: Stack unwind information not available. Following frames may be wrong.
0018d830 06e024dc 00000000 1b3fae54 0018d89c AcroRd32!AVAcroALM_IsFeatureEnabled+0xd89c
00000000 00000000 00000000 00000000 00000000 AcroRd32!AVAcroALM_IsFeatureEnabled+0xd537
0:000> ub 06e024dc 
AcroRd32!AVAcroALM_IsFeatureEnabled+0xd519:
06e024be 89442414        mov     dword ptr [esp+14h],eax
06e024c2 8b06            mov     eax,dword ptr [esi]
06e024c4 57              push    edi
06e024c5 0fb7be88020000  movzx   edi,word ptr [esi+288h]
06e024cc ff9048020000    call    dword ptr [eax+248h]
06e024d2 8b06            mov     eax,dword ptr [esi]
06e024d4 8bce            mov     ecx,esi
06e024d6 ff9068020000    call    dword ptr [eax+268h]
0:000> dd eax
f0f0f0f0  ???????? ???????? ???????? ????????
f0f0f100  ???????? ???????? ???????? ????????
f0f0f110  ???????? ???????? ???????? ????????
f0f0f120  ???????? ???????? ???????? ????????
f0f0f130  ???????? ???????? ???????? ????????
f0f0f140  ???????? ???????? ???????? ????????
f0f0f150  ???????? ???????? ???????? ????????
f0f0f160  ???????? ???????? ???????? ????????
0:000> dd eax+268
f0f0f358  ???????? ???????? ???????? ????????
f0f0f368  ???????? ???????? ???????? ????????
f0f0f378  ???????? ???????? ???????? ????????
f0f0f388  ???????? ???????? ???????? ????????
f0f0f398  ???????? ???????? ???????? ????????
f0f0f3a8  ???????? ???????? ???????? ????????
f0f0f3b8  ???????? ???????? ???????? ????????
f0f0f3c8  ???????? ???????? ???????? ????????
0:000> dd esi
1b3fae54  f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0
1b3fae64  f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0
1b3fae74  f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0
1b3fae84  f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0
1b3fae94  f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0
1b3faea4  f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0
1b3faeb4  f0f0f0f0 f0f0f0f0 f0f0f0f0 f0f0f0f0
  • 查询 esi 中对象的内存信息,可以看到动态申请的对象的堆空间的大小为 380h,这个堆空间就是申请名为 evil 的 ToolButton 对象时的堆空间,由于这时堆空间已经被释放,故触发异常
0:000> !heap -p -a esi
    address 1b3fae54 found in
    _HEAP @ 6da0000
      HEAP_ENTRY Size Prev Flags    UserPtr UserSize - state
        1b3fae10 0071 0000  [00]   1b3fae18    00380 - (free)

0x04 总结

  • 通过分析恶意 PDF 文档中的 JS 代码,和调试异常触发点可以发现漏洞触发的原因和过程,首先创建了一个 ToolButton 对象 evil,之后创建了一个子对象 xxx,然后创建了一个孙对象用于销毁 evil 对象,并且覆盖被销毁对象 evil 的内存空间, 唯一的美中不足的是该恶意样本覆盖释放后的内存空间是并没有覆盖的精确,所以虚表指针覆盖的值为 f0f0f0f0,和导致使用堆喷射的 ROP + ShellCode 代码连接不上,无法执行任意代码,所以要么修改 PDF 恶意脚本使之精确覆盖释放后对象的内存地址,要么使用堆喷射将 ROP + ShellCode 代码喷射到 f0f0f0f0 处,由于更改 PDF 中的 JS 代码比较复杂,超出了 UAF 漏洞讨论范围,所以之后有时间在研究

CVE-2013-3346 的分析到此结束,如有错误,欢迎指正
参考资料:0day安全:软件漏洞分析技术 + 漏洞战争

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章