跳至内容

恶意软件分发和域名滥用

一个名为 yocolor 的包被上传到 PyPI,旨在帮助将恶意软件分发给目标。

该包已从 PyPI 中删除,从而减少了其对用户的潜在影响。

此事件不同于通常的恶意软件包删除,因为它涉及一个域名,该域名在攻击中被用于托管恶意软件分发的第二阶段。

Checkmarx 安全研究团队已 在其博客上发布了详细的博客,介绍了特定行为 - 请阅读他们的报告以了解其工作原理。

由于 PyPI 仅涉及 Checkmarx 所称的攻击的“第一阶段”,因此我将在此重点介绍包删除和域名滥用后续行动。

时间线

  • 2024-03-05 01:09 UTC - 包 yocolor 版本 0.4.6 上传
  • 2024-03-05 06:17 UTC - 来自 Phylum 研究人员的第一个入站报告
  • 2024-03-05 23:40 UTC - 来自独立研究人员的第二个入站报告
  • 2024-03-06 17:16 UTC - 包 yocolor 从 PyPI 中删除
  • 2024-03-06 17:20 UTC - 发送电子邮件至域名注册商,关于 pypihosted.org 的滥用情况
  • 2024-03-12 08:00 UTC - 注册商回复,他们已通知域名持有者
  • 2024-03-18 - pypihosted.org 域名名称服务器已删除
  • 2024-03-25 - Checkmarx 博客发布

在阅读 Checkmarx 博客时,他们展示了从同一用户注册的另一个域名,具有类似模式:pythanhosted.org。我仍然不清楚这个域名是如何使用的,因为我在 PyPI 上找不到它的记录,但它是同一个实体,同一个注册商注册的。

这次,我联系了注册商,以及 Cloudflare,他们的名称服务器在那里配置。

  • 2024-03-25 18:30 UTC - 发送电子邮件至域名注册商,关于 pythanhosted.org 的滥用情况
  • 2024-03-25 17:05 UTC - 滥用报告 提交给 Cloudflare
  • 2024-03-25 17:06 UTC - Cloudflare 自动回复,澄清我可能不会收到进一步的通知。
  • 2024-03-29 20:47 UTC - 注册商回复,他们已通知域名持有者
  • 2024-04-04 - pythanhosted.org 域名名称服务器已删除

整体影响

在它在 PyPI 上运行的时间段内,yocolor 项目总共被下载了 116 次。

其中许多下载来自包镜像(bandersnatch 等),将包复制到他们自己的基础设施中。其他下载可能来自安全检查和分析,包括我们自己的。

例如,研究人员可能会下载一个包以检查其内容,当他们将其报告给 PyPI 时,PyPI 管理员会重新检查该包,这将算作另一次下载。

没有明确的方法来确定有多少最终用户将该包安装到实际执行恶意软件的环境中,但正如 Checkmarx 博客所证明的那样,至少有一些用户对目标对象产生了更广泛的影响。

技术:伪装

在包元数据中,攻击者使用指向包 colorama 创建者 GitHub 帐户的链接,以创造一种合法感。这种技术也被称为 StarJacking

colorama 是一个流行的包,被 clickpip-tools 等包使用。这不是攻击者第一次使用以“颜色”为主题的包来分发恶意软件。

在选择要安装的包时,请确保您正确输入包名称,或者甚至直接从 PyPI 复制它以避免拼写错误。

虽然这永远不能保证安全,但这是一个良好的做法,可以最大限度地减少拼写错误攻击的风险。

更重要的是,如果您不认识的人建议您 pip install 某些东西(或类似的包管理器命令),这通常是停下来考虑建议来源的时候。

服务提供商响应

注册商

我重新阅读了 ICANN注册商滥用报告,从我的非专业解释来看,我相信注册商是在政策范围内运作的。我发现有趣的是,注册商花了 6 天时间才回复了最初的报告,只是告诉我他们已将其发送给域名注册人(大概是攻击者),这本身似乎是处理滥用报告的错误方式。

响应时间似乎比我预期的要长,但鉴于 ICANN 似乎没有设置任何 SLA 或预期,我只能假设注册商是在其自己的内部指南中运行的。

托管提供商

此攻击中使用的域名都托管在 Cloudflare 上,如其名称服务器所示。

当向 Cloudflare 报告恶意软件滥用时,他们的表格指出

由于 Cloudflare 无法从网站上删除内容,因此我们的做法是将滥用投诉转发给托管提供商和/或网站所有者以进行后续跟进。

该表格显示了两个不能取消选择的复选框,表示报告的详细信息将转发给网站托管提供商和网站所有者。

这引起了我的注意,要意识到提交的任何内容都可能与涉嫌攻击者共享。

Cloudflare 在我提交后的几分钟内通过电子邮件发送了一封自动回复,确认已收到,并提醒我他们可能不会与我进行后续跟进。

域名可见性

我能够从 CompleteDNS 中获取一些关于域名历史的详细信息,以帮助构建时间线。

以下是这两个域名的域名历史记录的几个屏幕截图

Screenshot detailing the history of domain name registration for pypihosted.org. The domain was created on February 3, 2024 and the nameservers were updated three times. The domain was then dropped on March 18, 2024. Screenshot detailing the history of domain name registration for pythanhosted.org. The domain was created on March 15, 2024. The domain was then dropped on April 4, 2024.

可能还有其他服务提供类似信息,但我发现这个在这种情况特别有用。如果您有喜欢的其他服务,请告诉我!

最后的想法

从 PyPI 安装包是一种信任关系,我希望这种透明度有助于增强这种信任。凭借我们志愿者 PyPI 管理员、安全研究人员社区以及更广泛的 Python 社区的警惕性,我们都可以共同努力实现更安全的软件分发。

这里完成的这种后续工作不是志愿者通常有时间做的事情,我感谢他们提供的支持,以确保这些活动能够顺利进行。

阅读我们如何 改进恶意软件报告,以将安全社区与 PyPI 管理员联系在一起。

在这个领域还有很多工作要做,我们正在招聘一位支持专家 来帮助我们管理不断增长的容量,并让我们能够跟上 PyPI 似乎势不可挡的增长。

加入我们!


我的角色得到了 Amazon Web Services Open SourceGeorgetown CSETPSF 及其赞助商的支持。