PyPI 中發(fā)現(xiàn)六個(gè)針對 Windows 用戶的惡意軟件包
2023 年 3 月,研究人員在 PyPI 上發(fā)現(xiàn)了 6 個(gè)旨在竊取 Windows 用戶的應(yīng)用程序憑據(jù)、個(gè)人隱私數(shù)據(jù)與加密錢包信息。本次攻擊確認(rèn)是對攻擊團(tuán)伙 W4SP 的模仿,該組織之前曾利用惡意軟件包發(fā)起過多次供應(yīng)鏈攻擊。
PyPI 中發(fā)現(xiàn)新的惡意軟件包
研究人員發(fā)現(xiàn)的 6 個(gè)惡意軟件包,都缺少與之關(guān)聯(lián)的 GitHub 存儲(chǔ)庫。合法軟件包通常都會(huì)有與之關(guān)聯(lián)的存儲(chǔ)庫,而惡意軟件包為了隱藏代碼則通常不會(huì)關(guān)聯(lián)。執(zhí)行后,惡意軟件包會(huì)收集敏感數(shù)據(jù)并將其發(fā)送到第三方 URL。
軟件包的開發(fā)者是新創(chuàng)建的,只上傳了一個(gè)軟件包,而且沒有提供任何其他信息,這通常很難說明是有信譽(yù)的開發(fā)者。這些軟件包的開發(fā)者用戶名都是相同的模式(如 Anne1337、Richard1337 等),每個(gè)賬戶都只上傳了一個(gè)軟件包。
后續(xù)的攻擊與之前披露的 W4SP 攻擊團(tuán)伙類似,該組織專門利用開源生態(tài)系統(tǒng)中的漏洞進(jìn)行攻擊。不僅利用未授權(quán)訪問竊取敏感信息,也利用自動(dòng)化工具發(fā)起漏洞利用攻擊。
發(fā)現(xiàn)
上傳軟件包的用戶賬戶都是在上傳軟件包不久前才創(chuàng)建的,沒有創(chuàng)建其他任何軟件包。這些軟件包被下載了數(shù)百次,目前 PyPI 官方已經(jīng)刪除對應(yīng)的賬戶。
image.png-155.7kB
開發(fā)者頁面
這些賬戶都會(huì)使用 1337 作為后綴,這說明攻擊者可能是利用自動(dòng)化方式創(chuàng)建這些用戶。
自定義包入口點(diǎn)
攻擊與此前披露的 W4SP 攻擊團(tuán)伙類似,根據(jù)相似之處,分析人員判斷這是一次模仿攻擊。
本次攻擊并沒有 W4SP 那么復(fù)雜,例如:
- 攻擊不針對任何特定組織
- 沒有創(chuàng)建拼寫錯(cuò)誤的流行軟件包對應(yīng)的惡意軟件包
- 后續(xù)攻擊未加密,檢測并不困難
- W4SP 先前攻擊的大部分代碼都可以下載,可以重新利用
這些軟件包沒有包含明顯的惡意代碼,而是經(jīng)過精心設(shè)計(jì),具有在安裝或執(zhí)行過程中觸發(fā)的特定入口點(diǎn)。結(jié)合免費(fèi)文件托管服務(wù)與自定義入口點(diǎn),使得檢測與發(fā)現(xiàn)此類威脅變得更有挑戰(zhàn)。
盡管攻擊較簡單,但可能會(huì)非常有效。攻擊代碼植入在安裝文件中,意味著攻擊在軟件包安裝過程中就已經(jīng)開始了。
攻擊者自稱 @EVIL$ STEALER,并且變換了很多名稱:
- ANGEL Stealer
- Celestial Stealer
- Fade Stealer
- Leaf $tealer
- PURE Stealer
- Satan Stealer
- @skid Stealer
惡意代碼
所有軟件包中的 setup.py 都是相同的,包含以下代碼片段,通過遠(yuǎn)程 URL 下載數(shù)據(jù)。
image.png-204.6kB
setup.py 惡意代碼
攻擊者首先使用 _ffile 對象創(chuàng)建臨時(shí)文件,并且使用 write 寫入文件內(nèi)容。眾所周知,使用 NamedTemporaryFile 寫入臨時(shí)文件可以隱藏惡意代碼,不會(huì)被反病毒軟件或者其他安全軟件檢測到。
該文件的內(nèi)容通過 urllib.request 中的 urlopen 函數(shù)下載而來,然后使用 exec 函數(shù)執(zhí)行文件的內(nèi)容。寫入完成后,文件就會(huì)被管理。隨后,嘗試使用 start 命令執(zhí)行該文件。執(zhí)行成功后,調(diào)用 setup 函數(shù)創(chuàng)建軟件包。如前所述,start 命令也是攻擊者繞過安全限制最常見的方法之一。
后續(xù)階段的 W4SP 竊密
所有惡意軟件包在后續(xù)階段中,攻擊者使用了 1.1.6 版本的 W4SP Stealer。該版本與此前的版本類似,使用各種技術(shù)來提取、解密瀏覽器憑據(jù)(密碼與 Cookie),并將這些數(shù)據(jù)回傳到 Discord webhook。
惡意代碼定義了一個(gè) DATA_BLOB 類,用于存儲(chǔ) CryptUnprotectData 函數(shù)的數(shù)據(jù)。此函數(shù)可以解密受 Windows 數(shù)據(jù)保護(hù) API(DPAPI)保護(hù)的數(shù)據(jù),例如密碼與 API 密鑰等敏感數(shù)據(jù)。代碼嘗試使用 CryptUnprotectData 和 DecryptValue 函數(shù)進(jìn)行解密,后續(xù)通過 Discord Webhook 回傳到 C&C 服務(wù)器。
image.png-316.7kB
解密 DPAPI 的數(shù)據(jù)
下圖為部分惡意代碼,攻擊者試圖收集有關(guān)受害者的信息,包括 IP 地址、用戶名、國家/地區(qū)代碼。
image.png-156.5kB
檢索受害者相關(guān)信息
攻擊者與 Discord API 交互檢索用戶的好友列表,并且收集用戶擁有的徽章信息。
image.png-190.2kB
檢索 Discord 好友列表
隨后,使用預(yù)先準(zhǔn)備好的 Discord Webhook,嘗試通過 HTTP 請求將受害者信息回傳。
image.png-43.4kB
Discord Webhook
最后,攻擊者將會(huì)驗(yàn)證受害者的機(jī)器是否值得攻擊。如果確認(rèn)機(jī)器合適,則會(huì)將 DETECTED 變量設(shè)置為 True,并將受害者信息回傳到服務(wù)器。
image.png-73.3kB
檢索 Cookie
PyPI 作為惡意軟件包的目標(biāo)
PyPI 是一個(gè)被廣泛使用的存儲(chǔ)庫,其上托管著數(shù)量驚人的 Python 軟件包。但與此同時(shí),攻擊者也將目光對準(zhǔn)了 PyPI,利用其龐大的用戶群來傳播惡意軟件。
PyPI 去中心化的特性使得檢測這些惡意軟件包變得非常艱難,但一旦成為這些惡意軟件包的受害者可能會(huì)帶來巨大的損失。
2023 年 5 月 20 日,PyPI 宣布由于平臺上的惡意攻擊、惡意用戶不斷增加,暫時(shí)停止了新軟件包的注冊與上傳。
結(jié)論
開源軟件的興起以及包管理器的普及,使得攻擊者比以往任何時(shí)刻都想要把惡意軟件包放入整個(gè)系統(tǒng)中。惡意軟件包帶來的威脅日益嚴(yán)重,攻擊者將惡意軟件包偽裝成合法軟件,進(jìn)行數(shù)據(jù)竊密、網(wǎng)絡(luò)控制等。
軟件開發(fā)人員必須在開發(fā)過程中就考慮到軟件安全問題,通過代碼審查、自動(dòng)化測試與滲透測試等方式,在部署前發(fā)現(xiàn)問題。
除技術(shù)手段外,提高軟件安全意識與用戶教育水平也有助于降低惡意軟件包帶來的風(fēng)險(xiǎn)。為開發(fā)人員與最終用戶進(jìn)行定期培訓(xùn),有助于阻止攻擊??傊?,需要各方的集體努力才能確保惡意軟件包不會(huì)對網(wǎng)絡(luò)安全造成損害。