Categories
程式開發

每1000行代碼有14個安全缺陷,開源軟件的安全令人堪憂


每1000行代碼有14個安全缺陷,開源軟件的安全令人堪憂 1

當今,開源軟件已經成為軟件世界的重要組成部分。根據Gartner統計,99%的組織在其IT系統中使用了開源軟件。

今年3月,安全公司WhiteSource發布了一份《開源安全年度報告》。報告表明,2019年,公開披露的開源安全漏洞數量再創新高,總數​​為6100個。與2018年相比,開源安全漏洞的數量增長近50%。這份報告表明,開源軟件的安全問題非常嚴重。

更關鍵的是,開源軟件的安全不僅關係自身,而且影響整個現代軟件開發。 “可以說,現代軟件大多數是被‘組裝’出來的,不是被‘開發’出來的”。事實上,現代軟件開發越來越像工業生產和製造,原材料就是開源軟件,加上自己寫的業務代碼,最後“組裝”出一個軟件系統。

在奇安信代碼安全事業部總經理黃永剛看來,開源軟件已經成為構建網絡空間最基礎的“磚頭瓦塊”,無處不在。 “開源軟件已經成為信息系統開發和建設的核心基礎設施,開源軟件安全問題應該上升到基礎設施安全的高度來對待。”他說。

兩個重大發現

發現1:每1000行開源軟件代碼中就有14個安全缺陷,每1400行開源軟件代碼中就有1個高危安全缺陷。

發現2:開源軟件之間的關聯依賴,導致開源軟件的漏洞管理非常複雜。

2015年,奇安信代碼安全事業部發起“開源項目檢測計劃”。目前,該項目已經對3​​000多款開源軟件進行了安全檢測,並幫助許多開源項目修復了代碼安全缺陷,包括Google、Facebook、騰訊、阿里等旗下的開源項目。

據悉,通過開源項目檢測計劃,團隊發現開源軟件的安全問題確實非常嚴重。相關數據分析和統計顯示,開源軟件的代碼安全缺陷密度是14.22/KLOC,高危安全缺陷密度為0.72/KLOC。換句話說,每1000行開源軟件代碼中就有14個安全缺陷,每1400行開源軟件代碼中就有1個高危安全缺陷。

黃永剛說,“另一個發現是,開源軟件之間的關聯依賴,導致開源軟件的漏洞管理非常複雜。如果不用系統化的工具來做這件事,幾乎不可能完成。”

2019年,其團隊檢測了935個最新的物聯網設備固件,並針對這些固件中所使用的開源軟件和安全問題進行了分析。經過分析,他們發現:最新出廠的物聯網設備中,還有5%的設備使用了存在Heartbleed(心臟出血)漏洞的OpenSSL版本,5年前的超級漏洞,依然存在於最新的物聯網設備中。

因此,對開源組件的梳理和漏洞分析,一定需要係統化的方法和自動化的工具,才能做到可管理、可持續,不留死角。

而開源軟件最值得關注的安全問題是其放大作用。簡言之,一個開源軟件出現漏洞,會導致依賴它的其他開源軟件受到影響,而且層層關聯依賴,這就導致非常隱蔽和復雜的攻擊面。

舉個例子,Log4j有一個安全漏洞——CVE-2017-5645。由於直接依賴Log4j的開源軟件有4000多個,那麼這4000多個開源軟件也會受到CVE-2017-5645漏洞的影響。更恐怖的是,還有46000多個間接依賴Log4j的開源軟件,它們則是更隱蔽的受害者。

OpenSSL“心臟出血”漏洞

2014年,開源軟件OpenSSL Heartbleed(心臟出血)漏洞席捲全球。該漏洞不僅讓整個中國互聯網為之一顫,而且導致全球超過三分之二的網站“心臟出血”,可謂影響深遠。據悉,這個bug非常嚴重,導致全球互聯網大量私鑰和其他加密信息處於暴露危險下,受影響嚴重的系統甚至可以從服務器中直接獲取用戶密碼。

每1000行代碼有14個安全缺陷,開源軟件的安全令人堪憂 2

2017年,美國征信巨頭Equifax發生數據洩露,涉及近1.45億用戶。事後,該公司不僅被重罰7億美元,而且Equifax CEO也引咎辭職。據悉,這起數據洩露事件的原因是黑客利用Struts開源軟件的漏洞實施攻擊。

無論是OpenSSL“心臟出血”漏洞,還是Equifax數據洩露,都是因為開源軟件出現安全問題。近年來,開源軟件漏洞造成的安全事件越來越多,影響巨大,讓人們開始認識到開源軟件安全的嚴重性。

奇安信代碼安全事業部總經理黃永剛表示,從另一個角度看,行業客戶對安全的思考越來越系統化,很多客戶開始關注信息系統全生命週期的安全。 “安全開始左移,大家開始重視從源頭上做好安全工作。開源軟件是軟件開發的原材料,是我們進行信息系統開發和建設要把住的第一道安全關口。”他說。

三大原因

在軟件開發上,無論是技術方面,還是流程和管理方面,任何一點疏忽都會導致開源軟件出現安全問題。

具體說來,奇安信代碼安全事業部總經理黃永剛總結出三方面的原因:

1.開源軟件開發者自身的技術能力和安全開發知識存在問題,導致開發的代碼中有安全缺陷;

2.大多數開源項目的開發缺少SDL(安全開發生命週期)的流程和工具。並且,很多開源項目能使用的資源很有限,缺乏專業的代碼安全分析工具,而大部分專業的代碼安全分析工具都是收費的,價格昂貴;

3.攻擊者對開源生態的攻擊,比如向開源庫中註入惡意代碼、向包管理器倉庫投放惡意組件等。

如何提高開源軟件的安全性?黃永剛認為,從技術上,開源項目需要更系統地引入保障應用安全的流程、方法和工具,比如基於SDL的流程和理念管理開源項目的開發過程,並對開源項目開發者進行安全開發知識的普及。其次,使用源代碼靜態分析、動態安全測試、交互式安全測試等工具,並對開源項目開發者提交的代碼進行全面的安全測試等。

從非技術角度來說,“我覺得,開源技術社區和安全技術社區可以加強交流和合作,形成互動和反饋,互相促進。開發和安全的良性互動,是解決軟件安全問題非常重要的前提。”他說。

五條安全建議

針對軟件開發者和企業,黃永剛建議從引入控制、資產梳理、風險識別、漏洞告警和合理修復五個方面加強開源軟件的安全治理。

1.引入控制。企業應規範開源軟件的引入流程,建立開源軟件安全引入和退出機制。同時,對開源軟件的引入需要加入安全評估因素,不僅需要評估項目團隊引入的開源軟件是否存在公開的漏洞,是否存在開源法律風險,而且企業應進行完整性驗證,開源軟件是否來自官方,避免使用被篡改的開源軟件。

2.資產梳理。無論是軟件開發者,還是企業,它們在軟件開發過程中會引入大量開源軟件。然而,企業的安全管理者和開發管理者常常不清楚自身的信息系統到底引入多少開源軟件,引入了哪些開源軟件。開源軟件有著層層嵌套的依賴關係,軟件開發者或企業很難通過人工方式進行梳理。因此,建議使用專業的自動化工具識別軟件系統中含有哪些開源軟件以及開源軟件之間的關聯關係,形成企業開源軟件可視化資產清單。

3.風險識別。軟件中使用的開源軟件可能存在已知漏洞,且這些開源軟件背後調用或依賴的其他開源軟件也可能存在已知安全漏洞。在軟件開發過程中,企業應及時發現存在漏洞的開源軟件版本並進行升級。

4.漏洞告警。在軟件運行階段,企業應監控開源軟件漏洞情報信息,及時發現開源軟件的最新漏洞信息,並進行應急響應。

5.合理修復。絕大多數的開源軟件是通過版本更新實現漏洞修復的。對於不能通過升級新版本或打補丁來修復漏洞,企業應引入專業的漏洞研究隊伍,定制漏洞修復方案。