CVE-2020-0601 Windows CryptoAPI验证绕过漏洞原理简要分析
2020-01-16 13:26

报告编号:B6-2020-011601

报告来源:360-CERT

报告作者:360-CERT

更新日期:2020-01-16

0x00 漏洞原理分析

ECC椭圆曲线加密(Elliptic curve cryptography)是一种建立公开密钥加密的算法,基于椭圆曲线数学,于1985年由Neal Koblitz和Victor Miller分别独立提出的。ECC的主要优势在于某些情况下比其他方法使用更小的密钥(如RSA加密算法)来提供相当或更高等级的安全。

ECC椭圆曲线加密原理在于:设G为曲线上一点,d为一个整数令点Q = d.G,若给定d和G,很容易求出Q,若给定G和Q ,很难求出d。 其中Q为公钥,d为私钥。

CVE-2020-0601漏洞原理在于 win10 增加了对带参数ECC密钥的支持,但在 crypt32.dll 中做签名验证时,只检查匹配的公钥 Q,而没有检查生成元 G。 公钥 Q = dG,d 是私钥。由于 win10 支持自定义生成元 G',攻击者可以提供 G' = Q,d' = e(单位元),使得 公钥Q = dG = d'G'。 这两对(Q, G)-(Q, G')中 公钥Q 相同,G 与 G' 不同,由于验证缺陷,只检测 公钥Q。 从而,攻击者用自己的私钥 d' 签名,会被验证通过,认为是官方私钥d 做出的签名。

伪造的Q = d'G',在验证签名时过程如下: 假设exe文件 A 的hash值是 X,用伪造的私钥 d' 签出的值是 Y,验证时,用公钥Q 求解 Y 得到 X,和exe的hash值一致,认证通过,系统认为签名正确,完成绕过。

利用此漏洞可以使用伪造的证书对恶意的可执行文件进行签名,使文件看起来来自可信的来源,或者进行中间人攻击并解密用户连接到受影响软件的机密信息。

0x01 时间线

2020-01-14 微软官方发布安全公告

2020-01-15 360CERT发布通告

2020-01-16 360CERT发布漏洞原理分析

0x02 参考链接

  1. https://media.defense.gov/2020/Jan/14/2002234275/-1/-1/0/CSA-WINDOWS-10-CRYPT-LIB-20190114.PDF
  2. https://www.zerodayinitiative.com/blog/2020/1/14/the-january-2020-security-update-review