蘇 仟 趙 嬈
(國家工業(yè)信息安全發(fā)展研究中心軟件所 北京 100043)
當前,開源已成為人類超大規(guī)模智力協(xié)同的最佳組織方式之一,也成為科技創(chuàng)新的“主戰(zhàn)場”,在世界范圍內(nèi)迎來大發(fā)展.2020年,開源在教育、金融、醫(yī)療等傳統(tǒng)行業(yè)滲透率超過60%,開源軟件已成為企業(yè)構(gòu)建信息技術(shù)的重要選擇[1].同時,開源軟件也成為軟件供應鏈攻擊的成熟目標,面臨著安全漏洞、知識產(chǎn)權(quán)、開源管制等風險,對關(guān)鍵基礎(chǔ)設(shè)施和企業(yè)客戶產(chǎn)生廣泛影響.
1) 開源軟件供應鏈安全事件頻發(fā).
近年來數(shù)據(jù)泄露、網(wǎng)絡(luò)敲詐等網(wǎng)絡(luò)安全事件頻發(fā),多數(shù)與軟硬件中的高危漏洞相關(guān).根據(jù)Source Check平臺對開源項目的掃描結(jié)果顯示,53.8%的開源項目至少含有1個超危風險漏洞[2].此外,包含高危漏洞的開源組件數(shù)量龐大,據(jù)安全軟件提供商Sonatype的研究數(shù)據(jù)顯示[3],僅軟件包Maven Central,nmp的存儲庫中,被視為“高?!钡慕M件達60萬個以上.這些包含高危漏洞的軟件包被頻繁下載,導致漏洞在各行業(yè)用戶中迅速傳播.
2) 開源軟件供應鏈攻擊增長迅猛.
隨著軟件產(chǎn)業(yè)的快速發(fā)展,針對軟件供應鏈的安全攻擊事件一直呈快速增長的態(tài)勢.2021年,Sonatype共測得1.2萬起針對開源軟件包的攻擊事件,較2020年猛增650%[4].
3) 開源軟件供應鏈攻擊左移帶來安全左移.
相對于交付、運行等環(huán)節(jié),軟件開發(fā)環(huán)節(jié)的安全防護比較薄弱,且軟件開發(fā)環(huán)節(jié)作為軟件供應鏈的上游環(huán)節(jié),安全問題會傳導至下游環(huán)節(jié)并被放大,因此軟件開發(fā)環(huán)節(jié)成為攻擊者的首選目標.與此同時,安全類產(chǎn)品的能力不斷隨著攻防狀態(tài)的變化而更新,融合了開發(fā)、安全及運營理念的安全管理模式DevSecOps(Development Security Operations)迅速成熟.對于軟件開發(fā)來說,安全介入越早,安全成本越小,軟件安全繼續(xù)向左移動到設(shè)計階段,發(fā)展成為SecDevOps模式,以確保軟件“設(shè)計安全”.
開源軟件具有開放、共同參與、自由傳播等特性,對推動企業(yè)技術(shù)革新、降本增效、數(shù)字化轉(zhuǎn)型具有重要作用,已成為各行業(yè)技術(shù)創(chuàng)新的首選方式,但同樣也是軟件供應鏈攻擊的成熟目標.開源軟件供應鏈安全保障是一項系統(tǒng)工程,涉及開源軟件項目全生命周期的多個方面和環(huán)節(jié),主要面臨安全漏洞風險、知識產(chǎn)權(quán)風險和開源管制風險.
受限于開發(fā)者自身的安全意識和技術(shù)水平,加之惡意人員向開源軟件植入木馬程序等行為,帶有安全漏洞和潛在風險的開源代碼經(jīng)常被開發(fā)人員所采用,導致開源軟件安全漏洞風險被動引入[5].開源軟件安全漏洞風險主要包括依賴項混淆攻擊、誤植域名、惡意代碼植入等.依賴項混淆攻擊源自依賴項管理器的軟件開發(fā)工具,開發(fā)工具會自動下載比其更高版本號的軟件包,若軟件包受到感染,安全漏洞將一并部署到應用程序中;誤植域名則由于開發(fā)人員疏忽,下載部署了與目標軟件擁有相近名稱的受感染軟件包;惡意代碼植入則是向開源軟件添加漏洞代碼,使得運行它的任何系統(tǒng)都受到影響.
此外,開源軟件安全漏洞的連鎖傳播會引發(fā)企業(yè)關(guān)鍵系統(tǒng)的安全危機,導致不可控的風險.安全公司Snyk發(fā)布的開源安全現(xiàn)狀調(diào)查報告顯示,78%的漏洞存在于間接依賴關(guān)系中.漏洞傳播模擬實驗發(fā)現(xiàn),開源組件間的依賴層級關(guān)系導致組件漏洞存在傳播風險,經(jīng)1輪傳播影響范圍相比原始樣本擴大125倍,經(jīng)2輪傳播影響范圍相比原始樣本擴大173倍.漏洞在組件之間的傳播風險不可忽視[5].
與閉源軟件不同,開源軟件的開發(fā)和使用需遵守開源許可協(xié)議,開源許可協(xié)議規(guī)定了開源軟件的使用范圍和權(quán)力義務(wù).然而企業(yè)研發(fā)人員、合作方以及外包等供應商難以確保開源組件或開源軟件完全遵循安全合規(guī)要求,這意味著企業(yè)在主動或被動引入開源軟件后可能因開源許可證的規(guī)定或變動而面臨知識產(chǎn)權(quán)風險.據(jù)新思科技研究顯示,經(jīng)審計的代碼庫中含有許可證沖突、自定義許可證、沒有許可證的開源組件總計占比達90%以上.這使得開源組件的使用存在著作權(quán)風險,開源許可協(xié)議傳染性、合規(guī)性和兼容性風險以及內(nèi)外部專利風險,商標商號糾紛等.
企業(yè)在自研和采購軟件過程中,往往無法準確判斷其是否遵循開源許可協(xié)議,進而可能因為開源許可證的傳染性規(guī)定被迫開源.例如,根據(jù)GPL許可證的規(guī)定,凡引用、修改遵循GPL代碼的軟件都必須開源和免費,并且需要采用同樣的GPL許可證.此外,開源許可證之間可能不兼容,若無法同時滿足各部分代碼的許可證要求,則開源軟件不可能“合法”分發(fā),必然引發(fā)著作權(quán)風險[6].開源軟件的使用規(guī)則存在不確定性,多個開源軟件開發(fā)商(如Redis,MongoDB,Kafka等)已經(jīng)對過去使用的開源許可證進行了修改.
主流開源許可證BSD、MIT和GPL 2.0等并未包含明確的專利授予條款,導致內(nèi)外部專利風險隱藏其中.部分商業(yè)軟件基于開源進行二次開發(fā)后以閉源形式提供給用戶,卻不遵守開源許可證的署名要求,存在貢獻者商標商號的知識產(chǎn)權(quán)糾紛.
開源代碼按照開源協(xié)議的限制使用.當前,主流開源許可證、開源軟件托管平臺、知名開源項目等大多由美國公司出具或運營,部分開源軟件供應鏈受美國法律管轄和出口管制.開源管制風險主要包括開源代碼斷供、上游貢獻限制、開源帳號封鎖、產(chǎn)業(yè)生態(tài)萎縮等.
為了幫助企業(yè)在源頭解決軟件開發(fā)安全問題,美國的Synopsys、以色列的Checkmarx和Cycode、中國的奇安信等國內(nèi)外軟件安全供應商紛紛提出全生命周期的開源軟件供應鏈安全解決方案,包括軟件成分分析(software composition analysis, SCA),靜態(tài)應用程序安全測試(static application security testing,SAST),動態(tài)應用程序安全測試(dynamic application security testing, DAST),交互式應用程序安全測試(interactive application security testing, IAST),模糊測試,滲透測試等一系列安全工具和方法,其核心是通過對開源代碼的掃描審核,識別應用程序開發(fā)生命周期中的可疑和潛在惡意開源包.
SCA是一種生命周期管理方法,用于跟蹤和管理企業(yè)中使用的開源組件,對掃描出來的高危漏洞、不合規(guī)許可證、風險組件以及軟件成分物料清單(SBOM)等進行實時監(jiān)控跟蹤,提出合理修復建議以及預警等.在高度監(jiān)管的金融服務(wù)領(lǐng)域,SCA成為管理和降低整體風險的關(guān)鍵.企業(yè)憑借SCA了解其正在使用哪些開源庫以及這些庫中可能包含哪些漏洞,并以安全方式快速響應漏洞.
SAST可幫助開發(fā)團隊在編寫代碼時發(fā)現(xiàn)并修復代碼中的安全、質(zhì)量和合規(guī)缺陷.靜態(tài)代碼分析工具包括VisualCodeGrepper,RIPS,Brakeman,F(xiàn)lawfinder,Bandit等開源分析工具,以及Perforce公司的Klocwork、Synopsys公司的Coverity等商業(yè)化分析工具.靜態(tài)代碼分析工具多樣且各有側(cè)重,開發(fā)人員可通過1種或多種靜態(tài)代碼分析工具的組合提升誤報率.然而,靜態(tài)代碼分析通常需要花費大量的時間成本,阻礙敏捷開發(fā)的進行,這也是許多開發(fā)人員放棄使用靜態(tài)代碼分析的重要原因之一.
DAST無需了解應用程序的內(nèi)部交互或設(shè)計,也無需訪問或查看源程序,即可檢查正在運行的應用.此外,DAST可對漏洞利用攻擊作出實際響應,提供有用的建議,說明該漏洞被操縱的可能性.
IAST可根據(jù)業(yè)務(wù)目標和應用安全需求,確定關(guān)鍵風險的優(yōu)先級并發(fā)出警報,并利用現(xiàn)有測試方式主動驗證已識別的漏洞,判斷該漏洞是否會被利用,從而減少誤報.此外,IAST還可識別薄弱的代碼行,并提供相應的補救建議,為開發(fā)人員解決代碼安全問題提供便利.IAST的優(yōu)點在于其可支持DevSecOps,以及可對應用程序進行持續(xù)的實時測試、監(jiān)控、評估和驗證.
相較于直接購買商業(yè)公司的閉源軟件,使用開源軟件對企業(yè)的開發(fā)、運維、安全、法律等方面提出了更高要求[4].目前大多數(shù)企業(yè)對自身正在使用的開源軟件缺乏統(tǒng)一管理,企業(yè)級開源軟件供應鏈安全管理模式尚處于探索階段.此外,分布式架構(gòu)、云端部署日益成為主流,系統(tǒng)模塊化、組件化明顯,開源軟件之間依賴關(guān)系趨于復雜,追蹤和理清開源軟件之間的依賴關(guān)系成為開源治理的難點.實施開源漏洞管理,建立統(tǒng)一安全管理機制成為降低開源風險的有效手段.
在企業(yè)外部,鑒于開源軟件的多樣性和依賴關(guān)系的復雜性,企業(yè)、行業(yè)協(xié)會、產(chǎn)業(yè)聯(lián)盟應盡快配合相關(guān)主管部門,制定開源安全、風險治理等方面的相關(guān)辦法和指導性文件,建立統(tǒng)一安全管理機制.從跟蹤開源軟件依賴關(guān)系、確保許可證合規(guī)性入手,逐步打破軟件開發(fā)、法律法規(guī)和安全工作流程之間的邊界,將現(xiàn)有工作流程中的開源風險問題左移,為開源軟件的管理、審計、分析、控制和修復工作提供制度性依據(jù).
在企業(yè)內(nèi)部,根據(jù)自身業(yè)務(wù)特點和既有業(yè)務(wù)流程,搭建開源管理組織架構(gòu),從管理層面進行統(tǒng)籌規(guī)劃.明確開源治理職責分工,明確開源治理統(tǒng)一協(xié)調(diào)部門,對接相關(guān)主管部門、行業(yè)協(xié)會、產(chǎn)業(yè)聯(lián)盟、軟件供應商等多方資源,協(xié)同推動企業(yè)開源治理工作落地.
開源代碼中不斷發(fā)現(xiàn)新的安全漏洞,很多開源項目沒有查找并修復漏洞的響應機制,也沒有明確、標準的安全記錄方式可以遵循.GitHub上排名前40萬的公共代碼庫中,僅2.4%的開源項目有安全文檔[7].企業(yè)引入開源軟件過程中,各個環(huán)節(jié)間缺乏系統(tǒng)的安全審查機制,部分企業(yè)內(nèi)部也缺少必要的安全檢測要求和規(guī)范,導致企業(yè)開源軟件的開發(fā)、使用、運維人員均無法準確掌握開源軟件中的安全漏洞.這些有問題的開源組件將會影響的商業(yè)產(chǎn)品、業(yè)務(wù)領(lǐng)域也無從得知,為行業(yè)帶來重大安全風險.
開源軟件的風險審查評估成為防范開源風險的基礎(chǔ).企業(yè)及其開源軟件供應商在開源軟件的引入、使用、退出、維護全生命周期應聯(lián)合開展開源軟件風險審查評估管理機制[8],嚴格執(zhí)行開源軟件全生命周期的安全使用和風險控制,做到先評估再整改,先可知再可控[9].
在開源軟件引入階段:一是企業(yè)積極開展開源組件分析能力、漏洞響應能力和漏洞修補能力建設(shè),掌握提供開源組件臺賬和開源風險點的能力,并持續(xù)監(jiān)控與審查;二是企業(yè)結(jié)合行業(yè)特性,評估所引入開源軟件的技術(shù)需求,探索建立開源軟件選型引入評估模型;三是企業(yè)從合同義務(wù)等方面確保開源軟件供應商遵循開源代碼安全合規(guī)要求,明確責任.
在開源軟件使用階段,引入或借助專業(yè)的技術(shù)力量持續(xù)加強對在用開源軟件的安全風險評估.通過滲透測試、代碼安全性分析或者建設(shè)網(wǎng)絡(luò)靶場,持續(xù)動態(tài)驗證和評估開源軟件的可靠性、可用性和安全性,提升開源軟件的安全應用能力.
在開源軟件退出階段,企業(yè)根據(jù)實際情況定期制定開源軟件退出規(guī)劃,根據(jù)開源軟件退出規(guī)劃進行遷移、替換、退出等操作.
在開源軟件維護階段,企業(yè)定期對自身應用開源的情況進行深入摸底排查,真實掌握開源使用規(guī)模和復雜度,主動對已存在的安全漏洞、許可證合規(guī)風險進行防控處理.
近年來,企業(yè)結(jié)合自身業(yè)務(wù)需要和實踐經(jīng)驗,在開源軟件供應鏈管理方面形成了部分優(yōu)秀解決方案.但科技企業(yè)和實體企業(yè)之間存在壁壘,可以落地開源項目的社區(qū)規(guī)模較小,合適的行業(yè)落地途徑尚不明晰.
鑒于上述情況,建議凝聚各方資源,著力培育壯大開源軟件根社區(qū).加強企業(yè)、行業(yè)協(xié)會、產(chǎn)業(yè)聯(lián)盟、基金會等多方合作互動,學習了解開源軟件治理制度規(guī)范,分享開源軟件治理落地經(jīng)驗.行業(yè)協(xié)會、產(chǎn)業(yè)聯(lián)盟積極發(fā)揮平臺優(yōu)勢,加快形成開源標準和自律公約,指導開源軟件用戶合法合規(guī)應用開源技術(shù),形成技術(shù)、產(chǎn)業(yè)相互促進的良性生態(tài),在全球范圍內(nèi)構(gòu)建有話語權(quán)的國際開源機構(gòu).
開源軟件供應鏈安全問題受到廣泛關(guān)注,建立統(tǒng)一安全管理機制、開展全生命周期風險審查評估以及培育壯大開源軟件根社區(qū)等有助于建設(shè)可靠的開源軟件供應鏈,保障開源軟件供應安全、高質(zhì)量創(chuàng)新發(fā)展.