LWN:进一步分析PyPI上的软件恶意命名攻击!

关注了就能看到更多这么棒的文章哦~

Further analysis of PyPI typosquatting

By Jake Edge
October 14, 2020
DeepL assisted translation
https://lwn.net/Articles/834078/

我们之前已经研究过 Python Package Index(PyPI)等软件仓库中的类似命名的 package 的问题。一般来说,恶意上传者在创建这些 package 时,起的名字会容易被误认为是版本库中一些合法 package,这就是利用了 "typosquatting(排版) "的漏洞。自从我们 2016 年发布的文章以来,这个问题并没有消失(这并不奇怪)但最近有一些对此类的分析,并努力在想办法跟这种行为作斗争。

在 IQT 博客上,John Speed Meyers 和 Bentz Tozer 最近发布了他们所做的一些分析,可以对 PyPI typosquatting attach 进行量化和分类。他们首先查看了从 2017 年到 2020 年针对 PyPI 用户的实际攻击实例,发现在这个时间段内有 40 个独立的攻击实例。他们判断这些攻击案例的标准是,检测到该软件包名称与 PyPI 中的另一个软件包名称相似、并包含恶意软件、而且被识别出来且从存储库中删除了。

他们确定了两种类型的 package typosquatting 错误:拼写错误(misspelling)和混淆(confusion)。第一种类型是靠把 package 的名字进行微小的拼写改动,比如用 djanga 代替 django 或 urlib3 代替 urllib3。混淆攻击则依赖于改变名称中 "单词" 的顺序(例如 nmap-python 而不是 python-nmap)、删除或改变分隔符(例如 easyinstall vs. easy_install)、或以其他方式改变名称中的元素(例如 crypt/crypto,python-sqlite/pysqlite)。在发现的 40 个攻击案例中,18 个是拼写错误的类型,而 24 个是混淆性的。有两个案例是同时拥有这两种特征,所以都算在里面了。

博文中指出 William Bengston 曾对一种特定类型的混淆攻击做了些研究:分隔符变动(separator changes)。2018 年 7 月,Bengston 在 PyPI 上注册了大约 1100 个包,名字仅仅是把 PyPI 上前 10000 个包名中的所有分隔符(即-或者_)删掉了。这些软件包在安装时会简单地报出错误,该错误信息会将用户重定向到正确的软件包名称。

在两年多一点的时间里,总共有 530,950 个 pip install 操作试图安装这 1,131 个软件包!这还不包括那些镜像站或公司内部镜像服务器的数据。大家已经知道,PyPI 中的恶意包会窃取存储在本地文件系统中的密钥数据,比如~/.ssh/中的 SSH 密钥,GPG 密钥,或者是~/.aws/credentials 中存储的 AWS 认证信息。如果这些 typosquat 包是恶意攻击者提供的话,我们把每次安装都简单算作一次攻击尝试,那就意味着在这两年时间里有 530,950 台机器可能被攻击了。

IQT 研究人员发现,分隔符攻击在他们所研究的 typsquatting 事件中只占了一小部分。所以,被 typosquatting 方式攻击的系统数量可能远高于此。"总数 40 个的案例中,分隔符攻击在 26 次混淆攻击中只有 3 次,这表明 Bengston 对 PyPI 用户遭受 typosquatting 攻击的估计虽然看起来已经很可怕了,但其实是整体用户遭受排版问题攻击的数量下限。"

正如大家所猜测的那样,这种攻击者将他们的关注点集中在最流行的 PyPI 包上。IQT 研究人员发现,他们 28% 的攻击实例都在对 top 50 的流行 PyPI 包进行名称改动,超过一半的攻击(63%)是针对前 500 名的。

我们显然需要能检测出 typosquatting attach,或者在一开始就防止这类包被创建。可以使用两个名字之间的 Levenshtein distance 来检测错别字攻击。这个指标是衡量将一个字符串变成另一个字符串所需变化的单个字符数量。研究人员发现的拼写错误中,有 15 例是 distance 为 1,有 3 例是 distance 为 2。虽然事实上可能一个包的名字是因为合理原因与现有的包仅有一点点差异,但这个指标可以作为进行管理员审查的理由。但是另一类(混淆攻击)的 distance 一般都是三或更多(24 个中的 17 个都是这样),使得它们更难被(自动)检测出来。

Python 已经做出了一些努力来帮助减少拼写攻击问题。在 2017 年,增加了代码来阻止那些新增的名字与标准库模块相同的 PyPI 包。不过现存的 PyPI 重名包并没有被移除,其中有些是对把新功能移植回旧版本,但这些包也在进行审查来确定其是否有效。也将一些恶意软件检查功能添加到了 Warehouse (支撑 PyPI 的网络应用)中。

研究人员还注意到了几篇论文,介绍了如何检测和阻止恶意软件从 PyPI 等包存储库中发布。其他语言资源库,例如 JavaScript 的 npm 和 Ruby 的 RubyGems,在这些论文中也有经过调查。一个主要来自堪萨斯大学的团队专门研究了 npm 和 PyPI 的 typosquatting 攻击的防御措施(https://arxiv.org/pdf/2003.03471.pdf ),而佐治亚理工学院的一个团队 "建立了一个复杂的反恶意软件分析流水线,软件仓库可以利用它来发现隐藏在仓库中的恶意软件,包括 typosquatter 攻击方式"(https://arxiv.org/pdf/2002.01139.pdf )。有个标题很有趣的论文,即 "Backstabber's Knife Collection: A Review of Open Source Software Supply Chain"(https://arxiv.org/pdf/2005.09535.pdf ),它分析了 200 个来自 npm、RubyGems 和 PyPI 的恶意软件包,试图根据现有恶意软件包的特征,提取可用于检测新恶意软件的信息。

当然,还有一个更严厉的解决方案:将软件包与其维护者的真实身份关联起来。正是由于软件包的半匿名性使得这类攻击很容易实施,而且实施攻击的个人风险很小。像 PyPI(以及 GitHub 等仓库)这样的版本库的自由度有很多优点,但也有一些缺点。当然,另一方面,攻击者当然也会想方设法绕过一些 ID 检查措施,或者想方设法伪装成另一个无辜者的身份来进行攻击。需要能找到不依赖警方的介入就阻止这些攻击的方法。

更好地审查软件包,这是另一个潜在解决方案,但这个方案并不很实用。进入这些存储库的更改数量非常多,超出了管理员精力能处理的范围。即使是大型商业公司也无法处理这个问题,众所周知,各种应用商店也都会存在恶意软件,所以像 Python 这样的项目甚至无法开始追上他们。看起来自动化工作正在慢慢地得到一些改善,但在未来几年,相信在 PyPI 和其他地方也会看到更多的恶意 typosquatting 攻击的。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值