余建利,姜榮霞,盧 蓉
(中國移動通信集團(tuán)浙江有限公司,浙江 杭州 310000)
開源軟件是一種任何人都可以共享和修改編碼的軟件,開發(fā)者對成果共享和自由軟件的追求促使開源軟件迅猛發(fā)展。目前,開源軟件已在電信運營商等企業(yè)中普遍使用,同時,針對開源軟件供應(yīng)鏈的攻擊事件頻頻發(fā)生,因此亟需探討電信運營商的開源軟件供應(yīng)鏈安全治理方法,降低電信運營商安全風(fēng)險。
根據(jù)美國弗雷斯特研究公司的統(tǒng)計數(shù)據(jù),全球80%以上的軟件應(yīng)用了開源軟件,軟件中80%~90%的代碼來自于開源軟件,而在通信行業(yè)中應(yīng)用開源軟件的應(yīng)用軟件比例高達(dá)95%[1]。
在我國,企業(yè)使用開源軟件也非常普遍,根據(jù)奇安信代碼安全實驗室2021 年針對3 354 個國內(nèi)企業(yè)軟件的分析數(shù)據(jù),無一例外,均使用了開源軟件,平均每個軟件使用的開源軟件達(dá)127 個[2]。
近年來,開源軟件供應(yīng)鏈造成的安全事件頻發(fā),2020 年8 月,開源Web 框架Apache Struts2 被曝出S2-059 Struts 漏洞,通過OGNL 表達(dá)式注入造成遠(yuǎn)程代碼執(zhí)行,該漏洞波及范圍極大,據(jù)FOFA 系統(tǒng)顯示,僅2019 年全球共3 000 多萬個Struts2 服務(wù)存在被攻擊風(fēng)險[3];2021 年12 月,Apache Log4j2 開源軟件被曝出Log4Shell 漏洞,攻擊者通過jndi 注入攻擊可遠(yuǎn)程執(zhí)行任何代碼,該漏洞對互聯(lián)網(wǎng)影響巨大,超過35 863 個開源軟件Java 組件受影響[4]。
目前,國內(nèi)外行業(yè)已積極開展行動,軟件開發(fā)平臺GitHub 已將其咨詢數(shù)據(jù)庫在社區(qū)開放,允許任何人提供有關(guān)安全漏洞的見解和情報,來幫助提高軟件供應(yīng)鏈的安全性[5]。國內(nèi)奇安信[6]、阿里云[7]、綠盟[8]等企業(yè)已開展研究實踐工作。
在學(xué)術(shù)界,哈力木拉提·巴圖爾[9]對軟件開發(fā)中開源組件的應(yīng)用及產(chǎn)生的安全問題進(jìn)行了分析,探討開源組件克隆帶來的安全及版權(quán)問題;蘇仟等[10]對開源軟件面臨的安全漏洞、知識產(chǎn)權(quán)、開源管制等風(fēng)險進(jìn)行分析,通過對開源軟件供應(yīng)鏈安全現(xiàn)狀和風(fēng)險進(jìn)行分析,提出開源軟件開發(fā)安全解決方案,并對開源軟件供應(yīng)鏈的發(fā)展提出建議;王曉冬[11]系統(tǒng)分析了全球開源模式發(fā)展趨勢,對我國開源軟件產(chǎn)業(yè)存在的開源斷供、代碼安全和知識產(chǎn)權(quán)、自主創(chuàng)新風(fēng)險進(jìn)行分析,提出推進(jìn)開源自主、加強模式創(chuàng)新、優(yōu)化發(fā)展環(huán)境的舉措。目前,尚未有已發(fā)表的針對電信運營商開源軟件供應(yīng)鏈安全的治理實踐研究。
近年來,國內(nèi)主要電信運營不斷加大了企業(yè)的數(shù)字化轉(zhuǎn)型力度。在通信網(wǎng)絡(luò)的數(shù)字化轉(zhuǎn)型中,核心網(wǎng)元系統(tǒng)向云化、軟件定義網(wǎng)絡(luò)、網(wǎng)絡(luò)自動駕駛等轉(zhuǎn)變,通信網(wǎng)絡(luò)對外開放程度日益增大,大量開源軟件被引入通信網(wǎng)絡(luò)系統(tǒng)中。在企業(yè)內(nèi)部管理的數(shù)字化轉(zhuǎn)型中,以云計算、大數(shù)據(jù)、人工智能等為代表的新一代IT 技術(shù)被廣泛應(yīng)用,軟件供應(yīng)商眾多,開源軟件經(jīng)常是上層應(yīng)用軟件的基礎(chǔ)。開源軟件也被廣泛應(yīng)用于電信運營商的BOMDS(Business Supporting System,Operation Supporting System,Management Supporting System,Big Data System,Security System)五域系統(tǒng)中,已滲透到了各個生產(chǎn)和管理環(huán)節(jié)。因此,開源軟件的重要性是不言而喻的。電信運營商面臨著開源軟件安全漏洞導(dǎo)致的網(wǎng)絡(luò)安全和數(shù)據(jù)安全風(fēng)險、開源軟件斷供造成的系統(tǒng)穩(wěn)定運行風(fēng)險和開源軟件知識產(chǎn)權(quán)可能引發(fā)的合規(guī)經(jīng)營風(fēng)險。
由于源碼的開放和貢獻(xiàn)者對安全性的疏忽,開源軟件存在的安全漏洞非常普遍,根據(jù)國外一些公司的報告,近三分之一的項目軟件中包含了第三方庫安全漏洞。開源軟件使用廣、漏洞信息傳播快、修補難,造成開源軟件的安全漏洞管控比閉源軟件難得多。因此,安全漏洞是開源軟件供應(yīng)鏈的主要風(fēng)險。
攻擊者利用開源軟件供應(yīng)鏈中的安全漏洞進(jìn)入電信運營商的計算機系統(tǒng),橫向?qū)訉訚B透,既可以控制通信網(wǎng)絡(luò)運行,也可以植入惡意代碼,竊取內(nèi)部數(shù)據(jù)庫的敏感數(shù)據(jù),嚴(yán)重危害通信基礎(chǔ)設(shè)施網(wǎng)絡(luò)安全和數(shù)據(jù)安全。
國內(nèi)軟件供應(yīng)商使用的開源軟件主要依托國外開源社區(qū),很多開源項目和開源許可證起源于美國,容易受經(jīng)濟(jì)和政治等多種因素影響,存在較大的開源產(chǎn)業(yè)鏈斷供風(fēng)險[8]。例如,RedHat 旗下的開源操作系統(tǒng)CentOS 8 已停止了更新服務(wù),電信運營商的大量公有云和私有云的服務(wù)器都需考慮使用更換操作系統(tǒng),升級和替代成本昂貴。顯然,開源軟件的斷供隱患對電信運營商追求的不間斷運行、大容量、高穩(wěn)定性和高可靠性電信級服務(wù)造成了較大的沖擊。
盡管開源軟件源代碼開放共享并可自由使用,但使用者也必須遵循相關(guān)開源協(xié)議,注重知識產(chǎn)權(quán)保護(hù),否則容易陷入許可協(xié)議條款沖突等引發(fā)的知識產(chǎn)權(quán)風(fēng)險。電信運營商使用供應(yīng)商提供的軟件系統(tǒng),不論是成品軟件還是現(xiàn)場定制軟件,作為使用者很難甄別供應(yīng)商引入的開源軟件類型、版本和許可,如果不在合同上有嚴(yán)格條款約定,容易引起電信運營商侵權(quán)風(fēng)險,造成不必要的法律訴訟,給企業(yè)帶來經(jīng)濟(jì)和名譽損失,影響企業(yè)的社會形象。
雖然電信運營商面臨的上述三個風(fēng)險差異性較大,對企業(yè)的危害有所不同,但是開源軟件供應(yīng)鏈的治理目標(biāo)和手段是基本一致的。首先,需要全面了解開源軟件的成分、版本、許可協(xié)議、存在的安全漏洞及加固方法,做到心中有數(shù),避免在開源軟件引用時帶來安全風(fēng)險;其次,要通過IT 技術(shù)對已知開源軟件實施庫存管理,提高后續(xù)使用的便捷性;最后,需要與已有的軟件開發(fā)及運維體系無縫結(jié)合,納入生產(chǎn)運營流程中。
電信運營商使用開源軟件數(shù)量多、影響廣、安全治理難度大,因此,需要構(gòu)建比較完善的安全治理框架(如圖1 所示),圍繞軟件全生命周期開展安全治理。開源軟件治理既需要制度體系和治理工具支持,更需要持續(xù)治理運營,抉擇引入、加固或退出等措施,在加強頂層設(shè)計基礎(chǔ)上有序開展開源軟件檢測,構(gòu)建電信運營商開源軟件供應(yīng)鏈安全倉庫,實踐開發(fā)安全運維一體化(Development Security Operation,DevSecOps),在軟件供應(yīng)鏈引入源頭或應(yīng)用軟件開發(fā)過程中消除安全漏洞,極大地降低后續(xù)安全漏洞的加固成本。
圖1 開源軟件安全治理框架
電信運營商內(nèi)涉及IT(Information Technology)生產(chǎn)系統(tǒng)的部門眾多,開源軟件安全治理不僅是IT 部門的工作內(nèi)容,而且是整個企業(yè)共同的目標(biāo),所以,加強頂層設(shè)計是非常有必要的。首先,要制定開源軟件安全治理基本原則和規(guī)范標(biāo)準(zhǔn),統(tǒng)一治理思想認(rèn)識和行動規(guī)范;其次,開展開源軟件安全治理管理制度建設(shè),圍繞開源軟件安全檢測、安全加固、開發(fā)安全等發(fā)布相應(yīng)的管理辦法,為安全治理活動的實施提供全方位的行動指引;再次,要成立開源軟件安全治理辦公室,組建安全治理團(tuán)隊,做好人力資源保障,統(tǒng)籌推進(jìn)安全治理各項工作;最后,要設(shè)定治理目標(biāo),明確治理舉措和獎懲措施,推動企業(yè)形成開源軟件安全治理的文化氛圍,促進(jìn)安全治理成果的廣泛應(yīng)用。
目前,國內(nèi)外安全廠商提供的開源軟件供應(yīng)鏈安全檢測方法或工具主要包括軟件成分分析(Software Composition Analysis,SCA)、靜態(tài)應(yīng)用程序安全測試(Static Application Security Testing,SAST)和動態(tài)應(yīng)用程序安全測試(Dynamic Application Security Testing,DAST)等。SCA 包含軟件組成分析、依賴分析、特征分析、引用識別、合規(guī)分析等,通過SCA 可有效識別第三方開源軟件資產(chǎn),理順依賴關(guān)系,摸清資產(chǎn)底數(shù),發(fā)現(xiàn)漏洞風(fēng)險和許可證合規(guī)風(fēng)險。SAST 結(jié)合代碼編碼規(guī)范和代碼審計,幫助開發(fā)人員發(fā)現(xiàn)并修復(fù)軟件代碼中的安全、質(zhì)量和合規(guī)等缺陷。DAST 是一種黑盒安全測試技術(shù),檢測應(yīng)用程序在生產(chǎn)環(huán)境中運行時的狀態(tài),并嘗試對其進(jìn)行安全攻擊,以求發(fā)現(xiàn)運行時安全漏洞。
對電信運營商而言,SCA 是發(fā)現(xiàn)開源軟件安全漏洞的基礎(chǔ),既能了解使用的開源軟件類型及其隱藏的漏洞及修復(fù)方法,也能獲知其許可證相關(guān)信息。SAST 消耗的時間較長,但相比滲透測試,對測試人員的要求不高,因此是經(jīng)常被使用的測試方法。DAST 的優(yōu)點是測試人員無需編程能力,無需了解應(yīng)用程序內(nèi)部架構(gòu),使用攻擊特征庫驗證就可發(fā)現(xiàn)主要風(fēng)險問題,但無法直接定位漏洞位置,需專業(yè)安全工程師協(xié)助定位風(fēng)險代碼。
建立電信運營商私服開源軟件安全倉庫(如圖2所示)是安全治理最重要的環(huán)節(jié)之一。進(jìn)入開源軟件安全倉庫的開源軟件必須經(jīng)過專家團(tuán)隊安全檢測,并打上安全標(biāo)簽。安全標(biāo)簽包含版本信息、來源渠道、安全漏洞信息、安全補丁信息、許可證信息、上下架時間和推薦使用意見等,確保方便后續(xù)開發(fā)人員下載使用。構(gòu)建私服開源軟件安全倉庫時,為提高檢測效率,也可參考maven、npm 等業(yè)界軟件倉庫提供的軟件物料清單(Software Bill of Materials,SBOM)。
圖2 開源軟件供應(yīng)鏈安全倉庫
在軟件開發(fā)過程中,項目編譯需要的第三方依賴包和安全加固包只能從私有開源軟件安全倉庫中獲取,從源頭實施控制。同時,對于供應(yīng)商交付的成品軟件,也需要提交源代碼,經(jīng)過SCA 自動掃描檢測,避免問題開源軟件在電信運營商各生產(chǎn)系統(tǒng)中擴(kuò)散。在發(fā)生安全事件時,依托開源軟件安全倉庫的安全標(biāo)簽,運維人員可快速升級加固,阻斷風(fēng)險。通過運維人員持續(xù)運營,開源軟件的安全風(fēng)險和合規(guī)問題將會慢慢減少,電信運營商使用的開源軟件質(zhì)量就能得到有效提升。
目前,常見開源軟件許可證主要有 GPL、MIT、BSD 和Apache 等,這些許可證大致分為Copyleft 許可證和寬松許可證,對使用、修改和分發(fā)等場景作出了約束。電信運營商在選擇使用倉庫中的開源軟件時,要關(guān)注源許可證的內(nèi)容及相關(guān)條件,避免可能的法律風(fēng)險。為減少開源軟件斷供風(fēng)險,電信運營商在選擇使用倉庫中的開源軟件時,應(yīng)優(yōu)先選擇國內(nèi)開源社區(qū)上的開源軟件(如開源中國社區(qū)),同時也要積極參與開源公共服務(wù)平臺構(gòu)建,為豐富開源社區(qū)內(nèi)容貢獻(xiàn)力量。
開源軟件安全治理可能會造成軟件開發(fā)交付的時間拉長,效率降低,提高了交付成本。為平衡交付效率和軟件安全的關(guān)系,在安全治理過程中,需大力推進(jìn)開發(fā)、安全和運維一體化,核心理念是安全左移,在軟件開發(fā)生命周期的較早階段,解決各種安全問題,降低修復(fù)成本。具體是在設(shè)計、編碼、構(gòu)建、驗證和發(fā)布運行等不同階段實現(xiàn)多重安全檢查,將SAST、SCA 和DAST 嵌入持續(xù)集成(Continuous Integration,CI) 和持續(xù)交付(Continuous Delivery,CD)中,實現(xiàn)與企業(yè)原有開發(fā)和運維工具的無縫結(jié)合,確保開發(fā)、安全和運維的流程閉環(huán)(如圖3 所示)。
圖3 開發(fā)、安全、運維一體化
在設(shè)計階段,針對開源軟件,開展軟件成分、依賴關(guān)系、漏洞信息和許可信息等梳理工作,杜絕引入存在問題的開源軟件;在編碼階段,應(yīng)用SAST 對開發(fā)中的代碼進(jìn)行審查,審查結(jié)果及時反饋開發(fā)人員修復(fù);在編譯構(gòu)建階段,依托開源軟件特征庫,使用SCA 工具對構(gòu)建代碼包成分檢測分析;在驗證階段,引入DAST 進(jìn)行運營態(tài)下的安全漏洞測試,彌補靜態(tài)檢測的不足;在發(fā)布上線階段,開展應(yīng)用系統(tǒng)黑盒滲透,確保生產(chǎn)環(huán)境中沒有可被利用的安全漏洞。
經(jīng)過開源軟件供應(yīng)鏈安全治理,電信運營商獲得最直接效果是遺留至生產(chǎn)系統(tǒng)上的安全漏洞明顯減少,有效降低了安全漏洞加固成本。圖4 是國內(nèi)某電信運營商線上銷售服務(wù)系統(tǒng)在開展開源軟件供應(yīng)鏈安全治理前、后遺留安全漏洞的情況,各種類型的安全漏洞都有大幅下降。
圖4 安全治理前、后漏洞對比圖
至此,電信運營商已完成現(xiàn)網(wǎng)生產(chǎn)系統(tǒng)的開源軟件檢測,聯(lián)動并參考NVD(美國國家計算機通用漏洞數(shù)據(jù)庫,National Vulnerability Database)、CNNVD(中國國家信息安全漏洞庫)等漏洞情報,打造了開源軟件供應(yīng)鏈安全倉庫,形成了常用開源軟件的版本、漏洞、許可證等知識庫,建立了開源軟件與生產(chǎn)系統(tǒng)的關(guān)聯(lián)關(guān)系及內(nèi)部預(yù)警通告機制,從而有效降低了生產(chǎn)運營的安全風(fēng)險。但是,開源軟件因代碼開源和使用廣泛等特性,使得開源軟件安全性成為一個全球性問題,僅靠電信運營商一家之力安全治理效果有限。所以,需要在國家行業(yè)主管部門指導(dǎo)下,電信運營商、軟件供應(yīng)商、安全廠商以及專業(yè)評測機構(gòu)緊密協(xié)作形成生態(tài)圈,建立通信軟件供應(yīng)鏈安全社區(qū),開放供應(yīng)鏈安全倉庫、安全漏洞情報庫和安全治理經(jīng)驗,探索軟件供應(yīng)鏈安全標(biāo)準(zhǔn),提升我國的開源軟件安全治理水平,促進(jìn)軟件供應(yīng)鏈安全生態(tài)良性循環(huán)。
隨著信息技術(shù)不斷發(fā)展,應(yīng)用系統(tǒng)的軟件源代碼將越來越多是混源模式,一部分由企業(yè)自主開發(fā),一部分采用開源軟件代碼,開源軟件的安全問題一直是個繞不過去的問題,對于涉及國計民生的電信、金融等企業(yè)而言,開展開源軟件的安全治理越早綜合風(fēng)險越小,介入程度越深成本越低。開源軟件安全治理要融入軟件開發(fā)過程,實現(xiàn)業(yè)務(wù)應(yīng)用安全內(nèi)生,依托安全系統(tǒng)和業(yè)務(wù)應(yīng)用系統(tǒng)的聚合,不斷衍生出新的安全能力,提供開源軟件安全服務(wù),賦能內(nèi)、外部各研發(fā)團(tuán)隊,降低企業(yè)整體安全風(fēng)險。