小心!你通过pip安装的机器学习工具包,有可能是恶意软件。
如果你最近下载了NumPy的CUDA加速包CuPy,那么你要注意了:
cupy-cuda112这款软件包,前几天被黑客悄悄换成了一个“恶意软件”。
不过还个好消息,冒牌的软件包已经被删除了。除此之外,PyPI最近还删除了3653个恶意软件包。
整个事件的过程是这样的:
官方名称被抢注
2月26日凌晨5点,Cupy官方团队计划在这一天发布用于CUDA 11.2的CuPy工具包,因此准备在PyPI中注册cupy-cuda112这个名称。
然而,他们发现,有人居然在前一天晚上把这个软件包抢注了,而且抢注的黑客还上传了一个无效的版本v2.2.2。
此时,CuPy已经是v8.4.0了,而官方计划发布的是v8.5.0和v9.0.0b3两个版本。
CuPy团队迅速向PyPI团队提交移除cupy-cuda112的请求,然后在Twitter和GitHub的issue页向所有程序员发布公告:我们的软件被掉包了。
PyPI的处理也算迅速,到了中午11点, 假冒的cupy-cuda112软件包终于被下架。
直到3月2日,CuPy团队才发布了正版cupy-cuda112软件包,攻击事件总算告一段落。
善意的提醒
黑客为何要上传v2.2.2版,令人匪夷所思。
因为这一版本号和当前CuPy版本差距也太大了。编译代码进行版本查询,很容易就发现猫腻。黑客显然并不想瞒天过海。
这位黑客极有可能正在进行一项安全测试。
黑客名叫“RemindSupplyChainRisks”,很明显他是为了引起大家对恶意软件风险的重视。
在这个软件包注释中,他甚至直接写道:“我这样做的目的是使所有人都关注软件供应链攻击,因为风险太大了。”
所以说,这根本就是一个带着善意提醒的“恶意软件”。但是,如果真的有人利用这个漏洞来攻击别人呢,真是让人细思极恐。
假冒软件包还会向一个IP地址发送GET请求,告诉黑客有哪些人被攻击了。
这不禁让人想起,一个月前类似的事件。
当时安全研究员Alex Birsan发现,采用掉包同名软件的手法,可以攻破苹果、微软、特斯拉等公司的内部网络。
因为这些科技都有自己的私有PyPI或Node.js软件包,只要上传与之同名的恶意软件,那么程序员们使用pip、npm安装命令就可能中毒。
Brisan说,这种攻击方式的成功率简直让人吃惊,他也因此获得了多家公司的漏洞赏金。
根据PEP 841规范,项目维护者有保留软件包索引的权利,恶意软件抢注名称将被视为无效而被删除。
但是规范终究只是规范,缺乏安全审查的包管理工具风险依然存在。