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