從概念到安全實(shí)踐:軟件供應(yīng)鏈基礎(chǔ)指南

時(shí)至今日,絕大多數(shù)的開(kāi)發(fā)者并不是從零開(kāi)始進(jìn)行軟件開(kāi)發(fā),而是在創(chuàng)建軟件時(shí)依賴(lài)第三方資源。通過(guò)使用預(yù)先構(gòu)建的庫(kù)和開(kāi)源組件,工程師們可以加快開(kāi)發(fā)進(jìn)程并且降低生產(chǎn)成本,從而快速將產(chǎn)品推向市場(chǎng)。
因此,企業(yè)需要意識(shí)到軟件并不完全在他們的掌控之中。那么是哪些流程、組件和工具構(gòu)成了你所部署的軟件呢?
什么是軟件供應(yīng)鏈?
“供應(yīng)鏈”這一術(shù)語(yǔ)通常用于制造業(yè),是指制作和分發(fā)一個(gè)產(chǎn)品的人員和流程。例如,一家造飛機(jī)的公司會(huì)自己制造一些部件,也會(huì)從其他公司購(gòu)買(mǎi)和組裝部件。他們根據(jù)設(shè)計(jì)規(guī)格組裝零件,然后對(duì)新飛機(jī)進(jìn)行測(cè)試。通過(guò)測(cè)試后,新飛機(jī)會(huì)被交付到航空公司和飛行員手中。
現(xiàn)代軟件的開(kāi)發(fā)流程與此類(lèi)似:一個(gè)軟件是由多個(gè)組件組成,涉及到多個(gè)開(kāi)發(fā)人員、團(tuán)隊(duì)和某家公司的內(nèi)部與外部系統(tǒng)。并且像飛機(jī)一樣,軟件也需要通過(guò)壓力測(cè)試。
因此,我們將軟件供應(yīng)鏈定義為在軟件開(kāi)發(fā)中所涉及到的組件、開(kāi)發(fā)流程以及投入生產(chǎn)和最終軟件產(chǎn)品分發(fā)的過(guò)程。
軟件供應(yīng)鏈由什么構(gòu)成?
上文中我們已經(jīng)討論了軟件供應(yīng)鏈的定義。構(gòu)成軟件的諸多組件中,有部分依賴(lài)項(xiàng)并非由你的團(tuán)隊(duì)開(kāi)發(fā):
硬件和基礎(chǔ)架構(gòu)
操作系統(tǒng)
編譯器和編輯器
驅(qū)動(dòng)和依賴(lài)項(xiàng)
開(kāi)源腳本和打包好的軟件
代碼倉(cāng)庫(kù)引擎、測(cè)試套件以及CI/CD工具
云服務(wù)和數(shù)據(jù)中心
同時(shí),供應(yīng)鏈會(huì)包含公司外部的人員配置,比如外包公司、咨詢(xún)師以及供應(yīng)商等。因此,軟件供應(yīng)鏈安全的首要關(guān)注點(diǎn)是將風(fēng)險(xiǎn)管理和網(wǎng)絡(luò)安全原則相結(jié)合,這一做法可以檢測(cè)到第三方組件給軟件帶來(lái)的風(fēng)險(xiǎn),并將其最小化。
軟件供應(yīng)鏈管理
在大型軟件的開(kāi)發(fā)過(guò)程中會(huì)涉及到成千上百個(gè)組件、多個(gè)團(tuán)隊(duì)的協(xié)同合作,因此會(huì)遇到諸多安全問(wèn)題。進(jìn)而可見(jiàn)性、明確的規(guī)范以及根據(jù)軟件開(kāi)發(fā)進(jìn)度進(jìn)行持續(xù)的改善對(duì)于大型軟件開(kāi)發(fā)至關(guān)重要。
1. 軟件材料清單
撰寫(xiě)一份優(yōu)秀的文檔絕非易事,但列出代碼中的第三方成分列表則是必須的,這可以讓開(kāi)發(fā)人員對(duì)軟件中可能存在的風(fēng)險(xiǎn)有基本的了解。通過(guò)這一列表,能夠清楚地知道最新的安全新聞是否與軟件中的組件相關(guān)。
這些列表被稱(chēng)為軟件材料清單,或 SBOM(另一個(gè)取自制造業(yè)的術(shù)語(yǔ)),它們由官方發(fā)布并且計(jì)算機(jī)可以直接對(duì)其進(jìn)行處理。這些清單里詳細(xì)說(shuō)明了軟件中的各種組件和依賴(lài)項(xiàng)。
除了可見(jiàn)性這一優(yōu)勢(shì)外,構(gòu)建這份清單還能夠與客戶(hù)建立信任,證明企業(yè)具備安全意識(shí)以及確保許可證的合規(guī)性。基于此,你不需要向客戶(hù)開(kāi)放所有源代碼,同時(shí)可以根據(jù)需要與客戶(hù)分享他們所需要的信息。
2. 信息訪問(wèn)管理(IAM)和數(shù)據(jù)治理
目前,軟件開(kāi)發(fā)還是一個(gè)高度線(xiàn)性且類(lèi)似于生產(chǎn)線(xiàn)的碎片化過(guò)程?,F(xiàn)在,企業(yè)們正試圖消除這一障礙,并跨團(tuán)隊(duì)整合工作流程,即 DevOps。開(kāi)發(fā)和運(yùn)維之間的合并意味著團(tuán)隊(duì)之間的協(xié)作將持續(xù)增加,目前這樣的整合已在業(yè)界取得初步成效。
在急速變化的環(huán)境中,避免數(shù)據(jù)泄露或敏感信息的丟失比以往任何時(shí)候都更加重要。為了保護(hù)數(shù)據(jù),公司需要實(shí)施強(qiáng)有力的 IAM 策略和數(shù)據(jù)治理程序。部分企業(yè)甚至采用 DevSecOps 的方式來(lái)確保協(xié)作中的安全性。
首當(dāng)其沖:軟件供應(yīng)鏈?zhǔn)菒阂夤舻氖滓繕?biāo)
因?yàn)檐浖傻谌浇M件構(gòu)成,因此對(duì)軟件的攻擊已經(jīng)轉(zhuǎn)移到對(duì)供應(yīng)鏈的攻擊。針對(duì) SolarWinds 的攻擊事件是絕佳佐證——通過(guò)對(duì)多個(gè)組件實(shí)施攻擊進(jìn)入該公司的網(wǎng)絡(luò)和應(yīng)用程序監(jiān)控平臺(tái),從而對(duì)使用該系統(tǒng)的 30000 多個(gè)組織造成影響。在進(jìn)入系統(tǒng)之后,攻擊者將惡意代碼插入該公司的軟件中。當(dāng) SolarWinds 向其客戶(hù)發(fā)送更新時(shí),無(wú)意中授予了對(duì)客戶(hù)賬戶(hù)的后門(mén)訪問(wèn)權(quán)限,這使得黑客不僅可以訪問(wèn)屬于 SolarWinds 的系統(tǒng),還可以訪問(wèn)每個(gè)安裝該更新的公司的系統(tǒng)。
針對(duì)開(kāi)源項(xiàng)目的攻擊呈上升趨勢(shì)
研究顯示,黑客正積極瞄準(zhǔn)開(kāi)源組件以伺機(jī)進(jìn)入軟件供應(yīng)鏈。在過(guò)去的12個(gè)月內(nèi),針對(duì)開(kāi)源工具的網(wǎng)絡(luò)攻擊增加了650%。
Sonatype在《2021年軟件供應(yīng)鏈的現(xiàn)狀》報(bào)告中指出,傳統(tǒng)軟件供應(yīng)鏈攻擊集中在公開(kāi)披露的漏洞。在過(guò)去3年里攻擊者已經(jīng)改變了攻擊策略并且頻繁向連接全球供應(yīng)鏈的開(kāi)源項(xiàng)目注入惡意代碼。
換言之,他們的目標(biāo)是“上游”組件,或者是分發(fā)軟件工作流程和更新的服務(wù)。這會(huì)影響到大量位于下游的終端用戶(hù),最終會(huì)牽涉到多家組織。
破壞軟件更新成為主要攻擊手段
通過(guò)破壞已經(jīng)廣泛傳播的軟件更新,攻擊者可以獲取大量的系統(tǒng)訪問(wèn)權(quán)限。例如,許多公司每月會(huì)定期發(fā)布新的安全補(bǔ)丁,這些補(bǔ)丁會(huì)被成千上百萬(wàn)的開(kāi)發(fā)者下載用于開(kāi)發(fā)他們的項(xiàng)目或應(yīng)用于 CI/CD 流水線(xiàn)中。如果攻擊者可以操縱其中一個(gè)更新,那么他們就可以輕松地獲取部署了該補(bǔ)丁的系統(tǒng)的訪問(wèn)權(quán)限。
如何保障軟件供應(yīng)鏈安全?
1. 快速響應(yīng)漏洞
傳統(tǒng)軟件供應(yīng)鏈攻擊仍然是一個(gè)令人擔(dān)憂(yōu)的問(wèn)題,公司在漏洞披露后處理漏洞的窗口期越來(lái)越窄。在漏洞出現(xiàn)后未能及時(shí)更新其應(yīng)用程序的企業(yè)很有可能會(huì)輸給競(jìng)爭(zhēng)對(duì)手。因此,IT團(tuán)隊(duì)必須利用SCA測(cè)試工具來(lái)發(fā)現(xiàn)第三方代碼中的漏洞,并提出補(bǔ)丁和更新等修復(fù)措施。根據(jù) Veracode 近期的《軟件安全狀況:開(kāi)源軟件版本》報(bào)告發(fā)現(xiàn),92%的庫(kù)缺陷都可以通過(guò)更新來(lái)修復(fù)。

2. 保持高度的供應(yīng)鏈可見(jiàn)性
發(fā)現(xiàn)漏洞僅僅是成功的一半。在了解安全問(wèn)題之后,開(kāi)發(fā)者需要更新使用了該代碼的軟件,這需要保持對(duì)整個(gè)軟件供應(yīng)鏈有高度的可見(jiàn)性。為了使你的應(yīng)用程序的依賴(lài)關(guān)系有完整的可見(jiàn)性,你需要問(wèn)自己一些問(wèn)題:
開(kāi)發(fā)生命周期的每一步都涉及什么?
外包員工是否擁有代碼權(quán)限?
誰(shuí)安裝了軟件更新并且是如何安裝的?
企業(yè)應(yīng)該審計(jì)其所有的應(yīng)用程序以及授予內(nèi)部和外部各方的訪問(wèn)權(quán)限。理想情況下,這一切應(yīng)該是有據(jù)可查的,并且是自動(dòng)化的,所以當(dāng)一個(gè)漏洞發(fā)生時(shí),你可以迅速找出擁有該訪問(wèn)權(quán)限的人員。
3. 組件黑名單機(jī)制
及時(shí)的溝通是防止攻擊的關(guān)鍵。一旦開(kāi)發(fā)人員和社區(qū)成員發(fā)現(xiàn)有害的組件,這些項(xiàng)目就不能進(jìn)入生產(chǎn)。團(tuán)隊(duì)可以標(biāo)記出問(wèn)題組件,并建立一個(gè)框架來(lái)跟蹤和防止它們重新進(jìn)入軟件開(kāi)發(fā)流程中。
4. 更新和監(jiān)控代碼
當(dāng)代碼停止更新或處于 EOL(end-of-life)階段時(shí),就無(wú)法將其留在應(yīng)用程序中。因此,必須保證軟件所采用的組件代碼仍然被社區(qū)廣泛使用并且有技術(shù)支持。
將過(guò)時(shí)的代碼留在應(yīng)用程序中會(huì)導(dǎo)致漏洞,進(jìn)而影響整個(gè)軟件供應(yīng)鏈。因此,一旦你得知某個(gè)代碼庫(kù)或項(xiàng)目要關(guān)閉或停止維護(hù),就必須將其移除或使用替代項(xiàng)目。
5. 確保特權(quán)訪問(wèn)管理的安全
一旦攻擊者獲得系統(tǒng)訪問(wèn)權(quán)限,他們將會(huì)試圖通過(guò)網(wǎng)絡(luò)橫向移動(dòng)來(lái)找到特權(quán)賬戶(hù)。一旦成功,他們將使用該賬戶(hù)來(lái)訪問(wèn)敏感數(shù)據(jù)或控制其他系統(tǒng)。
因此,安全團(tuán)隊(duì)?wèi)?yīng)該密切監(jiān)控特權(quán)賬戶(hù)的異常活動(dòng)——密碼變更、登錄活動(dòng)以及權(quán)限更改等,并且應(yīng)該及時(shí)響應(yīng)。假設(shè)一個(gè)域名管理員賬戶(hù)多次嘗試輸入錯(cuò)誤的密碼,那么安全團(tuán)隊(duì)?wèi)?yīng)該立即開(kāi)始進(jìn)行調(diào)查并且鎖定該賬號(hào),直到他們確定這只是一次合法的行為。
管理員應(yīng)該采用最小權(quán)限原則——只有在必要時(shí)才應(yīng)授予高等級(jí)的訪問(wèn)權(quán)限。系統(tǒng)管理員應(yīng)該使用自動(dòng)化和配置管理工具來(lái)控制和監(jiān)控賬戶(hù)管理。這就使得人為干預(yù)的空間大大縮小了。
總? ? 結(jié)
企業(yè)必須意識(shí)到現(xiàn)在他們時(shí)刻生活在網(wǎng)絡(luò)攻擊的威脅中,這是當(dāng)前環(huán)境下的全新挑戰(zhàn)。而軟件供應(yīng)鏈一旦遭遇攻擊,將會(huì)為企業(yè)帶來(lái)重大的損失。要避免此類(lèi)攻擊,需要企業(yè)安全團(tuán)隊(duì)了解整個(gè)軟件供應(yīng)鏈,審計(jì)軟件所依賴(lài)的第三方,掃描軟件組件的漏洞,并且有一個(gè)強(qiáng)有力、可執(zhí)行的軟件供應(yīng)鏈管理計(jì)劃。
參考鏈接:
State of Software Security v11: Open Source Edition
https://info.veracode.com/fy22-state-of-software-security-v11-open-source-edition.html
Software Supply Chain Management: An Introduction
https://www.sonatype.com/resources/software-supply-chain-management-an-introduction
2021 State of the Software Supply Chain?Report
https://www.sonatype.com/resources/state-of-the-software-supply-chain-2021