PyPI中出現(xiàn)了針對(duì)Windows用戶的6個(gè)惡意Python包
今年3月,Unit 42的研究人員在Python Package Index(PyPI)包管理器上發(fā)現(xiàn)了6個(gè)惡意包。惡意軟件包旨在竊取Windows用戶的應(yīng)用程序憑據(jù)、個(gè)人數(shù)據(jù)和加密錢包的跟蹤信息。該攻擊試圖模仿攻擊組織W4SP,該組織此前曾使用惡意軟件包發(fā)起過幾次供應(yīng)鏈攻擊。
研究人員將討論攻擊者在開源生態(tài)系統(tǒng)中使用惡意包傳播惡意代碼的難易程度,他們觀察到的行為并不是由攻擊組織策劃的有組織的攻擊,而很可能是一個(gè)模仿者閱讀了以前攻擊的技術(shù)報(bào)告來(lái)執(zhí)行他們自己的攻擊。
研究人員將描述Palo Alto Networks Prisma Cloud模塊使用的指標(biāo),這些指標(biāo)識(shí)別了本文討論的惡意軟件包。Palo Alto Networks的客戶可以通過Prisma Cloud獲得包含惡意代碼的開源軟件包的保護(hù)。
惡意軟件包是故意設(shè)計(jì)用于對(duì)計(jì)算機(jī)系統(tǒng)或其處理的數(shù)據(jù)造成損害的軟件組件。此類軟件包可以通過各種方式傳播,包括釣魚電子郵件、被攻擊的網(wǎng)站甚至合法的軟件存儲(chǔ)庫(kù)。
惡意軟件包可能會(huì)產(chǎn)生很大的破壞力,包括偷偷竊取敏感數(shù)據(jù)到導(dǎo)致系統(tǒng)中斷,甚至控制整個(gè)系統(tǒng)。此外,這些惡意軟件包具有傳播到其他互聯(lián)系統(tǒng)的能力。因此,在進(jìn)行軟件下載和安裝時(shí),尤其是在源代碼不熟悉或不受信任的情況下,務(wù)必格外小心。
通過保持警惕和洞察力,用戶可以保護(hù)他們的系統(tǒng),并防止攻擊者滲透到他們的技術(shù)環(huán)境。
在PyPI中發(fā)現(xiàn)新的惡意包
2023年3月,Prisma Cloud研究人員在PyPI軟件包管理器上發(fā)現(xiàn)了6個(gè)針對(duì)Windows用戶的惡意軟件包。惡意軟件包旨在竊取應(yīng)用程序憑據(jù)、個(gè)人數(shù)據(jù)和加密貨幣錢包信息。
研究人員的Prisma Cloud引擎,旨在檢測(cè)惡意PyPI包,發(fā)現(xiàn)幾個(gè)在短時(shí)間內(nèi)上傳的具有可疑屬性的包:
這些軟件包缺少相關(guān)的GitHub存儲(chǔ)庫(kù),它通常與合法軟件包一起使用。這可能表明希望從視圖中隱藏代碼。另外,再加上有限的下載量,進(jìn)一步引起了研究人員的懷疑;
在執(zhí)行時(shí),這些包執(zhí)行惡意操作,例如收集敏感數(shù)據(jù)并將其發(fā)送到第三方URL;
這些包包含一個(gè)惡意代碼模式,目前已檢測(cè)到了它;
因?yàn)榘拈_發(fā)者是新創(chuàng)建的,只上傳了一個(gè)包,并且沒有提供支持信息,例如到其他項(xiàng)目或任何存儲(chǔ)庫(kù)的鏈接,所以他們不被認(rèn)為是有信譽(yù)的;
最后,包開發(fā)者的用戶名是在幾分鐘內(nèi)創(chuàng)建的,遵循一個(gè)獨(dú)特的模式(例如,Anne1337、Richard1337),每個(gè)用戶名只上傳了一個(gè)包。
第二階段的攻擊與我們之前看到的W4SP攻擊群的攻擊相似。該組織專門利用開源生態(tài)系統(tǒng)中的漏洞,針對(duì)組織和傳播惡意軟件。他們的主要目標(biāo)是獲得對(duì)敏感信息(如用戶憑據(jù)和財(cái)務(wù)數(shù)據(jù))的未經(jīng)授權(quán)的訪問權(quán)限。他們經(jīng)常使用自動(dòng)化工具來(lái)掃描漏洞并試圖利用它們。除了傳統(tǒng)攻擊外,W4SP攻擊者還執(zhí)行供應(yīng)鏈攻擊。
檢測(cè)結(jié)果
Prisma Cloud引擎檢測(cè)到被標(biāo)記為可能包含惡意代碼的包。每個(gè)包都包含一個(gè)指向可疑遠(yuǎn)程URL的鏈接,試圖在單個(gè)用戶單獨(dú)上傳后下載內(nèi)容。
每個(gè)上傳包的用戶的用戶名都是在上傳前創(chuàng)建的,之前沒有任何上傳包的歷史記錄。每個(gè)包都有數(shù)百次下載,直到研究人員的研究團(tuán)隊(duì)報(bào)告了濫用行為,PyPI才將它們和上傳它們的欺詐性用戶帳戶刪除。
研究人員分析了代碼并試圖找到開發(fā)者。研究人員在每個(gè)包開發(fā)者的用戶名中發(fā)現(xiàn)了一個(gè)模式,他們使用“1337”作為后綴,這表明某些自動(dòng)過程創(chuàng)建了這些用戶,下圖1顯示了其中一個(gè)用戶名的開發(fā)者頁(yè)面。
惡意包
PyPI的開發(fā)者頁(yè)面
自定義包入口點(diǎn)
這次攻擊類似于研究人員之前看到的W4SP攻擊組織的攻擊,此文詳細(xì)介紹了這一攻擊。這些相似之處讓研究人員相信這是一次模仿。
但此次攻擊沒有真正的W4SP攻擊那么復(fù)雜,例如:
沒有針對(duì)任何組織;
惡意軟件包沒有像W4SP攻擊所預(yù)期的那樣,使用常見流行軟件包的輸入錯(cuò)誤;
第二階段的攻擊沒有加密,在來(lái)自W4SP的真正攻擊中,這個(gè)階段是加密的,這使得檢測(cè)更加困難;
W4SP在以前的攻擊中使用的大部分代碼已經(jīng)可以下載,因此可以很容易地訪問和重新利用;
在之前的攻擊中,W4SP 竊取程序作為從免費(fèi)文件托管服務(wù)下載的第二階段有效載荷傳播,這使得攻擊者可以避免在包存儲(chǔ)庫(kù)中進(jìn)行檢測(cè)。
這些包沒有包含明顯的惡意代碼,而是精心設(shè)計(jì)的,以具有在安裝或執(zhí)行過程中觸發(fā)的特定入口點(diǎn)。通過利用免費(fèi)文件托管服務(wù)和自定義入口點(diǎn),攻擊者的目標(biāo)是不被發(fā)現(xiàn),這對(duì)負(fù)責(zé)檢測(cè)和防御此類攻擊的安全專業(yè)人員和研究人員構(gòu)成了重大挑戰(zhàn)。
這些攻擊很容易實(shí)現(xiàn),并且可以在幾乎沒有安全專業(yè)知識(shí)的情況下發(fā)起。但是,它們可能非常有效,因?yàn)榘惭b過程會(huì)自動(dòng)執(zhí)行攻擊,而不是在使用導(dǎo)入模塊時(shí)需要攻擊者發(fā)起攻擊。
當(dāng)軟件開發(fā)人員想要使用Python包時(shí),他們必須執(zhí)行兩個(gè)操作。第一個(gè)步是安裝包,第二個(gè)步是在代碼中導(dǎo)入或聲明以使用它。正如接下來(lái)討論的那樣,攻擊代碼實(shí)際上是從安裝文件(setup.py)中開始的,這意味著在安裝包期間已經(jīng)執(zhí)行了攻擊。
在研究人員調(diào)查的示例中,攻擊者稱自己為@EVIL$竊取程序。然而,該名稱隨著每次攻擊而改變。以下是代碼簽名中的名稱集合:
- ANGEL竊取程序
- Celestial竊取程序
- Fade竊取程序
- Leaf $tealer
- PURE竊取程序
- Satan竊取程序
- @skid 竊取程序
- 惡意代碼
setup.py文件在所有包中都是相同的,并且包含以下代碼片段,用于在執(zhí)行之前從遠(yuǎn)程URL下載內(nèi)容:
Setup.py(第一階段)惡意代碼
上圖顯示了以下活動(dòng):
1.攻擊者使用_ffile對(duì)象創(chuàng)建臨時(shí)文件,并使用write方法寫入文件的內(nèi)容,使用帶有NamedTemporaryFile函數(shù)的臨時(shí)文件是一種眾所周知的技術(shù),可以隱藏惡意代碼,使其不被殺毒軟件或其他安全措施檢測(cè)到;
2.文件的內(nèi)容是通過使用urlopen函數(shù)從urllib下載URL的內(nèi)容獲得的。請(qǐng)求模塊,然后使用exec函數(shù)執(zhí)行文件的內(nèi)容;
3.在寫完臨時(shí)文件的內(nèi)容后,將關(guān)閉該文件,并嘗試在系統(tǒng)shell中使用start命令執(zhí)行它。如果成功,將調(diào)用setup函數(shù)來(lái)創(chuàng)建包。然后攻擊者使用start命令啟動(dòng)Python引擎的可執(zhí)行文件(pythonw.exe),之后這個(gè)可執(zhí)行文件將執(zhí)行作為參數(shù)傳遞的腳本文件。由于該惡意軟件包針對(duì)Windows用戶,如果腳本文件未簽名,則不會(huì)受到SmartScreen (Windows安全功能,用于檢測(cè)和防止?jié)撛趷阂馕募膱?zhí)行)或簽名檢查的影響。這意味著它將在目標(biāo)計(jì)算機(jī)上執(zhí)行惡意代碼,即使目標(biāo)計(jì)算機(jī)啟用了SmartScreen和簽名檢查。
第二階段:W4SP竊取程序
根據(jù)研究人員的研究,在第二階段,攻擊者使用了配置版本的W4SP竊取程序 1.1.6。這個(gè)版本類似于以前的版本,其中代碼導(dǎo)入了幾個(gè)庫(kù),包括 requests, Crypto.Cipher, json和sqlite3。然后,它使用各種技術(shù)提取和解密存儲(chǔ)的瀏覽器憑據(jù),包括密碼和cookie,并將這些信息發(fā)送到Discord webhook。
代碼的主體定義了一個(gè)類DATA_BLOB,用于存儲(chǔ)CryptUnprotectData函數(shù)的數(shù)據(jù)。此函數(shù)用于解密受Windows數(shù)據(jù)保護(hù)API(DPAPI)保護(hù)的值,該值用于存儲(chǔ)密碼和API密鑰等敏感數(shù)據(jù)。代碼嘗試使用CryptUnprotectData和DecryptValue函數(shù)解密一個(gè)值,然后通過Discord webhook將其發(fā)送到遠(yuǎn)程服務(wù)器,如下圖所示。
嘗試解密Windows數(shù)據(jù)保護(hù)API(DPAPI)保護(hù)的值
下圖顯示了攻擊者試圖收集受害者信息的幾個(gè)惡意代碼示例。如下圖所示,攻擊者試圖收集受害者的信息,包括IP地址、用戶名、國(guó)家/地區(qū)代碼。
檢索有關(guān)用戶IP地址、位置和用戶名等信息的代碼
在下圖中,攻擊者與Discord API交互,以檢索用戶的好友列表并提取有關(guān)他們自己的標(biāo)識(shí)信息。
用于在Discord上檢索用戶好友列表的代碼
在稍后的代碼中,他們嘗試使用事先準(zhǔn)備好的Discord webhook,然后嘗試通過HTTP請(qǐng)求將受害者信息發(fā)送到相關(guān)的Discord通道。
PyPI中出現(xiàn)了針對(duì)Windows用戶的6個(gè)惡意Python包
Discord webhook
最后,如下圖所示,攻擊者試圖驗(yàn)證受害者的設(shè)備是否適合執(zhí)行攻擊。如果確定該設(shè)備是合適的,則DETECTED變量將被設(shè)置為true,并且來(lái)自受害者設(shè)備的信息將被發(fā)送到遠(yuǎn)程服務(wù)器。
搜索Cookie的代碼
PyPI作為一個(gè)上傳惡意軟件包的便捷平臺(tái)
PyPI是一個(gè)備受信賴且廣受歡迎的存儲(chǔ)庫(kù),擁有數(shù)量驚人的Python包,在PyPI領(lǐng)域內(nèi),出現(xiàn)了一個(gè)令人擔(dān)憂的現(xiàn)實(shí)。該存儲(chǔ)庫(kù)無(wú)與倫比的受歡迎程度無(wú)意中成了攻擊者使用的對(duì)象,他們?cè)噲D通過秘密傳播惡意軟件包來(lái)利用其龐大的用戶群。
這種令人不安的趨勢(shì)對(duì)安全提出了一個(gè)重大挑戰(zhàn),因?yàn)镻yPI的去中心化性質(zhì)使監(jiān)測(cè)和檢測(cè)這些惡意對(duì)象成為一項(xiàng)艱巨的工作。成為此類惡意軟件包受害者的后果會(huì)對(duì)毫無(wú)戒心的用戶和企業(yè)造成嚴(yán)重后果,例如數(shù)據(jù)、憑證或加密被盜。因此,加強(qiáng)PyPI包的安全性是至關(guān)重要的。
PyPI于2023年5月20日宣布,由于平臺(tái)上惡意活動(dòng),惡意用戶和項(xiàng)目的增加,他們暫時(shí)停止注冊(cè)和上傳新軟件包。
凍結(jié)新用戶和項(xiàng)目注冊(cè)的決定反映了像PyPI這樣的軟件注冊(cè)中心面臨的安全挑戰(zhàn),因?yàn)樗鼈円呀?jīng)成為尋求篡改軟件供應(yīng)鏈攻擊者的目標(biāo)。
總結(jié)
開源軟件的興起和普及以及包管理器的激增,使攻擊者比以往任何時(shí)候都更容易將這些危險(xiǎn)的包植入用戶的系統(tǒng)。隨著軟件在我們?nèi)粘I钪性絹?lái)越普遍,惡意軟件包的威脅變得更加嚴(yán)重。攻擊者可以將這些軟件包偽裝成合法軟件,并利用毫無(wú)戒心的系統(tǒng)中的漏洞,造成數(shù)據(jù)盜竊、系統(tǒng)關(guān)閉和網(wǎng)絡(luò)控制等重大損害。
為了防御這種威脅,軟件開發(fā)人員和組織必須在開發(fā)過程中優(yōu)先考慮軟件安全性。增加了安全措施,例如代碼審查、自動(dòng)化測(cè)試和滲透測(cè)試,可以幫助在部署之前識(shí)別和修復(fù)漏洞。此外,保持最新的安全補(bǔ)丁和更新可以防止攻擊者利用已知的漏洞。
除了技術(shù)措施外,提高對(duì)軟件安全的認(rèn)識(shí)和教育也有助于防御惡意軟件包的風(fēng)險(xiǎn)。為開發(fā)人員、IT人員和最終用戶提供關(guān)于最佳安全實(shí)踐的定期培訓(xùn)很有必要。安全專業(yè)人員、開發(fā)人員和用戶共同努力以確保識(shí)別并防止惡意軟件包對(duì)系統(tǒng)和網(wǎng)絡(luò)造成損害。
本文翻譯自:https://unit42.paloaltonetworks.com/malicious-packages-in-pypi/