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