漏洞修復實用指南

  • 2022 年 9 月 15 日
  • 筆記

什麼是漏洞修復?

首先我們來定義漏洞修復這個概念。開發人員和安全團隊為了防止外部惡意攻擊,使用一些方法來識別、優先考慮、修復和監控漏洞,這個過程就是漏洞修復了。

在檢測方面,企業可以使用各種應用程序安全測試 (Application Security Testing, AST) 工具來識別軟件應用程序和其他系統中的漏洞。例如,軟件成分分析 (SCA) 工具通過對開源軟件組件與軟件開發環境中的漏洞數據庫、安全公告或問題跟蹤器進行檢查,來驗證其完整性,以確保不包含漏洞。

當 AST 工具發現問題時,安全團隊會嘗試攔截或消除漏洞,這一步就被稱為修復。修復有時可以像應用軟件補丁一樣簡單,有時也會像更換一組物理服務器或硬件設備一樣棘手困難。

補救的目的是在漏洞成為安全威脅之前對其進行修補或修復。這一步驟並不容易達成,因此需要開發團隊、系統所有者、安全團隊和運營人員共同構建有效的漏洞修複流程。

修復(Remediation)和緩解(mitigation)之間的主要區別在於,Remediation 修復了漏洞,而 Mitigation 解決了漏洞帶來的安全威脅,而不必修復底層漏洞。

雖然修復是更徹底和全面的解決方案,但在某些情況下,這可能沒有必要也無法實現,比如:

有時部分企業由於技術原因無法修復漏洞。例如,某些硬件設備可能不支持軟件升級或修復。這對於連接的醫療設備很常見。

還有一部分情況是不同團隊對修復存在意見衝突。比如,開發團隊擔心他們沒有充足的時間實施漏洞修復措施,而面向客戶的團隊則擔心所涉及的停機時間可能對客戶活動的造成干擾。

當企業將優先級評分應用於漏洞管理時,安全團隊可能會選擇緩解漏洞風險而不是修復構成威脅較小的低風險漏洞。這使他們能夠優先處理更嚴重的威脅,或者騰出開發人員的時間來專註於構建應用程序的主要目標。

在這些無法實施修復的情況下,緩解措施提供了替代方案。緩解措施降低了漏洞被利用的可能性,並給企業在修復漏洞之前提供了緩衝時間。在選擇是修復漏洞還是緩解漏洞風險時,需要時刻記住緩解漏洞風險只能減少漏洞帶來的威脅並不能讓漏洞完全消失。因此只要有可能,修復應當是首選解決方案,從根本解決漏洞帶來的安全風險。

漏洞修複流程

漏洞修復過程包括以下四個步驟:

1.漏洞檢測

這一步涉及識別攻擊者可以利用的代碼或系統配置中的任何已知缺陷。安全團隊可以通過測試和掃描來檢測漏洞,了解暴露的資產或系統至關重要。

軟件漏洞的其中一個例子是訪問控制配置不足,例如單因素身份驗證。不嚴格的身份驗證會讓未經授權的用戶更容易獲得訪問權限,並獲取敏感信息或發起惡意攻擊。

理想情況下,DevSecOps 團隊應當在整個 SDLC 中執行漏洞掃描,在此階段,可以利用 SCA、SAST 或 DAST 等工具。當然並不是所有的漏洞都需要修復。 例如,如果在產品代碼實際未調用的函數中發現漏洞,則無法利用該漏洞,自然也就無需修復。

2. 優先級排序

這一步需要識別漏洞帶來的風險,並確定哪些問題更緊迫或需要更多關注,並為這些漏洞做優先級排序。企業往往面臨許多漏洞又無法快速管理,而安全團隊的人員又十分有限,這時優先級排序的重要性便凸顯出來了。

安全團隊可以根據系統配置、潛在漏洞利用的可能性、實際事件的業務影響以及任何現有的安全控制來確定風險的優先級。需要特別注意,企業應當隔離其最重要的資產。如果 DevSecOps 團隊發現關鍵核心系統存在風險,可以優先修復相關漏洞並在整個團隊中分配工作優先級。 這可以幫助企業避免開發生命周期中斷的情況發生。

在管理開源漏洞時,建議使用工具來匯總來自列出已知漏洞的各種存儲庫的信息,因為這能夠幫助過濾安全警報,有效節省時間。比如使用 SCA 工具來確定代碼是否容易受到易受攻擊的組件的影響。當然如之前所提,並不是所有的漏洞都會帶來重大風險。使用合適的方式來識別影響代碼的漏洞,並用有效的工具進行分析,這些能夠幫助企業深入了解實際影響代碼的開源組件。

3. 整治

當判斷漏洞可能會影響代碼時,就需要進行修復。這一步涉及應用補丁、刪除或禁用易受攻擊的組件、更新系統或其配置,或阻止某些操作。

對於專有代碼,需要確定漏洞的根本原因才能進行修復。企業可以嘗試使用 SAST 來執行此操作。安全團隊需要結合自動和手動來進行修復,在此過程中可以添加額外的安全措施來強化邊界。需要注意的是,企業需要在安全、隔離的環境(例如沙盒)中測試修復工作,而不是完全在生產環境中進行此步驟。

對於開源漏洞,企業需要考慮開源社區的去中心化和協作性質,因為開源社區經常跨多個平台發佈修復程序,因此可能很難在一個地方找到所有相關支持。

最可靠的風險緩解策略之一是不斷修補開源組件,以避免暴露於已知漏洞。實踐和維護該策略的最佳方法是使用自動修復工具,這個工具能夠自動進行修復並在發佈新修復時進行提醒。不過值得注意的是,僅僅更新單個源文件是無法有效解決複雜的漏洞威脅,因此企業需要更新整個組件。然而在某些情況下新版本可能與其它組件不兼容,所以企業可能需要更改系統配置並阻止執行組件中易受攻擊的操作。

4. 持續監控

企業應該持續監控代碼以查找新的漏洞。這裡企業可以使用自動化工具提供實時警報,並允許持續進行漏洞修復過程。 有效的監控工具應根據上下文對漏洞進行優先級排序,這樣能夠有效減少 DevSecOps 團隊處理低優先等級警報所耽誤的時間。在連續修復的循環周期中,這一步也就是下一個循環的第一步了。