作者:林詩芳 / 臺灣大學計算機及資訊網路中心程式設計組行政專員
本文介紹如何藉由開源漏洞掃描工具(Open Source Vulnerability Scanning Tools) 來檢核分析軟體元件的軟體物料清單(Software Bill of Materials, SBOMs)是否具具開源軟體漏洞資料庫(Open Source Vulnerability, OSV)的安全漏洞。
隨著系統軟體發展越加複雜使得系統或其應用的資料的安全性漏洞描述和分析面臨更加嚴格的挑戰。為了強化識別漏洞資訊,非營利組織MITRE建置通用漏洞與披露(Common Vulnearbilities and Exposures, CVE) [1],其收集建置各種資安弱點及漏洞的資料庫(CVE DB),並給予每個已確認漏洞一個CVE識別編號,例如:CVE-YYYY-NNNN (CVE-西元紀年-流水號)。由MITRE建立的CVE並非唯一弱點資料來源,其他開源組織或商業公司亦建立不同漏洞資料庫(Vulnerability Database ,VDB),其各自針對所屬組織或性質關注並收集維護不同的安全漏洞資訊。例如:開源漏洞資料庫(Open Source Vulnerability Datab ase, OSVDB),GitHub Security Advisory Database(GHSA),Symantec DeepSight,Microsoft Security Response Center (MSRC)等。而美國國家漏洞資料庫(National Vulnerability Database, NVD)[2]亦是其中之一,其從CVE DB收集已確認的CVE資訊並增加以下內容:
-
通用漏洞的嚴重性評分系統(Common Vulnerability Scoring System, CVSS) [3]
其訂定一個標準化計算方式來評定漏洞的嚴重性,影響程度和風險評分,並制定了CVSS Format (v1.0,v2.0,v3.0,v3.1,v4.0)來顯示評定結果,舉例如下:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:N/VI:N/VA:N/SC:H/SI:L/SA:L
根據評定結果量化算出的CVSS Scores來訂出定性嚴重程度評定量表(Qualitative Severity Rating Scale),如下表1:
嚴重等級(Rating)
|
CVSS Score
|
無(None)
|
0.0
|
低(Low)
|
0.1-3.9
|
中(Medium)
|
4.0-6.9
|
高(High)
|
7.0-8.9
|
嚴重(Critical)
|
9.0-10.0
|
表1:嚴重程度評定量表
-
產品通用平台列舉(Common Platform Enumeration, CPE) [4]
其為一種結構化方式來描述與識別資訊資產中存在的應用程式、作業系統和硬體設備類別的標準化方法。並制定了CPE Format(v2.3),其格式如下:
cpe:<cpe_version>:<part>:<vendor>:<product>:<version>:<update>:<edition>:<language>:<sw_edition>:<target_sw>:<target_hw>:<other>
其中part分為:a(應用程式) / o (作業系統) / h (硬體設備)、vendor(廠商名稱)、version(版本)、update(更新)、edition (版次)、language (語系)。舉例如下:
cpe:2.3:a:vmware:vmware_workstation:6.0.1:*:*:*:*:*:*:*
cpe:2.3:o:microsoft:windows_server_2018:r2:sp1:x64:*:*:*:*:*
cpe:2.3:h:intel:core_i7:4760hq:*:*:*:*:*:*:*
-
通用弱點列舉(Common Weakness Enumeration, CWE) [5]
其為一種針對軟體或硬體弱點分類,其彙整描述在軟體、韌體、硬體或服務元件中特定情況下會造成弱點或易受攻擊性,用不同的Viewpoints去審核這些弱點並用CWE-IDs識別做分門別類。例如:CWE-79即Cross-site scripting (XSS) vulnerabilities。
為了檢核軟體元件是否有安全漏洞問題,有許多協助檢核軟體元件是否具漏洞資料庫(VDB)中漏洞的工具,如Google所開發的開源漏洞(Open Source Vulnerabilities, OSV) [6],其提供查詢開源漏洞資料庫(OSVDB)中的漏洞,並可藉由以下方式做檢核比對漏洞:
- dev API
透過OSV.dev API來查詢開源漏洞資料庫(OSVDB)中的漏洞。目前OSV.dev API呼叫速率並沒有限制。OSV.dev API說明如下:
- GET /v1/vulns/{id}
根據不同漏洞資料庫(VDB)自訂的漏洞編號(Vulnerability ID),其格式如 <DB>-<ENTRYID>,來查詢漏洞資訊。如下圖1。
圖1:依Vulnerability ID(CVE-2019-8331,GHSA-9v3m-8fp8-mj99,OSV-2020-111)查詢漏洞資訊。
- POST /v1/query
可按以下查詢參數: commit (提交雜湊編碼),version (套件版本),name (套件名稱),ecosystem (套件隸屬生態系),purl (套件定位位置)做查詢。如圖2。
圖2:OSV-dev API ii查詢參數
在P OSV-dev API ii,其查詢參數有以下限制: commit和version擇一輸入,如下圖3中case 1, 2, 5。name和ecosystem不同時和purl當作查詢參數,如下圖3中case3, 4。
圖3:在Postman中查詢OSV-dev API ii。
OSV.dev API i與iit查詢回傳的內容為開源漏洞格式(Open Source Vulnerability Format, OSV Format) [7],其Json object內容說明如下:
- 漏洞基本資訊如: schema_version (OSV基模版本),id(漏洞ID),summary(漏洞簡介),details(漏洞詳細描述資訊),modified(修改時間),published(發布時間),withdrawn(撤回時間),aliases(其他資料庫相同漏洞的ID),related(相近漏洞的ID),database_specific(根據記錄的漏洞資料庫自定義有關漏洞的附加資訊)。references (引用來源資訊)。如下圖4。
圖4:OSV Format中漏洞基本資訊
- severity (漏洞的嚴重性評分),其為Json array物件包括type(漏洞評分標準),score (漏洞的嚴重性評分結果)。如下圖5
圖5:OSV Format中漏洞評分資訊
- affected (漏洞影響的套件版本資訊),其為Json array物件其包含以下:
- package(漏洞影響的套件),其包括name(套件名稱),ecosystem (套件隸屬生態系),purl(套件定位位置) 。
- ranges(漏洞影響套件的版本),其包括type(套件版本編號編訂類型分為ECOSYSTEM,SEMVER,GIT),events(套件版本範圍分:introduced/ limit / fixed/ last_affected。其值為一版本名稱)。當type: ECOSYSTEM時,events的值為任意且並未有特定格式來表示版本名稱。當type: SEMVER時,events值採用SemVer 2.0.0 (一種語意話版本格式)來表示版本名稱(如圖6 case2)。當type: GIT時,events值採用full-length Git commit hashes來表示版本名稱,且另外有repo(套件儲存庫位置)(如圖6 case3)。
- ecosystem_specific(根據紀錄的漏洞隸屬生態系自定義有關漏洞的附加資訊)。database_specific (根據紀錄的漏洞的資料庫自定義有關漏洞的附加資訊) (如圖6 case3)。
圖6:OSV Format中漏洞影響的套件版本資訊。case1為未修正漏洞(Unfixed vulnerability),case2為漏洞影響套件的起始與上限版本,case3為已修正漏洞(Fixed vulnerability)。
其查詢參數如同API ii,但此API iii可多筆查詢,另外此API iii其有Response數量上限限制,當超過上限需藉由參數next_page_token 批次讀取。如下圖7。
圖7:OSV-dev API iii查詢參數
批次查詢例子如下圖8,其Response內容為: id(漏洞ID),modified(修改時間),其格式如下圖9。
圖8:OSV-dev API iii Request
圖9:OSV-dev API iii Response
- OSV-Scanner
OSV-Scanner為開源漏洞掃描工具,透過命令執行介面(CLI)去掃描分析軟體是否具有開源漏洞資料庫(OSVDB)中的安全漏洞。 其提供掃描特定Git目錄,特定資料夾下的Lockfile或SBOM等方式。本文針對OSV-Scanner掃描軟體物料清單(SBOM)做介紹。 OSV-Scanner目前不支援輸出軟體材料清單(SBOM),需藉助其他軟體物料清單產生器(SBOMs Generator Tool)產生待檢核軟體元件軟體物料清單(SBOM),其可以參考前文簡介軟體物料清單(Software Bill of Materials,SBOMs)[8]。 當取得軟體組成資訊時,再透過OSV-Scanner比對開源漏洞資料庫(OSVDB)檢核軟體元件是否有安全漏洞。OSV-Scanner安裝方式如下圖10。
圖10:在Windows PowerShell環境中安裝套件管理工具Scoop後,再安裝osv-scanner。
OSV-Scanner掃描軟體材料清單(SBOM)時,其檔名須符合SPDX檔名或CycloneDX檔名。OSV-Scanner透過呼叫OSV.dev API進行線上分析,其結果如上開源漏洞格式(OSV Format)內容說明,並可把分析結果轉下列格式:table(default)、json、markdown、sarif等。OSV-Scanner線上分析說明如下圖11。
圖11:OSV-Scanner分析結果轉指定格式。
OSV-Scanner亦提供離線方式(Offline Mode)作分析,預先下載開源漏洞資料庫(OSVDB)至本地資料夾(local folder),並設定系統環境變數(Environment Variables),變數名稱SV_SCANNER_LOCAL_DB_CACHE_DIRECTORY,其值為下載到本地資料夾的位置,亦可同樣指定分析結果轉成特定格式。OSV-Scanner離線分析說明如下圖12。
圖12 OSV-Scanner離線分析結果轉指定格式。
以上OSV-Scanner分析結果轉乘Json格式其內容如下圖13。其中vulnerabilitie即開源漏洞格式(OSV Format)的漏洞資訊。
圖13 OSV-Scanner分析結果(json格式)
除了以上開源工具可以協助檢核分析軟體元件的安全漏洞外,商業軟體亦提供其他更多元與整合性更強的選擇。但無論哪種工具皆需在既有軟體開發流程中在持續整合(Continuous Integration,CI),持續部屬(Continuous Deployment,CD)流程中納入,以協助持續識別軟體元件的漏洞,使其能持續監控與管理防止漏洞。
References:
[1] Common Vulnearbilities and Exposures https://cve.mitre.org/
[2] National Vulnerability Database https://nvd.nist.gov/
[3] Common Vulnerability Scoring System https://www.first.org/cvss/
[4] Common Platform Enumeration https://nvd.nist.gov/products/cpe
[5] Common Weakness Enumeration https://cwe.mitre.org/index.html
[6] Open Source Vulnerabilities https://osv.dev/
[7] Open Source Vulnerability Format https://ossf.github.io/osv-schema/
[8] 簡介軟體物料清https://www.cc.ntu.edu.tw/chinese/epaper/home/20240320_006805.html