從開源組件安全現狀談開源治理(lǐ)實踐
據Gartner表示,現代軟件大(dà)多(duō)數是被組裝出來(lái)的(de),而不是被開發出來(lái)的(de)。據不完全統計,一個(gè)應用(yòng)的(de)開源組件占整個(gè)應用(yòng)的(de)60%,剩下(xià)的(de)40%由業務代碼、配置文件、構建腳本、靜态資源等數據構成。在軟件開發過程中開源組件的(de)使用(yòng)越來(lái)越廣泛,其地位也(yě)越來(lái)越重要。
據官方數據庫顯示,開源組件的(de)風險呈上升趨勢。而這(zhè)一風險的(de)平均發生概率是8.77%,是OWASP Top10中事件發生率最高(gāo)的(de)。
目前已知的(de)Maven倉庫數據量達650萬,Nuget倉庫累計下(xià)載量超930億,Rubygems 倉庫累計下(xià)載量超712億,PyPI倉庫使用(yòng)人(rén)數超過49萬,從這(zhè)些數據可(kě)以看出開源組件正在被廣泛使用(yòng)。其次,從需求量來(lái)講,Sonatype的(de)《2020軟件供應鏈報告》指出,2020年世界各地的(de)開發者對(duì)開源組件和(hé)容器的(de)需求,超過1.5萬億個(gè)。如果說在軟件供應鏈中,軟件是其重要成分(fēn),那麽在軟件中,開源組件則是其不可(kě)或缺的(de)成分(fēn)。
而從開源軟件供應鏈角度看,開源軟件供應鏈是一個(gè)系統在開發和(hé)運行過程中,涉及所有開源軟件上遊社區(qū)、源碼包、二進制包、包管理(lǐ)器、倉庫等,按照(zhào)依賴、組合等形成的(de)供應關系網絡。它是開源組件和(hé)軟件供應鏈的(de)結合。
開源組件風險的(de)多(duō)維度展現
開源組件在軟件開發過程中占有重要地位,但是開源組件的(de)風險也(yě)随其使用(yòng)的(de)廣泛而逐漸上升,在實際使用(yòng)過程中常常面臨諸多(duō)挑戰,如安全漏洞、知識産權、軟件供應鏈安全等。
安全漏洞
指在硬件、軟件、協議(yì)的(de)具體實現或系統安全策略上存在的(de)缺陷,可(kě)以使攻擊者能夠在未授權的(de)情況下(xià)訪問或破壞系統。就像SQL注入、失效的(de)訪問控制、失效的(de)密碼加密等,這(zhè)些代碼行爲導緻的(de)漏洞。安全漏洞還(hái)有個(gè)重要特征,就是其數據來(lái)源較分(fēn)散,比如CVE官網、美(měi)國國家漏洞中心、中國的(de)CNVD等,都有自己收納的(de)漏洞庫。
知識産權
即我們常說的(de)License,主要分(fēn)爲強傳染性、弱傳染性和(hé)商業友好性。強傳染性,指軟件必須作爲一個(gè)整體涵括在license許可(kě)的(de)規範和(hé)約束下(xià)去發布。弱傳染性,就是類似LGPL/CPL/MPL協議(yì),以LGPL協議(yì)爲例,它允許在部分(fēn)條件下(xià)可(kě)以不去做(zuò)開源。商業友好性,像Apache/MIT/BSD協議(yì),對(duì)開源不做(zuò)任何要求,用(yòng)戶可(kě)以任意修改、分(fēn)發開源組件。
軟件供應鏈安全
軟件供應鏈安全風險,主要包括上遊的(de)缺陷漏洞代碼和(hé)惡意代碼,以及下(xià)遊對(duì)上遊的(de)依賴引用(yòng)和(hé)文件引用(yòng)。
保障軟件供應鏈安全需要注意幾點:
一:依賴傳播。軟件供應鏈中,開源組件的(de)依賴層級和(hé)鏈路非常長(cháng),如果出現風險,很難識别是哪一個(gè)開源組件導緻了(le)漏洞,對(duì)排查和(hé)處理(lǐ)問題會造成很大(dà)的(de)阻礙。
二:同源拷貝。在實際引用(yòng)組件時(shí),可(kě)能隻需要其中一部分(fēn)功能,如拷貝一個(gè)文件或一段函數,并不需要把該組件整塊進行編譯,一旦出現漏洞和(hé)風險,這(zhè)将使風險溯源非常困難,嚴重影(yǐng)響修複進度。
三:對(duì)開源項目的(de)維護。許多(duō)開源項目是由一些小開發團隊或個(gè)人(rén)在維護,這(zhè)就使得(de)更新維護進度有很多(duō)不确定性,很多(duō)的(de)代碼庫在過去兩年或者更久的(de)時(shí)間内未進行過功能升級、代碼優化(huà)和(hé)任何安全問題修複的(de)依賴項。
除此之外,Sonatype在《2020軟件供應鏈報告》中提出下(xià)一代軟件供應鏈攻擊,即現在大(dà)多(duō)數攻擊者不再被動等待已知公開漏洞信息的(de)披露,而是更加主動的(de)攻擊上遊開源組件,這(zhè)對(duì)他(tā)們來(lái)講更方便有效。
以人(rén)爲本、流程+技術綜合治理(lǐ)開源組件
面對(duì)開源組件的(de)安全風險,實際應該如何去解決?要堅持以人(rén)爲本、流程+技術的(de)綜合方式去治理(lǐ)。讓我們從三個(gè)角度來(lái)做(zuò)些分(fēn)析:
首先,從人(rén)的(de)角度來(lái)講,建立開源組織體系。在整個(gè)軟件供應鏈的(de)流程中,開源組件貫穿于整個(gè)軟件開發、測試、交付和(hé)使用(yòng)等環節,每一個(gè)環節需要人(rén)員(yuán)協作并協調管理(lǐ)。因此,從上層的(de)維度建立開源管理(lǐ)辦公室或領導小組對(duì)整個(gè)流程進行全面管控,讓開發人(rén)員(yuán)、安全人(rén)員(yuán)全面學習(xí)開源生态知識,了(le)解生态運作機制,開展開源風險意識培訓,強化(huà)開源風險管控手段,這(zhè)顯得(de)尤爲重要。
其次,從流程角度來(lái)講,建立開源管理(lǐ)體系。圍繞開源技術進行全生命周期的(de)理(lǐ)念,建立安全準入機制,引入開源軟件前先評估安全風險。在使用(yòng)/更新/升級階段,建立開源軟件使用(yòng)、更新和(hé)升級的(de)規範和(hé)流程制度,持續檢測、跟蹤漏洞情報和(hé)響應。在退出階段,及時(shí)做(zuò)好退出管理(lǐ)、記錄和(hé)追蹤,通(tōng)過設置黑(hēi)名單、阻斷策略規則等方式來(lái)隔離退出的(de)組件。
最後,從技術角度來(lái)講,要利用(yòng)好SCA工具。開源網安自主研發的(de)軟件成分(fēn)分(fēn)析SCA産品——開源組件安全及合規管理(lǐ)平台(SourceCheck),用(yòng)于第三方組件安全管控,包括企業組件使用(yòng)管理(lǐ)、組件使用(yòng)合規性審計、新漏洞感知預警、開源代碼知識産權審計等,支持對(duì)源碼及發布包檢測,是 OWASP Top 10 中“使用(yòng)含有已知漏洞的(de)組件”安全風險的(de)最佳解決方案。
開源網安SourceCheck可(kě)實現自動化(huà)、無感知地對(duì)企業級軟件資産信息進行收集與管理(lǐ),使軟件資産分(fēn)布可(kě)視化(huà);并提供軟件資産跟蹤定位和(hé)管控、新漏洞的(de)自檢和(hé)預警,以及對(duì)自研組件和(hé)程序代碼的(de)許可(kě)合規性進行檢測。