如何保證應(yīng)用程序的安全性
譯文譯者 | 李睿
審校 | 孫淑娟
軟件架構(gòu)師Bob和安全開發(fā)工程師Alice是一家軟件開發(fā)初創(chuàng)公司的成員。以下是他們之間關(guān)于開發(fā)一套新的微服務(wù)的對話。
Bob說:“你聽到通知了嗎?客戶交易已經(jīng)敲定。我們可以開始為他們在云平臺上使用的金融服務(wù)開發(fā)分析應(yīng)用程序?!?
Alice:“太棒了!那么應(yīng)該使用哪種編程語言構(gòu)建應(yīng)用程序?”
Bob:“還沒有確定。它可以基于任何一種軟件編程語言,但更重要的是它必須是安全的。我們所有的系統(tǒng)及其應(yīng)用程序都應(yīng)該打上最新的安全補(bǔ)丁,并且軟件版本應(yīng)該始終以正確的配置運(yùn)行。
我會通過電子郵件給你發(fā)送詳細(xì)的業(yè)務(wù)用例和技術(shù)要求。簡而言之,它將是持續(xù)集成和交付的快速發(fā)展。那么你建議我們使用什么工具進(jìn)行端到端安全掃描?”
Alice說:“當(dāng)然,我會向你發(fā)送一份工具清單,這些工具將使我們能夠在生產(chǎn)部署之前檢測和修復(fù)漏洞。我認(rèn)為需要有一種有前途的方法來掃描和消除代碼或應(yīng)用程序可能帶來的網(wǎng)絡(luò)安全風(fēng)險。”
Bob說:“太好了,我們更喜歡采用開源掃描工具,但如果有的話,你可以列出對流行的第三方專有工具的見解?!?
Alice開始探索關(guān)于代碼掃描主題的各種現(xiàn)有資源。根據(jù)Bob提供的需求規(guī)范,她考慮了所有關(guān)鍵領(lǐng)域,例如代碼的靜態(tài)分析、面向互聯(lián)網(wǎng)的用戶界面(UI)和API端點(diǎn)的動態(tài)分析以及依賴包的漏洞掃描。
而幾天過去了,她仍然感到困惑,難以做出決定,因為得到的大部分信息都是基于用戶角色和軟件可用性規(guī)范而不是以代碼為中心的,雖然這從開發(fā)人員角度來看是有用的,并且可以適應(yīng)需求。
以下將深入了解各個安全掃描工具內(nèi)容(這足以幫助Alice做出決定)。
1.類別
以下是各種安全掃描工具的類別:
(1)SAST(靜態(tài)應(yīng)用程序安全測試),又名靜態(tài)掃描
- 用于分析應(yīng)用程序源代碼以識別漏洞來源的白盒測試過程;通常在應(yīng)用程序開發(fā)生命周期的編碼/質(zhì)量保證階段實施,從而能夠早期識別和緩解代碼中的漏洞。
- 確保應(yīng)用程序從設(shè)計階段就以強(qiáng)大且安全的方式構(gòu)建,并在投入生產(chǎn)之前符合安全編碼標(biāo)準(zhǔn)。
- 提供SAST的一些工具包括SonarQube、App Scan、IBM Code Risk Analyzer、Fortify Static Code Analyzer、WhiteSource等。
- 使用SAST工具之前,常用的評估標(biāo)準(zhǔn)是:
- 支持所需的編程語言。
- 誤碼率。
- 漏洞檢測精度。
- 詳細(xì)程度。
- 代碼安全分析結(jié)果的清晰性。
(2)SCA(軟件組合分析),又名依賴項掃描
- 跟蹤代碼庫中的開源組件以檢測漏洞、潛在的安全和許可證合規(guī)性威脅,使團(tuán)隊能夠通過避免與IP、聲譽(yù)和費(fèi)用方面的沖突及早進(jìn)行補(bǔ)救。
- 當(dāng)靜態(tài)掃描檢測內(nèi)部開發(fā)的專有源代碼中的漏洞時,軟件組合分析(SCA)執(zhí)行依賴掃描以識別開源依賴中的漏洞、發(fā)現(xiàn)已棄用的依賴項,并評估數(shù)字簽名。它幾乎沒有誤報,掃描速度非常快。不需要訪問源代碼,可以在軟件開發(fā)生命周期(SDLC)的任何階段進(jìn)行集成,甚至在后期部署。
- 一些提供SCA/依賴掃描的工具是White Source Software、GitLab、GitHub、Snyk和Jfrog Xray。
- 使用SCA工具之前常用的評估標(biāo)準(zhǔn)是:
- 開源組件及其漏洞的知識庫。
- 支持各種編程語言。
- 掃描速度。
- 易于使用報告的分析結(jié)果。
- 開發(fā)生命周期各個階段的集成能力。
(3)DAST(動態(tài)應(yīng)用程序安全測試),又名動態(tài)掃描/Web應(yīng)用程序掃描
- 這是一個黑盒測試過程,用于通過滲透測試識別應(yīng)用程序Web端點(diǎn)的漏洞,并且無法訪問其源代碼,通常在構(gòu)建應(yīng)用程序的質(zhì)量保證(QA)和預(yù)生產(chǎn)階段執(zhí)行。它探索應(yīng)用程序運(yùn)行狀態(tài),并檢查其對由該工具進(jìn)行的模擬攻擊的響應(yīng),這將有助于確定應(yīng)用程序是否易受攻擊,以及是否可能面臨真正的惡意攻擊的風(fēng)險。
- 適合檢測身份驗證和配置問題;獨(dú)立于應(yīng)用程序使用的語言和平臺。
- 一些提供動態(tài)掃描的工具是OWASP ZAP、App Scan、Netsparker和Detectify。
- 使用DAST工具之前常用的評估標(biāo)準(zhǔn)是:
- 支持API測試。
- 認(rèn)證掃描。
- DevSecOps(作為CI/CD管道的一部分完全自動化運(yùn)行的能力)。
(4)IAST(交互式應(yīng)用安全測試)
- IAST是一種結(jié)合了SAST和DAST優(yōu)點(diǎn)的混合測試方法。IAST通過在運(yùn)行時使用代理和傳感器檢測應(yīng)用程序來分析漏洞。與DAST不同,IAST可以查看整個代碼庫,并可以指向代碼的確切易受攻擊位置。此外,與SAST不同,它能夠捕獲錯誤配置等運(yùn)行時問題,并且誤報率最低。
- 提供IAST的一些工具是Veracode和Netsparker。
- 使用IAST工具之前常用的評估標(biāo)準(zhǔn)是:
- 支持的技術(shù)。
- 易于報告和分析的詳細(xì)程度。
- 執(zhí)行速度。
- 準(zhǔn)確度極低/無誤報的結(jié)果。
(5)數(shù)據(jù)庫安全掃描
- 通過檢查數(shù)據(jù)庫的內(nèi)部和外部配置(如身份驗證、機(jī)密性、完整性和可用性)來識別數(shù)據(jù)庫應(yīng)用程序中的漏洞的過程。
- 其中一些工具是Scuba、Zenmap和SQLRecon。
2.工具
(1)WhiteSource Scan
WhiteSource具有SAST和SCA功能來執(zhí)行代碼的安全掃描。SAST能力可用于檢測源代碼中的漏洞,SCA可用于檢測開源依賴項中的漏洞。WhiteSource幫助開發(fā)人員修復(fù)漏洞。它與Jenkins、Bamboo、AzureDevOps、GIT和TFS集成。
(2)SonarQube
SonarQube是一個用于檢查代碼質(zhì)量的開源平臺,并與GitHub、BitBucket、GitLab、Maven、Gradle、Travis、Jenkins、Bamboo和Azure DevOps集成。SonarQube可以測量關(guān)鍵指標(biāo),包括錯誤、代碼缺陷、安全漏洞和重復(fù)代碼。SonarQube支持創(chuàng)建SonarQube插件,這有助于自定義代碼規(guī)則。
(3)IBM CRA
Code Risk Analyzer獲取所有基于Git的代碼、配置和部署工件,構(gòu)建依賴關(guān)系圖,并運(yùn)行合規(guī)性控制檢查管道。它會生成一個物料清單(BOM)文件,其中列出了所有第三方操作系統(tǒng)包和應(yīng)用程序包的依賴關(guān)系。它會發(fā)現(xiàn)物料清單(BOM)文件中列出的包中的漏洞。Code Risk Analyzer僅支持IBM Cloud?Continuous Delivery托管的github.com存儲庫、Git存儲庫和問題跟蹤存儲庫。它可以啟用CRA來掃描拉取請求和合并。
(4)HCL AppScan
HCL AppScan是一個全面的、基于云的應(yīng)用程序安全解決方案,與構(gòu)建環(huán)境、DevOps工具和IDE集成。AppScanon Cloud提供一整套測試技術(shù)(SAST、DAST、IAST和開源)以提供最廣泛的覆蓋范圍。它可以使用AppScan UI設(shè)置誤報。
(5)Gosec
Gosec是一個安全工具,可以對Golang項目的安全漏洞進(jìn)行靜態(tài)代碼分析。Gosec通過將所有源代碼加載到AST(抽象語法樹)中來工作,并應(yīng)用一組內(nèi)置規(guī)則來查找常見錯誤,例如代碼中的秘密。它允許用//#nosecG101G102識別誤報。
(6)OWASP ZAP
Zed Attack Proxy(ZAP)是一種免費(fèi)的、開源的動態(tài)掃描工具,由開放式Web應(yīng)用程序安全項目(OWASP)維護(hù)。ZAP專為Web應(yīng)用程序的滲透測試而設(shè)計。它設(shè)置警報過濾器以設(shè)置誤報。
3.工具比較
工具名稱 | 用途 | 支持的語言 | 忽略列表 | 優(yōu)點(diǎn) | 缺點(diǎn) |
開源庫掃描工具。漏洞通過MITRE和NVD驗證 | Java、C#、C++、Golang、Node.js、Ruby、.Net、Dockerfiles、Javascript 等 | Whitesource的配置文件以包含忽略列表 | 漏洞影響的細(xì)節(jié)很清楚,可用于所有依賴項的許可證類型分類與 Eclipse、VsCode、IntelliJ 等集成,問題在存儲庫中修復(fù)后會自動關(guān)閉 | 圖像掃描(操作系統(tǒng)包)和源代碼掃描不包括在內(nèi)。 | |
源代碼靜態(tài)掃描和動態(tài)掃描工具 | Android、Kotlin、Java、c/c++、Golang、Groovy、JS、Python、PHP、Scala、Ruby、TypeScript等 | 在UI中標(biāo)記誤報 | 一款涵蓋靜態(tài)代碼和動態(tài)代碼掃描的工具。 掃描Dockerfile問題誤報太多 | 誤報太多。 誤報設(shè)置適用于行號,因此每次行號更改時都必須重新設(shè)置誤報。 主要關(guān)注 SQL 注入和 CSRF 相關(guān)漏洞, 不是廣泛的源代碼掃描。 | |
依賴掃描。 不是源代碼掃描。 使用 security.snyk.io 作為 CVE 數(shù)據(jù)庫 | Java, Node.js, Python, Golang, Docker files, Kubernetes, Terraform | .cra/.fileignore(可以排除開發(fā)依賴項(--excludedev)) | 執(zhí)行基本映像(操作系統(tǒng)包)掃描。 可以集成到管道中。 | 自動創(chuàng)建的問題沒有很多細(xì)節(jié)(管道有細(xì)節(jié)但沒有鏈接到問題)。 修復(fù)后的問題不會自動關(guān)閉。 運(yùn)行管道時可能出現(xiàn)重復(fù),如果Dockerfile需要傳遞ARG,需要確保將ARG設(shè)置為環(huán)境變量。還可以使用Docker BUILDFLAG環(huán)境變量。 僅支持IBM Cloud? Continuous Delivery托管的Github.com存儲庫、Git存儲庫和問題跟蹤存儲庫。 | |
開源滲透測試工具 | Java, Python, Node.js, .NET, PHP或者Go | 可以在 UI 中設(shè)置誤報。 使用配置文件忽略警報。 | 穩(wěn)定的滲透測試/動態(tài)掃描解決方案。 自動更新和拉取請求分析。 提供四種不同的掃描模式。 ?安全的 ?受保護(hù) ?標(biāo)準(zhǔn) ?攻擊 | 需要更好的報告格式。 主動掃描很危險,根據(jù)應(yīng)用程序可能會創(chuàng)建/修改/刪除數(shù)據(jù)。 | |
源代碼質(zhì)量和安全掃描工具。漏洞通過MITRE和NVD驗證 | Java(包括 Android)、C#、C、C++、JavaScript、TypeScript、Python、Go、Swift、COBOL、Apex、PHP、Kotlin、Ruby、Scala 等 | 沒有Sonar可以用來排除掃描代碼中的一行 | 對Java、C、C++等語言進(jìn)行廣泛的源代碼掃描,用于在代碼中檢測: ?錯誤 ?代碼缺陷 ?安全漏洞 ?重復(fù)代碼 提供有關(guān)如何修復(fù)代碼的詳細(xì)信息 根據(jù)OWASPTop10和CWETop25標(biāo)準(zhǔn)跟蹤項目安全性。 | 商業(yè)版不支持GitHub集成。 企業(yè)版價格高昂。 不掃描依賴項。這需要將插件集成到SonarQube。 定義政策/規(guī)則是一項挑戰(zhàn)。 測試覆蓋報告需要第三方覆蓋工具集成。 | |
Gosec | GoLang的代碼分析工具。漏洞由NVD驗證 | GoLang | //#nosec G101 | 可以自定義Gosec以排除或包含某些測試。 gosec-track-suppressions可用于查看所有抑制。 Gosec將在Go模塊打開時自動獲取正在分析的代碼的依賴關(guān)系。 支持多種輸出格式,如text、json、yaml、csv、sonarqube、JUnit XML、html和golint。 | 映射CWE而不是CVE報告每個問題。 |
結(jié)論
盡管Alice之前沒有操作安全掃描工具的經(jīng)驗,但她不想嘗試每種工具,因為它們會為原型新軟件應(yīng)用程序環(huán)境帶來集成問題的成本。
安全掃描工具的選擇是團(tuán)隊必須做出的重要決定。調(diào)查結(jié)果將進(jìn)一步導(dǎo)致關(guān)鍵決策,例如在安全掃描失敗的情況下阻止代碼交付,或在動態(tài)代碼掃描的情況下,記錄可審計的可追溯過程以確認(rèn)測試的安全接受(即接受或忽略錯誤正數(shù))。
而了解這些工具比較的細(xì)節(jié)之后,Alice將這些工具推薦給Bob,而這些工具很快就能入圍。
對于Bob來說,顯著避免使用不良的掃描工具比找到最好的工具更重要。Alice和Bob為此都很高興,因為可以節(jié)省更多的時間,讓他們專注于實際業(yè)務(wù)需求開發(fā)產(chǎn)品。
原文標(biāo)題:??Take Control of Your Application Security??,作者:Josephine E. Justin,Deepika Kothamasu,Swathi Pemmaraju