跳轉到

如何解讀報告

這一頁說明掃描結束後如何閱讀與解讀 BomLens 的報告。其產生方式請看產生報告。

授權聲明的處理內容

開放原始碼授權聲明 (NOTICE) 會依授權條款把元件分組。除了分組之外,它還一併處理下列事項。

  • 把授權條款名稱正規化為 SPDX 識別碼。例如「Apache License, version 2.0」會正規化為 Apache-2.0。同一份授權條款因為寫法不同而重複的項目,會合併成一項。
  • 掃描工具無法判定授權條款名稱,僅留下 CUSTOM 並附上授權條款檔全文時(常見於 LICENSE 檔改寫著作權標示行的 Go 模組),會將全文與主要授權條款(MIT、BSD-2-Clause、BSD-3-Clause、Apache-2.0、ISC)的條文用語進行比對,以還原 SPDX 識別碼。若比對後仍無法明確判定授權條款,則會保留為 CUSTOM,而不會逕行推測。
  • SBOM 裡有著作權 (copyright) 值時,會逐一元件顯示。
  • 21 種主要開放原始碼授權條款(Apache-2.0、MIT、BSD-3-Clause、GPL/LGPL 家族等)的 SPDX 標準全文,也會附在授權聲明的最後。如此即可履行須隨附授權條款全文的義務,無須另外蒐集。這些內建的授權條款全文位於 docker/lib/licenses/*.txt。

優先順序訊號(CVSS、EPSS、CISA KEV)

只看嚴重程度很難決定該先修哪一個。為此,安全報告在嚴重程度之外還提供三個訊號。Markdown 與 HTML 表格的欄位組成是 Severity | KEV | CVSS | EPSS | CVE | Package | Installed | Fixed。

  • CVSS——弱點的技術性嚴重程度分數 (0–10)。優先採用 V3 分數,沒有時才後備採用 V2。
  • EPSS——未來 30 天內在真實環境遭到利用的機率 (0–1)。查詢自 FIRST.org;分數越高,被用於攻擊的機會越大。
  • CISA KEV——是否列在美國 CISA 維護的「已知遭利用弱點」清單中。列在其中時,HTML 報告會以 ⚠️ 標記標示。

表格會把列在 KEV 中的項目排在最前面,接著依嚴重程度排序,最後再依 EPSS 遞減排序。由上往下處理,自然就會先處理風險最高的項目。這套排序只適用於靜態的報告檔案;網頁介面的弱點表格開啟時是先依嚴重程度、再依 CVSS 排序,而且可以依任一欄位重新排序,包括 EPSS。

EPSS 與 KEV 需要向外部 API 查詢。在封閉網路中,可以設定 SECURITY_ENRICH=false,略過這兩欄,報告其餘部分照樣產生。

對外授權條款衝突

上面的授權分類只就各元件本身標示它的 Copyleft 強度。那個強度是否真的構成問題,取決於你對外散布時採用的授權條款,而原始碼掃描無法推斷這個值——所以要用 --license <spdx-id>(或網頁介面的「對外授權條款」欄位)宣告它,之後每個相依項目都會以它為基準判定。

  • 無法滿足——以所宣告的授權條款散布時,無法同時滿足該相依項目的條件。
  • 視散布方式而定——允許,但義務取決於你如何連結或散布。需要有人親自確認。
  • 無法判定——授權條款未被辨識,或是你沒有宣告任何對外授權條款。

帶有例外條款的授權條款(最常見的是 classpath 例外)絕不會落到第一類:那條條款存在的目的,正是為了允許這樣的組合。

什麼都不宣告,這項檢查就不會執行——報告會直接省略該區段,而不是印出一份沒人檢查過的無問題結論。它是協助準備文件的資料,不是法律判定:旗標請看CLI 參考,判定顯示的位置請看網頁介面。

已知惡意套件

弱點指的是一個正常的套件有缺陷。惡意套件性質不同:它是為了攻擊安裝它的人而發佈的——針對你想輸入的名稱所做的錯字仿冒 (typosquat)、從被挾持的維護者帳號推上去的發行版本,或是在安裝過程中執行的惡意程式碼。BomLens 把這類項目與弱點表格分開標示,因為應對方式不一樣。你必須移除該套件,並輪替建置過程可能接觸到的所有認證資訊;沒有可以升級過去的版本。

  • 比對一律以 PURL 進行,絕不用名稱。這類套件刻意取得與真品相似的名稱,用名稱比對正好是最不該用的方式。
  • 資料是 OSV 所發佈的惡意套件公告(帶有 MAL- 識別碼的那些)的內建快照,因此這項檢查和已終止支援標記一樣可以離線執行。設定 ENRICH_MALICIOUS=false 可以略過它。
  • 大多數公告沒有指明版本,意思是該套件所有已發佈的版本都是惡意的。公告確實指明版本時,只會標記那些版本。
  • 每個被標記的元件都會帶著公告識別碼與快照日期(bomlens:malicious:id、bomlens:malicious:source)。日期很重要:這個領域變化很快,所以什麼都沒查到只代表「不在這份快照裡」,不代表「今天是安全的」。

元件已終止支援 (EOL)

BomLens 也會標示各元件的發行週期是否已達上游的支援終止期限(End-of-Life,EOL)。這是與 CVE 各自獨立的供應鏈風險:超過支援期限的執行環境或框架不會再獲得上游提供的安全性修正,因此之後即使通報 Critical(嚴重)或 High(高)等級的弱點,也沒有修補程式可供套用。

  • 日期來自內建於掃描器映像檔的 endoflife.date 快照,因此這項檢查不需任何網路呼叫就能離線執行,封閉網路也能用。來源與快照日期會記錄在每個被標記的元件上 (bomlens:eol:source)。
  • 涵蓋範圍以 endoflife.date 為準,它追蹤的是執行環境、主要框架、作業系統與資料庫(spring-boot、express、django、nodejs、python、php、nginx、openssl、ubuntu、debian 等)。多數規模較小的函式庫不在追蹤範圍內;沒有對應資料的元件會保留為未知,不會用猜測值填補。
  • 在網頁介面中,「總覽」會出現一個「已終止支援」計數方塊,其中同時有弱點的元件會以風險色標示——已終止支援的元件不會再有上游修補來處理它的 CVE,所以那正是該動手的一批。「元件」表格則會多出「已終止支援」標記(知道終止日期時一併顯示)與「已終止支援」篩選條件。
  • 它預設開啟,而且因為是離線執行所以不會拖慢速度。想關掉就設定 ENRICH_EOL=false。AI/ML 模型掃描會略過這個步驟,因為它們沒有執行環境或框架元件。

版本新舊

待在受支援的發行週期裡,並不等於用的是該週期的最新版本,所以 BomLens 也會標示元件是否已經落後。這項判定分成兩層。

  • 離線層與已終止支援檢查一起預設開啟。同一份 endoflife.date 快照記錄了各發行週期的最新修補版本,所以 BomLens 能離線判斷已安裝的版本是否落後於它自己週期內的最新修補版本。這是一次不需網路呼叫就能找出的、安全的週期內升級,和已終止支援檢查完全一樣。落後的元件會帶上 bomlens:currency:outdated=true,目標修補版本則放在 bomlens:currency:latestPatch。它是在已終止支援的步驟裡執行的,因此 ENRICH_EOL=false 會一併把它關掉,AI/ML 模型掃描也會略過。
  • deps.dev 層是 opt-in。設定 STALENESS_ENRICH=true 之後,會把每個元件拿到 deps.dev(Google 的公開套件後設資料)查詢,記錄絕對最新的版本 (bomlens:staleness:latest)、已安裝的版本落後幾個發行版本 (bomlens:staleness:releasesBehind),以及最新版本是什麼時候發行的 (bomlens:staleness:lastReleased)。它每個元件都會發出一次網路呼叫,因此是拿掃描的離線決定性去換資料的新鮮度。它不適合封閉網路的執行環境,所以預設關閉。它是盡力而為且有時間上限的,因此查詢失敗絕不會中斷掃描。支援的生態系有 npm、PyPI、Maven、Go、Cargo、NuGet 與 RubyGems。專案是否仍在積極維護不在這個版本的範圍內,會留到後續版本。
  • 在網頁介面中,「總覽」會多出一個方塊,統計落後於最新版本的元件數;「元件」表格則會把不是最新版本的元件標示為「非最新」,並多出一個「非最新」篩選條件。開啟 deps.dev 層之後,這類元件還會顯示落後幾個版本以及最後一次發行的日期。

結果解讀與後續處理

Severity 意義 建議做法
Critical(嚴重) 可立即被利用,影響嚴重 最優先處理——升級到 Fixed 欄位所列的版本
High(高) 風險高 在短期內排定修補計畫
Medium(中)/ Low(低) 影響有限 於例行維護時處理
Unknown(未知) 尚未評估嚴重程度 直接查看該 CVE 後自行分類
  • 報告的 Fixed(修正版本)欄位有版本時,把相依項目提升到該版本或更高就能解決。這是最快的第一線應對。
  • CI 關卡範例。只要有一件 Critical(嚴重)就讓建置失敗:
    crit=$(jq '[.Results[]?.Vulnerabilities[]? | select(.Severity=="CRITICAL")] | length' *_security.json)
    [ "$crit" -gt 0 ] && { echo "${crit} 個 Critical 弱點"; exit 1; }
    
  • 分級處理 (triage)——判斷誤判(實際上沒有影響)與核准例外——以及歷程管理,都超出 BomLens 的範圍。請把 SBOM 上傳到弱點管理系統(Dependency-Track、TRUSCA 等)來處理。

開放原始碼風險分析報告

開放原始碼風險分析報告會依嚴重程度彙整弱點,並附上建議的應對期限(Critical(嚴重)7 天、High(高)30 天)。它內含授權條款摘要;分析供應者 SBOM 時,還會加上格式符合性結果。

授權條款摘要也會依 Copyleft 強度把元件分類,規則與網頁介面所用的相同。SBOM 中每個元件都帶有 bomlens:licenseClass 屬性,值為 network-copyleft、strong-copyleft、weak-copyleft、permissive 或 uncategorized 之一;報告會顯示各分類的數量,以及造成 Copyleft 曝險的那些元件。工具無法辨識的授權條款絕不會逕自視為 permissive,而是保留為 uncategorized,交由人工檢視。

相關文件