报告编号: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发布漏洞原理分析