博客 / 詳情

返回

OpenSCA用開源的方式做開源風險治理:Why? What? How?

隨着容器、微服務等新技術的快速迭代,開源軟件已成為業界主流形態,開源和雲原生時代的到來導致軟件供應鏈越來越趨於複雜化和多樣化,網絡攻擊者開始採用軟件供應鏈攻擊作為擊破關鍵基礎設施的的重要突破口,從而導致軟件供應鏈的安全風險日益增加。
                                                                                                  ——《DevSecOps敏捷安全》

一. 開源風險治理為何如此重要?

《供應鏈攻擊威脅局勢報告》顯示,預計2021年的供應鏈攻擊數量將增加至上一年的四倍之多。《2021年軟件供應鏈安全報告》顯示,425名大型企業的IT、安全和DevOps主管中,64%的人報告稱去年受到了供應鏈攻擊的影響。Gartner預測,97%的企業應用程序將依賴於開源的使用,且超過70%的應用程序因使用開源組件而產生缺陷和漏洞。

開源≠安全。市場有觀點認為,開源項目使用起來更安全,因為當整個社區參與開發和維護項目時,包括安全漏洞在內的問題常常被更快地識別和修復。雖如此,但並不代表開源沒有風險。

開源項目是公開的,且對所有人可見,自然也包括惡意攻擊者。在其中發現的任何漏洞都會暴露給潛在的攻擊者。開源項目越受歡迎,對應攻擊事件的影響面也就越大,因而關鍵基礎開源軟件需要被重點關注。

二. OpenSCA技術原理

OpenSCA開源項目建立的初衷是“用開源的方式做開源風險治理”這一理念,將商業級的源鑑OSS開源威脅管控平台部分關鍵技術開源,為廣大企業和開發者提供專業的SCA核心工具與社區生態。

OpenSCA繼承了商業級的開源應用安全缺陷檢測、多級開源依賴挖掘、縱深代碼同源檢測等核心能力,通過軟件成分分析、依賴分析、特徵分析、引用識別、合規分析等方法,深度挖掘組件中潛藏的各類安全漏洞及開源協議風險。支持Java、JavaScript(Node.js)、PHP、Python、Go (Golang)、Rust、Erlang等多種主流編程語言並支持生成軟件物料清單(SBOM)。後續會逐步增加更多的語言。

圖1 OpenSCA支持的編程語言

1. 輕量級零成本安裝使用

開發人員在寫代碼時需要全面思考、高效設計並快速迭代,因而希望工具易用性好、不拖慢開發節奏。 

OpenSCA-cli是OpenSCA的命令行工具,支持在Windows/Linux/MacOS操作系統運行使用,部署簡單,命令快捷。 

雲端在線檢測:

可關聯最新的漏洞數據,通過將本地解析的組件信息(不包含代碼信息)上傳至OpenSCA雲平台進行漏洞庫比對,識別組件的漏洞風險信息。

圖2 在線檢測命令示例

本地離線檢測:

可以按照OpenSCA提供的漏洞庫格式準備自己的漏洞庫信息,無需將解析的組件信息傳輸到OpenSCA雲平台,就可完成組件漏洞檢測。

圖3 本地檢測命令示例

檢測結果格式:

支持將檢測結果保存到指定文件,根據後綴生成不同格式的文件,默認為JSON格式;支持以SPDX格式展示SBOM清單,只需更換相應輸出文件後綴。支持生成HTML格式的檢測報告。

檢測結果示例:


圖4 檢測報告示例

2. 分析應用組件成分

引擎首先會檢查項目是否有支持的特徵文件,如果有特徵文件,把需要的特徵文件提取出來。解析jar包內的特徵文件,如果包內無特徵文件或特徵文件解析不到有效數據則會嘗試用jar包名檢索獲取組件名稱和版本。如果通過jar包名檢索失敗則會按照"{組件名}-{版本號}.jar"的格式直接解析jar包名。

3.分析組件依賴關係

開源軟件包中80%的漏洞存在於傳遞依賴關係中,這意味着代碼中的大多數漏洞都包含在複雜且正在使用的(嵌套)依賴項中。OpenSCA可以準確地檢查代碼中的所有依賴項,解析代碼中使用的開源包的深度和複雜性,能夠確保在各個級別都進行合適有效的漏洞檢測。

在項目完整編譯環境下,許多語言都會有比較成熟的包管理器,OpenSCA可以基於它的依賴配置文件去識別組件。例如mvn dependency:tree獲取完整依賴樹的過程,通過解析靜態文件就可以獲取非常完整的依賴關係。

OpenSCA後續新版本也將支持沒有構建之前進行源代碼層級的組件成分掃描,通過解析特徵文件、組件文件、代碼片段來識別成分。通過接入GitHub或Gitee的在線代碼倉庫,一旦倉庫添加了新的組件信息,可以在早期檢測並幫助開發人員識別潛在的風險。

但是對於本身組件體系完整而普適度高的語言,比如Java當中頻繁使用了依賴引用鏈,這種引用關係往往可能存在2-3層以上,而這種依賴關係僅從靜態的pom.xml中是沒辦法獲取的。OpenSCA間接依賴可以從雲平台組件庫進行完整深度的遞歸解析所有層級的子依賴。

圖5 OpenSCA檢測流程

4.分析實際依賴組件

由於已識別的組件漏洞數量龐大,很快就會掩蓋了漏洞的可見性及其對企業構成的真實風險指數。但企業發現的實際漏洞中有70%-85%不是致命漏洞,因為企業的專有軟件不會調用存在這些漏洞的組件。 

如何檢測並判斷應用實際使用到的組件是不可或缺的關鍵能力。OpenSCA在解析文件依賴信息時首先會檢查組件是否是生產環境的組件(生產/開發環境的組件一般會在依賴文件中標識)。 

通過解析過濾掉並非實際使用到的組件,從源頭上減少無效組件和漏洞信息帶來的干擾。

5. 組件完整性分析

對於jar包文件,會計算其MD5值後與知識庫中記錄的組件MD5進行匹配,判斷當前組件的完整性。

圖6 完整性校驗流程

6. 檢測組件漏洞風險

OpenSCA-cli提供了雲平台漏洞庫和離線漏洞庫兩種關聯方式,來滿足用户的在線和離線使用需求。

因此,OpenSCA的漏洞庫的全面性和實時性可以起到重要的分析作用。依賴分析可以知道哪些項目或應用程序受到了漏洞的影響。

長期對知名開源組件追蹤,大量漏洞源收集和獨家漏洞的補充使得漏洞庫快速全面的更新。

基於海量的組件庫、漏洞庫、許可證庫、開源項目庫等知識數據能夠最大程度的匹配出正確的組件版本和對應的風險信息。通常,同一個漏洞可能存在於同一個組件的多個版本中,又或者同一個漏洞可能存在於不同的組件中,通過對關鍵漏洞的驗證核實,OpenSCA能夠最準確的給出修復推薦組件版本和安全的組件版本範圍供用户選擇。

7. 推薦修復方案

準確覆蓋並識別了漏洞風險和優先級,但是如何進行有效修復?OpenSCA具備完善的漏洞修復方案和安全版本的開源組件推薦。 

漏洞運營團隊會對漏洞進行復現和修復驗證。最大程度地完善漏洞修復信息,包括臨時補丁、官方補丁、配置文件、緩解措施等。幫助用户快速評估修復影響和修復時間。 

8. 提高許可證合規性

企業開發人員不能只是使用、複製、修改或分發開源依賴項。為了在軟件中正確且合法地使用開源組件,必須瞭解在代碼中使用的每個開源依賴項的協議權限、限制與使用條件。這將有助於企業創建定義和實施安全準則的策略。 

OpenSCA能夠從文件級別和代碼級別,幫助企業深入瞭解開源組件的許可條款和條件,以及許可證的兼容關係。在制定安全策略時,企業可以在軟件開發生命週期初期採用許可證合規性的規範。 

9. 生成SBOM(軟件物料清單)

軟件物料清單(SBOM,Software Bills of Materials)是描述軟件包依賴樹的一系列元數據,包括供應商名稱、組件名稱、版本號、許可證信息、依賴關係等關鍵信息,通過SBOM技術和管理手段,可以幫助企業或團隊梳理並透明化軟件供應鏈資產。

通過使用OpenSCA自動化構建並生成應用程序的SBOM,在每次添加、刪除依賴項或更改組件版本時可自動更新SBOM以確保SBOM的準確性。後續也將支持用户上傳SBOM清單分析項目是否使用了存在已知漏洞的組件並構建完整的資產風險視圖。當其它組件爆出漏洞時也可根據SBOM快速排查受影響項目,提高供應鏈的透明度和安全性。

. OpenSCA開源項目的初心

SCA檢測涉及源代碼解析,部分使用者可能擔心代碼泄露,開源後,所有檢測過程使用者是可控的,沒有泄露風險。

開發語言、開發工具五花八門,這使得SCA工具需要針對不同語言進行適配或兼容,使用者可以通過修改代碼開發適合自己使用場景的SCA檢測工具,如果有更多的貢獻者,有助於OpenSCA覆蓋更多的檢測場景。在更大的範圍幫助更多的企業實現開源風險治理,助力開源生態健康有序發展。 

四. OpenSCA的優勢

1. 先發優勢

作為全球首款開源的企業級SCA技術產品,OpenSCA繼承了源鑑OSS大量的企業實踐落地技術沉澱,後續也將持續吸取商業實踐,不斷更新優化OpenSCA的服務能力。

2. 社區優勢

依託於社區用户參與友好度以及以產品交付能力驅動的社區運營能力,OpenSCA榮獲GVP(Gitee最有價值開源項目)年度榮譽與軟博會“全球十大開源軟件產品”。

和越來越多參與貢獻的開發者一起共建,OpenSCA將會更快速成長。

3. 遷移成本優勢

用户可以在初期使用OpenSCA來滿足業務需求,後續需要更豐富的功能,可以平滑升級到商業企業版本。用户體驗和使用習慣可以得到延續,降低遷移成本。

4. 技術優勢

4.1 特徵檢測

對於包管理器的檢測方式,支持兩種方案,一種是傳統的依賴包管理器環境,另一種支持模擬包管理器解析邏輯,具備高度定製化能力。

如何判斷是否有版本衝突時的依賴,可以按照包管理器的排除機制處理(maven會採用依賴路徑最短的依賴)。比如maven解析pom中的依賴、屬性,需要獲取pom時去倉庫拉取,版本衝突時按照maven的規則進行處理。

4.2 同源檢測

開發者可以直接、完整地引入開源組件,但可能在很多時候,只是發現某一個開源項目中某一個代碼片段寫得不錯就選擇copy。這個代碼片段可能來自Github,行數不等,變量定義不明。此時傳統SCA的依賴分析功能無法完成對這些代碼片段的識別,需要更進一步的源代碼同源分析。 

OpenSCA即將發佈版本可以檢測不同語言的代碼片段,識別代碼級別引入的開源組件信息,及其關聯的漏洞和許可證信息。通過同源檢測,可以識別企業項目的代碼自研率、代碼溯源相似度分析、許可證風險兼容分析等。

4.3 二進制檢測

C/C++這樣的語言,沒有像maven這樣統一的包管理器,使得SCA識別起來會有困難。

OpenSCA即將發佈版本通過導入二進制文件的方式引入依賴,能夠對二進制文件進行掃描並收集其依賴信息。 

OpenSCA二進制檢測將擁有豐富的二進制分析經驗和漏洞挖掘能力。使用數據流、控制流、污點分析等技術,從常見攻擊面出發,提煉漏洞的二進制特徵,提高版本匹配、漏洞匹配的準確性。無需源碼,上傳二進制文件,即可進行軟件成分分析,生成完整安全報告,幫助客户快速獲取軟件風險。

4.4 強大的在線庫

OpenSCA在線庫集成了漏洞庫、組件庫、許可證庫,並進行小時級別的實施更新和人工運營,既保證了數據的全面覆蓋,也保證了風險信息的時效性。在檢測過程中,引擎可在線調用雲平台豐富的庫資源進行比對,降低了系統漏報率,並對漏洞修復方案進行持續完善更新,幫助用户對風險進行有效閉環。 

五. 期待參與和貢獻,共建開源項目

感謝每一位開源社區成員對OpenSCA的支持和貢獻。

Gitee已將OpenSCA掃描能力集成進了Gitee Go流水線中,實現了在流水線中對線上代碼倉庫的組件安全掃描。

圖7 Gitee集成OpenSCA服務

OpenSCA的代碼會在GitHub和Gitee持續迭代,歡迎Star和PR,成為我們的開源貢獻者。有任何建議都可以發在評論區或者OpenSCA項目的Issues中。我們會參考大家的建議不斷完善OpenSCA開源項目,敬請期待更多功能的支持。

OpenSCA官網:

https://opensca.xmirror.cn/

GitHub:

https://github.com/XmirrorSecurity/OpenSCA-cli/

Gitee:

https://gitee.com/XmirrorSecurity/OpenSCA-cli/

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.