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