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