PyTorch机器学习框架遭遇恶意依赖供应链链攻击。
与Keras 和 TensorFlow类似,PyTorch是基于Python/ target=_blank class=infotextkey>Python的开源机器学习框架。PyTorch广泛用于计算机视觉和自然语言处理任务。12月31日,PyTorch团队称其发现了PyTorch中的恶意依赖,受到供应链攻击。
供应链攻击
PyTorch团队识别出了一个与PyTorch框架'torchtriton'库名字一样的恶意依赖。攻击者在PyPI中上传了一个与torchtriton'库名字一样的恶意依赖库,实现了供应链攻击。因此,攻击者可以通过依赖攻击向量来识别成功入侵开源学习框架。
恶意torchtriton库的主要功能包括:
获取系统信息:
来自/etc/resolv.conf 的nameservers;
来自gethostname() 的hostname;
来自getlogin() 的当前 username;
来自getcwd() 的当前working directory name。
环境变量;
读取系统文件:
/etc/hosts
/etc/passwd
$HOME/*
$HOME/.gitconfig
$HOME/.ssh/*
并通过到域名*.h4ck[.]cfd的加密的DNS查询来上传包括文件内容在内的以上信息,使用的DNS服务器为wheezy[.]io。文件上传功能的文件大小限制为99999字节,还会上传$HOME 目录的前1000个文件。
修复补丁
PyTorch团队建议通过2022年12月25日到12月30日之间通过pip安装PyTorch的用户,尽量卸载torchtriton和PyTorch,并使用12月30日之后的最新版本。卸载恶意依赖库的命令如下:
$ pip3 uninstall -y torch torchvision torchaudio torchtriton$ pip3 cache purge
PyTorch团队已经将'torchtriton'库重命名为'pytorch-triton'以预防潜在的类似攻击。
图 PyTorch重命名'torchtriton'库
此外,用户还可以通过以下命令来确定是否受到该供应链攻击的影响:
python3 -c "import pathlib;import importlib.util;s=importlib.util.find_spec('triton');affected=any(x.name == 'triton' for x in (pathlib.Path(s.submodule_search_locations[0]if s is not None else '/' ) / 'runtime').glob('*'));print('You are {}affected'.format('' if affected else 'not '))"
截止2021年12月31日,BleepingComputer发现恶意'torchtriton' 依赖在上传一周内已经下载超过2300次。
https://pytorch.org/blog/compromised-nightly-dependency/#how-to-check-if-your-python-environment-is-affected
参考及来源:https://www.bleepingcomputer.com/news/security/pytorch-discloses-malicious-dependency-chain-compromise-over-holidays/