惡意 Go 包利用模塊鏡像緩存實(shí)現(xiàn)持久遠(yuǎn)程訪(fǎng)問(wèn)
網(wǎng)絡(luò)安全研究人員近日發(fā)現(xiàn)了一起針對(duì)Go生態(tài)系統(tǒng)的軟件供應(yīng)鏈攻擊,攻擊者通過(guò)一個(gè)惡意包,能夠在受感染的系統(tǒng)中實(shí)現(xiàn)遠(yuǎn)程訪(fǎng)問(wèn)。
惡意包的偽裝與傳播
根據(jù)Socket的分析,這個(gè)名為github.com/boltdb-go/bolt的惡意包是對(duì)合法BoltDB數(shù)據(jù)庫(kù)模塊(github.com/boltdb/bolt)的“拼寫(xiě)錯(cuò)誤劫持”(typosquat)。惡意版本(1.3.1)于2021年11月發(fā)布到GitHub,隨后被Go Module Mirror服務(wù)無(wú)限期緩存。
安全研究員Kirill Boychenko在分析中指出:“一旦安裝,這個(gè)被植入后門(mén)的包會(huì)授予攻擊者對(duì)受感染系統(tǒng)的遠(yuǎn)程訪(fǎng)問(wèn)權(quán)限,使其能夠執(zhí)行任意命令。”Socket表示,這是惡意行為者濫用Go Module Mirror無(wú)限期緩存模塊功能的最早案例之一,目的是誘使用戶(hù)下載惡意包。
攻擊者的欺騙手段
為了掩蓋惡意行為,攻擊者隨后修改了源代碼庫(kù)中的Git標(biāo)簽,將其重定向到良性版本。這種欺騙手段確保了手動(dòng)審查GitHub倉(cāng)庫(kù)時(shí)不會(huì)發(fā)現(xiàn)任何惡意內(nèi)容,而緩存機(jī)制則意味著使用Go CLI安裝該包的開(kāi)發(fā)者會(huì)繼續(xù)下載被植入后門(mén)的版本。
Boychenko解釋道:“一旦模塊版本被緩存,它就可以通過(guò)Go Module Proxy訪(fǎng)問(wèn),即使原始源代碼后來(lái)被修改。雖然這種設(shè)計(jì)對(duì)合法用例有益,但攻擊者利用它來(lái)持續(xù)分發(fā)惡意代碼,盡管倉(cāng)庫(kù)后續(xù)發(fā)生了變化。”
安全建議與相關(guān)案例
Boychenko提醒道:“不可變模塊既提供了安全優(yōu)勢(shì),也可能成為濫用的途徑。開(kāi)發(fā)者和安全團(tuán)隊(duì)?wèi)?yīng)監(jiān)控那些利用緩存模塊版本來(lái)逃避檢測(cè)的攻擊?!?/p>
與此同時(shí),Cycode詳細(xì)披露了三個(gè)惡意npm包——serve-static-corell、openssl-node和next-refresh-token。這些包包含混淆代碼,用于收集系統(tǒng)元數(shù)據(jù)并執(zhí)行遠(yuǎn)程服務(wù)器(“8.152.163[.]60”)在受感染主機(jī)上發(fā)出的任意命令。
通過(guò)以上分析可以看出,軟件供應(yīng)鏈攻擊正變得越來(lái)越復(fù)雜,開(kāi)發(fā)者和安全團(tuán)隊(duì)需要更加警惕,尤其是在使用第三方依賴(lài)時(shí),應(yīng)加強(qiáng)審查和監(jiān)控,以防止類(lèi)似攻擊的發(fā)生。