概述

2023年11月28号,悬镜供应链安全实验室在Pypi官方仓库(https://pypi.org)监测到两起伪装成http和socks5代理SDK的开源组件投毒事件。python开发者一旦下载安装这些投毒Py包(libproxy、libsocks5),会触发执行Py包中的恶意代码,最终将导致开发者系统被投毒者植入恶意后门。

这些恶意Py包在官方仓库上的本周下载量大约500多次。

目前恶意Py包已从官方仓库下架,但国内部分主流Pypi镜像源依旧可访问下载这些恶意包,实际的受害者数量将会更多,尤其对于国内广大开发者来说仍存在被投毒攻击的风险。

国内Python开发者们可自行排查是否安装或引用以下恶意py组件包。

投毒组件分析

本次py投毒组件在安装包setup.py脚本中自定义install命令类执行恶意操作,通过从远程服务器上拉取加密的恶意代码进行解密释放出第二阶段攻击使用的shellcode代码,shellcode代码直接在系统内存中执行,无恶意文件落盘行为,具备较高的攻击隐蔽性。

Part 1 加载远程攻击载荷

以`libsocks5`为例,该组件包setup.py的cmdclass::install被定义为VerifyInstallationChecksum类。

当开发者通过pip install libsocks5 安装py包时,VerifyInstallationChecksum的run函数将被调用执行第一阶段攻击代码。Run函数先将base64编码的url进行解码后通过urllib远程下载加密的恶意代码,最后会对恶意代码进行解密并调用eval执行进入第二阶段攻击代码。

base64编码的恶意代码url为:

aHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZXJpay1hcnRlbW92L2I1ZGUyNTE5NWJkMGU5NjFhNTIxYjAzNDU2NjE0ZDRjL3Jhdy8xY2MyMzYzMTBkYTdmM2UwNWI2NTcxZWFhOWRiNGI2NjM2ZmI0Njg0L2d6TGpnT3VqOHkwYmF2VG12Z2tDd1IzaDFrdkVDMUJNLmI2NAo=

解码后的url为:

https://gist.github.com/erik-artemov/b5de25195bd0e961a521b03456614d4c/raw/1cc236310da7f3e05b6571eaa9db4b6636fb4684/gzLjgOuj8y0bavTmvgkCwR3h1kvEC1BM.b64

Part 2 shellcode解密执行

解密后的第二阶段攻击代码(如下图所示)被混淆处理,其大致逻辑是通过调用python ctypes库动态分配一段可读可写可执行的RWX系统内存,并将内置加密压缩后的shellcode代码解密释放到RWX内存上,最后直接控制PC寄存器跳转到RWX内存中执行shellcode进入第三阶段攻击代码。

第二阶段攻击代码去除混淆后的伪代码如下如图所示:

Part 3 后门植入

通过IDA逆向第三阶段shellcode攻击代码(shellcode_stage1),伪代码如下所示,shellcode先调用系统接口分配一块可读可写可执行的RWX内存,接着将内置的异或编码后的shellcode解码释放到RWX内存中执行下一阶段攻击。

通过逆向分析,我们发现在第三阶段攻击代码shellcode_stage1执行后,需要持续经过16轮 shellcode解码释放操作,最终才会释放出真实的攻击代码shellcode_stage17。

从shellcode_stage1到shellcode_stage17阶段的代码都是直接在系统内存上执行,不在文件系统中生成恶意代码。通过IDA自动化脚本,我们可以从shellcode_stage1中将后续16轮的shellcode代码全部还原提取(如下图所示)。

shellcode_stage17的攻击代码最终会从投毒者控制的服务器下载后门程序RuntimeBroker.exe并植入到受害者系统中。

3478.qt-api-worker-threads.workers.dev

Part 4 IoC数据

此次投毒组件包涉及的IoC数据如下所示:

总结

截至目前,这些恶意组件包仍可从国内主流Pypi镜像源正常下载安装,国内Python开发者仍面临被投毒攻击的安全风险,开发者需提高安全防护意识,可自行根据以上IoC和组件信息排查是否安装或引用恶意组件包。除此之外,也可使用悬镜开源的OpenSCA安全治理工具进行扫描检测。

快速排查

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

[  {
"product": "libproxy",
"version": "[1.1.4, 1.1.5]",
"language": "python",
"id": "XMIRROR-2023-113001",
"description": "恶意Pypi组件包投毒。",
"release_date": "2023-11-30"
}, {
"product": "libsocks5",
"version": "[1.1.1, 1.1.1]",
"language": "python",
"id": "XMIRROR-2023-113002",
"description": "恶意Pypi组件包投毒。",
"release_date": "2023-11-30"
}]

  

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

供应链安全情报 | 恶意py包伪装代理SDK进行后门攻击,目标锁定python开发者的更多相关文章

  1. py 包和模块,软件开发目录规范

    目录 py 包和模块,软件开发目录规范 什么是包? 什么是模块? 软件开发目录规范 py 包和模块,软件开发目录规范 什么是包? 包指的是内部包__init__.py的文件夹 包的作用: 存放模块,包 ...

  2. python开发者框架套件总结: package 包 frameworks

    python开发者的package 包 框架套件总结: frameworks     开发环境: anaconda pycharm django awesome-django : 介绍 django ...

  3. Mobile 抓包,代理

    Mobile代理,抓包工具 Fiddler 下载链接, 适用于Win平台.免费: Charles, 下载链接, 使用与MAC平台,收费,有30天的免费使用期,重新下载安装可以再次获得30天的免费使用时 ...

  4. aop的概念以及 cglib-nodep-2.1_3.jar第三方jia包动态代理使用

    引入 cglib-nodep-2.1_3.ja包 cglib产生的代理类是目标类的子类 定义接口,让切面都继承它,方便加入到动态代理方法 的那个类中使用 在SalaryInterceptor类中使用  ...

  5. npm下载包时代理配置

    主要有两种方式,1通过命令行临时配置,2通过配置文件进行永久配置. 1.命令行: npm install --proxy http://localhost:1080 如果有账号密码等验证的,需要在后面 ...

  6. fiddler实现手机端抓包(代理)

    一.fiddler设置代理 1.打开Fiddler->Tools->Fiddler Options在Connection面板里将 Allow remote computers to con ...

  7. Fiddler抓包手机代理配置

    参考链接:https://i.wanz.im/2013/04/30/debugging_http_request_with_fiddler/ http://www.hangge.com/blog/ca ...

  8. 下载恶意pcap包的网站汇总

    说几个我经常用的,免费的:1.  Malware  Traffic  Analysis:  http://www.malware-traffic-analysis.net/2018/index.htm ...

  9. 下载恶意pcap包的网站

    说几个我经常用的,免费的:1.  Malware  Traffic  Analysis:  http://www.malware-traffic-analysis.net/2018/index.htm ...

  10. 使用国内镜像通过pip安装python的一些包 Cannot fetch index base URL http://pypi.python.org/simple/

    原文地址:http://www.xuebuyuan.com/1157602.html 学习flask,安装virtualenv环境,这些带都ok,但是一安装包总是出错无法安装, 比如这样超时的问题: ...

随机推荐

  1. 对session.setAttribute()和session.getAttribute()的理解

    B/S架构中,客户端与服务器连接,在服务端就会自动创建一个session对象. session.setAttribute("username",username);是将userna ...

  2. markdown文字与图片对齐方式

    markdown文字与图片对齐方式 一.图片文字左右对齐 //如图所示,左文字,右图片 <div align="center"> <table rules=&qu ...

  3. vue的响应式原理:依赖追踪

    在明白原理之前,我们有很多表面现象.使用场景需要记忆.明白了原理后,你会发现它们已经不需要记了,因为从原理出发,你自己都能把它们推导出来,一切是那么的自然而然.感觉就是:这还用记吗?很明显嘛! 之前我 ...

  4. RocksDB 在 vivo 消息推送系统中的实践

    作者:vivo 互联网服务器团队 - Zeng Luobin 本文主要介绍了 RocksDB 的基础原理,并阐述了 RocksDB 在vivo消息推送系统中的一些实践,通过分享一些对 RocksDB ...

  5. AR9271无线网卡Win10配置热点

    AR9271无线网卡Win10配置热点 需要的无线网卡如下图 1 准备工作 网卡参数 Atheros AR9271是一款高性能的无网络模块,采用802.11b/g/n标准,支持2.4GH频段.它被广泛 ...

  6. Java并发(十八)----常见线程安全类及实例分析

    1.常见线程安全类 String Integer StringBuffer Random Vector Hashtable java.util.concurrent (JUC)包下的类 这里说它们是线 ...

  7. Spring系列:基于Spring-AOP和Spring-Aspects实现AOP切面编程

    目录 一.概念及相关术语 概念 相关术语 ①横切关注点 ②通知(增强) ③切面 ④目标 ⑤代理 ⑥连接点 ⑦切入点 作用 二.基于注解的AOP 技术说明 准备工作 创建切面类并配置 各种通知 切入点表 ...

  8. Mybatis-Flex核心功能之@Column

    1.是什么? MyBatis-Flex 提供了 @Column 用来对字段进行更多的配置 public @interface Column { /** * 字段名称 */ String value() ...

  9. Docker容器运行、使用、管理

    docker container [COMMAND] 命令: **exec 在容器中执行命令** export 将容器的文件系统导出为tar归档文件(和docker save的区别在于,save会记录 ...

  10. 【scikit-learn基础】--『监督学习』之 均值聚类

    聚类算法属于无监督学习,其中最常见的是均值聚类,scikit-learn中,有两种常用的均值聚类算法:一种是有名的K-means(也就是K-均值)聚类算法,这个算法几乎是学习聚类必会提到的算法:另一个 ...