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