微软近日对外披露了两个0day漏洞详情,其中一个漏洞存在Adobe阅读器中,可被利用导致任意代码执行;另一个漏洞则允许任意代码在Windows kernel内存中提权执行。

微软称由于该漏洞利用目前还处于初期阶段,且官方都已发布了补丁,建议大家及时进行安装,赶在被大规模利用前修复,未雨绸缪。同时,建议排查初期样本的IOC(文末附修复补丁链接和IOC)。

CVE CVE-2018-4990 CVE-2018-8120
类型 远程代码执行 本地提权
官方评级 Critical Important
影响产品 Acrobat  DCAcrobat  Reader DC Windows  7Windows  Server 2008
POC样本
在野攻击 暂无 暂无
修复补丁

这两个漏洞利用样本最早是由ESET分析人员在今年3月发现并报告给了微软,在ESET和微软的共同努力下发现了以上两个0day漏洞。以下漏洞利用分析过程是基于以下样本进行:

SHA-256:4b672deae5c1231ea20ea70b0bf091164ef0b939e2cf4d142d31916a169e8e01

漏洞利用概况

Adobe Acrobatand Reader漏洞存在于PDF文档中,伪装成暗含JavaScript漏洞利用代码的恶意JPEG 2000图像,漏洞利用路径如下图所示:

图1. 漏洞利用流程图

如上图所示,漏洞利用过程分以下阶段:

1.JavaScript枚举堆喷射(heap spray)内存;

2.恶意JPEG 2000图片触发一个越界访问操作;

3.一旦堆喷射枚举越界内存,就会调用访问操作;

4.访问操作导致vftable进程崩溃;

5.已崩溃的vftable进程将代码执行转移至返回导向编程(ROP)链;

6.ROP链将代码执行转移到shellcode;

7.通过反射DLL加载来进行EoP模块加载;

8.PE模块启动已加载完成的Win32k EoP漏洞利用程序;

9.一旦EoP漏洞利用成功,就会在Startup文件夹中释放一个名为.vbs的文件,作为下载其他payloads的PoC恶意软件。

恶意JPEG 2000图片

恶意图片中被嵌入了以下恶意标签,如图:

图2. 恶意JPEG 2000图片

下图所示的CMAP & PCLR标签中均含有恶意值,CMAP数组(0xfd)的长度小于PCLR标记中引用的索引值(0xff),从而导致了越界内存释放漏洞的利用。

图3. CMAP数组的越界索引

结合JavaScript中的堆喷射技术,越界漏洞利用就会导致vftable进程的崩溃。

图4. ROP链中的vftable进程崩溃导致代码执行

JavaScript中的编码包含了shellcode和PE模块。

图5. JavaScript中的shellcode

反射DLL加载进程

Shellcode(以下提到的伪代码)通过反射DLL加载PE模块,这是高级攻击活动里试图在内存中躲避检测时的常用技巧。Shellcode搜索PE初始记录,解析PE分区,并将它们复制到新分配的内存区域,然后将控制权传递给PE模块中的入口点。

图6. 复制PE分区到新分配的内存中

图7. 把控制权传递给已加载的DLL模块中的入口点

Win32k 提权漏洞利用

Win32k提权(EoP)漏洞利用是从已加载的PE模块中运行,利用新的Windows漏洞CVE-2018-8120对Windows 7 SP1系统进行攻击,Win 10及更新的产品不受该漏洞影响。该漏洞利用NULL页面来传递恶意记录,并将任意数据拷贝至任意内核位置,对于运行Windows 8及更新系统的x64位平台所受影响也相对较小。

图8. EoP漏洞利用流程图

漏洞利用的主要过程如下:

1.漏洞利用根据sgdt指令调用NtAllocateVirtualMemory进程,以便在NULL页面分配虚假的数据结构;

2.把格式错误的MEINFOEX结构传递至SetImeInfoEx Win32k 内核函数;

3.SetImeInfoEx进程获取NULL页面上的虚假数据结构;

4.使用虚假的数据结构把恶意指令拷贝到GDT(全球描述符表)上的+0x1a0中;

5.通过调用FWORD指令来调入虚假的GDT入口指令;

6.成功调用虚假GDT入口指令;

7.这些指令运行从内核模式内存空间的用户模式中分配的shellcode;

8.修改shellcode进程中EPROCESS.Token,获取SYSTEM权限。

格式有误的IMEINFOEX结构结合NULL页面的虚假数据,就可导致GDT入口崩溃,如下图所示:

图9. GDT入口崩溃

已损坏的GDT具有通过调用FWORD指令调用入口运行的实际指令。

图10. 已修复的GDT入口指令

从这些指令返回后,EIP(扩展指令指针)返回具有内核特权的用户空间中的调用者代码,后续代码将通过修改SYSTEM的进程令牌来实现当前进程的提权。

图11. 替换进程令牌指针

可持续性

提权后,漏洞利用代码会在本地Startup文件夹中释放一个.vbs文件,即PoC恶意软件。

图12. 释放.vbs文件到Startup文件夹的代码信息

防御建议

及时部署针对以上0day漏洞的安全补丁:

CVE-2018-4990 | Adobe Acrobatand Reader可用的安全更新 | APSB18-09

https://helpx.adobe.com/security/products/acrobat/apsb18-09.html

CVE-2018-8120 | Win32k提权漏洞

https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2018-8120

如工作环境不需要,则禁用Adobe Acrobat and Acrobat Reader中的JavaScript;

加强终端对利用PDF附件进行鱼叉式钓鱼攻击和其他社工攻击的防范意识。

IoC信息(SHA-256):

d2b7065f7604039d70ec393b4c84751b48902fe33d021886a3a96805cede6475

dd4e4492fecb2f3fe2553e2bcedd44d17ba9bfbd6b8182369f615ae0bd520933

4b672deae5c1231ea20ea70b0bf091164ef0b939e2cf4d142d31916a169e8e01

0608c0d26bdf38e064ab3a4c5c66ff94e4907ccaf98281a104fd99175cdf54a8

微软对外披露两个0day漏洞详情的更多相关文章

  1. 20155306 白皎 免考实践总结——0day漏洞

    本次免考实践提纲及链接 第一部分 基础知识 1.1 0day漏洞概述 1.2二进制文件概述 1.3 必备工具 1.4 crack实验 第二部分 漏洞利用 2.1栈溢出利用 2.1.1 系统栈工作原理 ...

  2. Coinbase 雇员被 Firefox 0day 漏洞攻击

    Firefox 刚刚修复的 0day 漏洞被用于攻击 Coinbase 雇员.Coinbase 安全团队的 Philip Martin 称,攻击者组合利用了两个 0day 漏洞,其一是远程代码执行漏洞 ...

  3. 0day漏洞

    0Day的概念最早用于软件和游戏破解,属于非盈利性和非商业化的组织行为,其基本内涵是“即时性”. Warez被许多人误认为是一个最大的软件破解组 织,而实际上,Warez如黑客一样,只是一种行为. 0 ...

  4. struts2 0day漏洞

    描述 Apache Struts2 近日出现一个0day漏洞,该漏洞在修补CVE-2014-0050和2014-0094两个安全漏洞处理不当,分别可以导致服务器受到拒绝服务攻击和被执行恶意代码. 漏洞 ...

  5. 这款 WordPress商用插件 0day 漏洞满满,且已遭利用

    Wordfence 安全研究员发布报告称,WordPress 商用插件 Total Donations 受多个 0day 漏洞的影响,且这些漏洞已遭利用. 这些严重的漏洞影响所有已知的 Total D ...

  6. Flash 0day漏洞(CVE-2018-4878)复现

    该漏洞影响 Flash Player 当前最新版本28.0.0.137以及之前的所有版本,而Adobe公司计划在当地时间2月5日紧急发布更新来修复此漏洞. 本文作者:i春秋作家——F0rmat 前言 ...

  7. 20155306 白皎 0day漏洞——漏洞利用原理之GS

    20155306 白皎 0day漏洞--漏洞利用原理之GS 一.GS安全编译选项的保护原理 1.1 GS的提出 在第二篇博客(栈溢出利用)中,我们可以通过覆盖函数的返回地址来进行攻击,面对这个重灾区, ...

  8. 20155306 白皎 0day漏洞——漏洞利用原理之栈溢出利用

    20155306 白皎 0day漏洞--漏洞利用原理之栈溢出利用 一.系统栈的工作原理 1.1内存的用途 根据不同的操作系统,一个进程可能被分配到不同的内存区域去执行.但是不管什么样的操作系统.什么样 ...

  9. 20155306 白皎 0day漏洞——基础知识

    20155306 白皎 0day漏洞--(第一篇)基础知识 写在前面: 本次免考实践方向是0day漏洞,以博客的形式记录了我的学习实践过程.第一篇博客主要围绕什么是0day漏洞以及一些以后学习中需要的 ...

随机推荐

  1. poj 1330(初探LCA)

    Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 23795   Accept ...

  2. QT中ui更改后不能更新的解决方法

    ui源文件到界面显示的原理可以网上搜索,这里不再描述.简单讲就是先要从*.ui生成ui_*.h然后再编译,所以界面未更新实际上是因为ui_*.h这个文件没有更新导致的. 出现此问题后我尝试了以下几个方 ...

  3. 关于多属性查找问题的sphinx解决方案

    需求描述 mysql中,每一个文档都有多个标签,查询时可以筛选一个标签也可以筛选同时拥有多个标签的文档. 数据示例 文档 标签 1 1,2,3,4,5 2 2,3,4,5,6 3 3,4,5,6,7 ...

  4. AC日记——[SDOI2017]相关分析 洛谷 P3707

    [SDOI2017]相关分析 思路: 裸线段树: (玄学ac): 代码: #include <bits/stdc++.h> using namespace std; #define max ...

  5. 01 java 基础:jdk jre path classpath 相关问题

    JRE : Java 运行环境 JDK :  Java 开发工具包,其中包括 JRE  (javac.java.javap.jar.javadoc .javah 等命令) JVM : Java 虚拟机 ...

  6. echarts画k线图

    var charset = echarts.init(document.getElementById("k_line")) $.get(k_line.url_A).done(fun ...

  7. Centos7 Elasticsearch部署

    (1)ELKStack简介 1.elk介绍 ELK Stack包含:ElasticSearch.Logstash.Kibana ElasticSearch是一个搜索引擎,用来搜索.分析.存储日志.它是 ...

  8. python中,将字符串由utf8转gbk

    uni_str = utf8_str.decode('utf-8'); gbk_str = uni_str.encode('gbk');

  9. Java网络编程一

    1.InetAddress的应用 import java.util.List; import java.math.BigDecimal; import java.net.InetAddress; im ...

  10. 树形DP题目集合

    [树形DP](https://cn.vjudge.net/contest/123963#overview) #include<cstdio> #include<string> ...