第三方技術(shù)管理
第三方技術(shù)指的是圍繞技術(shù)引用和實(shí)現(xiàn)的技術(shù)工具,、接口和組件,由于更偏向技術(shù)應(yīng)用,,因此往往不在企業(yè)的采購(gòu)清單和計(jì)劃中,由部門或員工自行進(jìn)行選擇和使用,,如上期文章中提到的XCodeGhost事件,。
技術(shù)工具
技術(shù)工具在企業(yè)采購(gòu)中屬于小眾需求,或不被企業(yè)重視的采購(gòu)需求,,在國(guó)內(nèi)多數(shù)企業(yè)依靠員工自行解決相關(guān)的工具需要,,除了供應(yīng)鏈的安全風(fēng)險(xiǎn),技術(shù)工具還會(huì)引起知識(shí)產(chǎn)權(quán)糾紛,,比如:企業(yè)收到某某產(chǎn)品公司發(fā)來(lái)的律師函,,稱企業(yè)內(nèi)部有使用盜版產(chǎn)品,。隨著知識(shí)產(chǎn)權(quán)意識(shí)的提高以及相關(guān)法律風(fēng)險(xiǎn)的提高,越來(lái)越多企業(yè)開始統(tǒng)一采購(gòu)技術(shù)工具或產(chǎn)品,,比如IDA Pro,、Burp Suite、XShell,、Windows,、Office等等。
對(duì)于技術(shù)工具帶來(lái)的供應(yīng)鏈風(fēng)險(xiǎn)和影響,,常見(jiàn)的方案有三種:
終端管控:企業(yè)通過(guò)采購(gòu)終端管控系統(tǒng)來(lái)實(shí)現(xiàn)對(duì)于所有員工電腦終端的管理,,需要在員工電腦端安裝管控軟件(員工無(wú)法自行卸載,需要管理員密碼),,管控系統(tǒng)通常還帶有網(wǎng)絡(luò)準(zhǔn)入功能,,與企業(yè)內(nèi)部的員工賬戶體系打通可以實(shí)現(xiàn)電腦終端的身份認(rèn)證,同時(shí)通過(guò)管理端可以檢查,、限制甚至操作電腦終端的軟件運(yùn)行情況,,從而可以對(duì)員工使用的應(yīng)用情況進(jìn)行統(tǒng)一檢查和管理,這也是企業(yè)統(tǒng)一采購(gòu)辦公電腦的原因(不會(huì)因?yàn)槿藛T入職和離職引入終端安全風(fēng)險(xiǎn)或造成終端管理密碼泄露,,如果是個(gè)人電腦,,則面臨離職后不知道管理員密碼,需要重裝系統(tǒng)才能卸載管控軟件的問(wèn)題),。在面臨知識(shí)產(chǎn)權(quán)糾紛時(shí),,這種方式可以快速對(duì)涉及的應(yīng)用進(jìn)行排查,同時(shí)有利于終端設(shè)備統(tǒng)一管理,。但該方案需要專門的崗位對(duì)終端管控系統(tǒng)進(jìn)行管理和運(yùn)營(yíng),,人員的疏忽和運(yùn)營(yíng)的疏忽都會(huì)造成該方案形同虛設(shè)。
軟件白名單:通過(guò)設(shè)立軟件白名單庫(kù),,結(jié)合企業(yè)內(nèi)網(wǎng)的限制(無(wú)法從外網(wǎng)下載軟件安裝包),可以實(shí)現(xiàn)軟件來(lái)源的限制,,確保員工使用的軟件都是來(lái)自白名單庫(kù),。白名單庫(kù)提供日常辦公中不同崗位常用的軟件,且每款軟件都經(jīng)過(guò)安全部門或相關(guān)部門的檢查和評(píng)估,,確保每個(gè)軟件使用的是穩(wěn)定版本和安全版本,。但可能存在,白名單庫(kù)中軟件更新后,,員工電腦的軟件遲遲未更新所帶來(lái)的風(fēng)險(xiǎn),,或者員工私自安裝其他版本軟件造成的安全風(fēng)險(xiǎn),因此也可以采取終端管控+軟件白名單的方式,,通過(guò)終端監(jiān)控軟件的使用,,通過(guò)軟件白名單庫(kù)提供安全可靠的軟件,。
云桌面:目前越來(lái)越多企業(yè)開始采用云桌面的方式來(lái)徹底解決終端工具風(fēng)險(xiǎn)的問(wèn)題,即輕終端,、重云端,。企業(yè)員工通過(guò)身份驗(yàn)證訪問(wèn)云端桌面進(jìn)行日常辦公,包括研發(fā)工作,,可以確保所有的軟件在云端都是可控且安全的,,但缺陷是會(huì)由于網(wǎng)絡(luò)不穩(wěn)定或網(wǎng)絡(luò)延遲造成辦公效率降低。
技術(shù)接口
無(wú)論是企業(yè)自研的軟件,,還是采購(gòu)的第三方軟件或硬件,,都可能會(huì)存在和需要調(diào)用第三方技術(shù)接口或使用第三方SDK的情況,由于接口或SDK可能是個(gè)人開發(fā),,或接口服務(wù)提供,,因此很難對(duì)供應(yīng)商進(jìn)行評(píng)估和管理。對(duì)于接口和SDK的安全評(píng)估除了安全檢測(cè)之外,,無(wú)法更進(jìn)一步對(duì)接口實(shí)現(xiàn),、處理、分析,、存儲(chǔ),、傳輸做更多評(píng)估,比如:調(diào)用物流接口查詢快遞單號(hào)的物流信息,,物流接口提供方可能泄露相關(guān)的快遞單號(hào)和物流信息,;調(diào)用文檔格式轉(zhuǎn)換接口,接口提供方可能存儲(chǔ)原始文檔并泄露相關(guān)信息,。因此,,企業(yè)應(yīng)當(dāng)對(duì)于技術(shù)接口和SDK的調(diào)用進(jìn)行梳理和安全評(píng)估,確保即便接口提供方出現(xiàn)的安全風(fēng)險(xiǎn),,也在企業(yè)可承受范圍之內(nèi),。
對(duì)于不得不用的接口調(diào)用,可以通過(guò)網(wǎng)絡(luò)邊界的流量限制和流量監(jiān)測(cè)確保接口不會(huì)被濫用,。比如:限制網(wǎng)絡(luò)出口,,或僅允許必要的接口出網(wǎng),并監(jiān)測(cè)接口調(diào)用記錄,。上文中提到的SolarWinds事件發(fā)生后,,采取的應(yīng)急處理辦法就是限制Orion軟件(后門采用DGA算法生成與C2連接的域名)部署環(huán)境的出口,或限制出口訪問(wèn),。
技術(shù)組件
開發(fā)過(guò)程中必不可少的會(huì)用到不同開發(fā)語(yǔ)言的組件或庫(kù),,這些組件大多是由個(gè)人開發(fā)者開發(fā)并開源的,雖然方便了開發(fā)過(guò)程,加速了開發(fā)進(jìn)度,,但個(gè)人維護(hù)的組件常常因?yàn)榉N種原因無(wú)法及時(shí)更新或升級(jí),,以至于一旦被人發(fā)現(xiàn)存在某種漏洞,使用組件的企業(yè)便需要快速響應(yīng)和處理,,如上文中提到的Log4j的例子,。
因此SCA(Software Composition Analysis)工具應(yīng)運(yùn)而生,SCA是一類工具的統(tǒng)稱,,可以通過(guò)分析源代碼識(shí)別其中引用的開源組件信息(名稱,、版本、校驗(yàn)值),、組件漏洞,、開源協(xié)議等信息,從而幫助開發(fā)人員和安全人員快速對(duì)于企業(yè)代碼中的開源風(fēng)險(xiǎn)進(jìn)行識(shí)別,,本質(zhì)上是對(duì)源代碼庖丁解牛,,現(xiàn)如今的SCA工具能夠根據(jù)源代碼、二進(jìn)制文件,、鏡像文件生成SBOM(Software Bill Of Materials)清單,,更全面和深入地分析軟件構(gòu)成,比如供應(yīng)商信息,、作者信息,、間接引入的組件信息等等,就像食品袋上的配料表,,對(duì)于軟件構(gòu)成一目了然,。上文中提到的Log4j組件漏洞被曝出后,國(guó)內(nèi)的SCA廠商也很快跟進(jìn)更新了組件漏洞數(shù)據(jù),,客戶可以在短時(shí)間內(nèi)快速排查涉及相關(guān)組件的項(xiàng)目,、代碼以及對(duì)應(yīng)的部門,而在之前安全部門在應(yīng)急響應(yīng)中最花費(fèi)時(shí)間的是排查漏洞涉及的項(xiàng)目,、部門和人員,,而負(fù)責(zé)項(xiàng)目的研發(fā)人員自身也未必全面了解組件的構(gòu)成情況,因而容易有漏網(wǎng)之魚,。
全面,、清晰、深入地掌握軟件成分和物料清單,,有助于在出現(xiàn)新的安全漏洞時(shí)進(jìn)行快速響應(yīng)和排查,實(shí)際開發(fā)過(guò)程中,,企業(yè)常常需要花很長(zhǎng)時(shí)間排查漏洞影響的組件涉及的業(yè)務(wù),、部門、項(xiàng)目、代碼,、人員,,并協(xié)同相關(guān)人員進(jìn)行漏洞修復(fù)或組件升級(jí),而實(shí)際上開發(fā)人員自己也不見(jiàn)得能夠全面了解軟件的構(gòu)成,,尤其是組件引用的組件或更深層次的組件,。
SCA工具從開發(fā)階段到部署階段都可以運(yùn)用,典型的應(yīng)用場(chǎng)景如下圖:
企業(yè)私服安全管控:私服倉(cāng)庫(kù)中的組件安全是開源治理中重要一個(gè)環(huán)節(jié),,只有從源頭來(lái)杜絕安全問(wèn)題才能從后期的開源治理中有更好的收獲,。SCA工具支持多種類型的私服防火墻功能,根據(jù)配置的安全策略,,實(shí)現(xiàn)對(duì)私服引入外部組件的實(shí)時(shí)檢測(cè),,一旦發(fā)現(xiàn)存在風(fēng)險(xiǎn)的組件被引入則執(zhí)行阻斷,做到私服倉(cāng)庫(kù)中組件的安全可控,。
研發(fā)流程:研發(fā)人員在編碼過(guò)程中,,可以從企業(yè)私服倉(cāng)庫(kù)調(diào)用安全組件,也支持從中央倉(cāng)庫(kù)調(diào)用開源組件,,編碼完成后,,代碼提交至軟件版本庫(kù),之后通過(guò)Jenkins構(gòu)建持續(xù)集成,,并將軟件制品存入制品庫(kù)中,,等待上線發(fā)布。
SCA開源組件檢測(cè):安全人員可以使用SCA工具對(duì)軟件版本庫(kù)中的源碼和Jenkins構(gòu)建中生成的二進(jìn)制文件和容器鏡像對(duì)軟件成分進(jìn)行檢測(cè),,發(fā)現(xiàn)漏洞組件和不合規(guī)組件后,,告知開發(fā)人員修復(fù)至與當(dāng)前版本差異最小的無(wú)漏洞版本。
新漏洞預(yù)警:SCA工具通過(guò)不斷更新組件漏洞信息獲取新的組件漏洞情報(bào),,發(fā)現(xiàn)新漏洞后可以及時(shí)預(yù)警,,定位影響的組件、項(xiàng)目等信息,,幫助企業(yè)在最短時(shí)間內(nèi)掌握信息系統(tǒng)中的開源組件資產(chǎn)和漏洞情報(bào)信息,。
軟件供應(yīng)鏈框架
上文提到,供應(yīng)鏈安全問(wèn)題是人,、流程和知識(shí)的問(wèn)題,,而非純粹的技術(shù)問(wèn)題。在解決軟件研發(fā)過(guò)程的供應(yīng)鏈安全問(wèn)題時(shí),,需要貼合SDLC(軟件開發(fā)生命周期)考慮供應(yīng)鏈安全風(fēng)險(xiǎn),。為此,Goolge提出了SLSA(Supply-chain Levels for Software Artifacts)框架,,微軟提出了SCIM(Supply Chain Integrity Model)框架以及CNCF(云原生計(jì)算基金會(huì))的軟件供應(yīng)鏈最佳實(shí)踐,,三種框架都強(qiáng)調(diào)對(duì)于源代碼,、第三方依賴、構(gòu)建系統(tǒng),、制品,、發(fā)布、部署的安全性,。
以SLSA框架為例,,SLSA是一個(gè)標(biāo)準(zhǔn)清單和控制框架,用于緩解軟件項(xiàng)目中的代碼和軟件包的供應(yīng)鏈風(fēng)險(xiǎn),。SLSA框架從三個(gè)方面評(píng)估軟件供應(yīng)鏈的安全等級(jí),,分別是源碼、構(gòu)建和依賴,,等級(jí)分為4個(gè)級(jí)別:
· Level 1:構(gòu)建過(guò)程是完全腳本化或自動(dòng)化,,且能夠基于結(jié)果識(shí)別來(lái)源源碼;
· Level 2:使用有身份認(rèn)證能力的版本控制和托管服務(wù),,確保構(gòu)建來(lái)源是可信的,;
· Level 3:源碼和構(gòu)建平臺(tái)符合可審計(jì)標(biāo)準(zhǔn),且有成品完整性保證,;
· Level 4:所有變更均有雙人評(píng)審,,且有封閉的、可重復(fù)的構(gòu)建過(guò)程,。
典型的軟件發(fā)布流程如下:
開發(fā)者提交代碼變更到源碼控制管理倉(cāng)庫(kù)(SCM),,提交動(dòng)作觸發(fā)構(gòu)建流程,構(gòu)建服務(wù)接收源代碼并進(jìn)行編譯,,之后編譯打包的軟件包分發(fā)到最終用戶進(jìn)行使用,,或者進(jìn)入到私服倉(cāng)庫(kù)作為其他項(xiàng)目的依賴包使用。
在SLSA框架中,,上圖中的發(fā)布流程對(duì)應(yīng)的安全風(fēng)險(xiǎn)如下:
以Level 4為例,,在軟件構(gòu)建過(guò)程中需要實(shí)踐以下4點(diǎn):
可驗(yàn)證的版本控制:開發(fā)人員提交代碼變更需要多因子身份認(rèn)證(如用GPG簽名commit)及提交時(shí)間戳,必須采用類似GitLab或GitHub的版本控制系統(tǒng),,確保能夠跟蹤每次變更,、代碼分支/標(biāo)簽/Ref或提交人;
雙人評(píng)審:每一個(gè)進(jìn)入最終版本的提交都必須經(jīng)過(guò)至少一個(gè)其他合格的審查員的評(píng)審,,確保代碼的正確性,、安全性、需求吻合和代碼質(zhì)量等等,;
安全的自動(dòng)化構(gòu)建流程/環(huán)境:構(gòu)建流程應(yīng)當(dāng)是完全自動(dòng)化的,,且構(gòu)建環(huán)境應(yīng)該具有隔離性(構(gòu)建過(guò)程不受其他構(gòu)建影響)、封閉性(構(gòu)建過(guò)程應(yīng)包含所有依賴關(guān)系),、無(wú)參化(構(gòu)建結(jié)果只受源代碼影響)和短暫性(每次構(gòu)建都在專門的容器或虛擬機(jī)中進(jìn)行),。
可重復(fù)構(gòu)建的流程:相同的源代碼構(gòu)建每次構(gòu)建的結(jié)果總是相同的,,并且構(gòu)建流程是可以驗(yàn)證的,。
不足的是,,對(duì)于最終用戶而言,雖然可以使用哈希值對(duì)軟件包來(lái)源進(jìn)行校驗(yàn),,但無(wú)法確保軟件包的構(gòu)建來(lái)源是可靠的,,僅僅通過(guò)校驗(yàn)哈希值無(wú)法解決這個(gè)問(wèn)題。因此,,構(gòu)建安全的軟件供應(yīng)鏈構(gòu)建流程便尤為重要,。
附供應(yīng)鏈安全最佳實(shí)踐
英國(guó)國(guó)家網(wǎng)絡(luò)安全中心(NCSC)提出了供應(yīng)鏈安全管理準(zhǔn)則,分為4個(gè)部分的12條:
· 理解風(fēng)險(xiǎn)(Understand the risks)
理解哪些需要被保護(hù)以及為什么,;
知道你的供應(yīng)商是誰(shuí),,并了解它們的安全狀況;
了解供應(yīng)鏈帶來(lái)的安全風(fēng)險(xiǎn),;
· 建立控制(Establish Control)
和供應(yīng)商溝通你的安全需求
為供應(yīng)商設(shè)立和溝通最低安全要求
將安全考慮納入合同流程,,并要求供應(yīng)商也如此
履行你作為供應(yīng)商和客戶的安全責(zé)任
在供應(yīng)鏈內(nèi)部提升安全意識(shí)
為供應(yīng)鏈提供安全事件支持
· 檢查安排(Check your arrangements)
建立保障措施確保供應(yīng)鏈管理能夠?qū)崿F(xiàn)
· 持續(xù)改進(jìn)(Continuous improvement)
鼓勵(lì)供應(yīng)鏈持續(xù)改進(jìn)和提升安全能力
與供應(yīng)商建立互信關(guān)系
更多信息可以來(lái)這里獲取==>>電子技術(shù)應(yīng)用-AET<<