漫談軟體成分分析(SCA)安全測試技術
1 、什麼是SCA
SCA(Software Composition Analysis)軟體成分分析,通俗的理解就是透過分析軟體包含的一些資訊和特徵來實現對該軟體的識別、管理、追蹤的技術。我們知道在當今軟體開發中,引入開源軟體( 注 1 )到你的專案中,避免重複造輪子是大家都再熟悉不過的了,比如開源庫中開源軟體按每年21%速度在增長( 來源 Forrester報告 ),開源安全威脅成為企業組織無法迴避的話題,而應用SCA技術對應用程式進行安全檢測,實現安全管理是最行之有效的方法之一。
2、基本原理
1. SCA理論上來說是一種通用的分析方法,可以對任何開發語言物件進行分析,Java、C/C++、Golang、Python、JavaScript等等,它對關注的物件是從檔案層面的檔案內容,以及檔案與檔案之間的關聯關係以及彼此組合成目標的過程細節。從SCA 分析的目標程式形式上分,既可以是原始碼也可以是編譯出來的各種型別的二進位制檔案,分析的資料物件對程式架構,編譯方式都是不敏感的,比如:類名稱、方法/函式名稱、常量字串等等,不管目標程式執行在x86平臺還是ARM平臺,不管是windows程式還是Linux程式,都是一樣的,簡而言之SCA 是一種跨開發語言的應用程式分析技術。
2. SCA分析過程:首先對目標原始碼或二進位制檔案進行解壓,並從檔案中提取特徵,再對特徵進行識別和分析,獲得各個部分的關係,從而獲得應用程式的畫像—–元件名稱+版本號,進而關聯出存在的已知漏洞清單。
3. 由於 SCA分析過程中不需要把目標程式執行起來,因此具有分析過程對外部依賴少,分析全面,快捷、效率高的優點;
3、業界TOP SCA工具分析
根據
Forrester最新SCA報告,Forrester透過10個維度(注3)對不同工具進行打分,最後根據綜合得分評選出如下業界TOP 10 SCA工具魔力象限圖):
注:圖片和資料引用來自
Forrester報告
3.1工具概覽分析
1. TOP 10 SCA工具中有5款支援軟體包(注2)開源軟體SCA檢查能力(synopsys/Sonatype/Veracode/Jfrog/GitLab),其他工具只支援原始碼SCA檢查能力。
2. 5款支援軟體包SCA檢查工具中,對C/C++、Java、.Net語言支援的比較好,但對Golang、python、JavaScript語言支援能力偏弱,比如:synopsys支援的元件物件中前面3種語言佔大頭90%+,相應的檢測率也高,而Golang語言的元件檢出率則低很多。
3. SCA已從主要用作對開源軟體的檢測嚮應用程式的典型編碼問題檢測趨勢擴充套件,比如Veracode工具,它能提供了對諸如緩衝器溢位、命令列注入、死鎖、重複釋放、整形數溢位、UAF、格式化字串漏洞,SQL隱碼攻擊等典型編碼問題的檢測能力。
4、影響SCA分析準確性的因素分析
1. 從 SCA原理可以知道影響分析準確性的因素分兩個方面:其一是SCA工具支援元件的數量和檢測演算法,其二是應用程式引用開源軟體的方式。
2. 因為 SCA工具是根據樣本元件特徵來匹配被測程式中的特徵來判斷應用程式是否引用該元件的,因此支援元件的數量越多,那麼檢測率也就越高,支援的元件數量越少,越會導致檢測遺漏;另外檢測演算法和特徵設計是否合理也直接影響到分析的準確性和分析效率,不同SCA工具廠商有不同的解決方案,就好比在手機上識別指紋/人臉一樣,不同廠商識別的靈敏度和準確度都不一樣。
3. 應用程式在引用開源軟體時,不同的應用程式即使引用同一個元件也存在引用不同的功能,引用功能的多少也各不相同,這樣帶來的結果就是在應用程式中包含該元件的特徵數量也是大小不同的,引用功能多包含的特徵一般也多,引用的功能少包含的特徵也少。而應用程式包含元件特徵的多少直接影響到 SCA工具的檢測的準確性,元件特徵越少SCA工具檢測越困難,因此即使兩個不同應用都引用了相同元件,可能一個應用可以檢測到,另外一個應用則無法檢測出該元件。這種場景對SCA工具檢測二進位制檔案尤其明顯。
4. 由於存在上述 SCA分析準確性,在極限情況下如果無法檢測出元件,那麼也就無法知道應用程式中是否存在該元件的漏洞了。
5、總結:
1. 不管是原始碼檔案的 SCA檢測工具還是二進位制檔案的SCA檢測工具,他們是一種互補的關係,各有各的優缺點,比如二進位制檔案的SCA檢測能發現構建過程中工具鏈引入的安全問題,而原始碼的SCA則不能,SolarWinds事件就很好的說明了這一點。
2. 目前 SCA工具檢測開源軟體的已知漏洞是基於元件名稱+版本號來關聯出已知漏洞的,對部分編譯場景(只有部分元件程式碼被編譯到二進位制檔案中)和patch打補丁場景(漏洞已修復),誤報率高。
3. 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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70022614/viewspace-2918101/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 漫談SCA(軟體成分分析)測試技術:原理、工具與準確性
- 軟體成分分析(SCA)完全指南
- 軟體成分安全分析(SCA)能力的建設與演進
- 軟體測試技術-黑盒測試
- 軟體測試技術及工具
- 漫談測試人生:軟體測試的墨菲定律、二八定律和木桶定律…
- 漫談 SLAM 技術(上)SLAM
- 軟體測試之資料庫測試技術系列七資料庫
- 漫談前端自動化測試演進之路及測試工具分析前端
- 【原創】Java記憶體攻擊技術漫談Java記憶體
- 學習軟體測試需要掌握哪些技術?
- 軟體測試方法和技術有哪些呢?
- 軟體測試需要學習什麼技術?
- 軟體測試-需求分析
- [技術思考] 軟體可測性分析和實踐
- 軟體安全測試有哪些測試要點?軟體安全測試報告價格是多少?測試報告
- 軟體安全性測試要點有哪些?常用軟體安全測試工具分享
- 軟體測試需求分析方法
- 軟體需求分析測試2
- 軟體安全測試有哪些測試手段?軟體測試報告收費貴嗎?測試報告
- 軟體測試技術學習技巧總結,助你事半功倍
- 軟體測試培訓需要學習什麼技術
- 安全滲透測試中日誌分析技術與授權機制
- 軟體安全測試有哪些方法?在哪裡測試?
- 軟體為什麼要進行安全測試?可做安全測試的軟體檢測公司安利
- 軟體測試——軟體安全質量的保證
- 架構之:軟體架構漫談架構
- 軟體測試:瓶頸分析方法
- 學會軟體測試技術以後的發展如何?
- 軟體安全測試知識分享,安全測試報告如何收費測試報告
- 軟體安全測試方法有哪些?安全測試報告如何收費?測試報告
- 掌握軟體安全測試方法秘笈,安全測試報告信手捏來測試報告
- 軟體安全測試要交給第三方軟體測試嗎?安全測試報告報價獲取測試報告
- 金融軟體測試前景分析,與其他軟體測試的5大區別!
- 軟體安全測試需要考慮哪些問題?軟體安全測試報告該怎麼申請?測試報告
- 漫談混淆技術----從Citadel混淆殼說起
- 軟體測試學習——移動端功能測試分析
- 探索軟體測試的核心知識——解密第三方軟體測試中心的價值與技術解密