開源漏洞長期普遍存在,軟件供應鏈挑戰(zhàn)我國關基設施安全
近年來,針對軟件供應鏈的安全攻擊事件一直呈快速增長態(tài)勢,造成的危害越來越嚴重,防范軟件供應鏈安全風險,已經迫在眉睫;開源軟件漏洞頻現(xiàn):截至2020年底,CVE/NVD、CNNVD、CNVD等公開漏洞庫中共收錄開源軟件相關漏洞41342個,其中高達13%(5366個)為2020年度新增漏洞;研究發(fā)現(xiàn):近9成軟件項目存在已知開源軟件漏洞;平均每個軟件項目存在66個已知開源軟件漏洞;影響最廣的開源軟件漏洞存在于44.3%的軟件項目中;15年前開源軟件漏洞仍存在于多個軟件項目中。近期,安全實驗室發(fā)布《2021年中國軟件供應鏈安全綜合分析報告》。報告主要包括國內企業(yè)自主開發(fā)源代碼安全狀況分析、開源軟件生態(tài)發(fā)展與安全狀況分析、國內企業(yè)軟件開發(fā)中開源軟件應用狀況分析、典型應用系統(tǒng)供應鏈安全風險實例分析、總結及建議等五個方面。
國內企業(yè)自主開發(fā)源代碼安全狀況
源代碼是軟件的原始形態(tài),位于軟件供應鏈的源頭。源代碼安全是軟件供應鏈安全的基礎,其地位非常關鍵和重要。
2020年全年,奇安信代碼安全實驗室對2001個國內企業(yè)自主開發(fā)的軟件項目源代碼進行了安全缺陷檢測,檢測的代碼總量為335011173行,共發(fā)現(xiàn)安全缺陷3387642個,其中高危缺陷361812個,整體缺陷密度為10.11個/千行,高危缺陷密度為1.08個/千行。
1、編程語言分布情況
在被檢測的2001個國內企業(yè)自主開發(fā)的軟件項目中,使用數(shù)量排名前3的編程語言為Java、PHP、C/C++,對應的軟件項目數(shù)量分別為1492個、204個和97個??梢钥闯?,相關國內企業(yè)在進行軟件開發(fā)時的首選語言是Java語言,占比高達75%。編程語言的總體分布情況如下圖所示。
圖片
2、典型安全缺陷檢出情況
輸入驗證、路徑遍歷、跨站腳本、注入、NULL引用、資源管理、密碼管理、API誤用、配置管理、日志偽造等十類安全缺陷是程序員在編寫軟件代碼時經常會出現(xiàn)的典型安全缺陷。
典型安全缺陷的檢出率可以體現(xiàn)出軟件源代碼的基本安全狀況(檢出率指含有某類缺陷的軟件項目數(shù)占軟件項目總數(shù)的比例)。在被檢測的2001個軟件項目中,十類典型安全缺陷的總體檢出率為77.8%,每類典型缺陷的檢出率及排名如下表所示。
開源軟件生態(tài)發(fā)展與安全狀況
Gartner表示,現(xiàn)代軟件大多數(shù)是被“組裝”出來的,不是被“開發(fā)”出來的。根據(jù)知名研究機構Forrester統(tǒng)計,軟件開發(fā)中,80~90%的代碼來自于開源軟件。因此,現(xiàn)代軟件的源代碼絕大多數(shù)是混源代碼,由企業(yè)自主開發(fā)的源代碼和開源軟件代碼共同組成。開源軟件是現(xiàn)代軟件開發(fā)最基礎的原材料,與企業(yè)自主開發(fā)的源代碼所處的軟件供應鏈環(huán)節(jié)相同,也位于軟件供應鏈的源頭,其代碼自身的安全狀況,會直接影響最終軟件的安全性。
報告從開源軟件生態(tài)發(fā)展狀況、開源軟件源代碼安全狀況、開源軟件公開報告漏洞狀況、開源軟件活躍度狀況等四個方面對2020年開源軟件生態(tài)發(fā)展與安全狀況進行綜合分析。
1、開源軟件生態(tài)發(fā)展狀況分析
據(jù)奇安信代碼安全實驗室監(jiān)測和統(tǒng)計,2019年底和2020年底,主流開源軟件包生態(tài)系統(tǒng)中開源項目總量分別為2841314個和3814194個,一年間增長了34.2%;截至2020年底,主流開源軟件包生態(tài)系統(tǒng)中平均每個開源項目有10.2個版本??梢钥闯觯?020年開源軟件生態(tài)更加繁榮,整體發(fā)展非常迅猛。
本報告中對八個典型的開源軟件包生態(tài)系統(tǒng)進行了進一步的分析和比較,這八個包生態(tài)系統(tǒng)為Maven、NPM、Packagist、Pypi、Godoc、Nuget、Rubygems、Swift,具體分析如下。
NPM包生態(tài)項目數(shù)量最多,Godoc包生態(tài)增速最快。八個典型的開源軟件包生態(tài)系統(tǒng)中開源項目數(shù)量和增長率情況如下圖所示,其中開源項目數(shù)量最多的是NPM包生態(tài)系統(tǒng),截至2020年底,其開源項目數(shù)量達到了1559835個;開源項目數(shù)量增速最快的是Godoc包生態(tài)系統(tǒng),2020年一年間的項目總量增速達到了36.2%。
Maven、Nuget、NPM包生態(tài)系統(tǒng)的開源項目開發(fā)者比較“勤奮”,開源項目的平均版本數(shù)超過11個。截至2020年底,八個典型的開源軟件包生態(tài)系統(tǒng)的開源項目數(shù)量和版本數(shù)量如下表所示。其中,Maven包生態(tài)系統(tǒng)平均每個開源項目有18.0個版本,Nuget包生態(tài)系統(tǒng)平均每個開源項目有11.7個版本,NPM包生態(tài)系統(tǒng)平均每個開源項目有11.0個版本。
2、開源軟件源代碼安全狀況分析
奇安信代碼安全實驗室于2015年初發(fā)起了“奇安信開源項目檢測計劃”,該計劃是一項針對開源軟件項目的公益性安全檢測計劃,旨在讓廣大開發(fā)者關注和了解開源軟件的安全問題,提高軟件安全開發(fā)意識和技能。
2020年全年,“奇安信開源項目檢測計劃”對1364個開源軟件項目的源代碼進行了安全檢測,代碼總量為124296804行,共發(fā)現(xiàn)安全缺陷1859129個,其中高危缺陷117738個。2020年檢測的1364個開源軟件項目整體缺陷密度為14.96個/千行,高危缺陷密度為0.95個/千行。
(1)編程語言分布情況
2020年檢測的1364個開源項目中,一共涉及到7種編程語言,分別是Java、C/C++、Python、OC、Go、JavaScript、PHP,編程語言的分布情況如下圖所示。
(2)典型安全缺陷檢出情況
輸入驗證、路徑遍歷、跨站腳本、注入、NULL引用、資源管理、密碼管理、API誤用、配置管理、日志偽造等十類安全缺陷是程序員在編寫軟件代碼時經常會出現(xiàn)的典型安全缺陷。
典型安全缺陷的檢出率可以體現(xiàn)出軟件源代碼的基本安全狀況(檢出率指含有某類缺陷的軟件項目數(shù)占軟件項目總數(shù)的比例)。在2020年檢測的1364個開源軟件項目中,十類典型安全缺陷的總體檢出率為56.3%,每類典型缺陷的檢出率及排名如下表所示。
3、開源軟件公開報告漏洞狀況分析
據(jù)奇安信代碼安全實驗室監(jiān)測與統(tǒng)計,截至2020年底,CVE/NVD、CNNVD、CNVD等公開漏洞庫中共收錄開源軟件相關漏洞41342個,其中5366個為2020年度新增漏洞。
(1)大型開源項目漏洞總數(shù)及年度增長TOP20
截至2020年底,歷史漏洞總數(shù)排名前20的大型開源項目信息如下表所示。
2020年一年間,公開報告漏洞數(shù)量增長排名前20的大型開源項目信息如下表所示。
(2)主流開源軟件包生態(tài)系統(tǒng)漏洞總數(shù)及年度增長TOP20
截至2020年底,主流開源軟件包生態(tài)系統(tǒng)中歷史漏洞總數(shù)排名前20的開源軟件信息如下表所示。
2020年一年間,主流開源軟件包生態(tài)系統(tǒng)中公開報告漏洞數(shù)量增長排名前20的開源軟件信息如下表所示
4、開源軟件活躍度狀況分析
活躍度也是衡量開源軟件安全性的一個重要維度。不活躍的開源軟件,無論是更新頻率很低,或者被廢棄,一旦出現(xiàn)安全漏洞,難以得到及時的修復,安全風險很高;活躍的開源軟件中,如果其版本更新發(fā)布的頻率過高,同樣會增加使用者運維的成本和安全風險。在選擇使用開源軟件時,應該充分考慮這兩個因素。
本報告中分析了2020年主流開源軟件包生態(tài)系統(tǒng)中開源軟件的版本更新情況,可以一定程度上體現(xiàn)當前開源軟件活躍度的整體狀況。
(1)61.6%的開源軟件項目處于不活躍狀態(tài)
我們將一年內未更新發(fā)布過版本的開源軟件項目定義為不活躍項目。2020年全年,主流開源軟件包生態(tài)系統(tǒng)中不活躍的開源軟件項目數(shù)量為2347794個,占比達到61.6%。
本報告中對八個典型的開源軟件包生態(tài)系統(tǒng)進行了進一步的分析和比較,這八個包生態(tài)系統(tǒng)為Maven、NPM、Packagist、Pypi、Godoc、Nuget、Rubygems、Swift,其中NPM的不活躍項目數(shù)量最多,達到1018533個,Rubygems的不活躍項目比例最高,占比達到86.5%,具體數(shù)據(jù)見下表。
(2)13000多個開源軟件一年內更新發(fā)布超過100個版本
2020年全年,主流開源軟件包生態(tài)系統(tǒng)中,更新發(fā)布100個以上版本的開源項目有13411個。前述八個典型的開源軟件包生態(tài)系統(tǒng)中,一年內更新發(fā)布超過100個版本的項目數(shù)量見下表。
國內軟件開發(fā)中開源軟件應用狀況
現(xiàn)代軟件的源代碼絕大多數(shù)是混源代碼,由企業(yè)自主開發(fā)的源代碼和開源軟件代碼共同組成。本章內容將針對國內企業(yè)在進行軟件開發(fā)工作時,使用開源軟件的具體情況進行分析。主要回答兩個問題:一是國內企業(yè)在軟件開發(fā)中是否使用以及使用了多少開源軟件?二是其使用的開源軟件是否存在安全問題?
2020年全年,奇安信代碼安全實驗室對2557個國內企業(yè)軟件項目中使用開源軟件的情況進行了分析,這些軟件項目的應用領域涉及政府、金融、能源等重要行業(yè)。分析發(fā)現(xiàn),國內企業(yè)在軟件開發(fā)中普遍使用存在已知漏洞的開源軟件,存在巨大的軟件供應鏈安全風險。具體分析數(shù)據(jù)如下。
1、開源軟件總體使用情況分析
(1)國內企業(yè)軟件項目100%使用開源軟件
在被分析的2557個國內企業(yè)軟件項目中,無一例外,均使用了開源軟件。最多的項目使用了3878個開源軟件,平均每個項目使用126個開源軟件。使用開源軟件最多的5個項目情況如下表所示。
經過后續(xù)的調研和訪談,我們還發(fā)現(xiàn),軟件項目中使用的開源軟件數(shù)量大大超出了軟件項目管理者和程序員自身的認知。由于開源軟件之間的依賴關系錯綜復雜,且軟件開發(fā)中依賴包的管理通常通過包管理器程序自動管理,軟件開發(fā)者常常意識不到自己使用了數(shù)量巨大的開源軟件,因此當某個開源軟件曝出安全漏洞時,軟件開發(fā)者常?!疤蓸尅倍蛔灾?,這中間隱含了巨大的軟件供應鏈安全風險。
(2)流行開源軟件被近1/4的軟件項目使用
一些流行開源軟件會被很多軟件項目所使用,這些開源軟件一旦出現(xiàn)安全漏洞,影響面將會非常巨大。對于大型企業(yè)來說,企業(yè)內部可能就有數(shù)以百計的軟件開發(fā)項目,更加需要對流行開源軟件保持足夠的關注和重視,應該做到對其在本單位內的使用情況心中有數(shù)。經統(tǒng)計,在我們分析的2557個國內企業(yè)軟件項目中,被使用最多的開源軟件為Apache Commons Lang,被622個項目所使用,占比達24.3%。被使用最多的前5名開源軟件如下表所示。
2、開源軟件漏洞風險分析
(1)近9成軟件項目存在已知開源軟件漏洞
分析發(fā)現(xiàn),在2557個國內企業(yè)軟件項目中,存在已知開源軟件漏洞的項目有2280個,占比高達89.2%;存在已知高危開源軟件漏洞的項目有2062個,占比為80.6%;存在已知超危開源軟件漏洞的項目有1802個,占比為70.5%。
(2)平均每個軟件項目存在66個已知開源軟件漏洞
在2557個國內企業(yè)軟件項目中,共檢出168604個已知開源軟件漏洞(涉及到4166個唯一CVE漏洞編號),平均每個軟件項目存在66個已知開源軟件漏洞,最多的軟件項目存在1200個已知開源軟件漏洞。存在已知開源軟件漏洞數(shù)量排名前5的項目情況如下表所示。
(3)影響最廣的開源軟件漏洞存在于44.3%的軟件項目中
從漏洞的影響度來分析,影響范圍最大的開源軟件漏洞為CVE-2020-5421,影響了44.3%的軟件項目。影響度排名前5的開源軟件漏洞情況如下表所示。
(4)15年前開源軟件漏洞仍然存在于多個軟件項目中
分析發(fā)現(xiàn),部分軟件項目中存在十幾年前公開的古老開源軟件漏洞,最古老的漏洞是2005年11月公開的CVE-2005-3510,仍然存在于31個項目中。部分古老開源軟件漏洞的影響情況如下表所示。
3、開源軟件運維風險分析
開源軟件運維風險復雜多樣,本報告主要從老舊開源軟件的使用和開源軟件多版本的使用角度進行分析。
(1)18年前的老舊開源軟件版本仍在被使用
分析發(fā)現(xiàn),許多軟件項目中使用了十幾年前發(fā)布的開源軟件版本,存在很大的運維風險。被使用的老舊開源軟件版本中,最老舊的一個是2003年3月3日發(fā)布的Apache Xalan 2.5.D1,已經有18年之久,但仍然被7個軟件項目所使用。按老舊程度排名前5的開源軟件如下表所示。
(2)開源軟件各版本使用非?;靵y
分析發(fā)現(xiàn),各個項目中開源軟件使用的版本非?;靵y,并非使用的都是最新版本。Spring Data是被使用版本最多的開源軟件,有162個版本在被使用。按照被使用版本的數(shù)量排序,排名前5的開源軟件情況如下表所示。
總結及建議
軟件供應鏈已經成為網絡空間攻防對抗的焦點,直接影響關鍵基礎設施和重要信息系統(tǒng)安全。為了應對軟件供應鏈安全挑戰(zhàn),美國總統(tǒng)拜登在2021年5月12日簽署了“加強國家網絡安全的行政命令”,明確提出要增強美國聯(lián)邦政府的軟件供應鏈安全,要求向美國聯(lián)邦政府出售軟件的任何企業(yè),不僅要提供軟件本身,還必須提供軟件物料清單(SBOM),明確該軟件的組成成分。行政命令中還要求美國國家標準與技術研究院(NIST)在6個月內發(fā)布軟件供應鏈安全指南,并在1年內發(fā)布最終指南。該行政命令被認為是迄今為止美國聯(lián)邦政府為保護美國軟件供應鏈安全采取的最強勁措施。
當前,我國在軟件供應鏈安全方面的基礎比較薄弱,亟需從國家、行業(yè)、機構、企業(yè)各個層面建立軟件供應鏈安全風險的發(fā)現(xiàn)能力、分析能力、處置能力、防護能力,整體提升軟件供應鏈安全管理的水平?,F(xiàn)代軟件的供應鏈非常復雜,軟件供應鏈安全管理是一個系統(tǒng)工程,需要長期持續(xù)的建設?;谄姘残糯a安全實驗室的研究和實踐,我們建議可從以下方面入手開展軟件供應鏈安全相關工作,并在此基礎之上不斷增強和完善。
1、對國家與行業(yè)監(jiān)管層面的建議:
制定軟件供應鏈安全相關的政策要求、標準規(guī)范和實施指南,建立長效工作機制。
建立國家級/行業(yè)級軟件供應鏈安全風險分析平臺,具備系統(tǒng)化、規(guī)模化的軟件源代碼缺陷和后門分析、軟件漏洞分析、開源軟件成分及風險分析等能力,為關鍵基礎設施、重要信息系統(tǒng)用戶提供日常的自查服務,及時發(fā)現(xiàn)和處置軟件供應鏈安全風險。
在產品測評、系統(tǒng)測評等工作中納入軟件供應鏈安全的內容,針對軟件的源代碼、制成品、運行中的軟件系統(tǒng)等進行軟件供應鏈安全的測試和評估。
2、對軟件最終用戶層面的建議:
參照監(jiān)管要求及業(yè)內優(yōu)秀實踐,明確本單位內部軟件供應鏈安全管理的目標、工作流程、檢查內容、責任部門,并賦予責任部門足夠的權力。
在采購商業(yè)貨架軟件時,應充分評估供應商的安全能力,并與供應商簽署安全責任協(xié)議,要求供應商提供其軟件產品中所使用的第三方組件/開源組件的清單,并明確要求,一旦這些第三方組件/開源組件出現(xiàn)安全漏洞,供應商需同樣承擔安全責任,提供必要的技術支持。
在自行開發(fā)軟件系統(tǒng)或委托第三方定制開發(fā)軟件系統(tǒng)時,應遵循軟件安全開發(fā)生命周期管理流程,針對軟件源代碼進行安全缺陷檢測和修復,同時要重點管控開源軟件的使用,建立開源軟件資產臺賬,持續(xù)監(jiān)測和消減所使用的開源軟件的安全風險。
3、對軟件廠商層面的建議:
提高安全責任意識,將安全作為產品的基礎屬性來對待,嚴控產品的安全質量。
建立清晰的軟件供應鏈安全策略,明確本單位內部軟件供應鏈安全管理的目標、工作流程、檢查內容、責任部門,并賦予責任部門足夠的權力。
嚴格管控上游,尤其重點管控開源軟件的使用,建立開源軟件資產臺賬,建議采用可融入軟件開發(fā)流程的開源安全治理工具,持續(xù)監(jiān)測和消減所使用的開源軟件的安全風險。
嚴控自主開發(fā)的代碼質量,建議采用可融入軟件開發(fā)流程的軟件源代碼安全分析工具,持續(xù)檢測和修復軟件源代碼中的安全缺陷和漏洞。
建立完善的產品漏洞響應機制,包括產品漏洞信息的收集、漏洞報告渠道的建立和維護、漏洞補丁的開發(fā)和發(fā)布、客戶側漏洞應急響應和修復支持等。