為什么代碼安全掃描還不足夠
譯文【51CTO.com快譯】2017年3月, Equifax公司服務器存儲的1.4億人的敏感信息被盜。這是怎么發(fā)生的?
Equifax公司使用Apache Struts框架來運行其網(wǎng)站。2017年3月初,Apache公司在Apache Struts中發(fā)現(xiàn)了一個安全漏洞(CVE-2017-5638),并于3月7日發(fā)布了一個安全補丁來修復上述漏洞。
3月9日,Equifax公司管理員收到通知為受到影響的軟件打好補丁,但他們沒有這樣做。3月12日,網(wǎng)絡攻擊者獲得了對Equifax公司內(nèi)部服務器的訪問權限,從而發(fā)生了歷史上規(guī)模最大的一次數(shù)據(jù)泄露事件。
本文將探討如何通過一些步驟控制代碼質(zhì)量,并在文中簡要描述安全掃描過程。然而,這次探討的不只是如何對代碼進行安全掃描,而是對依賴項的掃描。
第三方依賴項有什么問題
人們需要了解軟件行業(yè)中第三方組件的使用情況。以下是開源技術提供商Black Duck公司對1000多個商業(yè)代碼庫進行審計的主要發(fā)現(xiàn):
- 96%的掃描應用程序包含開源組件。
- 在2017年,開源代碼的使用率從36%增加到57%。
- 每個應用程序的開源組件平均數(shù)量為257個。
此外,根據(jù)Veracode公司的調(diào)查:
- 應用程序由多達90%的開源代碼組成。
- 開發(fā)人員在2017年下載了520多億個Java組件(以及120億個Docker Hub組件)。
- 開源軟件的使用量在過去5年中增加了5倍。
很明顯,如今的軟件主要是由開源依賴項構建的,而第三方依賴項的數(shù)量在未來將會增長。
(1)應用程序安全風險
不幸的是,隨著第三方依賴項越來越多,在軟件中引入安全漏洞的風險也在增加。
開源的全球性安全組織OWASP在2013年就意識到了這個問題,并將“使用具有已知漏洞的組件”項目添加到OWASP的10大應用程序安全風險的列表中。
組件(例如庫、框架和其他軟件模塊)以與應用程序相同的權限運行。如果利用易受攻擊的組件,可能會導致嚴重的數(shù)據(jù)丟失或服務器接管。使用具有已知漏洞的組件的應用程序和API可能會破壞應用程序的安全防御,并遭遇各種網(wǎng)絡攻擊和不良影響。
這并不意味著開源軟件比專有組件風險更高,不必避免使用它。那么,這種風險有多大?根據(jù)Veracode公司發(fā)布的軟件安全狀況報告,其風險相當高:近88%的Java應用程序在組件中至少存在一個漏洞。
在討論解決這個問題之前,先檢查一下運行一個簡單的Spring Boot應用程序需要多少依賴項。
(2)Spring Boot應用程序依賴項示例
使用Spring初始化程序生成了一個Spring Boot項目示例,其中包含一些流行的依賴項,如下圖所示:
Spring Boot初始化示例項目設置:
因此,對于Spring Boot應用程序示例,需要額外的55個JAR(37MB)才能使應用程序成功啟動和運行。此外,JAR的數(shù)量取決于想要使用的附加功能/工具,它可能會變得更大。
例如,在目前正在處理的一個項目中,有262個依賴項。然而,大量的第三方依賴使得整個安全檢查過程非常困難。為什么?先了解一下如何檢測人工檢依賴項沒有已知的安全漏洞。
(3)第三方依賴掃描過程
以下人工依賴項檢查過程的步驟:
首先,收集給定的依賴識別信息(例如供應商、產(chǎn)品和版本)以構建通用平臺枚舉(CPE)。例如,org.springframework:spring-core:5.2.0.RELEASE的CPE將是cpe:/a:pivotal_software:spring_framework:5.2.0
其次,使用上一步中的標識符搜索NVD等常見漏洞和暴露(CVE)數(shù)據(jù)庫,并檢查給定依賴項是否存在任何漏洞。
然后,重復前兩個步驟55次(在這個示例中)
所以,看起來沒那么糟糕。在此忽略以上述方式進行依賴項掃描需要一些時間并且需要人工進行的事實。真正的問題是新的漏洞可能隨時出現(xiàn)在CVE數(shù)據(jù)庫中。
用戶不能僅僅因為過去檢查過它們,就假設其依賴項將永遠安全。這意味著必須在開發(fā)/測試階段以及軟件在生產(chǎn)中運行時檢查其依賴項。
自動依賴項掃描
依賴項檢查是客戶必須定期做的事情。此外,需要檢查已經(jīng)發(fā)布的軟件的依賴性,以便可以在客戶發(fā)現(xiàn)軟件中的安全漏洞之前準備一個補丁版本。
這并不是什么不尋常的事情。世界各地的公司越來越關注軟件安全。
以下了解是否有任何工具可以幫助保持依賴項免受漏洞影響。
以下是Java世界中兩個最流行的工具,它們使用戶能夠快速輕松地檢查漏洞數(shù)據(jù)庫的依賴關系:
- WASP Dependency-Check——這是一種簡單的工具,用于掃描Java和.Net應用程序以識別已知易受攻擊的依賴項的使用情況。可以將OWASPDC用作獨立的命令行工具。此外,可以將其與最喜歡的構建工具(Maven/Gradle)集成或?qū)⑵溆米鞒掷m(xù)集成(CI)/持續(xù)交付(CD)管道中的一個步驟(例如Jenkins)。
- Snyk Open Source ——該工具比OWASPDC先進得多(但是它每月只對數(shù)量有限的掃描免費)。它不僅掃描應用程序依賴項并顯示潛在問題。該工具可以優(yōu)先考慮最值得修復的問題并建議自動更新,因此檢查應用程序代碼是否可以訪問易受攻擊的功能,并檢查是否在運行時調(diào)用了漏洞。
簡而言之,這些工具可以幫助列出應用程序中的第三方依賴項,并指出存在已知漏洞的依賴項。此外,它們還提供了有關其發(fā)現(xiàn)嚴重性的信息。
但是,并非每個安全漏洞都會對應用程序造成風險。例如,可能根本沒有在代碼中使用受影響的功能。這當然需要更深入的分析,而不僅僅是簡單的依賴漏洞掃描。
結語
總而言之,第三方依賴項掃描是左移安全方法的支柱之一。換句話說,這意味著應該在開發(fā)生命周期的早期集成安全掃描。
為此需要:
- 工具——可以使用它來掃描應用程序的依賴項,例如OWASPDC。
- 自動掃描(定期和頻繁)——可以通過將掃描工具與持續(xù)集成(CI)服務器(例如Jenkins OWASP DC插件)或構建工具(例如GradleO WASP DC插件)集成來實現(xiàn)這一點。
- 漏洞審查和修復過程——一旦發(fā)現(xiàn)了漏洞,應該仔細查看,并決定是忽略它還是將依賴項升級到最接近的安全版本。
以上提到的最后一點可能是最有問題的一點。
首先,應該讓信息安全團隊參與審查依賴掃描工具的發(fā)現(xiàn)。根據(jù)嚴重性和對應用程序的實際影響,可能不需要對它做任何事情而只需忽略它。但需要記住的是,這必須是一個慎重的決定。
其次,一旦決定需要修補漏洞,就應該準備好快速交付應用程序的修補版本。特別是當該版本已經(jīng)投入生產(chǎn)時。
原文標題:Your Code Security Scanning Is Not Enough,作者:Artur Kluz
【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】