中新网安安全研究院 0day漏洞也搞融合:恶意PDF样本详细分析

2018年3月末,ESET研究人员发现了一个有趣的恶意PDF样本。仔细观察发现,该示例利用了两个先前未知的漏洞:Adobe Reader中的远程代码执行漏洞和Microsoft Windows中的特权升级漏洞。

组合的漏洞的使用非常强大,因为它允许攻击者执行任意代码,对易受攻击的目标具有最高可能的特权,并且只有最少量的用户交互。APT组织经常使用这种组合来执行他们的攻击,例如去年的Sednit活动。

一旦发现了PDF样本,ESET就与Microsoft安全响应中心,Windows Defender ATP研究团队和Adobe产品安全事件响应团队联系并一起工作,因为他们修复了这些错误。 


{07}76{)V(9]BE6}VK668T2.png


【漏洞编号】CVE-2018-4990;CVE-2018-8120

【风险等级】严重

【影响版本】

  • Acrobat DC (2018.011.20038 and earlier versions)

  • Acrobat Reader DC (2018.011.20038 and earlier versions )

  • Acrobat 2017 (011.30079 and earlier versions)

  • Acrobat Reader DC 2017 (2017.011.30079 and earlier versions)

  • Acrobat DC (Classic 2015) (2015.006.30417 and earlier versions)

  • Acrobat Reader DC (Classic 2015) (2015.006.30417 and earlier versions)

  • Windows 7 for 32-bit Systems Service Pack 1

  • Windows 7 for x64-based Systems Service Pack 1

  • Windows Server 2008 for 32-bit Systems Service Pack 2

  • Windows Server 2008 for Itanium-based Systems Service Pack 2

  • Windows Server 2008 for x64-based Systems Service Pack 2

  • Windows Server 2008 R2 for Itanium-based Systems Service Pack 1

  • Windows Server 2008 R2 for x64-based Systems Service Pack 1

【安全补丁】

Adobe以及微软也提供了相应补丁及安全公告,分别如下:

  • APSB18-09

  • CVE-2018-8120

【技术细节】

1、PDF

PDF是电子文档文件格式,与其他常见文档格式一样,攻击者可以利用该类型文件将恶意软件传播至受害者计算机。为执行恶意代码,攻击者必须找到并利用PDF阅读器软件中的漏洞。PDF阅读器软件较多,Adobe Reader最常用。


Adobe Reader软件中有一个沙箱安全功能,也称保护模式。Adobe在官方博客上发布了相关技术细节,分为四部分(Part 1、Part 2、Part 3、Part 4)。沙箱使漏洞利用更加困难:即使攻击者可以执行代码,还是必须绕过沙箱的保护机制才能突破运行Adobe Reader的计算机。通常情况下,攻击者需要借助操作系统本身的漏洞来绕过沙箱保护机制。


当然攻击者可以同时找到Adobe Reader软件以及目标操作系统中的漏洞并编写利用程序,不过这种情况非常罕见。


2、CVE-2018-4990:Adobe Reader的RCE漏洞

恶意PDF样本中嵌入了javascript代码,用来控制整个漏洞利用过程。一旦PDF文件被打开,代码就会被执行。


在漏洞利用开始阶段,javascript代码开始操纵Button1对象,该对象包含JPEG2000图像,该图像在Adobe Reader中触发双重漏洞。


[8~[Z@~8C7_EELPOV_DMM1I.png

      操控Button1对象的javascript代码


javascript代码中用到了堆喷射(heap-spray)技术以破坏内部数据结构。在这些操作都完成后,攻击者就实现了他们的主要目标:从javascript代码中实现内存的读取及写入。


DO4QZ9]9U`UPU[Y]50A6B23.png

 用来读取及写入内存javascript代码


使用这两个过程,攻击者找到Escript.api插件的内存地址,该插件是Adobe javascript引擎。使用该模块的汇编指令(ROP gadgets),恶意javascript成功构造了一条ROP链,这将导致执行本地shellcode。


G$)ACUBE}L{J@QG}]M%MU]V.png

构建ROP链的恶意javascript


最后,shellcode会初始化PDF中的PE文件,并执行权递交给该文件。


3、CVE-2018-8120:Windows权限提升漏洞

利用Adobe Reader漏洞后成功,攻击者必须破坏沙箱保护机制,这是第二个利用代码的目的所在。


未知漏洞的源头在于win32k Windows内核组件中的NtUserSetImeInfoEx函数。更具体一些,就是NtUserSetImeInfoEx的SetImeInfoEx子例程没有验证数据指针,允许某个NULL指针被解除引用(dereference)。


EL8I{`FYE2KU[DDT@@6ZBGH.png

反汇编后的SetImeInfoEx例程代码


如图上图所示,SetImeInfoEx函数的第一个参数为指向经过初始化的WINDOWSTATION对象的指针。如果攻击者创建了一个新的window station对象,并将其分配给用户模式下的当前进程,所述spklList就会等于0。因此,通过映射NULL页面并将指针设置为偏移量0x2C后,攻击者就可以利用这个漏洞写入内核空间中的任何地址。必须注意的是,从Windows 8开始,用户进程不能再映射NULL页面。


既然攻击者具备任意写入权限,他们就可以使用各种方法实施攻击,不过在我们分析的这个例子中,攻击者选择使用Ivanlef0u以及Mateusz “j00ru” JurczykGynvael Coldwin介绍的一种技术。攻击者重写了全局描述符表(GDT,Global Descriptor Table)来创建Ring 0的一个call gate)(调用门)。为了完成这个任务,攻击者使用SGDT汇编指令获取了原始的GDT信息,构造自己的表然后使用前面提到的漏洞重写了原始的表。


随后,漏洞利用程序使用CALL FAR指令执行了跨权限级别的调用。


6%R[2R}T_R(P%IU5EI}49RG.png

反汇编后的CALL FAR指令


一旦代码在内核模式执行,漏洞利用系统令牌替换当前进程的标记。


4、结论

最初,ESET研究人员在将PDF样本上载到恶意样本的公共存储库时发现了该样本。样本不包含最终攻击有效载荷,这可能表明它在其早期开发阶段。尽管样本没有包含真正的恶意最终攻击有效载荷,这可能表明它在早期开发阶段,但作者展示了在漏洞发现和利用写作方面的高水平技能。 

【IoC】

ESET检测标识:

JS/Exploit.Pdfka.QNVtrojan

Win32/Exploit.CVE-2018-8120.A trojan

SHA-1哈希:

C82CFEAD292EECA601D3CF82C8C5340CB579D1C6

0D3F335CCCA4575593054446F5F219EBA6CD93FE

【参考链接】

https://www.welivesecurity.com/2018/05/15/tale-two-zero-days/

漏洞分析内容仅供参考,具体内容表达以及含义以原文为准