java防止上传恶意文件_从补丁分析到在野利用:揭秘CVE20201464 Windows文件签名验证绕过漏洞疑云...

背景

2020年8月12日,微软发布了8月份的漏洞风险通告。通告中一个显示已被公开披露和在野利用的漏洞进入了我们的视野。该漏洞编号为CVE-2020-1464,其被描述为Windows验证文件数字签名时存在一个欺骗漏洞,攻击者若成功利用此漏洞可以绕过Windows数字签名安全验证并加载执行未正确签名的恶意文件。而在真实攻击情形中,攻击者利用该漏洞可能会绕过防止加载未正确签名文件的安全软件(如杀毒软件等)。

红雨滴团队研究人员在经过补丁对比分析后发现,该漏洞疑似为VirusTotal在2019年1月公开的针对.MSI(Windows Installer文件)文件数字签名验证绕过的攻击利用技术[2]。而在文章发布近一年半后,微软终于修复了该问题。我们在VirusTotal上也发现了数十个利用该漏洞的在野样本,随后奇安信威胁情报中心也第一时间在安全社区[1]公开了该漏洞的相关信息。

81820813c8976bf6d306d52b709eaf24.png

https://twitter.com/RedDrip7/status/1294225309336707072

漏洞原理

红雨滴团队研究人员通过补丁对比分析后发现,该漏洞原理为Windows在验证.MSI文件的数字签名时未对MSI文件的附加数据(复合二进制文件以外的数据)进行校验,这样在拥有合法数字签名的MSI文件尾部增加其它数据后,该文件也能通过Windows的签名验证:显示数字签名正常。

而如果在拥有合法数字签名的MSI文件尾部附加比如一个恶意的.jar(JAVA可执行文件)文件后,再将该文件重命名为.jar后缀。由于JAVA运行时环境对.jar文件的宽松解析特性,此时双击执行该文件将会执行文件末尾附加的恶意.jar文件,从而可能绕过安全软件的检测进而分发恶意软件。当然如果有其它类型文件也拥有这种宽松解析特性,那也可以用于利用该漏洞进行类似攻击。

补丁分析及修复原理

我们通过分析8月份Windows 7和Windows 10的补丁文件后发现,被修复的msisip.dll文件可能是CVE-2020-1464漏洞所在的文件。

5331b48cf37c095d8c6c6b3ee3d15a6d.png

使用BinDiff对比补丁前后的msisip.dll,发现补丁后的msisip.dll!MsiSIPVerifyIndirectData函数内新增了两个判断逻辑(NeedFileSizeVerification和VerifyFileSize)。

06641ac29c7fc0431b402b5f5d48720f.png

NeedFileSizeVerification函数为一个检测开关,决定是否调用VerifyFileSize对MSI文件进行检查。如果在指定的注册表键下存在指定的值,则关闭此开关,默认为开启状态。

d5c23bd8e2612fb9d859d0c388e63d8d.png

VerifyFileSize函数会对MSI文件进行具体的检查。该函数会初始化CFBFileFormatCheck类,并调用其中的VerifyFileSize成员函数。

5068798ce7d9e6affedaf17dfbe296fe.png

CFBFileFormatCheck::VerifyFileSize函数首先调用该类的另一成员函数GetDiscFileSize检测该文件大小是否非零,然后调用GetCFBFileSize成员函数做进一步的检查。

9bf937aaa548e647a5bdb0420c95dad8.png

CFBFileFormatCheck::GetCFBFileSize函数中会解析MSI的头部,并判断MSI中核心的头部字段是否有效。

e3c178566c0bb1919f1a0a485841f2e2.png

通过奇安信威胁情报中心研究人员的分析,补丁增加的函数主要检测了以下的字段:

  • NumFatSects不能为0

  • NumFatSects不能为-5、-4、-3、-2、-1

  • FirstDIFATSectorLocation不能为0

  • NumberOfDIFATSectors不能为-5、-4、-3、-2、-1

  • MajorVer必须为4

  • SectorShift必须为12

  • MiniSecShift必须为6

  • DIFAT中的有效扇区数量必须小于或等于NumFatSects

  • MSI文件的大小必须是(2^SectorShift)的整数倍

  • MSI文件的大小必须大于2*(2^SectorShift)

  • DIFAT有效扇区中对应的最大SID值必须等于(MSI_FileSize/(2^SectorShift)-2)

归根结底,补丁的作用是为了防止在MSI文件末尾附加数据,如果附加了其它的数据,则当前的MSI签名验证将无法正确验证通过。

在野利用分析

我们通过奇安信大数据分析平台查找到一例疑似最早在VirusTotal上出现的利用该漏洞的在野样本:

https://www.virustotal.com/gui/file/0f4238c3b41b99fd94f264b0df5b0400906a7e20af82107476dca4723aeb66bf/detection

该样本初始上传时也仅有6家杀软能够查杀:

a0adcd3742345856ae752371ec8be674.png

上述样本在未打2020.08月补丁前,是具有欺骗效果的。右键查看选项卡中的数字签名,可看到其拥有微软官方的数字签名,且数字签名正常。

bc99485b54f029553518a05ee12296fd.png

不仅如此,使用低版本的SigCheck也会有签名欺骗的效果。2019年的一篇通告中指出微软和VirusTotal达成合作,对SigCheck2.70及以后的版本加入了对MSI篡改的检测,所以使用SigCheck2.70之前的版本将不会对这类漏洞利用样本有任何提示。

9430f9883901ee4cdd6084a51107078d.png

45af07c4878afab0bd94faaf7be381dc.png

使用SigCheck2.70之后的版本对利用该漏洞的MSI文件进行签名检测,会提示文件大小无效。

07b51ee64449f8cbbec41aad3a29b7a0.png

在打上2020.08月的补丁后,右键查看选项卡中的数字签名将提示无效。

ff6ef5665f9209f7f3839a20a2d902e0.png

POC构造

利用该漏洞的样本极容易构造,只需要找到一个有正确数字签名的.MSI文件(比如拥有微软数字签名的文件),然后将恶意的JAR文件附加到MSI文件末尾,并将文件后缀修改为.jar。此时的JAR文件将拥有微软的正常签名,但是一旦双击该文件,恶意的JAR将会执行。

2c764963503f0869172828c180ad7b78.png

公开披露

其实,早在2019年01月,VirusTotal便在其的一篇技术分析报告中(https://blog.virustotal.com/2019/01/distribution-of-malicious-jar-appended.html)详细描述了MSI签名欺骗漏洞。报告中明确指出微软当时并没有修复该漏洞的打算。但是现在微软突然修复了此漏洞,即使此漏洞不是所谓的CVE-2020-1464,也足以让人匪夷所思了。

eee291f5583e388d47b10c4322786dcd.png

也许这也是微软在CVE-2020-1464的安全通告中描述该漏洞为已公开披露的原因吧。

8ec33579bed8b000faa8f2dabb36d51d.png

IOCs

VirusTotal上利用该漏洞分发恶意程序的文件MD5

0cbd9fedd37dc083765344678eb1afa2

1e6b3a2d8a5ceeaa007a45b3909bcc79

7518b1c88fd6a4477d2e65925eab9a24

43b074d8b331a66e1696eecf6c79e6f9

db0d40c9576f491f26e485233e4d1b80

bc4156817ce79bb4310c1469a6cca247

355bc242cce2044bdf9ba7478a58ea08

efa71fc71b9335e6b634b86b0dd7a41c

03dcba3432021b00ee282efcb52af2d1

3e16acf1d60041f18a2506a82a4d0476

b01fb4466de75ff9c1d3013282d32f41

9012770b1838b6ed23ac7a44dcfef171

96929921fafb080c2a914420c6854932

b7b7b6ffd677bd506ca070b330be69cc

65a137d42ab4a2e88af0c517dea6550f

f9fd811b038a75c8023e9dce36e9ecc8

5f58de5832ae9f469eb52c89b86cf455

fec9c5147054a2c45436a484be7539ec

4feb40630168235000b8549ea5dec8b8

a4a64df68cf763c840552dd9d1c9b302

10db29d53d0862fdc14fb75f5977efe6

1c809ccea3274496793140eb11de0bcb

42444b12fd202fc0d234a35d00c9f567

c6353085aed4f2c07d5b1e9226f390d7

f5b66ded098b9036022a520c51f95446

76a26b83e203b4c279b5913fa7ae5e7e

372e36765f5a6b21919cddf46f871dbf

d9a89aaa631673357d4e2af5e584513b

a91e3c41de82c201ce0351d5b595c378

5c4c1ed91cd32ff49e1ca7086d594217

5c3548fe4f439dd017d3c84b82285c3c

5d9b0569a3b9563af27a838af7a18d21

1d941c4dee6f9770acc3cc59e5983f86

f8bfa1f0ed2de5c7fccbef1687024d56

84c04a9757b164bdcd544370647ff3b7

0126910bb1a81205b579b0bad9fe1071

f49f5381335ac2de02ddbb21ecce5317

8a8c6e2b6f5cd7d3a940fec0a8b42637

d19dcae454266045083a6e66c256c782

94220f1326e2fce70abebafcd44dde66

参考链接

[1]. https://twitter.com/RedDrip7/status/1294225309336707072

[2]. https://blog.virustotal.com/2019/01/distribution-of-malicious-jar-appended.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

特殊教育学校计算机教学计划,2021年特殊教育学校教学计划

2021年特殊教育学校教学计划时间真是转瞬即逝,我们又将在努力中收获成长,现在就让我们好好地规划一下吧。那么教学计划怎么写才能体现你的真正价值呢?下面是小编精心整理的2021年特殊教育学校教学计划,希望能够帮助到大家。特殊教…

android 双层饼图_python:给表格加上双层饼图,让同事的图表黯然失色

大家好!今天来分享一下如何用python给表格加上双层饼图,让同事的图表黯然失色,如下图所示。案例中数据表格结构如下:代码及演示:import pyecharts.options as opts from pyecharts.charts import Pie import numpy as …

计算机一级电子表格插入表格,计算机一级电子表格

电子表格一、(1)在考生文件夹下打开EXC.XLSX文件:①将sheet1工作表的A1:E1单元格合并为一个单元格,水平对齐方式设置为居中;计算各单位三种奖项的合计,将工作表命名为"各单位获奖情况表"。②选取"各单位…

18年高考云南628分想学计算机,2018山东高考投档线公布!山大文624理628…快查查你学校多少分进档...

原标题:2018山东高考投档线公布!山大文624理628…快查查你学校多少分进档考生注意!↓↓↓山东省2018年普通高校招生文理类本科普通批、春季高考本科、艺术类本科校考批首次志愿于7月19日投档!具体来看,文理类本科普通批…

android fragment中引入自定义view_厉害了,用Android自定义View实现八大行星绕太阳3D旋转效果...

作者:史蒂芬诺夫斯基链接:https://www.jianshu.com/p/2954f2ef8ea5好久没写View了,最近恰巧遇到一个八大行星绕太阳旋转的假3D效果,写完之后感觉效果还不错。能玩十分钟的那种。本篇将一步步带您实现这样的一个效果,ps…

计算机消失了一个磁盘,win7系统重装后莫名奇妙消失一个分区磁盘的解决方法...

很多小伙伴都遇到过win7系统重装后莫名奇妙消失一个分区磁盘的困惑吧,一些朋友看过网上零散的win7系统重装后莫名奇妙消失一个分区磁盘的处理方法,并没有完完全全明白win7系统重装后莫名奇妙消失一个分区磁盘是如何解决的,今天小编准备了简单…

icloud无法验证服务器,iPhone提示“验证失败 连接到icloud时出错”怎么解决?

有不少使用苹果设备的朋友们在设备屏幕上面,可能会遇到了“验证失败 连接到icloud时出错”提示,不知道这是什么原因,如何解决。下面我就来谈谈出现这种现象的原因与解决办法。提示:“验证失败 连接到icloud时出错”,是…

esim办理出现差错_经营二氧化碳如何办理危化证?快来看!

点击关注我的气体网,置顶公众号行业资讯丨供求商机丨企业动态丨企业推荐更多信息和资源一网打尽━━━━━━安全复工二氧化碳相信大家都不陌生,我们平常一呼一吸间,呼出来的气体就是二氧化碳。还有我们平常喝的碳酸饮料,里边充入…

文件服务器有病毒,服务器共享文件会被病毒加密吗

前段时间纷纷扬扬的勒索病毒,让很多计算机用户害怕,就怕自己的共享文件被病毒加密而丢失,那么,服务器共享文件会被病毒加密吗?哪种网络条件下共享文件不易传播病毒呢?今天我们就跟随佰佰安全网一起来了解关…

swing快速入门(二十七)

注释很详细,直接上代码 上一篇 新增内容 1.为按钮指定图标 2. 列表框的并列 3.菜单项绑定快捷键 4.控件悬浮提示信息 5.菜单项设置小图标 6.五种布局风格右键选择切换 package swing21_30;import javax.swing.*; import java.awt.*; import java.awt.event.…

k8s pod里访问不到外部ip_K8S容器网络如何实现通信?

Kubernetes(简称K8S)正迅速成为云计算中部署和管理软件的新标准,那么K8S的容器网络是如何通信的呢?在了解容器网络通信原理之前,我们先学习下K8S中主要组件的定义,包括:节点(Node)、容器、POD、…

tps 数据库写并发衡量_硬核干货!抗住百万高并发的 6 个关键技术!

一、什么是高并发高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。高并发相关常用的一些指标有响应时间(Response Time)&…

ioc spring 上机案例_抛开Spring去理解IOC思想 - 原来IOC容器这么简单

很多小伙伴们看到标题可能就会想到抛开Spring就不会存在IOC思想了,其实不然在接下来的文章中就会讲述到。很多小伙伴在理解IOC的时候通常会和Spring放到一起去学习,首先呢Spring设计的非常之巧妙而且里面包含了很多除去IOC的其他功能。这样会导致我们在S…

余弦信号频谱表达式_信号傅里叶变换系列文章(1):傅里叶级数、傅里叶系数以及傅里叶变换...

傅里叶级数是周期信号的时域表达式,而傅里叶变换是非周期信号或周期信号的频谱(频域函数),要想了解它们之间的关系,需要你耐心看完下面内容。学过"信号与系统"等课程的人往往会被许多问题所困惑,…

5s的app显示无法连接服务器,苹果iphone5s手机无法连接App Store问题解决方法汇总...

iphone5s无法连接App Store怎么办?大家在使用iphone5s过程中可能会遇到无法连接app store的问题,那怎么办呢?本文小编就主要给大家讲解一下如何解决iphone5s无法连接App Store的问题。iphone5s无法连接App Store解决方法如下:1)还…

变频器输出功率_100米的深井泵,如何接变频器,怎样控制

深井水泵的控制上,不外是为了保证负载水流的恒定性,一般可以通过恒压闭环方式来完成,如果有储水池的,液位闭环也可以。而深井水泵选用变频器,变频器装地面,你的线路有100米这么长,一般需要考虑加…

云服务器cvm系统,云服务器 cvm 自带系统

云服务器 cvm 自带系统 内容精选换一换如果Linux操作系统云服务器未安装密码重置插件,可以参见本节内容重新设置密码。本节操作重置的是root用户的密码,您可以重置完root密码后登录云服务器后再更换秘钥或重置非root用户的密码。Windows操作系统请参见重…

js距离单位换算_英语中常用的度量衡等单位,与我们用的不一样,这些差异点快收藏...

在日常生活中,我们几乎每天都会用到度量衡等度量单位,比如:去市场买菜,会用到几斤几两,量距离要知道多长,卖房子必须知道房屋的面积等等。度量单位在我们的生活中是非常重要的,可以说已经到了你…

开发缺点_开发移动端手机APP有哪些优缺点?

在当今移动互联网高速发达的现在,如果非要说什么工具最重要,那么一定要数手机APP了。企业可以借助它来进行移动端的营销,提高企业品牌推广力度和盈利;用户也可以借助它解决日常生活衣食住行等各方面的问题,因此备受人们…

用户修改了信息jwt服务器怎么识别,jwt验证登录信息

为什么要告别session?有这样一个场景,系统的数据量达到千万级,需要几台服务器部署,当一个用户在其中一台服务器登录后,用session保存其登录信息,其他服务器怎么知道该用户登录了?(单点登录)&…