當前位置:
首頁 > 新聞 > 開源軟體安全現狀分析報告

開源軟體安全現狀分析報告

一、背景情況


開源軟體具有開放、共享、自由等特性,在軟體開發中扮演著越來越重要的角色,也是軟體供應鏈的重要組成部分。據Gartner調查顯示,99%的組織在其 IT系統中使用了開源軟體。而來自Sonatype公司的一項調查則顯示,在參與調查的3000家企業中,每年每家企業平均下載 5000個開源軟體。

然而,開源軟體中存在大量的安全隱患,企業在享受開源軟體帶來的便利的同時,也在承擔著巨大的安全風險。近年來,開源軟體頻繁爆出高危漏洞,例如Strusts2、OpenSSL等。這些組件很多都應用於信息系統的底層,並且應用範圍非常廣泛,因此漏洞帶來的安全危害非同一般。


美國首先認識到開源軟體安全問題的重要性,早在2006年,美國國土安全部就資助Coverity公司開展「 開源軟體代碼測試計劃」,針對大量開源軟體進行安全隱患的篩查和加固,截至2017年2月,累計檢測各種開源軟體 7000多個,發現大量安全缺陷。


鑒於上述形勢,360代碼衛士團隊基於自身技術積累和產品能力,在2015年初發起了國內的「 開源項目檢測計劃(www.codesafe.cn)」,這項計劃是針對開源軟體的一項公益性安全檢測計劃,旨在讓廣大開發者關注和了解開源軟體安全問題,提高軟體安全開發意識和技能。截止 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個流行項目缺陷密度統計


缺陷密度可以從一定程度上反應項目的安全性。在上述20個流行項目中,okhttp的缺陷密度最大,為45.24個/千行;opencv的缺陷密度最小,為0.91個/千行。

3、缺陷數量TOP 10項目


在檢測的2228個開源項目中,僅從缺陷數量角度,對所有項目檢出的缺陷數量進行排列,其中缺陷總數最多的10個項目如圖6所示。OpenGamma項目成為2228個項目中檢出缺陷數量最多的項目。



圖6缺陷數量TOP10項目


4、漏洞驗證實例分析


通過開源項目檢測計劃,360代碼衛士團隊自主發現開源軟體漏洞31個,並已獲得29個CVE漏洞索引編號。


本節基於CVE-2015-8883漏洞進行詳細的漏洞驗證實例分析。該漏洞是一個類型混淆漏洞,存在於一個由C語言開發的開源流媒體解析軟體包中,位於核心處理函數HandleInvoke中,調用AMF_Decode函數對body數據進行解碼,然後將body數據傳給了AMFProp_Decode函數的pBuffer中,在AMFProp_Decode函數中存在一個switch語句,它會根據不同的數據類型標誌位對數據進行解碼。在我們的poc中,根據p_type調用了AMF_DecodeNumber函數對pbuffer進行了解碼。注意數據在隨後的使用中實際上是當作一個對象來使用,應當使用AMF_Decode函數進行解碼。如圖7所示。



圖7數據解碼過程


在調用AMF_Decode函數對數據進行解碼之後,obj中就存儲了解碼後的數據。隨後在3108行中,調用AMF_GetProp函數從obj中獲取索引為3的prop屬性數據,緊接著在AMFProp_GetObject函數中將prop中Union數據p_vu以AMFObject對象類型的方式取出,並存儲到obj2中。在3109行中,再次調用AMF_GetProp函數從obj2中獲取數據。在我們的poc中,obj2中實際上存儲的是一個double數據,程序將其當作指針進行使用,可能會導致程序訪問非法的內存地址。如圖8所示。


圖8 非法內存地址訪問過程


三、結論與建議


從開源項目檢測計劃所得到的數據來看,當前開源軟體的安全問題非常嚴重,代碼中的安全缺陷密度較高。而據NVD數據統計,截至2017年2月,全球開源軟體相關的已知安全漏洞已超過28000個。


隨著軟體開發過程中開源軟體的使用越來越多,開源軟體實際上已經成為軟體開發的核心基礎設施,開源軟體的安全問題應該上升到基礎設施安全的高度來對待,應該得到更多的、更廣泛的重視。


而據我們目前觀察到的情況,當前絕大多數企業在軟體開發過程中,對開源軟體的使用非常隨意,管理者常常不清楚自己的團隊在開發過程中使用了哪些開源軟體,甚至程序員自己都無法列出完整的開源軟體使用列表。這給信息系統安全風險的管控帶來了極大的挑戰,系統的運維者不清楚自己正在運行的軟體系統中是否包含了開源軟體,包含了哪些開源軟體,這些開源軟體中是否存在安全漏洞!


在此我們呼籲和建議,開發者在軟體開發過程中使用開源軟體時,不應僅僅關注開源軟體的功能,還應把安全作為重要因素納入考量,儘可能避免由於不當的使用開源軟體而引入嚴重的安全隱患。「360開源項目檢測計劃」願與國內廣大軟體開發者一起,關注和防範開源軟體安全風險,為國內軟體的安全開發水平提高貢獻一份力量。開發者可以通過「360開源項目檢測計劃」網站(www.codesafe.cn)了解自己關注的開源軟體的安全缺陷檢測細節,360企業安全集團也可以提供專業的產品,幫助客戶確定在自身軟體開發過程中使用了哪些開源軟體,並可以幫助客戶持續跟蹤這些開源軟體的安全狀況,及時防範安全風險。


*本文作者:

360開源項目檢測計劃負責人吳迪

,轉載請註明來自 FreeBuf.COM


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

黑帽SEO剖析之隱身篇
Discuz! 任意文件刪除漏洞重現及分析
來自後方世界的隱匿威脅:後門與持久代理(一)
黑帽SEO剖析之工具篇
反取證技術:內核模式下的進程隱蔽

TAG:FreeBuf |