黑客如何绕过Adobe Flash保护机制

admin 2024-01-11 16:25:11 4HOU_新闻 来源:ZONE.CI 全球网 0 阅读模式

由于Adobe采取多种措施来加强Flash的安全性,因此Flash Player漏洞的数量最近有所下降。然而,漏洞总是无法避免。1月31日,Kr-Cert报告了一个0day漏洞,编号CVE-2018-4878(Adobe已发布了修复此漏洞的补丁),目前已发现公开利用。我们分析了该利用程序并发现它绕过了为阻止Flash中“长度破坏”攻击而引入的字节数组缓解功能。本文将重点讨论漏洞利用如何绕过长度检查。

一、工作原理

此漏洞已经被用于有针对性的攻击,通过在Microsoft Office Excel中嵌入Flash文件的形式出现。打开Excel文件时,Flash文件会连接服务器并请求密钥。一旦接收到密钥,该文件将解码另一个嵌入的Flash文件,这才是实际的漏洞利用。

密钥为100字节,使用loader.loadbyte函数解码和加载嵌入文件:

由于密钥的URL处于离线状态,因此我们无法获取它。但样本Hash可在多个网站上在线获取。我们分析了样本(SHA-256) 1a3269253784f76e3480e4b3de312dfee878f99045ccfd2231acb5ba57d8ed0d.

此Adobe .SWF文件包含多个ActionScript 3文件以及BinaryData部分中的两个嵌入文件,构成了shellcode(在下图屏幕中标记为红色):

二、攻击行动中的利用程序

启动时,利用程序检查系统是否正在运行Windows。如果是,就会触发漏洞。

正如我们在前面的图片中看到的,该利用需要几个步骤:

· 创建一个mediaplayer对象

· 将mediaplayer的drmManager属性初始化为基于DRMOperationCompleteListener对象nugamej的特定类。

· 对象nugamej被释放,但drmManager指向之前nugamej使用的内存位置

仔细看nugamej,可以看到它是由实现DRMOperationCompleteListener类的Rykim类创建的。Rykim类具有各种uint变量,其值设置为0x1111,0x2222等:

这些变量稍后将用于访问进程空间和其他操作中的各种地址。

之后,利用程序通过Localconnection().connect产生的异常,创建Rykim类的新变量katyt,并实现DRMOperationCompleteListener类。时间检查调用cysit函数:

Cysit检查新分配对象的a1变量是否为0x1111,如果该值不等于0x1111,则cysit终止计时器并继续进行利用。

漏洞利用创建另一个类型为Qep的对象kebenid,它扩展了字节数组类。 kebenid的长度为512字节。稍后将修改此值,使读写权限扩展为对进程内存的无限制访问。

三、字节数组检查以避免损坏

我们可以从https://github.com/adobe/avmplus/blob/master/core/ByteArrayGlue.h看到字节数组的结构:

可以看到字节数组类具有array、 capacity及length。之前,有攻击者破坏长度变量以便任意读写内存。因此有额外的检查来确保字节数组的完整性。该检查会创建一个密钥,与array/capacity/length 异或后保存在变量check_array/check_capacity/check_length中。当访问这些变量时,它们与密钥异或,并将异或的值与存储在check_array/check_capacity/check_length中的值进行比较。如果匹配,那么数据真实; 否则抛出一个错误,如下图所示:

四、绕过检查

从前面的代码,可通过简单地使用以下任一方法来获取密钥:

· Array ^ check_array = key

· Capacity ^ check_capacity = key

· Length ^ check_length = key

· https://github.com/adobe/avmplus/blob/master/core/ByteArrayGlue.h

如果copyOnWrite的值是0,那么密钥为check_copyOnWrite。

如果仔细观察,可以看到katyt和kebenid对象变量都指向相同的内存。如果我们打印并比较两个对象的变量,可以证实这一点。

如前所述,将以下变量与字节数组进行比较,我们得到以下结果:

所以如果改变katyt.a24和katyt.a25,实际上就会改变字节数组的capacity和length。然后只需找到异或的密钥,就可以将其设置为我们想要的任何长度。因此,此漏洞利用通过Array ^ check_array = key计算密钥。

一旦密钥可用,我们可以轻松地将字节数组的capacity和length修改为0xFFFFFFFF和check_length,从而绕过字节数组安全缓解措施,并可在进程空间的任何地方读取或写入:

五、代码执行

漏洞利用通过字节数组对象获得的读写权限,读取内存并搜索kernel32.dll以及诸如VirtualProtect和CreateProcessA之类的函数。一旦找到这些函数的地址,就可以在系统上执行shellcode。此技术在网上有很好的介绍。以下截图显示了负责搜索kernel32.dll的代码,之后将VirtualProtect API地址定位为0x75ff2c15:

然后,漏洞利用将执行shellcode,连接URL:

使用 CreateProcessA启动cmd.exe:

Shellcode检测部分杀毒产品:

六、结论

攻击者不断寻找绕过新保护机制的方法。此利用程序就显示了这样一种方式。与往常一样,我们建议读者在打开电子邮件中的未知附件和文件时要小心。

McAfee Network Security Platform客户通过签名ID:0x45223900免受此漏洞利用的侵害。

七、IOC

Hash

SHA-256: 1a3269253784f76e3480e4b3de312dfee878f99045ccfd2231acb5ba57d8ed0d

URLs

· hxxp://www.korea-tax.info/main/local.php

· hxxp://www.1588-2040.co.kr/conf/product_old.jpg

· hxxp://1588-2040.co.kr/conf/product.jpg

- 4HOU.COM
weinxin
版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
全景剖析挖矿黑色产业链 4HOU_新闻

全景剖析挖矿黑色产业链

2017年,卡巴斯基实验室就发布过一个报道,揭示了全球挖矿产业的崛起。当时研究人员就发现了有一个通过僵尸网络赚取数百万美元的挖矿产业。当时,他们就分析这只是产业
医疗影像领域安全状况令人担忧 4HOU_新闻

医疗影像领域安全状况令人担忧

医疗数据的不可破坏性使其成为网络犯罪分子不可抗拒的目标。黑客的行为需要花费大量的时间和精力,这就激励有经验的网络犯罪分子根据从投资中获取的收益来策划他们的攻击。
评论:0   参与:  0