在此前的多篇文章中,我們已經(jīng)詳細(xì)地介紹了軟件物料清單(SBOM)對(duì)于保障軟件供應(yīng)鏈安全的重要性以及一些注意事項(xiàng)。在本文中,我們將會(huì)更深入地介紹SBOM,包括最低要求元素、格式、使用場(chǎng)景以及如何對(duì)其進(jìn)行管理等。
SBOM所包含的元素
2021年年中,NTIA發(fā)布了軟件物料清單(SBOM)的最少必需元素。這些元素包含以下三類(lèi):
- 數(shù)據(jù)字段:每個(gè)軟件組件的基本信息
- 自動(dòng)化支持:能夠自動(dòng)生成機(jī)器可讀格式的SBOM
- 實(shí)踐和流程:SBOM 應(yīng)該如何及何時(shí)生成和分發(fā)
所需元素的目的是為 SBOM 使用者提供他們所需的信息,以管理漏洞、清點(diǎn)軟件組件,并監(jiān)管許可證合規(guī)性。
數(shù)據(jù)字段
根據(jù)NTIA的說(shuō)法,這一字段是為了“充分識(shí)別這些組件以在整個(gè)軟件供應(yīng)鏈中跟蹤它們,并將它們映射到其他相關(guān)的數(shù)據(jù)來(lái)源,如漏洞數(shù)據(jù)庫(kù)或許可證數(shù)據(jù)庫(kù)”。
7個(gè)必要的數(shù)據(jù)字段如下:
- 供應(yīng)商名稱(chēng): 開(kāi)發(fā)該軟件組件的個(gè)人或組織
- 組件名稱(chēng): 給一組軟件命名,通常由供應(yīng)商決定
- 組件版本: 一個(gè)標(biāo)識(shí)符,指定軟件與以前版本的變化。同樣,這是由供應(yīng)商決定的
- 其他獨(dú)特標(biāo)識(shí)符: 像Software Identification (SWID)標(biāo)簽、Package Uniform Resource Locators (PURL)、Common Platform Enumeration(CPE)或類(lèi)似的標(biāo)識(shí)符,可以幫助SBOM 消費(fèi)者在關(guān)鍵數(shù)據(jù)庫(kù)中找到組件
- 依賴(lài)項(xiàng)關(guān)系: 表示軟件組件是如何結(jié)合在一起的,如,某個(gè)上游組件包含在某個(gè)軟件中
- SBOM數(shù)據(jù)的作者: 生成SBOM元數(shù)據(jù)的實(shí)體,可能是軟件供應(yīng)商或其他個(gè)人、團(tuán)體
- 時(shí)間戳: SBOM 生成的日期和時(shí)間
自動(dòng)化支持
下一組最低要求元素是指 SBOM 數(shù)據(jù)在整個(gè)軟件生態(tài)系統(tǒng)內(nèi)部以及跨組織通信的方式。這一要求的目標(biāo)是為了確保 SBOM 數(shù)據(jù)真正可用——不僅僅是機(jī)器可讀,還能夠讓人直接閱讀,而且它的傳輸格式是可互操作的。
要達(dá)到這一目標(biāo),NTIA 認(rèn)證了3個(gè)交付格式來(lái)生成和消費(fèi) SBOM。至關(guān)重要的是,向聯(lián)邦政府銷(xiāo)售軟件的組織必須以這三種格式之一傳送 SBOM,以符合網(wǎng)絡(luò)安全行政命令的要求。
這3個(gè)格式是:
- Software Package Data Exchange (SPDX)
- Software Identification (SWID) Tags
- CycloneDX
在后面一節(jié),我們將會(huì)對(duì)這3個(gè)格式進(jìn)行詳細(xì)介紹。
實(shí)踐和流程
最后一組SBOM最低要求元素涉及生成和申請(qǐng)SBOM的具體操作。具體而言,實(shí)踐和流程部分包括以下6個(gè)方面的要求:
- 頻率(Frequency): NTIA規(guī)定,“如果軟件組件隨著新的構(gòu)建或發(fā)布而更新”,企業(yè)應(yīng)該生成新的SBOM。此外,供應(yīng)商在以下情況下也需要生成新的SBOM:
1)需要糾正原始版本中的錯(cuò)誤
2)了解有關(guān)軟件組件的新細(xì)節(jié) - 深度(Depth): 合規(guī)的SBOM需要包含:
1)所有頂層組件
2)所有間接依賴(lài)關(guān)系。如果SBOM作者不能包含所有間接依賴(lài)關(guān)系,則需要囊括足夠的信息,使消費(fèi)者可以遞歸地找到他們。 - 已知的未知因素(Known Unknowns): 在SBOM作者沒(méi)有提供完整的依賴(lài)關(guān)系圖的情況下,他們需要說(shuō)明這是因?yàn)椋?br />1)該組件沒(méi)有進(jìn)一步的依賴(lài)關(guān)系,或者
2)不知道是否存在其他的依賴(lài)關(guān)系。 - 分發(fā)和交付: 這一部分分為幾個(gè)環(huán)節(jié),都是關(guān)于確保SBOM以可消化的格式快速交付。首先,SBOM被要求以“及時(shí)”的方式提供(盡管沒(méi)有設(shè)定天數(shù)或周數(shù))。其次,他們必須有“適當(dāng)?shù)摹苯巧驮L問(wèn)權(quán)限。最后,SBOM可以與產(chǎn)品的每個(gè)實(shí)例一起分發(fā)或者以其他可訪問(wèn)的方式提供,如公開(kāi)的網(wǎng)站。
- 訪問(wèn)控制: 如果供應(yīng)商想將SBOM數(shù)據(jù)的訪問(wèn)限制在某些客戶或用戶,他們需要提供這種訪問(wèn)控制的條款。此外,供應(yīng)商需要提供 “具體的允許和便利”,以便SBOM消費(fèi)者能夠?qū)?shù)據(jù)納入其安全工具。
- 容錯(cuò)程度: 網(wǎng)絡(luò)安全行政命令和指導(dǎo)SBOM創(chuàng)建的法規(guī)目前尚不成熟,因此,各組織被指示要對(duì)(無(wú)意的)錯(cuò)誤或遺漏給予理解。
SBOM交付格式及規(guī)范
企業(yè)可以通過(guò)各種不同的格式創(chuàng)建和發(fā)布軟件物料清單(SBOM)。對(duì)于一個(gè)想要在其網(wǎng)站發(fā)布 SBOM 的企業(yè)來(lái)說(shuō),HTML 是一個(gè)合理的選擇。如果 SBOM 中包含了文檔或者源代碼,那么純文本也許是更佳選項(xiàng)。此外,還有 Markdown、PDF、CSV等格式可供使用。
除了這些常見(jiàn)的格式外,還有幾種專(zhuān)門(mén)為交付SBOM而設(shè)計(jì)的格式,如 SPDX(軟件包數(shù)據(jù)交換),SWID Tags(軟件識(shí)別)以及Cyclone DX。
SPDX
SPDX是由 Linux 基金會(huì)運(yùn)營(yíng)的項(xiàng)目,旨在標(biāo)準(zhǔn)化企業(yè)共享和使用SBOM中信息的方式。SPDX 捕捉與provenance、許可證和安全相關(guān)的數(shù)據(jù),下圖展示了 SPDX 文檔中所包含的數(shù)據(jù):
該格式支持以下文件類(lèi)型:
- YAML
- JSON(你可以在 GitHub 上找到SPDX的JSON schema:https://github.com/spdx/spdx-spec/tree/development/v2.2.1/schemas)
- RDF/XML
- tag:value flat text file
- .xls 電子表格
Seal 軟件供應(yīng)鏈防火墻可以直接生成SPDX格式的SBOM文件,歡迎訪問(wèn)下方鏈接申請(qǐng)產(chǎn)品試用:seal.io/trail
SWID Tags
SWID 是一個(gè)標(biāo)準(zhǔn)化的 XML 格式,可以識(shí)別軟件產(chǎn)品的組成部分并將其與上下文結(jié)合。4種類(lèi)型的 SWID Tags 在軟件開(kāi)發(fā)生命周期中:
- Corpus Tags: 識(shí)別和描述在安裝前階段的軟件成分。根據(jù) NIST 給出的定義,corpus tags 是指“軟件安裝工具和流程的輸入”
- Primary Tags: 在軟件產(chǎn)品安裝后對(duì)其進(jìn)行識(shí)別和關(guān)聯(lián)
- Patch Tags: 顧名思義,patch tags 可以識(shí)別和描述補(bǔ)?。ǘ皇?span id="v7pm6mw" class="candidate-entity-word" data-gid="15027706">核心產(chǎn)品本身)。此外,patch tags 包含了補(bǔ)丁和其他產(chǎn)品或補(bǔ)丁之間的上下文關(guān)系信息。
- Supplemental Tags: SWID 格式僅允許 tag 創(chuàng)建者修改 corpus、primary和patch tags。但是 Supplemental Tags 可以讓軟件用戶及軟件管理工具在本地添加有益的上下文信息,如許可證密鑰以及相關(guān)方的聯(lián)系信息。
在決定將哪些標(biāo)簽和具體的數(shù)據(jù)元素納入其產(chǎn)品時(shí),各企業(yè)有一定程度的靈活性。在SWID規(guī)范中,除了幾個(gè)必須的字段外,其他的元素和屬性都是可選的。
最終,一個(gè)最低限度的有效和符合要求的標(biāo)簽只需要描述軟件產(chǎn)品(如名稱(chēng)和標(biāo)簽ID)和創(chuàng)建它的實(shí)體的少數(shù)元素。關(guān)于SWID標(biāo)簽數(shù)據(jù)元素的最全面和最新的信息,建議查看ISO/IEC 19770-2:2015標(biāo)準(zhǔn)全文:
https://www.iso.org/standard/65666.html
Cyclone DX
Cyclone DX 是一個(gè)輕量級(jí)軟件物料清單標(biāo)準(zhǔn),旨在用于應(yīng)用安全上下文和供應(yīng)鏈組件分析。換言之,它旨在實(shí)現(xiàn)與SPDX、SWID以及其他所有SBOM交付格式類(lèi)似的目標(biāo)——提供構(gòu)成一個(gè)應(yīng)用程序的軟件組件的關(guān)鍵信息。
Cyclone DX 支持以下4種類(lèi)型的數(shù)據(jù):
- 物料清單元數(shù)據(jù): 關(guān)于應(yīng)用/產(chǎn)品本身的信息——供應(yīng)商、制造商、SBOM所面熟的組件以及用于匯編SBOM的任意工具
- 組件: 完整的專(zhuān)利清單及開(kāi)源組件清單,包含許可信息
- 服務(wù)信息: 軟件可能調(diào)用的外部API、終端URI、身份認(rèn)證要求和信任名單
- 依賴(lài)項(xiàng): 包含直接依賴(lài)項(xiàng)和間接依賴(lài)項(xiàng)
誰(shuí)是SBOM的目標(biāo)受眾?
歷史上,SBOM主要由合規(guī)團(tuán)隊(duì)用來(lái)審計(jì)、監(jiān)控許可證以及遵守行業(yè)特定規(guī)范,但隨著軟件供應(yīng)鏈攻擊的上升,包括 SolarWinds 黑客事件和去年年末的 Log4Shell 漏洞,SBOM 的使用擴(kuò)展到了安全和開(kāi)發(fā)團(tuán)隊(duì)。
安全團(tuán)隊(duì)
對(duì)于安全團(tuán)隊(duì)來(lái)說(shuō),SBOM扮演著十分重要的角色,特別是需要進(jìn)行漏洞掃描的時(shí)候。因?yàn)閽呙鑃BOM庫(kù)比從頭開(kāi)始掃描整個(gè)基礎(chǔ)設(shè)施更簡(jiǎn)單也更快,在發(fā)生零日事件時(shí),每一分鐘都很重要。此外,安全團(tuán)隊(duì)也會(huì)利用 SBOM 所提供的信息(如風(fēng)險(xiǎn)所在位置)來(lái)確定問(wèn)題修復(fù)的優(yōu)先級(jí),并針對(duì)特定組件創(chuàng)建策略,如供應(yīng)商的選型、可引入的版本或者軟件包類(lèi)型等。
開(kāi)發(fā)團(tuán)隊(duì)
開(kāi)發(fā)團(tuán)隊(duì)可以使用 SBOM 來(lái)跟蹤他們所開(kāi)發(fā)、管理和運(yùn)維的各個(gè)軟件中的組件,包括開(kāi)源組件、商業(yè)組件和自研組件。并且 SBOM 還能協(xié)助開(kāi)發(fā)團(tuán)隊(duì)管理依賴(lài)項(xiàng)、識(shí)別安全問(wèn)題以減少其重復(fù)的工作,還能確保開(kāi)發(fā)人員使用的都是經(jīng)過(guò)審批的代碼和可信任的源。
SBOM 的應(yīng)用場(chǎng)景
顯然,有許多令人信服的理由推動(dòng)企業(yè)創(chuàng)建SBOM,并且企業(yè)可以為所有產(chǎn)品創(chuàng)建SBOM,每個(gè)新版本都可以更新一版SBOM。此外,在一些特定場(chǎng)景中SBOM會(huì)最大限度地發(fā)揮其作用。
- 融資、并購(gòu)和IPO: 軟件物料清單是收購(gòu)、IPO或融資過(guò)程中技術(shù)盡調(diào)的重要一環(huán)。相關(guān)利益方會(huì)要求獲取文檔以更好地了解產(chǎn)品中的軟件成分以及許可證合規(guī)性、安全性或代碼質(zhì)量風(fēng)險(xiǎn)。
- 客戶要求: 由于全球范圍內(nèi)的企業(yè)都將防止軟件供應(yīng)鏈風(fēng)險(xiǎn)的優(yōu)先級(jí)提高了,因此未來(lái)會(huì)有越來(lái)越多的企業(yè)要求采購(gòu)環(huán)節(jié)中需要提供SBOM。
- 向下兼容: 維護(hù)大量舊軟件的公司經(jīng)常需要進(jìn)行OSS包的更新和升級(jí)。當(dāng)然,如果對(duì)這些舊產(chǎn)品中的開(kāi)放源碼軟件有一個(gè)完整的清單,做起來(lái)就容易多了。
全面管理 SBOM 的最佳實(shí)踐
隨著SBOM被迅速接受,行業(yè)領(lǐng)導(dǎo)者已經(jīng)開(kāi)始開(kāi)發(fā)創(chuàng)建、管理和使用SBOM 的方法。這些實(shí)踐跨越了軟件生命周期的各個(gè)關(guān)鍵階段:
1、在統(tǒng)一的存儲(chǔ)庫(kù)中存儲(chǔ)和管理 SBOM
雖然單個(gè)開(kāi)發(fā)或應(yīng)用團(tuán)隊(duì)可以將SBOM與他們的代碼構(gòu)件一起存儲(chǔ)在存儲(chǔ)庫(kù)中,但安全團(tuán)隊(duì)必須在所有應(yīng)用和開(kāi)發(fā)團(tuán)隊(duì)中維護(hù)一個(gè)統(tǒng)一的SBOM存儲(chǔ)庫(kù)。當(dāng)新的漏洞或安全事件出現(xiàn)時(shí),安全團(tuán)隊(duì)和CISO需要快速查詢所有軟件的SBOM并即時(shí)評(píng)估影響,而不是分別從每個(gè)團(tuán)隊(duì)中獲得單獨(dú)的評(píng)估報(bào)告,或者不得不浪費(fèi)事件從頭開(kāi)始查找和重新掃描他們所有的應(yīng)用程序。此外,滿足監(jiān)管要求或合規(guī)標(biāo)準(zhǔn)也需要一個(gè)集中的存儲(chǔ)庫(kù),用于生成報(bào)告和其他的合規(guī)活動(dòng)。
2、要求所有進(jìn)入供應(yīng)鏈的軟件提供SBOM
企業(yè)如果需要對(duì)所使用的軟件保有可見(jiàn)性,那么收集 SBOM 信息以分析軟件成分或應(yīng)用是十分重要的。如果是第三方商業(yè)軟件,那么軟件供應(yīng)商應(yīng)該提供必要的 SBOM,并將其納入你的 SBOM 資源庫(kù)。
當(dāng)使用的是開(kāi)源組件來(lái)構(gòu)建自定義軟件時(shí),在將其引入開(kāi)發(fā)流程前企業(yè)應(yīng)該直接掃描開(kāi)源構(gòu)件(如容器鏡像)或者開(kāi)源代碼倉(cāng)庫(kù)。在某些情況下,開(kāi)源項(xiàng)目可能會(huì)提供一個(gè)簽名的 SBOM,這可以讓企業(yè)將他們生成的 SBOM 與社區(qū)提供的 SBOM 進(jìn)行比較來(lái)進(jìn)行驗(yàn)證。
3、為每個(gè)開(kāi)發(fā)環(huán)節(jié)和構(gòu)建生成SBOM
各行各業(yè)的企業(yè)正在定制軟件以迎合其獨(dú)特的市場(chǎng)需求。大部分軟件都由大量的開(kāi)源代碼組成(根據(jù)不同的應(yīng)用程序,開(kāi)源代碼的占比在50—90%之間)以及內(nèi)部開(kāi)發(fā)的代碼和第三方庫(kù)。由于在構(gòu)建階段開(kāi)源代碼常常會(huì)引入額外的依賴(lài)項(xiàng),因此在開(kāi)發(fā)流程中的每一步及每一次構(gòu)建軟件時(shí)都掃描您的軟件是至關(guān)重要的。這可以讓您檢測(cè)出意料之外的SBOM變更,這些變更可能由新依賴(lài)項(xiàng)或代碼修改導(dǎo)致的。這些 SBOM 需要標(biāo)記為特殊組件或他們所代表的應(yīng)用程序。
4、為你所部署或交付的每個(gè)軟件版本創(chuàng)建綜合的SBOM
無(wú)論您是將軟件交付給客戶,還是幫助客戶、員工、合作伙伴進(jìn)行部署,您應(yīng)該創(chuàng)建一個(gè)綜合的SBOM,并標(biāo)記為該版本軟件的變更。這提供了一個(gè)追蹤機(jī)制,可以讓企業(yè)快速評(píng)他們生產(chǎn)的應(yīng)用或組件的安全狀況,同時(shí)評(píng)估新漏洞對(duì)此前開(kāi)發(fā)的影響。對(duì)于將軟件售賣(mài)或提供給外部用戶的企業(yè),您也可以提供必要的可見(jiàn)性和“信任報(bào)告”給軟件的下游用戶。
5、 將自動(dòng)化應(yīng)用于策略執(zhí)行和告警
借助中心化的SBOM倉(cāng)庫(kù)和有效的SBOM管理能力,企業(yè)可以利用一個(gè)自動(dòng)的策略引擎來(lái)應(yīng)用策略規(guī)則,如同步特殊的監(jiān)管要求或合規(guī)標(biāo)準(zhǔn)。同時(shí),還可以應(yīng)用任意內(nèi)部要求。自動(dòng)告警可以提醒您新漏洞或違反策略的行為,如此,受影響的團(tuán)隊(duì)可以快速修正重要問(wèn)題并阻止受影響的鏡像被部署。
借助工具生成SBOM
可以肯定的是,軟件物料清單將在業(yè)務(wù)開(kāi)展方式中發(fā)揮越來(lái)越重要的作用。但是,考慮到制作SBOM所需的數(shù)據(jù)量,僅通過(guò)人工將這些碎片組合在一起是相當(dāng)具有挑戰(zhàn)性的。Seal 軟件供應(yīng)鏈防火墻可以生成SBOM數(shù)據(jù),并可以跟蹤SBOM的變化以進(jìn)行漏洞匹配,及時(shí)發(fā)現(xiàn)軟件供應(yīng)鏈中的安全風(fēng)險(xiǎn)。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。