这黑客厉害了,将两个0day漏洞融合为一个。

华盟学院山东省第二期线下学习计划

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

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

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

来自Adobe和Microsoft的修补程序和建议可在此处获得:

  • APSB18-09
  • https://helpx.adobe.com/security/products/acrobat/apsb18-09.html
  • CVE-2018-8120https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/CVE-2018-8120

受影响的产品版本如下:

  • Acrobat DC(2018.011.20038和更早版本)
  • Acrobat Reader DC(2018.011.20038及更早版本)
  • Acrobat 2017(011.30079及更早版本)
  • Acrobat Reader DC 2017(2017.011.30079及更早版本)
  • Acrobat DC(Classic 2015)(2015.006.30417及更早版本)
  • Acrobat Reader DC(Classic 2015)(2015.006.30417及更早版本)
  • Windows 7(用于32位系统)Service Pack 1
  • Windows 7(用于基于x64的系统)Service Pack 1
  • Windows Server 2008(用于32位系统)Service Pack 2
  • Windows Server 2008(用于基于Itanium的系统)Service Pack 2
  • Windows Server 2008(用于基于x64的系统)Service Pack 2
  • Windows Server 2008 R2(用于基于Itanium的系统)Service Pack 1
  • Windows Server 2008 R2(用于基于x64的系统)Service Pack 1

本文下面介绍这个恶意样本的技术细节及其利用的方式

介绍

PDF是电子文档的文件格式,与其他常用文档格式一样,攻击者可以使用它将恶意软件传送到受害者的计算机。为了执行自己的恶意代码,攻击者必须找到并利用PDF阅读器软件中的漏洞。有几个PDF阅读器最常见的比如Adobe Reader。

Adobe Reader软件实现称为沙盒的安全功能,在查看器中也称为保护模式。

沙盒使得开发过程更加困难:即使代码执行完成,攻击者仍然需要绕过沙盒的保护措施,达到损害运行Adobe Reader的计算机。通常,沙箱旁路是通过利用操作系统本身的漏洞来实现的。

当攻击者能够发现漏洞并为Adobe Reader软件和操作系统两者一起编写漏洞攻击时,这种情况非常罕见。

CVE-2018-4990 - Adobe Reader中的RCE

恶意PDF样本嵌入了控制整个开发过程的JavaScript代码。一旦PDF文件被打开,JavaScript代码就会被执行。

在开发阶段,JavaScript代码开始操纵Button1对象。该对象包含特制的JPEG2000图像,该图像在Adobe Reader中触发了双重漏洞。

 

图1.操作Button1对象的JavaScript代码

JavaScript使用堆喷技术来破坏内部数据结构。在所有这些操作之后,攻击者实现他们的主要目标:从他们的JavaScript代码读取和写入内存访问。

图2.用于读写内存的JavaScript代码

使用这两个基本元素,攻击者找到EScript.api插件的内存地址,该插件是Adobe JavaScript引擎。使用来自该模块的汇编指令(ROP gadgets),恶意JavaScript会设置一个ROP链,这将导致执行本地shellcode。

图3.构建ROP链的恶意JavaScript

作为最后一步,shellcode初始化嵌入在PDF中的PE文件并将执行传递给它。

CVE-2018-8120 - Microsoft Windows中的权限升级

在利用Adobe Reader漏洞之后,攻击者必须打破沙盒。这正是我们正在讨论的第二个利用的目的。

此先前未知的漏洞的根本原因位于win32k Windows内核组件的NtUserSetImeInfoEx函数中。具体而言,SetImeInfoEx的子程序NtUserSetImeInfoEx不验证数据指针,允许空指针引用。

图4.反汇编的SetImeInfoEx例程

如图4所示,SetImeInfoEx函数需要一个指向已初始化的WINDOWSTATION对象的指针作为第一个参数。所述spklList如果攻击者创建一个新的窗口站对象,并将其分配给在用户模式的当前过程可能是等于零。因此,通过映射NULL页面并将指针设置为偏移量0x2C,攻击者可以利用此漏洞在内核空间中写入任意地址。应该注意的是,自Windows 8以来,用户进程不允许映射NULL页面。

由于攻击者有任意的写入原语,他们可以使用不同的技术,但在这种情况下,攻击者选择使用Ivanlef0u和Mateusz“j00ru”Jurczyk和Gynvael Coldwin描述的技术。攻击者通过重写全局描述符表(GDT)来设置一个调用门到Ring 0。为此,攻击者使用SGDT汇编指令获取原始GDT的地址,构建自己的表,然后使用上述漏洞重写原始表。

然后攻击使用CALL FAR指令执行一个特权级别的调用。

图5.反汇编的CALL FAR指令

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

结论

最初,研究人员在发现了该样本。样本不包含最终有效的那个版本,尽管样本没有包含真正的恶意攻击过程,这可能表明它是刚开发出来就被捕获,但作者展示了在漏洞发现和利用写作方面的高水平技能。

ESET检测名称

JS / Exploit.Pdfka.QNV木马

Win32 / Exploit.CVE-2018-8120.A木马

SHA-1哈希

C82CFEAD292EECA601D3CF82C8C5340CB579D1C6

0D3F335CCCA4575593054446F5F219EBA6CD93FE

英文原版

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

www.idc126.com

本文由华盟网编辑翻译,转载请注明出处

本文由 华盟网 作者:congtou 发表,其版权均为 华盟网 所有,文章内容系作者个人观点,不代表 华盟网 对观点赞同或支持。如需转载,请注明文章来源。
0

发表评论