PyTorch:从圣诞节到新年的机器学习工具包 PlatoBlockchain 数据智能。 垂直搜索。 人工智能。

PyTorch:从圣诞节到新年的机器学习工具包

PyTorch 是目前最受欢迎和使用最广泛的机器学习工具包之一。

(我们不会被吸引到它在人工智能排行榜上的位置——就像竞争领域中许多广泛使用的开源工具一样,答案似乎取决于你问谁,以及他们碰巧使用哪个工具包他们自己。)

该软件最初由 Facebook(现为 Meta)作为开源项目开发和发布,于 2022 年底移交给 Linux 基金会,该基金会现在在 PyTorch 基金会的支持下运行。

不幸, 该项目因供应链攻击而受到损害 在 2022 年底的假期期间,圣诞节 [2022-12-25] 和除夕前一天 [2022-12-30] 之间。

攻击者恶意创建了一个名为 torchtriton 在流行的 Python 包索引存储库 PyPI 上。

拼音作为的姓名 torchtriton 选择它是为了匹配 PyTorch 系统本身的包名称,导致危险情况 由 PyTorch 团队解释 (我们的重点)如下:

[A] 恶意依赖包(torchtriton) […] 已上传到 Python 包索引 (PyPI) 代码存储库,其包名与我们在 PyTorch 每晚包索引上发布的包名相同。 由于 PyPI 索引优先, 安装的是这个恶意包,而不是我们官方存储库中的版本. 这种设计使某人能够使用与第三方索引中存在的名称相同的名称注册一个包,并且 pip 将默认安装他们的版本。

该程序 pip, 顺便说一句, 曾经被称为 pyinstall,显然是一个递归笑话,它是 pip installs packages. 尽管它的原名是它,但它并不是用于安装 Python 本身——它是 Python 用户管理用 Python 编写的软件库和应用程序(例如 PyTorch 和许多其他流行工具)的标准方式。

被供应链骗局骗了

任何不幸在危险期间安装 PyTorch 的破解版本的人几乎肯定会在他们的计算机上植入数据窃取恶意软件。

根据 PyTorch 自己的 简短但有用 恶意软件分析,攻击者从受感染的系统中窃取了以下部分、大部分或全部重要数据:

  • 系统信息,包括主机名、用户名、系统上的已知用户以及所有系统环境变量的内容。 环境变量是一种提供程序在启动时可以访问的纯内存输入数据的方式,通常包括不应保存到磁盘的数据,例如用于访问基于云的服务的加密密钥和身份验证令牌。 已知用户列表是从 /etc/passwd,幸运的是,它实际上并不包含任何密码或密码哈希值。
  • 您的本地 Git 配置。 这是偷来的 $HOME/.gitconfig,并且通常包含有关使用流行的 Git 源代码管理系统的任何人的个人设置的有用信息。
  • 您的 SSH 密钥。 这些是从目录中偷来的 $HOME/.ssh. SSH 密钥通常包括用于通过 SSH(安全外壳)或使用 SCP(安全副本)安全连接到您自己的网络或云中的其他服务器的私钥。 许多开发人员至少保留了一些未加密的私钥,以便他们使用的脚本和软件工具可以自动连接到远程系统,而无需每次都停下来询问密码或硬件安全密钥。
  • 您的主目录中的前 1000 个其他文件小于 100 KB。 PyTorch 恶意软件描述没有说明“前 1000 个文件列表”是如何计算的。 文件列表的内容和顺序取决于列表是否按字母顺序排序; 是否在处理任何目录中的文件之前、期间或之后访问了子目录; 是否包含隐藏文件; 以及遍历目录的代码中是否使用了任何随机性。 您可能应该假设任何低于大小阈值的文件都可能是最终被盗的文件。

在这一点上,我们会提到一个好消息: 只有那些获取所谓的“夜间”或实验性软件版本的人才有风险. (“每晚”这个名称的由来是因为它是最新版本,通常在每个工作日结束时自动创建。)

大多数 PyTorch 用户可能会坚持使用 所谓的“稳定”版本,不受这次攻击的影响.

另外,从 PyTorch 的报告来看,似乎 Triton 恶意软件可执行文件专门针对 64 位 Linux 环境.

因此,我们假设此恶意程序只会在安装了适用于 Linux 的 Windows 子系统 (WSL) 的 Windows 计算机上运行。

不要忘记,尽管最有可能安装常规“nightlies”的人包括 PyTorch 本身或使用它的应用程序的开发人员——也许包括您自己的内部开发人员,他们可能拥有基于私钥的公司构建访问权限、测试和生产服务器。

DNS数据窃取

有趣的是,Triton 恶意软件不会泄露其数据(网络安全行业喜欢使用的军国主义术语,而不是 or 非法复制) 使用 HTTP、HTTPS、SSH 或任何其他高级协议。

相反,它会将想要窃取的数据加密和编码成一系列看起来像“服务器名称”的序列,这些名称属于犯罪分子控制的域名。

这意味着,通过进行一系列 DNS 查找,骗子可以在每个虚假请求中窃取少量数据。

这与 Log4Shell 黑客 在 2021 年底,谁通过 DNS 查找“名称”的“服务器”泄露了加密密钥,而这些“名称”恰好是您的秘密 AWS 访问密钥的值,从内存环境变量中窃取。

因此,对于“服务器”(如 S3CR3TPA55W0RD.DODGY.EXAMPLE 会以简单查找为幌子悄悄泄露您的访问密钥 DODGY.EXAMPLE 域。


实时 LOG4SHELL 演示解释通过 DNS 的数据泄露

[嵌入的内容]

如果您无法清楚地阅读此处的文字,请尝试使用全屏模式,或者 直接看 在YouTube上。
单击视频播放器中的齿轮以加快播放速度或打开字幕。


如果骗子拥有该域 DODGY.EXAMPLE,他们可以告诉全世界在进行这些查找时要连接到哪个 DNS 服务器。

更重要的是,即使是使用 HTTP、SSH 和其他高级数据共享协议严格过滤基于 TCP 的网络连接的网络……

…有时根本不过滤用于 DNS 查找的基于 UDP 的网络连接。

骗子的唯一缺点是 DNS 请求的大小相当有限。

单个服务器名称的长度限制为 64 个字符中的 37 个字符(AZ、0-9 以及破折号或连字符),并且许多网络将单个 DNS 数据包(包括所有随附的请求、标头和元数据)限制为每个 512 字节。

我们猜测这就是为什么本例中的恶意软件一开始会追踪您的私钥,然后将自己限制在最多 1000 个文件,每个文件小于 100,000 字节。

这样,骗子就可以窃取大量私人数据,特别是包括服务器访问密钥,而不会产生难以控制的大量 DNS 查找。

即使没有专门用于网络安全目的的任何审查,异常大量的 DNS 查找也可能会因日常操作原因而受到关注。

怎么办呢?

PyTorch 已经采取行动来阻止这种攻击,所以如果你还没有被击中,你现在几乎肯定不会被击中,因为恶意的 torchtriton PyPI 上的包已被故意替换为同名的“哑包”空包。

这意味着任何人或任何软件,试图安装 torchtriton 从 2022-12-30T08:38:06Z 之后的 PyPI,无论是意外还是设计,都不会收到恶意软件。

PyTorch 干预后的流氓 PyPI 包。

PyTorch 发布了一个方便的 IoC 列表,或者 妥协指标,您可以在整个网络中搜索。

请记住,正如我们上面提到的,即使您的几乎所有用户都坚持使用不受此次攻击影响的“稳定”版本,您也可能有开发人员或爱好者尝试“nightlies”,即使他们使用的是稳定版释放为好。

根据 PyTorch:

  • 恶意软件使用文件名安装 triton. 默认情况下,您希望在子目录中找到它 triton/runtime 在您的 Python 站点包目录中。 然而,鉴于文件名本身就是恶意软件的弱指标,将此文件的存在视为危险的证据; 不要将它的缺席视为完全清除。
  • 此特定攻击中的恶意软件具有 SHA256 和 2385b294­89cd9e35­f92c0727­80f903ae­2e517ed4­22eae672­46ae50a5cc738a0e. 同样,恶意软件可以很容易地重新编译以产生不同的校验和,因此缺少此文件并不是确定健康的标志,但您可以将其存在视为感染的标志。
  • 用于窃取以域名结尾的数据的 DNS 查找 H4CK.CFD. 如果您有按名称记录 DNS 查找的网络日志,则可以搜索此文本字符串作为秘密数据泄露的证据。
  • 恶意 DNS 回复显然去了,并且回复(如果有的话)来自名为 WHEEZY.IO. 目前,我们找不到与该服务关联的任何 IP 号码,并且 PyTorch 没有提供任何将 DNS 流量与该恶意软件联系起来的 IP 数据,因此我们不确定该信息在多大程度上用于威胁搜寻目前 [2023-01-01T21:05:00Z]。

幸运的是,我们猜测大多数 PyTorch 用户不会受此影响,因为他们不使用夜间构建,或者在假期期间没有工作,或者两者兼而有之。

但是,如果你是一个 PyTorch 爱好者,并且确实在夜间进行构建,并且你一直在假期工作,那么即使你找不到任何明确的证据表明你受到了损害......

…您可能仍要考虑生成新的 SSH 密钥对作为预防措施,并更新您上传到通过 SSH 访问的各种服务器的公钥。

当然,如果您怀疑自己遭到入侵,那么请不要推迟这些 SSH 密钥更新——如果您还没有更新,请立即进行!


时间戳记:

更多来自 裸体安全