首页
社区
课程
招聘
[原创]CVE-2021-1647分析
发表于: 2021-3-5 18:07 9105

[原创]CVE-2021-1647分析

2021-3-5 18:07
9105

二进制漏洞分析之 CVE-2021-1647
一、漏洞信息

  1. 漏洞简述
    •漏洞名称:Microsoft Defender 缓冲区溢出漏洞
    •漏洞编号:CVE-2021-1647
    •漏洞类型:buffer overflow
    •漏洞影响:远程代码执行
    •CVSS评分:7.8 HIGH
    •利用难度:中等
    •基础权限:不需要
    2.组件概述
    MsMpEng.exe : Microsoft恶意软件保护服务。
    mpengine.dll :Microsoft恶意软件保护引擎,提供了Microsoft防病毒和反间谍软件的扫描,检测。
  2. 漏洞利用
    Microsoft Defender 发现新的文件时,提交给核心扫描引擎(MsMpEng)进行检测,在检测过程中发现是一个特定加壳PE文件,就进入检测引擎的脱壳流程,在解密流程中对加密块的进行解码时 存放解码数据的缓冲区大小可以被特定壳样本控制,所以就造成了缓冲区溢出。
  3. 漏洞影响
    受此漏洞影响的最新版本的Microsoft恶意软件保护引擎 版本1.1.17600.5
    注:MpEngine.dll的文件版本低于 1.1.17700.4的都受影响。
  4. 解决方案
    解决此漏洞的Microsoft恶意软件保护引擎的第一个版本 版本1.1.17700.4。
    链接:https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-1647
    二、漏洞复现
    (必有)
  5. 环境搭建
    •靶机环境版本详述
    –操作系统:Win10(10.0.19042 ?? Build 19042)
    –虚拟机版本:VMware® Workstation 15 Pro
    •靶机配置
    –Microsoft Defender 反恶意软件客户端版本: 4.18.1909.6
    –Microsoft Defender引擎版本: 1.1.16400.2
    –Win10驱动调试配置可参考:
    •https://blog.csdn.net/qq_21000273/article/details/52027708
    •攻击机环境版本详述
    –可运行Windbg 10 即可
    •攻击机配置
    –Windows Debugger Version 10.0.16299.15 AMD64
  6. 复现过程
    第一步:安装好靶机系统后,立刻断网,不然Microsoft Defender会自动升级,切记;
    第二步:将样本丢入靶机系统即可复现(弹出system权限的cmd)。
    三、漏洞分析
  7. 基本信息
    •漏洞文件:MpEngine.dll
    •漏洞函数: CAsprotectDLLAndVersion::RetrieveVersionInfoAndCreateObjects
    漏洞对象:asprotect 节区解码结构体
    struct asprotect_dec_section_info
    {
    uint32_t rva;
    uint32_t size;
    };
  8. 背景知识
    1.了解asprotect外壳loader的原理;
    2.了解system权限下服务程序的调试方法;

  9. 详细分析

  10. 静态分析
    1.先获取MpEngine模块的ImageBase = 0x7FF88C740000;
    2.在IDA中设置ReBase:

    3.定位到漏洞函数:RetrieveVersionInfoAndCreateObjects
    4.漏洞伪代码:(或直接定位地址:00007FF88CF19C02)

    此处代码是的作用是:计算Asprotect section解密需要的最大缓存空间,若是正常的组合序列”00001000 00031400 00033000 00000a00 0003c000 00001000 0003e000 00002600”经过上述代码计算得“0x41000”,若是经过精心构造的序列“00000000 00000000 00000000 00000000 00002000 00000000 00002000 00003000”经过上述代码计算得”0x2000”;
    5.以“0x2000”结果为导向,后面会调用new申请一大块内存来存放解密后的数据:

    6.接着会经过四次Asprotect section 解码,在第四次解码时(0x3000>0x2000)产生了溢出:

    7.至此漏洞关键点分析完毕。
    8.漏洞关键代码已经还原成C代码,请看附件。
  11. 函数调用链
  12. 动态调试手法
    进程图:


    由于MsMpEng.exe是具有system权限,应用层访问状态为“拒绝”的服务进程,所以一般的调试方法不会附加成功,所以采用了Windbg从内核到应用层进程切换的手法,觉得有必要把流程说一下:
    1.加载符号:
    .sympath SRVF:\symbols_folderhttps://msdl.microsoft.com/download/symbols
    .reload
    2.获取进程PEB: !process 0 0 MsMpEng.exe
    (PEB=0xffff9909ce79e300)
    3.进行侵入:
    .process /p 0xffff9909ce79e300
    .reload /f /user
    .process /i /p 0xffff9909ce79e300
    4.下 MsMpEng VM脱壳关键点:bu AsprotectIsMine
    5.
    6.RetrieveVersionInfoAndCreateObjects 下断点不能直接bu
    7.投入样本到第五步时,F11 2次进入,这是可以直接在关键函数下断点了
    8.建议在下断点之前先u一下,看看情况。
    3.漏洞函数分析
    已经将产生漏洞的函数关键循环进行了源码还原,请参照“静态分析”小节进行调试即可。
  13. 利用思路
    1
    此漏洞的利用复杂度较高,本想完美复现,奈何实力有限无法完成。需要对WIN10的内存管理以及Microsoft Defender VM的虚拟执行和内存管理相当精通,样本作者水平之高,令人叹服。后面有实力再继续分析,各位师傅可以参照文献“平头哥”的文章。
  14. 利用条件
    漏洞利用的必备条件:恶意软件保护引擎的版本低于1.1.17700.4即可。
    2.攻击向量
    如下列表壳的Loader都可以作为输入目标:
    Upxw64
    Upxw
    WExtract
    NSPacker
    Shrinker
    PECompact2
    Area51
    Crypter1337
    Aspack
    PKLite
    SfxCab
    Asprotect

四、缓解措施
联网即可。
五、参考文献
1.加密与解密第四版,圣经必读;
2.平头哥的文章--“https://mp.weixin.qq.com/s/CjsntvNM6_zMZF1IGirMPg”
3.cn_windows_10_business_editions_version_20h2_x64_dvd_f978664f.iso


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2021-3-6 10:38 被mJqalJqN编辑 ,原因: 上传附件
上传的附件:
收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 15565
活跃值: (16922)
能力值: (RANK:730 )
在线值:
发帖
回帖
粉丝
2
建议在分析上再详细一点,师傅的附件没有传上来
2021-3-6 09:24
0
雪    币: 16
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
有毒 建议在分析上再详细一点,师傅的附件没有传上来
师傅,附件已经上传。后面会继续复盘的。谢谢版主,指点。
2021-3-6 10:50
0
雪    币: 15565
活跃值: (16922)
能力值: (RANK:730 )
在线值:
发帖
回帖
粉丝
4
mJqalJqN 师傅,附件已经上传。后面会继续复盘的。谢谢版主,指点。
加油,期待更进一步!
2021-3-6 10:59
0
雪    币: 185
活跃值: (170)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
能麻烦加下复现吗
2021-3-21 16:31
0
雪    币: 16
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
mb_tjaylbit 能麻烦加下复现吗
可以,你的联系方式,我加你。
2021-3-21 23:32
0
游客
登录 | 注册 方可回帖
返回
//