北京大學專家:軟體供應鏈安全的風險和成因分析
■ 北京大學軟體工程國家工程研究中心 張世琨 馬森 高慶 孫永傑
由於軟體應用範圍不斷擴大,軟體安全已經不限於虛擬空間,直接威脅到物理空間的安全,而且,供應鏈中的任何問題都會導致嚴重的危害。降低軟體安全風險最重要的就是技術沉澱,而技術沉澱最好的方式就是自動化工具,例如美國國防高階研究計劃局(DARPA)在2016年舉辦的網路安全挑戰賽(CGC),無任何人為干預,由機器全自動地挖掘二進位制程式中的漏洞。筆者認為,這類比賽的意義遠大於奪旗賽(CTF)這種證明個人實力的比賽,因為靠人的經驗式挖掘永遠不能普惠更多的企業和個人,而且經驗的傳授也不會系統完整。如何將安全分析技術落地,將知識以工具的方式用於實戰,才是迫切需要的,這也是阿里軟體供應鏈安全比賽的意義所在。那麼,未來,自動化分析技術和安全知識的結合將成為一個重要方向。本文對軟體供應鏈領域的風險和成因進行探討,並就如何解決問題提出幾點建議。
一、軟體供應鏈安全領域存在的最大問題
1.開源軟體的數量呈指數級增長,安全問題不容小視
根據Sonatype報告顯示,在2017年全年,獨立的Java開源元件數量由200萬上升至350萬,JavaScript開源元件由300萬上升至550萬,python元件數由87萬上升至140萬。對中央倉庫(Central Repository)中350萬個Java元件的分析結果顯示,超過10%(351000個)的元件至少包含一個已知漏洞。事實上,研究人員發現,這些元件中有共計300多萬個漏洞,任何一個漏洞都可能成為攻擊者的攻擊目標。
過於巨大的新增開原始碼數量,導致單純通過人力難以發現全部的問題,對漏洞挖掘、安全防範提出了更高的自動化要求。開源軟體數量的增長使軟體庫之間的引用關係變得愈發複雜,如果其中一個環節出現了問題,就會導致所有使用該軟體庫的下游軟體均存在該漏洞。
更重要的是,對於開發過程中引入開源軟體的執行細節與其中潛在的風險,大多數開發者都無從獲知。一個工程開發數年,人員迭代頻繁,新的開發者對於前任開發者使用過的開源元件是否被修改過,無從獲知,開發者更加關注的是自己開發程式碼的質量及安全性。儘管美國有黑鴨(Black Duck)軟體這種分析整個工程的組成成分以及對應成分的CVE漏洞工具,但是,其高昂的收費,需要將程式碼通過網路傳輸到美國的使用方式,使國內企業很難接受,從而導致開源軟體檢測成為監管無人區,其風險遠大於自行研發的程式碼。
2.難以處理鼓勵敏捷開發、快速迭代的市場需求與必要安全成本間的平衡
隨著網際網路的不斷髮展,軟體使用者對軟體的功能性、實時性、易用性等方面的需求越來越高,軟體市場的競爭壓力越來越大。這要求開發者在短時間內完成大量功能點的開發,並在後期進行持續不斷的高速迭代以搶佔並穩固市場。
綜合開發速度與成本控制等因素,開發者在開發過程中必然大量使用開源庫與外包供應商提供的非公開庫。但是,由上文可知,使用外部庫時存在大量安全隱患,一旦出現數據洩露等安全問題,將導致極其巨大的經濟損失。如何在較短的開發週期內儘量完善軟體功能,同時完成相對完備的安全性測試,是所有開發者都面臨的問題。
二、造成上述問題的原因分析
1.軟體供應鏈風險傳播速度快,攻擊面廣
軟體供應鏈的安全風險廣泛存在於供應內容在開發流程中直接或間接影響最終產品或系統的所有位置。風險將從供應鏈的每一層繼承下來,主要包括:第一,開發過程中包含的編碼和設計缺陷,允許未授權方在產品或系統部署時引入程式碼。此外,存在通過允許未授權訪問和執行受保護功能而直接危及安全性的缺陷。第二,在組織之間轉移時允許對產品或系統的訪問進行不正確的控制,允許未授權方引入程式碼。第三,不安全的部署配置(例如,使用預設密碼的已部署配置)。第四,使用現場產品或系統的操作變化會帶來安全風險或配置更改,從而導致安全性受損(配置控制和補丁管理)。第五,在產品或系統處置過程中錯誤處理資訊會損害當前運營和未來產品或系統的安全性。
2.開發人員安全意識以及專案管理水平有限
軟體供應鏈任何一環的開發人員,在開發過程中如果出於方便等原因,下載非官方的軟體、工具,並未經完整的安全校驗,都可能引入漏洞或木馬,帶來安全隱患。例如,Xcodeghost事件,就是開發者使用了非官方途徑的XCode工具導致。開發者在開發過程中往往更看重所用軟體庫的功能性,很少關心所用軟體庫的版本、可能存在的漏洞等資訊。2017年9月,流行Java框架Spring發現一個遠端執行程式碼的高危漏洞,此後的一個月內,對存在問題的Spring框架的下載量僅比漏洞曝出前下降了15%。此外,一些小型的開發團隊沒有完善的軟體工程開發流程,當員工流動等情況出現時,可能會出現程式碼難以維護,難以進行版本更新等情況。
3.保障軟體供應鏈安全的客觀難度
黑客只需要找到軟體供應鏈的一個突破口便可以入侵併造成危害,開發者需要對整個軟體供應鏈進行完備的安全防護。即便企業安全意識足夠,從漏洞公佈,發現安全隱患設計補丁,最終測試併發布安全的新版本,仍然需要一定的週期,而攻擊者根據漏洞生成攻擊向量的速度可能更快。2018年8月22日,一個新發現的Apache Struts 2遠端程式碼執行漏洞(CVE-2018-11776)被公開披露。僅在一天後,一位Github使用者就釋出了針對此漏洞的概念驗證(PoC)漏洞利用程式碼。根據報告顯示,2017年,漏洞從發現到被黑客利用的平均時間僅為3天,留給開發者的應對時間極短,而且0day漏洞的預防和應對對開發人員提出了更高的要求。
4.技術研究與企業實際需求的脫鉤
國內對於漏洞自動發現或者通過開原始碼審計的研究很多,但是,並沒有實際落地的產品。研究往往都在點上,並沒有擴充套件到整個工具面上,業界對於實現工具的若干技術問題,沒有實際解決方案,導致很多想法只停留在理論階段,沒有給企業解決實際問題。
三、解決上述問題的建議和對策
目前,現有的市場環境對快速迭代、高創新性的需求,不允許花費大量的人力物力進行人工排查,因而對內建立穩定高效的軟體開發規範,對上游軟體供應鏈採取高自動化手段進行自動排查,是較好綜合時間和人力的選擇。
第一,採用開原始碼審計,充分了解軟體供應鏈中各個環節使用的開源版本庫。實時關注軟體所涉及的開源庫的最新漏洞資訊,當有新漏洞釋出時,第一時間下載補丁。
第二,開發人員應儘可能從官方渠道獲取程式元件,利用簽名驗證機制等方式降低軟體開發工具和開發庫被惡意植入漏洞的隱患。當對軟體庫植入惡意程式碼後,一般情況下,簽名校驗難以通過,通過軟體釋出的軟體庫版本與官方版本的校驗分析,可以發現大部分惡意植入程式碼問題。國家應建設國家程式碼庫,保證更多經過驗證的版本供軟體開發者下載。
第三,當使用開源或不公開軟體庫時,儘可能遵守可修改性、可維護性等軟體工程原則。對不同的軟體開發庫給予合理許可權,記錄庫使用的關鍵事件,方便快速排查問題。
第四,軟體釋出前通過靜態分析工具進行完整的自動化安全漏洞檢測。對常見的緩衝區溢位等漏洞進行分析,能夠發現部分隱藏的安全漏洞。通過對惡意程式碼的特徵分析,可以定位發現部分開發者惡意植入的後門。
第五,在充分防護且0day漏洞仍然難以避免的前提下,需要及時止損機制。可以設計合理的執行保護框架,通過對輸入輸出、網路傳播等敏感過程的實時監控,當程式出現惡意行為時及時,發現並預防。或通過制度建立、定期培訓等方式,增強軟體開發人員的安全意識。在發現問題時能夠迅速反應並解決問題,防止損失進一步擴大。
四、保障軟體供應鏈安全的重點
從程式碼自動分析技術研究看,保障軟體供應鏈安全的重點在於對於已知漏洞和未知漏洞的發現,表現在研發更好的同源分析與靜態程式碼安全漏洞自動檢測工具兩個方面。
第一,對已知漏洞的檢測,可以通過使用開源軟體安全審計工具,即同源分析工具,快速發現工具中使用的開源構件,通過對已知開源構件的匹配,可以知道構件是否被篡改或者通過CVE、NVD等已知漏洞庫的匹配。當然,很多已知漏洞並沒有完全在網上公佈,這也是潛在的問題之一。
第二,程式碼安全性檢測,與傳統程式碼漏洞檢測類似,緩衝區溢位等漏洞本就是程式碼漏洞的重要檢測內容。在漏洞檢測外,可以針對軟體供應鏈的常見後門攻擊方式進行特徵提取,自動掃描並發現同類惡意植入,對開發人員進行風險警告。靜態分析技術是分析這類漏洞的最佳方式,但是,潛在的問題在於靜態分析技術的圈子和安全圈並不重合。
(本文刊登於《中國資訊保安》雜誌2018年第11期)
宣告:本文來自中國資訊保安,版權歸作者所有。文章內容僅代表作者獨立觀點,不代表安全內參立場,轉載目的在於傳遞更多資訊。如需轉載,請聯絡原作者獲取授權。