2018年3月末,ESET研究人员发现了一个有趣的恶意PDF样本。仔细观察发现,该示例利用了两个先前未知的漏洞:Adobe Reader中的远程代码执行漏洞和Microsoft Windows中的特权升级漏洞。 组合的漏洞的使用非常强大,因为它允许攻击者执行任意代码,对易受攻击的目标具有最高可能的特权,并且只有最少量的用户交互。APT组织经常使用这种组合来执行他们的攻击,例如去年的Sednit活动。 一旦发现了PDF样本,ESET就与Microsoft安全响应中心,Windows Defender ATP研究团队和Adobe产品安全事件响应团队联系并一起工作,因为他们修复了这些错误。
【漏洞编号】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以及微软也提供了相应补丁及安全公告,分别如下: 【技术细节】 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中触发双重漏洞。
操控Button1对象的javascript代码
javascript代码中用到了堆喷射(heap-spray)技术以破坏内部数据结构。在这些操作都完成后,攻击者就实现了他们的主要目标:从javascript代码中实现内存的读取及写入。
用来读取及写入内存javascript代码
使用这两个过程,攻击者找到Escript.api插件的内存地址,该插件是Adobe javascript引擎。使用该模块的汇编指令(ROP gadgets),恶意javascript成功构造了一条ROP链,这将导致执行本地shellcode。
构建ROP链的恶意javascript
最后,shellcode会初始化PDF中的PE文件,并执行权递交给该文件。
3、CVE-2018-8120:Windows权限提升漏洞 利用Adobe Reader漏洞后成功,攻击者必须破坏沙箱保护机制,这是第二个利用代码的目的所在。
未知漏洞的源头在于win32k Windows内核组件中的NtUserSetImeInfoEx函数。更具体一些,就是NtUserSetImeInfoEx的SetImeInfoEx子例程没有验证数据指针,允许某个NULL指针被解除引用(dereference)。
反汇编后的SetImeInfoEx例程代码
如图上图所示,SetImeInfoEx函数的第一个参数为指向经过初始化的WINDOWSTATION对象的指针。如果攻击者创建了一个新的window station对象,并将其分配给用户模式下的当前进程,所述spklList就会等于0。因此,通过映射NULL页面并将指针设置为偏移量0x2C后,攻击者就可以利用这个漏洞写入内核空间中的任何地址。必须注意的是,从Windows 8开始,用户进程不能再映射NULL页面。
既然攻击者具备任意写入权限,他们就可以使用各种方法实施攻击,不过在我们分析的这个例子中,攻击者选择使用Ivanlef0u以及Mateusz “j00ru” Jurczyk和Gynvael Coldwin介绍的一种技术。攻击者重写了全局描述符表(GDT,Global Descriptor Table)来创建Ring 0的一个call gate)(调用门)。为了完成这个任务,攻击者使用SGDT汇编指令获取了原始的GDT信息,构造自己的表然后使用前面提到的漏洞重写了原始的表。
随后,漏洞利用程序使用CALL FAR指令执行了跨权限级别的调用。
反汇编后的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/ 漏洞分析内容仅供参考,具体内容表达以及含义以原文为准
|