摘要:本文介紹了SCA技術的基本原理、應用場景,業界TOP SCA商用工具的分析說明以及技術發展趨勢;讓讀者對SCA技術有一個基本初步的瞭解,能更好的準確的應用SCA工具來發現應用軟件中一些安全問題,從而幫助提高軟件安全質量。
本文分享自華爲雲社區《漫談SCA測試技術(一)》,原文做者:安全技術猿 。python
一、什麼是SCA
SCA(Software Composition Analysis)軟件成分分析,通俗的理解就是經過分析軟件包含的一些信息和特徵來實現對該軟件的識別、管理、追蹤的技術。咱們知道在當今軟件開發中,引入開源軟件(注1)到你的項目中,避免重複造輪子是你們都再熟悉不過的了,好比開源庫中開源軟件按每一年21%速度在增加(來源Forrester報告),開源安全威脅成爲企業組織沒法迴避的話題,而應用SCA技術對應用程序進行安全檢測,實現安全管理是最行之有效的方法之一。算法
二、基本原理
SCA理論上來講是一種通用的分析方法,能夠對任何開發語言對象進行分析,Java、C/C++、Golang、Python、JavaScript等等,它對關注的對象是從文件層面的文件內容,以及文件與文件之間的關聯關係以及彼此組合成目標的過程細節。從SCA 分析的目標程序形式上分,既能夠是源代碼也能夠是編譯出來的各類類型的二進制文件,分析的數據對象對程序架構,編譯方式都是不敏感的,好比:類名稱、方法/函數名稱、常量字符串等等,無論目標程序運行在x86平臺仍是ARM平臺,不論是windows程序仍是Linux程序,都是同樣的,簡而言之SCA 是一種跨開發語言的應用程序分析技術。編程
SCA分析過程:首先對目標源代碼或二進制文件進行解壓,並從文件中提取特徵,再對特徵進行識別和分析,得到各個部分的關係,從而得到應用程序的畫像—–組件名稱+版本號,進而關聯出存在的已知漏洞清單。windows
因爲SCA分析過程當中不須要把目標程序運行起來,所以具備分析過程對外部依賴少,分析全面,快捷、效率高的優勢;安全
三、業界TOP SCA工具分析
根據Forrester最新SCA報告,Forrester經過10個維度(注3)對不一樣工具進行打分,最後根據綜合得分評選出以下業界TOP 10 SCA工具魔力象限圖:服務器
3.1工具概覽分析
- TOP 10 SCA工具中有5款支持軟件包(注2)開源軟件SCA檢查能力(synopsys/Sonatype/Veracode/Jfrog/GitLab),其餘工具只支持源代碼SCA檢查能力。
- 5款支持軟件包SCA檢查工具中,對C/C++、Java、.Net語言支持的比較好,但對Golang、python、JavaScript語言支持能力偏弱,好比:synopsys支持的組件對象中前面3種語言佔大頭90%+,相應的檢測率也高,而Golang語言的組件檢出率則低不少。
- SCA已從主要用做對開源軟件的檢測嚮應用程序的典型編碼問題檢測趨勢擴展,好比Veracode工具,它能提供了對諸如緩衝器溢出、命令行注入、死鎖、重複釋放、整形數溢出、UAF、格式化字符串漏洞,SQL注入等典型編碼問題的檢測能力。
四、影響SCA分析準確性的因素分析
- 從SCA原理能夠知道影響分析準確性的因素分兩個方面:其一是SCA工具支持組件的數量和檢測算法,其二是應用程序引用開源軟件的方式。
- 由於SCA工具是根據樣本組件特徵來匹配被測程序中的特徵來判斷應用程序是否引用該組件的,所以支持組件的數量越多,那麼檢測率也就越高,支持的組件數量越少,越會致使檢測遺漏;另外檢測算法和特徵設計是否合理也直接影響到分析的準確性和分析效率,不一樣SCA工具廠商有不一樣的解決方案,就比如在手機上識別指紋/人臉同樣,不一樣廠商識別的靈敏度和準確度都不同。
- 應用程序在引用開源軟件時,不一樣的應用程序即便引用同一個組件也存在引用不一樣的功能,引用功能的多少也各不相同,這樣帶來的結果就是在應用程序中包含該組件的特徵數量也是大小不一樣的,引用功能多包含的特徵通常也多,引用的功能少包含的特徵也少。而應用程序包含組件特徵的多少直接影響到SCA工具的檢測的準確性,組件特徵越少SCA工具檢測越困難,所以即便兩個不一樣應用都引用了相同組件,可能一個應用能夠檢測到,另一個應用則沒法檢測出該組件。這種場景對SCA工具檢測二進制文件尤爲明顯。
- 因爲存在上述SCA分析準確性,在極限狀況下若是沒法檢測出組件,那麼也就沒法知道應用程序中是否存在該組件的漏洞了。
五、總結:
- 不論是源代碼文件的SCA檢測工具仍是二進制文件的SCA檢測工具,他們是一種互補的關係,各有各的優缺點,好比二進制文件的SCA檢測能發現構建過程當中工具鏈引入的安全問題,而源代碼的SCA則不能,SolarWinds事件就很好的說明了這一點。
- 目前SCA工具檢測開源軟件的已知漏洞是基於組件名稱+版本號來關聯出已知漏洞的,對部分編譯場景(只有部分組件代碼被編譯到二進制文件中)和patch打補丁場景(漏洞已修復),誤報率高。
- SCA工具掃描效率和準確性是一對矛盾體,這是工具廠商須要權衡考慮的地方,而既能提高準確率又不會下降掃描效率的技術永遠是SCA工具廠商研究的課題和追求的目標。
- 注1:Top 10開源軟件編程語言:JavaScript(51%)、C++(10%)、Java(7%)、Python(7%)、Ruby(%5)、Go(4%)、C(4%)、PHP(4%)、TypeScript(4%)、C#(3%)、Perl(2%)、Shell(1%)
- 注2:軟件包是指產品用來安裝、運行的發佈包,裏面包含了產品編譯好的能夠運行的二進制文件,好比.so/.jar/.exe/.dll/.pyc
- 注3: a.License風險管理;b.漏洞識別;c.主動式漏洞管理;d.策略管理;e.SDLC集成;f.容器和無服務器掃描; g.審計報告;h.風險報告;i.修復速度報告;j.廠商自行分析;