PyTorch 夜间构建版本存在恶意依赖包事件总结
事件背景
2022年12月25日至12月30日期间,安装了PyTorch夜间构建版本的开发者被建议卸载该版本并清除pip缓存,以移除一个恶意依赖包。该事件由PyTorch维护者披露,凸显了软件供应链攻击的新趋势。
攻击方式
此次供应链攻击源于一个被推送到PyPi的恶意依赖包,其名称与PyTorch夜间构建版本中使用的包相同。由于PyPi索引优先,恶意包被默认安装,而非官方仓库中的版本。这种攻击方式被称为依赖混淆。
恶意包的功能
恶意包名为torchtriton,其包含的二进制文件会窃取系统信息,包括主机名、DNS配置、用户名、shell环境等,并将/etc/hosts、/etc/passwords、~/.gitconfig、~/.ssh/*以及用户主目录下的前1000个文件上传到外部服务器。值得注意的是,只有在用户显式导入triton包时,信息才会被窃取,这降低了攻击的影响范围。
攻击的特点
- 依赖混淆:攻击者通过注册与第三方索引中同名包的方式来实施攻击。
- 反检测技术:
torchtriton使用了反虚拟机技术和混淆手段来逃避检测。 - 攻击者声称无害:恶意包的维护者声称其行为并非恶意,而是出于伦理研究目的,但这一说法难以令人信服。
防御建议
Endor Labs安全研究员Henrik Plate指出,依赖混淆攻击可以通过使用私有仓库来托管内部包和镜像外部包来应对。例如,Python生态中的devpi是一种解决方案,但其设置和操作需要一定的工作量,并且只有在本地开发者客户端正确配置时才能生效。
PyTorch的应对措施
PyTorch维护者迅速采取行动,移除了torchtriton依赖,并用pytorch-triton替代。此外,他们在PyPi上注册了一个虚拟包,以确保类似攻击不会再次发生。
事件启示
此次事件再次提醒开发者和管理员关注软件供应链安全,特别是在使用第三方依赖时,应加强审查和监控,以防止类似攻击的发生。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。