2019年開源軟件風險研究報告

日博体育发布于 |  2020-05-28 00:49 |  浏览:199

開源軟件已經滲透到信息技術領域的方方面面,無論是CPU、DSP等芯片,抑或驅動、固件等底層軟件,抑或操作系統、瀏覽器、數據庫等系統軟件,抑或消息中間件、應用服務器等中間件軟件,日博体育抑或各種各樣的應用軟件,日博体育都有開源軟件的應用。我國信息技術領域各個行業也大量使用了開源軟件。對于政府、軍工、能源、金融等關鍵行業,也從以前的“談開源軟件色變”,到現在已經廣泛接受和應用開源軟件。開源軟件已經成為當前軟件供應鏈中十分重要的組成部分。

開源軟件為IT行業帶來了極大便利,提高了開發效率,降低了成本。然而,日博体育由于開源軟件的依賴和引用關系較為復雜,其安全性也往往缺少審查和管理,因此,開源軟件也增加了軟件供應鏈的復雜性和安全風險。2019年,Github的報告指出,超過360萬個開源項目依賴了Top50的開源項目之一。rails/rails、facebook/jest、axios/axios等知名項目被其他上百萬個開源項目使用。同時,開源項目平均有180個第三方依賴組件,具體的依賴組件數量從幾個到上千個不等。另一方面,NVD、CNVD等漏洞庫中的開源軟件漏洞數量不斷增加,還有大量開源軟件漏洞未被收錄到這些漏洞庫中,例如,被廣泛使用的fastjson組件,日博体育在2019年持續出現的嚴重漏洞中,日博体育多個漏洞尚未收錄到國家漏洞庫中。惡意軟件包也不斷出現在開源社區中,如pip包管理平臺的roels、req-tools和dark-magic等惡意軟件包、NPM包管理器的m-backdoor、rceat、path-to-regxep等惡意軟件包等。

除了信息安全風險,開源軟件還可能引入知識產權風險。由于開源軟件的依賴關系的復雜性,在使用開源軟件時,不同開源軟件的許可證可能存在合規性和兼容性風險,從而導致知識產權風險。2019年11月6日,數字天堂(北京)網絡技術有限公司訴柚子(北京)科技有限公司、柚子(北京)移動技術有限公司侵犯計算機軟件著作權糾紛一案終審判決,判令柚子公司停止侵權并賠償71萬元。該案被稱為中國第一個涉及GPL協議的訴訟案件。雖然該案在開源社區中有不同的討論和解讀,但進一步說明了開源軟件的知識產權風險,是不可忽視的重要風險之一。

由此可見,開源軟件復雜的供應鏈關系、不斷增加的安全漏洞與惡意軟件包,以及開源許可證的風險,已成為不可忽視、亟需重視和管控的領域。2020年4月27日,國家互聯網信息辦公室、國家發改委等12個部門聯合發布了《網絡安全審查辦法》,《網絡安全審查辦法》中第一條明確指出:“為了確保關鍵信息基礎設施供應鏈安全,維護國家安全,依據《中華人民共和國國家安全法》《中華人民共和國網絡安全法》,制定本辦法”。開源軟件作為關鍵信息基礎設施供應鏈中十分重要的組成部分,其安全性也需要重點關注。因此,為了更詳細地進行分析,我們從Github、碼云社區中選取了一批開源項目進行分析,就其依賴組件、安全漏洞、開源許可證等方面進行分析。

本報告一共選取了48363個項目進行分析,其中GitHub中選取星數為500星及以上的開源項目38530個,Gitee中選取星數為5星及以上的開源項目9833個。進一步,使用開源安全檢測工具對48363個開源項目進行依賴檢測,檢測是否含有來自于Maven、Nuget、Packagist、PyPI、NPM、RubyGems六個包管理平臺的依賴組件。在檢測結果中,共有31553個開源項目包含上述六個平臺的依賴組件,占總數的比例為65.24%。在含有依賴組件的開源項目中,來自于Github社區的項目數為25959個,占比82.27%;來自于Gitee社區的項目數為5594個,占比17.73%。本報告通過對31553個含依賴組件的開源項目(下稱“樣本項目”)進一步進行分析。

樣本項目中一共包含701724個來自Maven、Nuget、Packagist、PyPI、NPM、RubyGems六個平臺的依賴組件,其中Github的樣本項目包含535326個依賴組件,占比76.29%,Gittee的樣本項目包含166398個依賴組件,占比23.71%。通過對樣本項目的依賴組件安全性進行分析,共獲得依賴組件漏洞警告信息83834條。其中,總樣本項目的20.79%存在依賴組件漏洞,按開源社區劃分,18.03%的Github樣本項目包含依賴組件漏洞,33.63%的Gitee樣本項目包含依賴組件漏洞。基于以上數據,本報告從樣本項目的依賴組件安全風險、漏洞等級分布、開源許可證等維度進行進一步分析。

組件漏洞數量及其增長態勢是宏觀上衡量開源安全風險的重要指標,根據以上數據分析可知,開源項目依賴組件漏洞數量逐年增長,近4年中2019年增長最快,2019年組件漏洞數量相較2018年環比增長72.99%。2019年,Github樣本項目的依賴組件漏洞數量環比增長71.05%,Gitee樣本項目的依賴組件漏洞數量環比增長74.18%。以上表明,組件漏洞數量一直處于較高增長態勢,成為開源項目不可忽視的重要漏洞來源之一。(①注:本報告組件漏洞數量是指開源項目中依賴組件中的漏洞數量。年度組件漏洞數量指截止當年末為止的歷史累計組件漏洞總量。漏洞知識庫以CVE漏洞為主,也含有部分開源社區漏洞來源,如Github、NPM等。)

在本次分析的6個主流包管理器Maven、Nuget、Packagist、PyPI、NPM、RubyGems中,Maven組件漏洞數量最多,占比73.54%,Maven組件漏洞數在近4年中每年均遠多于其它包管理器,并在近兩年中大幅增長,2019年環比增長達到76.53%。NPM位居第二,占比16.11%,但仍與Maven差值巨大。其它包管理器則一直維持在增長較為緩慢、漏洞數較少的水平。總體而言,大多數組件漏洞集中在少數包管理器平臺。

軟件工程中所包含的開源組件按依賴層級分為直接依賴組件與間接依賴組件,軟件工程所依賴的第一層級的開源組件被稱為直接依賴組件,第一層級以及更深層級開源組件所依賴的開源組件被稱為間接依賴組件,直接依賴組件漏洞和間接依賴組件漏洞都是不可忽視的安全風險。依據依賴組件漏洞數量的總體結果分析,直接依賴漏洞的數量為37865個,占比為45.17%,間接依賴的漏洞數量為45969個,占比為54.83%。直接依賴組件的漏洞數量比間接依賴組件的漏洞數量少約10%。同時,由于間接依賴關系需要對組件的依賴關系進行多層次分析,間接依賴組件漏洞相比直接依賴組件漏洞更具隱蔽性。

根據安全漏洞的危害程度不同,由美國國家基礎設施咨詢委員會NIAC(TheNationalInfrastructureAdvisoryCouncil)發布的通用漏洞評估方法CVSS(CommonVulerabilityScoringSystem)將安全漏洞分為超危、高危、中危、低危4個等級的漏洞。根據本報告統計結果,組件漏洞多集中于中危及以上等級,占比94.38%;其中,中危等級的組件漏洞數量最多,占比35.26%,超危與高危組件漏洞數量分別為31.44%和27.67%,低危漏洞較少,占比5.62%。超危與高危組件漏洞數量之和占比達64.49%。總體而言,中危及以上漏洞即已具有一定危害性,而其占比達94.38%,高危及以上漏洞則具有較高危害性,而其占比達64.49%,顯而易見,依賴組件的安全漏洞是不可忽視的重要安全風險之一。

超危、高危組件漏洞數量近年來一直保持著較高的增長率,2017年相較2016年環比增長172.91%,2018年環比增長108.37%,2019年環比增長103.96%,超危、高危組件漏洞數量歷年均保持著大于100%的較高的增長率。Github樣本項目和Gitee樣本項目的超危與高危漏洞數量也基本符合這一規律。而在實際開發中,組件漏洞被發現后,大量開源組件的漏洞修復周期也較長,不能做到對組件漏洞的及時響應。據英國安全廠商Snyk調研,37%的開源開發者在持續集成(CI)期間沒有實施任何類型的安全測試,25%的開發者在發現漏洞后未通知用戶有漏洞,從漏洞添加至組件到修復漏洞的時間中位數也超過2年,而超危、高危漏洞的危害性較高且占比較高,若大量開發者未能做到對漏洞的及時響應,將對組件使用者帶來較高的安全風險。

各包管理器每年的超危、高危組件漏洞數量均在不斷變化,上表反映了各包管理器每年的超危、高危組件漏洞占超危、高危漏洞總數量的比例的變化情況。盡管Maven平臺高危及以上的組件漏洞在2016-2018年期間占比略微下降,但仍舊在每年中均保持最高占比,平均每年占比超80%,并超出位于第二名的NPM至少65%。而除了Maven和NPM外的其它包管理器則一直處于占比較低的狀態。總體而言,歷年大部分的高危及以上的組件漏洞來自于Maven組件,也側面說明了Maven組件使用范圍較廣,Maven組件漏洞的影響范圍也相應較廣。

開源組件被引用的次數越多,軟件開發者直接或間接依賴到該組件的可能性越大,如果該組件包含高危及以上漏洞,安全風險越高,安全風險影響范圍也越廣。了解各包管理器中被引用最多的高危組件信息,對于開源安全風險防范至關重要。本報告從樣本項目依賴組件中按包管理器分別選取了被樣本項目引用次數最多的且包含高危及以上漏洞的組件Top10,其中,圖中橫坐標表示該組件被樣本項目引用的次數:

本報告對樣本開源項目與依賴組件(來自于Maven、Nuget、Packagist、PyPI、NPM、RubyGems這6個包管理平臺的依賴組件)的許可證使用情況進行了統計,無論是開源項目還是依賴組件,MIT和Apache-2.0許可證占比最多。依賴組件許可證中,MIT占比55.58%,Apache-2.0占比14.94%;開源項目許可證中,MIT占比32.93%,Apache-2.0占比14.84%;AGPL-3.0、LGPL-2.1、LGPL-3.0、GPL-2.0、GPL-3.0占比最少,5個許可證占比之和不足10%。依賴組件中,未在社區網頁申明許可證的占比僅為2.88%,而在開源項目中,未在社區網頁直接申明許可證的占比為39.44%。當然,開源項目許可證存在一種情況,即未在社區網頁直接申明,而將許可證聲明放到源代碼項目中。因此,實際未申明許可證的開源項目比例會略低于39.44%,但側面反映了開源項目中,未申明許可證的開源項目數量較多。對于未申明許可證的開源項目或開源依賴組件的使用,可能存在侵權風險。許可證兼容是指不同許可證的開源項目,能在同時不違反所有開源項目許可證的前提下進行合并或者融合,反之則成為許可證不兼容。許可證兼容性風險是使用開源軟件時面臨的常見風險。開源許可證可以簡單劃分為寬松型許可證和著佐權型許可證。例如MIT、Apache-2.0、BSD-2-Clause、BSD-3-Clause屬于寬松型許可證,AGPL-3.0、LGPL-2.1、LGPL-3.0、GPL-2.0、GPL-3.0屬于著佐權型許可證。開源軟件或依賴組件在混合使用時,由于不同的開源軟件或依賴組件具有不同的開源許可證,因此可能存在許可證兼容性風險。本次分析中,2372個樣本項目存在許可證兼容性問題,占比7.52%。這些項目中,有的使用了許可證不兼容的依賴組件,有的是依賴組件許可證與項目自身的許可證不兼容。例如Mycat-Server項目,其項目許可證為GPL-2.0,項目中使用的依賴組件的許可證有Apache-2.0、GPL-2.0等。但由于Apache-2.0存在某些專利條款和賠償條款,而GPL-2.0未做相關要求,導致Apache-2.0與GPL-2.0不兼容。因此,當整個項目在GPL-2.0許可證下,整個項目就存在兼容性問題。

《網絡安全審查辦法》要求加強關鍵信息基礎設施供應鏈安全,開源軟件作為關鍵信息基礎設施軟件供應鏈中的重要組成部分,其安全性亟需予以重視。因此,開發者應該采取適當的措施進行規避,可有效降低其安全風險。為此,建議開發者采取以下主要措施:

Notice:Thecontentabove(includingthepicturesandvideosifany)isuploadedandpostedbyauserofNetEaseHao,whichisasocialmediaplatformandonlyprovidesinformationstorageservices.