背景
我最近开始对 PyPI 上的大部分包进行大规模静态分析。使用Python Packaging Authority 的Bandersnatch,下载 PyPI 上目前可用的近 330k 包中的大约 200k 相对容易。在这项研究中,我小心地排除了过大的发行版,只拉取最新版本的软件包,并配置了较少数量的工作人员以避免对 PyPI 的服务器施加过大的压力。
一旦我 下载了大量的软件包发行版,我需要提取它们以便于分析。我将一个非常简单的 Python 脚本放在一起,以递归方式遍历 Bandersnatch 有点复杂的文件夹结构,然后将每个 sdist、egg 或轮子解压缩并提取到一个平面目录中。提取后,我使用 grep 运行了许多字符串和正则表达式搜索,然后手动查看结果。
这种简单方法的结果实际上非常有影响力。我最终在一家商业公司提供的开源包中发现了一个小漏洞。连同托管在 PyPI 上的三个本质上是恶意的包,我将在下面概述。
木马安装包
我发现的第一个包是aws-login0tool,这似乎是一个拼写错误的尝试(在大多数键盘上就在0
旁边-
)。我发现这个包是因为它在我查看的多个文本搜索中被标记,因为它是setup.py
Python 包中恶意代码最常见的位置之一,因为在安装时可以在那里执行任意代码。具体来说,我通过查找发现了这一点,import urllib.request
因为这通常用于窃取数据或下载恶意文件,它也是由from subprocess import Popen
它触发的,这有点可疑,因为大多数包不需要执行任意命令行代码。
查看文件本身,它显然是恶意的。它执行标准包安装,然后.exe
在尝试执行.exe
.
我还分析了相关.exe
问题,VirusTotal 能够轻松将其标记为已知木马。
该软件包于 12 月 1 日首次添加到 PyPI,我于 12 月 10 日将其报告给 PyPI 管理员。不幸的是,PyPI 下载统计数据在这段时间内受到了一个事件的影响,但在 12 月 12 日回填后,这个包似乎被下载了近 600 次。
数据泄露包
我还能够找到自 2021 年 2 月以来一直存在于 PyPI 上的同一用户上传的两个包,dpp-client和dpp-client1234。两者都试图实现相同的结果,即在安装期间收集环境详细信息并将其发送到未知的 Web 服务。虽然 VirusTotal 没有标记目标域,但这种行为仍然是粗略的 AF。
和之前的木马包一样,我也通过import urllib.request
字符串识别了这些包。仔细分析后,此安装将尝试收集环境变量、文件列表,并且似乎专门寻找与Apache Mesos相关的文件。
这里的坏消息是dpp-client,这两个软件包中更受欢迎和更彻底的一个在去年的下载量超过了10,000 次,其中上个月的下载量超过了 600 次。更糟糕的是,这两个包都包含了它们的源代码 url 作为现有的流行库,所以任何人在 PyPI 中浏览包或分析库的流行程度都会看到大量的 Github 星和叉——表明良好的声誉。
外卖
这对我来说是一个非常有趣的项目。即使采用不太科学的方法,并且只分析了 2/3 的可用包,我也很快发现了已发布代码中的实际漏洞,更令人担忧的是发现托管和下载的恶意代码活跃使用。
随着时间的推移,我将继续更新和完善我对这些包的分析,并将分享任何其他发现。
非常感谢 Python 安全团队在收到通知后提示删除已识别的包。七爪网源码交易平台_网站源码_商城源码_小程序源码平台_分销商城-七爪网