使用第三方庫進行軟件開發的安全風險研究

FreeBuf2016-12-26 19:28:25

如今,很多由於長期使用第三方庫文件,導致了持續的安全問題。而在程序開發設計階段,又經常忽略了第三方庫代碼的審查,甚至有些(repositories)直接被信手拈來使用,從根本上就缺乏了安全審計。

如果某個庫文件存在漏洞,那麼,大量使用了該庫文件的軟件程序都將面臨安全威脅。

這種場景,在現實世界中已經有了血淋淋的證明:如OpenSSL中出現的心臟滴血漏洞(Heartbleed)、GNU Bash出現的破殼漏洞(Shellshock)和Java中的反序列化漏洞(Deserialization),這些都是實際應用程序中,存在第三方資源庫或應用框架漏洞的典型案例。

據Veracode的安全研究分析,97%的Java程序都至少存在1個已知的安全漏洞,高級研究主管Tim Jarrett説“出現這種問題的原因比較明確,而且不只侷限於Java程序“。

另外,據Gartner預測,到2020年,99%的可利用漏洞發現期限,將仍然是安全專業人士已知至少1年以上的,所以,建議企業必須儘快修復那些已知的存在漏洞。這些漏洞很容易被忽略,但與事後彌補相比,修復這些漏洞的代價更低,也更容易。

Veracode 成立於2006年,提供最快、最全面的開發安全解決方案,來改善企業內部開發、購買或外包的應用程序軟件及第三方組件的安全。目前,已獲4000萬美元投資。

第三方庫:節省開發時間卻導致了安全漏洞

安全專家表示,第三方庫出現的安全問題,主要有兩方面原因:一是開發者可能使用了一些第三方庫當前安全可靠的代碼,但是在後期卻被發現了漏洞問題;另外是,開發者在項目中沒有經過仔細驗證,使用了那些本身就存在安全隱患的第三方庫代碼。

Sonatype副主管 Derek Weeks説,”雖然大家都對這種安全威脅比較重視,但對大多數程序員來説,開源庫和第三方資源就像把雙刃劍,節省開發時間的同時將會帶來安全漏洞”。

Sonatype 是一家軟件管理工具提供商,它提供一些經過仔細審核的開源代碼庫,並致力於跟蹤和監控各個開源代碼模塊,以減少軟件開發過程中的bug 以及兼容性和安全性問題。目前已獲7000萬美元投資。

Sonatype在對25000個應用程序進行分析後發現,7%的程序由於使用了不安全的組件而存在至少1種安全缺陷。

GitHub、Bitbucket、Python Package Index和NuGet Gallery等資源庫,將會幫助開發者發現他們在軟件項目中所需的代碼和功能實現,以Java開發者為例,他們可以使用這些資源庫中的加密處理功能,或其它可視化數據處理模塊。

Derek Weeks表示,現代軟件不再依靠一字一行的代碼編寫,無論一個成熟的應用程序多麼新穎獨特,其中80%的代碼都來源於第三方資源庫或組件。

他同時強調,企業對信息系統軟件的依賴程度將不斷增加,但大多數構成軟件的關鍵開源資源庫,卻未經安全審核,存在着各種不同程度的安全問題。

以Sonatype自己提供下載的第三方資源庫為例,2015年,該資源庫中的開源和第三方軟件組件下載量達310億次,而2014年為170億次。

而Sonatype對自身資源庫進行安全審核後發現,在被下載的代碼庫中,將近有6.1%存在安全漏洞。

Derek Weeks聲稱,Sonatype比其它資源庫管理應用做的好,是因為其設置了代碼管理工具、使用指導和相應的警告預警以幫助開發者避免使用存在安全隱患的缺陷代碼。

NTT Com Security首席顧問Stephen Breen説,缺陷代碼在開發過程中將會導致很多問題,就算整個開發團隊都有很強的安全意識,但在嚴格的驗收期限內,個別或少數開發者忽略了軟件中使用的第三方代碼安全審查情況,也不能避免。

Breen強調,如果某個不安全的問題組件被一個軟件程序使用,而這個軟件程序將被應用於另外一個大型系統中,這種層層複用,將最終形成安全問題的“雪球效應”。

最典型的例子,就是2015年的Apache Commons Collections(commons-collections-3.2.1.jar)反序列化漏洞。

據Veracode研究發現,目前,仍然還有1300多箇舊版本的漏洞實例存在於大量Java程序中,這些程序使用了Spring\Hibernate框架和其它多個資源庫代碼。

開發者在開發過程中選擇了Spring\Hibernate框架,但他們卻沒意識到其中同樣也包含了Apache Common Collections,然後,Common Collections庫隨之被應用於數千上萬的軟件開發項目中。

Apache Commons Collections已經成為Java程序中最常見的組件。

另據Veracode對30萬例Java程序檢測發現,其中25%的程序都未能及時打補丁,存在Apache反序列化漏洞。由於使用了存在漏洞的庫和框架組件,對開發者來説,最頭疼的是,如何更新升級這些應用程序。

“就像存在故障的汽車安全氣囊一樣,汽車製造商在數百萬車輛中配置了這些氣囊,當出現問題之後,大家通常認為應該汽車製造商來解決這個問題,而不是安全氣囊製造商”,Veracode研究主管Jarrett説。

第三方庫代碼漏洞、加密缺陷、注入漏洞

Veracode聲稱,Apache Common Collection的漏洞實例只是冰山一角。Veracode曾對大量存在漏洞的應用程序進行檢測分析,發現由於第三方代碼缺陷導致的信息泄露漏洞佔比高達72%,其次是佔比65%的加密漏洞,最後是注入和跨站漏洞。

這些問題綜合説明了各種軟件產品對開源組件不斷增強的依賴性,以聯邦政府為例,在選擇開發公司方面,它以開源策略優先。

Weeks強調,“使用第三方庫不但可以縮短開發時間,在某種意義上來説,還能提高軟件安全和質量水平,另外,還可以讓開發者更加專注於新功能新特性的架構。

如果利用得當,對程序員來説,第三方庫的代碼重用簡直就是天賜良機,可以幫大忙的事”。

出於這些原因,安全專家呼籲軟件行業是時候應該考慮代碼安全問題了。Sonatype公司甚至還發起了”軟件生成標準“的響應,以規範開發者在使用開源框架前後的代碼安全審查,同時方便那些使用存在漏洞庫存的程序進行安全更新。

Sonatype的前述調查中表明,在16個程序組件中至少有1個存在漏洞隱患。Weeks認為,問題可能出在一些開發者的否認或無知態度,他們選擇了一些不安全的程序組件。

而SourceForge總裁Logan Abbott則表態,“如果在SourceForge託管的資源庫中,發現存在一些惡意或缺陷代碼庫,我們會及時通知警告用户。我們會掃描資源庫中的二進制漏洞,但不對所有託管代碼進行安全審查。

第三方資源庫平台:我們僅只是負責託管

接受記者採訪的多個第三方資源庫負責人表示,他們僅只是提供儲存共享公開或私密內容的一個類似於雲存儲服務的平台,他們不會限制用户的託管代碼。

這些第三方資源庫負責人認為,要從根本上避免軟件漏洞,主要責任應該在於開發者,而不是第三方資源庫平台。想要編寫良好無漏洞的代碼,首先得從那些安全的資源庫中去學習借鑑。

BitBucket是一家源代碼託管網站,採用Mercurial和Git作為分佈式版本控制系統,同時提供商業計劃和免費賬户。其市場經理Rahul Chhabria聲稱,“Bitbucket於開發者就像家得寶與木匠的關係,我們配置了多種工具以方便開發者更好地應用託管代碼。

BitBucket中提供了一系列的代碼缺陷檢測工具,如對依賴鏈進行安全審查的SourceClear等;另外,BitBucket還允許團隊軟件項目開發和簡化的同行評審機制;其次,BitBucket具有的管道模式特點也能幫助開發者提高代碼質量。

Github是最大的開源資源庫,目前,它託管着4900萬個公共和私人項目,擁有1800萬用户。

據其安全負責人Shawn Davenport介紹,Github不對託管代碼進行審查或警告,用户可以根據需求使用第三方工具,如Gemnasium、Brakeman和Code Climate等,進行代碼動態或靜態分析。

Davenport説,“很多託管項目都存在安全隱患,我們只能儘量保證整個資源庫的安全,同時讓用户明白他們需要什麼樣的代碼審查工具。從項目角度來説,安全並不是開發者的首要責任”。

據Davenport估計,Github上只有少數用户在使用代碼安全審查工具。

其它第三方資源庫平台則告訴作者,他們有意採取不干涉態度,一方面是因為其不具備代碼審查技術能力,另外,他們認為這不是他們的職責所在。他們指出,代碼存在缺陷與否,事關開發者的所有代碼,甚至是一些舊的程序組件。

用自動化掃描技術來彌補?

如果要從根本上解決開源庫的安全問題,一種方法就是在軟件開發早期使用自動化的代碼漏洞和配置審查掃描工具。

據Gartner預計,到2019年,超過70%的企業開發活動都將集成自動化安全審查掃描工具,而目前,這個比例才佔到10%。

Node.js開源基金會成立了Node.js Security Project項目,致力於推動Node.js平台健康發展,其目標是為開發者提供發現和披露Node.js系統漏洞的處理機制。

據Node.js官方介紹,該項目除了開發者的主動發現外,還包括了一些漏洞數據庫和不同社區交流的漏洞審查和披露。

Weeks説,“這不關安全專家的事,而是我們應該如何明確軟件需求並授權開發,在這種情況下,解決方法的核心就在於軟件開發方面,同時還需引入一些新的方法理念”。

*參考來源:threatpost,FB小編clouds編譯,轉載請註明來自FreeBuf.COM  


閲讀原文

TAGS: