微软对外披露两个0day漏洞详情
微软近日对外披露了两个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漏洞详情的更多相关文章
- 20155306 白皎 免考实践总结——0day漏洞
本次免考实践提纲及链接 第一部分 基础知识 1.1 0day漏洞概述 1.2二进制文件概述 1.3 必备工具 1.4 crack实验 第二部分 漏洞利用 2.1栈溢出利用 2.1.1 系统栈工作原理 ...
- Coinbase 雇员被 Firefox 0day 漏洞攻击
Firefox 刚刚修复的 0day 漏洞被用于攻击 Coinbase 雇员.Coinbase 安全团队的 Philip Martin 称,攻击者组合利用了两个 0day 漏洞,其一是远程代码执行漏洞 ...
- 0day漏洞
0Day的概念最早用于软件和游戏破解,属于非盈利性和非商业化的组织行为,其基本内涵是“即时性”. Warez被许多人误认为是一个最大的软件破解组 织,而实际上,Warez如黑客一样,只是一种行为. 0 ...
- struts2 0day漏洞
描述 Apache Struts2 近日出现一个0day漏洞,该漏洞在修补CVE-2014-0050和2014-0094两个安全漏洞处理不当,分别可以导致服务器受到拒绝服务攻击和被执行恶意代码. 漏洞 ...
- 这款 WordPress商用插件 0day 漏洞满满,且已遭利用
Wordfence 安全研究员发布报告称,WordPress 商用插件 Total Donations 受多个 0day 漏洞的影响,且这些漏洞已遭利用. 这些严重的漏洞影响所有已知的 Total D ...
- Flash 0day漏洞(CVE-2018-4878)复现
该漏洞影响 Flash Player 当前最新版本28.0.0.137以及之前的所有版本,而Adobe公司计划在当地时间2月5日紧急发布更新来修复此漏洞. 本文作者:i春秋作家——F0rmat 前言 ...
- 20155306 白皎 0day漏洞——漏洞利用原理之GS
20155306 白皎 0day漏洞--漏洞利用原理之GS 一.GS安全编译选项的保护原理 1.1 GS的提出 在第二篇博客(栈溢出利用)中,我们可以通过覆盖函数的返回地址来进行攻击,面对这个重灾区, ...
- 20155306 白皎 0day漏洞——漏洞利用原理之栈溢出利用
20155306 白皎 0day漏洞--漏洞利用原理之栈溢出利用 一.系统栈的工作原理 1.1内存的用途 根据不同的操作系统,一个进程可能被分配到不同的内存区域去执行.但是不管什么样的操作系统.什么样 ...
- 20155306 白皎 0day漏洞——基础知识
20155306 白皎 0day漏洞--(第一篇)基础知识 写在前面: 本次免考实践方向是0day漏洞,以博客的形式记录了我的学习实践过程.第一篇博客主要围绕什么是0day漏洞以及一些以后学习中需要的 ...
随机推荐
- Linux Python apache的cgi配置
一.找到安装Apache的目录/usr/local/apache2/conf,并对httpd.conf配置文件进行修改 1.加载cgi模块 去掉注释: LoadModule cgid_module m ...
- python_day7学习笔记
类 1)创建一个类 #coding=utf-8 __author__ = 'Administrator' class Employee: '所有员工的基类' empCount = 0 def __in ...
- Foreach与迭代器
Foreach与迭代器 Foreach语句可以用于数组和集合的遍历.之所以能够工作,是因为Java SE5引入了新的被称为Iterable的接口,该接口中包含一个能够产生Iterator的iterat ...
- JMeter 中 HTTP Cookie 管理器的使用
根据 web 应用的复杂度你可以选择创建两种类型的 JMeter 测试计划:面向点击数的或面向场景的. 创建一个面向点击数的测试计划你需要有中值统计.这些统计要包含你的应用每秒应该处理多少个独立请求的 ...
- python中的is, ==与对象的相等判断
在java中,对于两个对象啊a,b,若a==b表示,a和b不仅值相等,而且指向同一内存位置,若仅仅比较值相等,应该用equals.而在python中对应上述两者的是‘is’ 和‘==’. (1) py ...
- Spring学习(一)——Spring中的依赖注入简介
[前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring.不知 ...
- windows10 自带的OpenSSH Client(Beta)
我不知道其他版本有没有 ,我是windows10 专业版,版本1709,OS内部版本16288.1 安装过程: 1.我的电脑上面的卸载或更改程序 2.管理可选功能 3.添加功能 4.重启电脑,搞定 O ...
- LoadRunner读取文件并验证
checkprocess() { char command[1024]; int i, total = 0; char buffer[12], ch; char *filen ...
- Codeforces gym102058 J. Rising Sun-简单的计算几何+二分 (2018-2019 XIX Open Cup, Grand Prix of Korea (Division 2))
J. Rising Sun time limit per test 1.0 s memory limit per test 1024 MB input standard input output st ...
- 洛谷P1880 [NOI1995] 石子合并 [DP,前缀和]
题目传送门 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆 ...