很多情況下,一旦產品中發現高風險安全漏洞,更大的挑戰橫亙眼前:怎樣依據美國國家漏洞數據庫(NVD)中指定的名稱找出受影響的組件或產品。之所以存在這個問題,是因為NVD使用通用平臺枚舉(CPE)名稱標識軟件產品,該名稱由美國商務部下屬的國家標準與技術研究所(NIST)指定。
NVD根據供應商、產品及其版本字符串用CPE標識硬件和軟件組件。軟件用戶若想通過NVD確定自己在用的某產品組件是否存在相關漏洞,就必須知道該組件的準確CPE名稱。然而,無論是開源還是專有組件,通常都不太可能找到其CPE名稱。
大多數情況下,軟件安全所需的諸多流程就是因為這一問題而無法可靠地自動化,比如軟件物料清單(SBOM)生成。
難以在NVD中找到漏洞的原因
為了解問題全貌,可以考慮下面六種情況,下列情況都可令依賴CPE作為唯一標識符在NVD中檢索組件和產品漏洞極端困難。
1、漏洞在NVD中以通用漏洞與暴露(CVE)編號(如“CVE-2022-12345”)標識,并采用通用漏洞評分系統(CVSS)為每個CVE指定威脅級別。通常不會在分配到CVE編號之前就為軟件產品創建CPE。然而,很多軟件供應商從未上報漏洞(可能產生CVE),于是其產品在NVD中便一直沒有CPE了。
這未必是因為產品從未出現漏洞,而是因為開發商可能沒向NVD報告過任何現有漏洞。
因此,下面兩種情況下,在NVD中檢索就會得到“無匹配記錄”的結果了:
(1) 給定產品中不存在漏洞
(2) 存在漏洞,但開發商從未報告過
2、由于NVD收錄新CPE名稱時不執行任何錯誤檢查,所以有可能出現不符合一貫命名規范的產品CPE名稱。于是,如果用戶用正確指定的CPE檢索產品,就會收到“0條匹配記錄”的錯誤提示信息。如果使用了原始(非規范)CPE名稱,但不存在該產品相關的CVE報告,用戶也會收到如上提示信息。
這種提示信息可能意味著用戶檢索的產品CPE名稱有效,但該產品未報告過CVE;也可能意味著用戶輸入的CPE不匹配NVD中的CPE,但實際上存在與提交到NVD的(非規范)CPE相關聯的CVE。
用戶在檢索欄中拼錯了CPE名稱也會出現顯示“0條匹配記錄”錯誤提示信息的情況。這種情況下,用戶根本不會知道是手誤導致的,而會認為產品就是不存在報告的漏洞。
3、隨著時間流逝,產品或供應商名稱會因并購而改變,而產品的CPE名稱也會變。這種情況下,如果用戶用最初的CPE而沒用新的CPE名稱檢索,也不會知道新出現漏洞的情況。與前面的情況相同,用戶會收到顯示為“0條匹配記錄”的信息。
4、供應商或產品名稱存在不同變體的情況也會導致檢索出錯,比如“Microsoft”和“Microsoft Inc.”,或者“Microsoft Word”和“Microsoft Office Word”等等。沒有精準的供應商或產品名稱,NVD檢索就會產生錯誤的結果。
5、同一產品在NVD中可能會擁有多個CPE名稱,如果產品由不同人員錄入,而每個人都用了不同迭代的話。這可能導致幾乎無法確定哪個名稱是正確的。更糟糕的是,如果為每個CPE變體都錄入了CVE,就會導致產品沒有“正確”的名稱。其中一個例子就是OpenSSL(如“OpenSSL”和“OpenSSL Framework”)。由于沒有哪個CPE名稱包含所有OpenSSL漏洞,用戶必須單獨檢索每個產品名稱變體。
6、很多情況下,漏洞只影響某個軟件庫里的一個模塊。然而,由于CPE名稱是指定給整個產品而非各個模塊的,用戶需完整閱讀CVE報告才能確定到底是哪個模塊易受攻擊。如果沒看全,可能會導致非必要的修復或緩解,比如在用產品中并未安裝有漏洞的模塊,而是安裝了庫里其他模塊的時候。
幸好,名為SBOM論壇的跨行業小組(包括OWASP、Linux基金會、Oracle和其他組織的成員)正在研究這個問題,并制定了旨在提升NVD準確性的一項提案,該提案的重點放在現代自動化用例上。
該小組的建議,例如軟件采用包URL(purl)和硬件采用GS1標準,旨在創建一種標準化的方式供可靠查詢NVD和接收關于漏洞的準確信息。
來源:數世咨詢