開源軟件具有開放、共享、自由等特性,在軟件開發中扮演著越來越重要的角色,也是軟件供應鏈的重要組成部分。據Gartner調查顯示,99%的組織在其 IT系統中使用了開源軟件。而來自Sonatype公司的一項調查則顯示,在參與調查的3000家企業中,每年每家企業平均下載 5000個開源軟件。
然而,開源軟件中存在大量的安全隱患,企業在享受開源軟件帶來的便利的同時,也在承擔著巨大的安全風險。近年來,開源軟件頻繁爆出高危漏洞,例如Strusts2、OpenSSL等。這些組件很多都應用于信息系統的底層,并且應用范圍非常廣泛,因此漏洞帶來的安全危害非同一般。
美國首先認識到開源軟件安全問題的重要性,東亞服務器 臺灣服務器,早在2006年,美國國土安全部就資助Coverity公司開展“ 開源軟件代碼測試計劃”,針對大量開源軟件進行安全隱患的篩查和加固,截至2017年2月,累計檢測各種開源軟件 7000多個,新加坡電信服務器 馬來西亞服務器,發現大量安全缺陷。
鑒于上述形勢,360代碼衛士團隊基于自身技術積累和產品能力,在2015年初發起了國內的“ 開源項目檢測計劃()”,這項計劃是針對開源軟件的一項公益性安全檢測計劃,旨在讓廣大開發者關注和了解開源軟件安全問題,提高軟件安全開發意識和技能。截止 2017年初,該計劃已檢測2228個開源項目,獲得了大量的缺陷檢測基礎數據。本文即是在此之上進行的統計和分析。
二、開源項目檢測計劃數據和實例分析
從2015年初到2017年初兩年多時間中,360 代碼衛士團隊從GitHub、Sourceforge等代碼托管網站和開源社區中選取了2228 個使用比較廣泛的開源項目進行檢測,涉及的開發語言包括C/C++/C#/Java等。檢測代碼總量257,835,574行,發現源代碼缺陷2,626,352 個,所有檢測項目的總體平均缺陷密度為10.19個/千行。
針對安全缺陷檢測結果,360代碼衛士團隊從多個視角進行了統計分析,并歸納總結出開源軟件的安全現狀。本次分析主要從以下3個維度對檢測結果進行說明:
l 依據缺陷危害程度、可利用性、受關注度等因素,在所有缺陷類型中,選擇10大重要缺陷進行數據統計,同時統計所有開源項目中存在這些缺陷的比例,以展示開源項目中重要缺陷的分布情況。
l 參考代碼托管網站和開源社區的項目Fork值、下載量等指標,選取20 個流行項目的檢測結果進行深度分析,分析從缺陷總數、10大重要缺陷總數以及缺陷密度三個角度進行,以說明流行開源項目的源代碼安全狀況。
l 綜合統計2228個被分析的開源項目,排列出缺陷總數最高的10 個項目,以說明安全風險相對較高的開源項目的情況。
1、10大重要缺陷統計
在所有檢出缺陷種類中,依據缺陷類型的危害程度、受關注度等因素,選擇10類重要缺陷進行檢測結果分析,圖1是10大重要缺陷統計列表(按檢出數量多少排序),圖2是10大重要缺陷在 2228個項目中出現的比率。
圖1 10大重要缺陷統計列表
統計結果顯示,在選取的10大重要缺陷中,檢出數量最多的是系統信息泄露,達到18萬余個。而受到開發人員普遍關注的缺陷,如SQL注入、跨站腳本也分別檢出4096和9614個,這兩類缺陷是web攻擊中最常見的兩類漏洞,可見它們依然是web應用中修復的重點。
圖2 10大重要缺陷檢出比例
在本次檢測的2228個項目中,有高達82.99%的開源項目存在10大重要漏洞,說明這10類缺陷普遍存在,應當作為軟件安全保障的重點考慮問題。
2、20個流行項目檢測結果
參考代碼托管網站和開源社區的項目Fork值、下載量等指標,團隊選取了20個最受歡迎項目的檢測結果進行了統計分析,圖3是20個流行項目缺陷數量統計表,圖4是20個流行項目出現10大重要缺陷數量統計表,圖5是20個流行項目缺陷密度統計。
圖3 20個流行項目缺陷總數
20個流行項目中,Guava項目檢出的安全缺陷數量最多,Guava是Google的一個開源項目,包含許多 Google 核心的Java 常用庫。
圖4 20個流行項目中10大重要缺陷的總數
20個流行項目中,netty項目檢出10大重要缺陷的總數最多,達到384個,即該項目源代碼中存在高風險缺陷的數量較多。
圖5 20個流行項目缺陷密度統計