本發(fā)明屬于cve漏洞的管理和修復(fù)機(jī)制,具體涉及一種golang軟件包自動(dòng)修復(fù)cve漏洞的方法及系統(tǒng)。
背景技術(shù):
1、cve(common?vulnerabilities?and?exposures)漏洞是一個(gè)網(wǎng)安技術(shù)術(shù)語(yǔ),用于描述和標(biāo)識(shí)信息安全領(lǐng)域的已知漏洞和安全風(fēng)險(xiǎn)。golang因其高性能、跨平臺(tái)等特性,成為云計(jì)算、微服務(wù)、分布式系統(tǒng)等領(lǐng)域的熱門(mén)編程語(yǔ)言,使用golang開(kāi)發(fā)的軟件包越來(lái)越多。
2、龍芯和申威架構(gòu)是中國(guó)自主研發(fā)的處理器架構(gòu),隨著國(guó)產(chǎn)化替代的發(fā)展,越來(lái)越多的云計(jì)算基礎(chǔ)設(shè)施采用了龍芯(loongarch64)和申威(sw_64)處理器。
3、在社區(qū)中,使用golang開(kāi)發(fā)的軟件包大多僅支持aarch64和x86_64架構(gòu)的處理器。為了適配龍芯和申威架構(gòu)處理器,linux發(fā)行版的開(kāi)發(fā)者普遍在源碼中添加壓縮格式的vendor.tar,以支持在龍芯和申威架構(gòu)的linux操作系統(tǒng)上完成軟件包構(gòu)建。受龍芯架構(gòu)和申威架構(gòu)的設(shè)計(jì)差異化影響,一個(gè)軟件包為了同時(shí)支持龍芯和申威架構(gòu),可能會(huì)為龍芯和申威架構(gòu)分別提供一個(gè)架構(gòu)適配的vendor.tar包,其包含了“vendor/golang.org/x”子目錄,其中包含各種必需的子包。一般而言,影響架構(gòu)適配的源碼,主要是golang的sys和sys/unix子包,其中:golang.org/x/sys是一個(gè)包含各種系統(tǒng)調(diào)用和低級(jí)別操作系統(tǒng)接口的go包集合,這些包提供了對(duì)操作系統(tǒng)功能的訪問(wèn),通常是標(biāo)準(zhǔn)庫(kù)中未涵蓋的功能;golang.org/x/sys/unix是sys包中的一個(gè)子包,專(zhuān)門(mén)用于提供unix系統(tǒng)相關(guān)的系統(tǒng)調(diào)用和接口。
4、在linux操作系統(tǒng)發(fā)展過(guò)程中,cve漏洞對(duì)信息安全構(gòu)成了嚴(yán)重威脅。golang在演進(jìn)過(guò)程中,同樣會(huì)有可能因?yàn)榇a健壯性等原因從而影響系統(tǒng)的穩(wěn)定性、安全性,例如影響golang的sys/unix子包的cve-2022-29526、cve-2022-41721等。要修復(fù)這些cve,每一個(gè)附帶有架構(gòu)適配源碼的golang軟件包都需要針對(duì)其架構(gòu)適配源碼做一次補(bǔ)丁修復(fù)。軟件包數(shù)量在增多的過(guò)程中,明顯會(huì)增加維護(hù)軟件包復(fù)雜度,并且提高人力開(kāi)銷(xiāo),尤其是軟件包為龍芯和申威架構(gòu)分別提供架構(gòu)適配源碼的情況下,將變得更加復(fù)雜。在使用rpm(rpm?packagemanager)包管理器和obs(open?build?service)編譯系統(tǒng)的linux發(fā)行版演進(jìn)過(guò)程中,當(dāng)golang的sys和(或)unix模塊發(fā)現(xiàn)cve漏洞時(shí),當(dāng)前沒(méi)有能為做了龍芯和申威架構(gòu)適配的golang軟件包自動(dòng)解決cve漏洞的方法。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明要解決的技術(shù)問(wèn)題:針對(duì)現(xiàn)有技術(shù)的上述問(wèn)題,提供一種golang軟件包自動(dòng)修復(fù)cve漏洞的方法及系統(tǒng),本發(fā)明旨在解決使用golang語(yǔ)言開(kāi)發(fā)的golang軟件包附帶的龍芯和申威等架構(gòu)適配代碼受cve漏洞影響的問(wèn)題,以及在golang軟件包數(shù)量較多時(shí)維護(hù)cve漏洞復(fù)雜度過(guò)高和耗費(fèi)人力過(guò)多的問(wèn)題。
2、為了解決上述技術(shù)問(wèn)題,本發(fā)明采用的技術(shù)方案為:
3、一種golang軟件包自動(dòng)修復(fù)cve漏洞的方法,包括下述步驟:在使用rpm包管理器和obs編譯系統(tǒng)的linux發(fā)行版中通過(guò)引入的標(biāo)簽機(jī)制維護(hù)管理golang軟件包的版本標(biāo)簽值,在引入新golang軟件包、golang軟件包版本升級(jí)以及修復(fù)golang軟件的cve漏洞時(shí)通過(guò)版本標(biāo)簽值的變化使得obs編譯系統(tǒng)自動(dòng)觸發(fā)重新編譯,并將重新編譯的golang軟件包存儲(chǔ)到rpm軟件包倉(cāng)庫(kù)以實(shí)現(xiàn)對(duì)golang軟件包的cve漏洞自動(dòng)修復(fù)。
4、可選地,在使用rpm包管理器和obs編譯系統(tǒng)的linux發(fā)行版中引入的標(biāo)簽機(jī)制包括構(gòu)建rpm包的標(biāo)簽管理宏軟件包,所述rpm包的標(biāo)簽管理宏軟件包包括標(biāo)簽操作宏函數(shù)_golabel、sys子包替換宏函數(shù)_copy_golang_sys、unix子包替換宏函數(shù)_copy_golang_unix、sys_unix子包替換宏函數(shù)_copy_golang_sys_unix和存儲(chǔ)路徑定義宏_golabel_db,其中標(biāo)簽操作宏函數(shù)_golabel用于obs編譯golang軟件包時(shí)讀取標(biāo)簽數(shù)據(jù)庫(kù)更新golang軟件包版本號(hào)上的正式發(fā)布版本號(hào)release的值,sys子包替換宏函數(shù)_copy_golang_sys用于被golang軟件包的rpm包的配置文件調(diào)用來(lái)替換自帶架構(gòu)適配源碼中的sys子包,unix子包替換宏函數(shù)_copy_golang_unix用于被golang軟件包的rpm包的配置文件調(diào)用來(lái)替換自帶架構(gòu)適配源碼中的unix子包,sys_unix子包替換宏函數(shù)_copy_golang_sys_unix用于被golang軟件包的rpm包的配置文件調(diào)用來(lái)替換自帶架構(gòu)適配源碼中的sys子包和unix子包,所述存儲(chǔ)路徑定義宏_golabel_db用于定義版本標(biāo)簽值數(shù)據(jù)庫(kù)的文件存儲(chǔ)路徑;所述標(biāo)簽機(jī)制還包括:在golang軟件包的配置文件spec中,添加一行標(biāo)簽操作宏函數(shù)_golabel的引用以用于從版本標(biāo)簽值數(shù)據(jù)庫(kù)中獲取golang軟件包的版本標(biāo)簽值;在golang軟件包的配置文件spec中,修改軟件包的正式發(fā)布版本號(hào)release的值,將版本標(biāo)簽值數(shù)據(jù)庫(kù)中記錄的golang軟件包版本標(biāo)簽值追加到golang軟件包的基礎(chǔ)功能版本號(hào)version的值上,以免去后續(xù)更新golang軟件包的配置文件spec中版本標(biāo)簽值的操作;在構(gòu)建golang軟件包的預(yù)備階段%prep,為目標(biāo)架構(gòu)調(diào)用sys子包替換宏函數(shù)_copy_golang_sys、unix子包替換宏函數(shù)_copy_golang_unix、sys_unix子包替換宏函數(shù)_copy_golang_sys_unix中的部分或者全部以實(shí)現(xiàn)對(duì)目標(biāo)架構(gòu)的適配代碼中的sys子包和unix子包的替換。
5、可選地,所述版本標(biāo)簽值數(shù)據(jù)庫(kù)中的每一條記錄包括golang軟件包的軟件包名稱(chēng)及其對(duì)應(yīng)的版本標(biāo)簽值,其中版本標(biāo)簽值為純數(shù)字格式、取值范圍為[1,∞)。
6、可選地,所述版本標(biāo)簽值數(shù)據(jù)庫(kù)存儲(chǔ)在git平臺(tái)上;所述obs編譯系統(tǒng)在構(gòu)建編譯環(huán)境后,從git平臺(tái)上下載版本標(biāo)簽值數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)文件并存儲(chǔ)到存儲(chǔ)路徑定義宏_golabel_db指定的文件路徑。
7、可選地,所述通過(guò)引入的標(biāo)簽機(jī)制維護(hù)管理golang軟件包的版本標(biāo)簽值包括:版本標(biāo)簽值遞增:當(dāng)golang軟件包完成了sys子包或者unix子包的cve漏洞修復(fù)時(shí),由代碼倉(cāng)配置的webhook工程對(duì)版本標(biāo)簽值數(shù)據(jù)庫(kù)中的所有g(shù)olang軟件包的版本標(biāo)簽值執(zhí)行遞增;版本標(biāo)簽值重置:當(dāng)使用golang語(yǔ)言開(kāi)發(fā)的軟件包升級(jí)時(shí),在golang軟件包的基礎(chǔ)功能版本號(hào)version的值或者不含版本標(biāo)簽值的正式發(fā)布版本號(hào)release的值發(fā)生變化的時(shí)候,由代碼倉(cāng)配置的webhook工程對(duì)版本標(biāo)簽值數(shù)據(jù)庫(kù)中記錄的該golang軟件包的版本標(biāo)簽值進(jìn)行重置,修改為1;版本標(biāo)簽值新增:當(dāng)引入新的golang語(yǔ)言開(kāi)發(fā)的golang軟件包時(shí),由代碼倉(cāng)配置的webhook工程對(duì)golang軟件包的配置文件spec做檢測(cè),如果發(fā)現(xiàn)版本標(biāo)簽值的應(yīng)用,則在版本標(biāo)簽值數(shù)據(jù)庫(kù)為當(dāng)前軟件包新增版本標(biāo)簽值記錄,且版本標(biāo)簽值的初始值為1。
8、可選地,所述在引入新golang軟件包、golang軟件包版本升級(jí)以及修復(fù)golang軟件的cve漏洞時(shí)通過(guò)版本標(biāo)簽值的變化使得obs編譯系統(tǒng)自動(dòng)觸發(fā)重新編譯包括:在golang軟件的cve漏洞修復(fù)時(shí),由代碼倉(cāng)配置的webhook工程對(duì)版本標(biāo)簽值數(shù)據(jù)庫(kù)中的所有g(shù)olang軟件包的版本標(biāo)簽值執(zhí)行遞增,由于所有g(shù)olang軟件包的版本標(biāo)簽值執(zhí)行遞增觸發(fā)obs編譯系統(tǒng)對(duì)版本標(biāo)簽值數(shù)據(jù)庫(kù)中的所有g(shù)olang軟件包自動(dòng)掃描依賴(lài)并重新構(gòu)建golang軟件包并歸檔存儲(chǔ)到rpm軟件包倉(cāng)庫(kù)中。
9、可選地,所述在引入新golang軟件包、golang軟件包版本升級(jí)以及修復(fù)golang軟件的cve漏洞時(shí)通過(guò)版本標(biāo)簽值的變化使得obs編譯系統(tǒng)自動(dòng)觸發(fā)重新編譯包括:在使用golang語(yǔ)言開(kāi)發(fā)的軟件包升級(jí)或者引入新的golang語(yǔ)言開(kāi)發(fā)的golang軟件包時(shí),由于golang軟件包的版本標(biāo)簽值重置或者新增觸發(fā)obs編譯系統(tǒng)對(duì)版本標(biāo)簽值數(shù)據(jù)庫(kù)中的重置或者新增版本標(biāo)簽值的golang軟件包自動(dòng)掃描依賴(lài)并重新構(gòu)建golang軟件包并歸檔存儲(chǔ)到rpm軟件包倉(cāng)庫(kù)中。
10、此外,本發(fā)明還提供一種golang軟件包自動(dòng)修復(fù)cve漏洞的系統(tǒng),包括相互連接的微處理器和存儲(chǔ)器,所述微處理器被編程或配置以執(zhí)行所述golang軟件包自動(dòng)修復(fù)cve漏洞的方法。
11、此外,本發(fā)明還提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),該計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)有計(jì)算機(jī)程序或指令,該計(jì)算機(jī)程序或指令被編程或配置以通過(guò)處理器執(zhí)行所述golang軟件包自動(dòng)修復(fù)cve漏洞的方法。
12、此外,本發(fā)明還提供一種計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)程序或指令,該計(jì)算機(jī)程序或指令被編程或配置以通過(guò)處理器執(zhí)行所述golang軟件包自動(dòng)修復(fù)cve漏洞的方法。
13、和現(xiàn)有技術(shù)相比,本發(fā)明主要具有下述優(yōu)點(diǎn):本發(fā)明在使用rpm包管理器和obs編譯系統(tǒng)的linux發(fā)行版中通過(guò)引入的標(biāo)簽機(jī)制維護(hù)管理golang軟件包的版本標(biāo)簽值,在引入新golang軟件包、golang軟件包版本升級(jí)以及修復(fù)golang軟件的cve漏洞時(shí)通過(guò)版本標(biāo)簽值的變化使得obs編譯系統(tǒng)自動(dòng)觸發(fā)重新編譯,并將重新編譯的golang軟件包存儲(chǔ)到rpm軟件包倉(cāng)庫(kù)以實(shí)現(xiàn)對(duì)golang軟件包的cve漏洞自動(dòng)修復(fù),從而能夠解決使用golang語(yǔ)言開(kāi)發(fā)的golang軟件包附帶的龍芯和申威等架構(gòu)適配代碼受cve漏洞影響的問(wèn)題,以及在golang軟件包數(shù)量較多時(shí)維護(hù)cve漏洞復(fù)雜度過(guò)高和耗費(fèi)人力過(guò)多的問(wèn)題。