保贝狗个人信息保护的小编今日逛新闻,发现了一个新瓜,要给大家分享。
没想到,Open ai 居然有一半的人工项目引用了有缺陷的软件包,事情是这样的:根据 Endor Labs 的数据,开源在 AI 技术堆栈中发挥着越来越重要的作用,但大多数 (52%) 项目在其清单文件中引用了已知的、易受攻击的依赖项。该安全供应商最新的依赖管理状态报告声称,在发布仅五个月后,ChatGPT 的 API 就在“不同问题领域”的 900 个 npm 和 PyPI 包中使用,其中 70% 是全新的包。
安全研究人员去年 12 月在流行的开源注册表 npm 中发现了 400 多个恶意软件包,在 PyPI 中还发现了数十个恶意软件包。Sonatype 在一篇博客文章中解释说,其 AI 工具发现了 422 个恶意 npm 软件包,主要通过拼写错误或“依赖混淆攻击”进行数据泄露。 此外,它还在 PyPI 中发现了 58 个恶意软件包,其中包括严重混淆的 Discord 令牌窃取程序。
自 2019 年以来,供应商标记为恶意的开源软件包总数已接近 104,000 个。这些开源组件在开发项目中几乎无处不在,因为它们提供了加快上市时间的有用方法。 目前,四大生态系统的年需求量预计超过 3 万亿美元。然而,网络犯罪分子越来越多地将恶意软件插入到软件包中,希望开发人员在不知情的情况下下载它们。
自 12 月起引起 Sonatype 关注的恶意软件包中,有几个针对 macOS 开发者环境,其中包括加密库 Cobo Custody Restful 的受感染版本。
“攻击者利用了这个软件包没有通过 PyPI 注册表进行正式分发的事实,”Sonatype 解释道,“通过在 PyPI 上上传同名的受感染版本,攻击者期望开发人员使用的包管理器 (pip) 会优先考虑恶意版本而不是合法的 GitHub 版本。”
该供应商还检测到了另外 6 个针对 Python 开发人员的 PyPI 软件包,其策略相同——以一种新颖的方式结合了远程访问木马和信息窃取程序的功能。Sonatype 解释道:“这些恶意软件包的名称包括 easytimestamp、pyrologin、disorder、discord-dev、style.py 和 pythonstyles,会启动一个 PowerShell 脚本,该脚本会获取 ZIP 文件,并以 RAT 方式安装 pynput、pydirectinput 和 pyscreenshot 库,从而允许攻击者控制目标的鼠标和键盘,并进行屏幕截图。”“此外,这些恶意软件包也是窃取者,能够提取敏感信息,例如保存的密码、加密货币钱包数据和 cookie。 他们还寻求安装 Cloudflare,这是 Cloudflare Tunnel 的命令行工具,它允许通过基于 Flask 的应用程序远程访问受感染的计算机。”
根据 Sonatype 最新的软件供应链状况报告,过去三年此类恶意活动增加了 743%。
Endor Labs 警告说,对于任何开源项目,必须管理与易受攻击的依赖项相关的安全风险。Osterman Research 首席分析师 Michael Sampson 表示:“看到最新一代的人工智能 API 和平台以他们现有的方式捕捉公众的想象力确实非常棒,但 Endor Labs 的这份报告生动地证明了他们的安全性并没有跟上步伐。更多地采用能够更快地识别和自动修复潜在弱点的技术将在这个关键领域产生巨大的变化。”
不幸的是,组织似乎不仅低估了开源依赖项中 AI API 的风险,而且还低估了一般安全敏感 API 的风险。报告称,超过一半 (55%) 的应用程序在其代码库中调用了安全敏感 API,但当包含依赖项时,这一比例将上升至 95%。Endor Labs 警告说,ChatGPT 等大型语言模型 (LLM) 技术在对可疑代码片段的恶意软件潜力进行评分方面表现不佳。 结果发现,OpenAI GPT 3.5 的准确率仅为 3.4%,而 Vertex AI text-bison 的表现也好不到哪里去,为 7.9%。“这两种模型都会产生大量误报,这需要手动审查工作,并阻止自动通知相应的程序包存储库以触发程序包删除。 ”。
现在我们来简单了解下什么是预防依赖混淆攻击
依赖关系混淆是一种软件供应链漏洞,它利用某些包管理器中的怪癖来注入不需要的(并且可能是恶意的)代码。
这些攻击基于以下事实:许多包管理器在私有注册表之前检查包的公共代码注册表。 因此,如果私有注册表中存在包,攻击者就可以向公共注册表注册同名的包。 然后,当发生新安装时,公共注册表中的恶意版本将被拉入。
依赖性混淆是一种相对新颖的软件供应链攻击类型。 开发者 Alex Birsan 在 Medium 上的 2021 年博客文章中透露了这一点。 最初的披露影响了苹果、PayPal、微软和 Yelp 等大公司。 (这被认为是一件大事,Birsan 获得了超过 130,000 美元的错误赏金。)
我们详细介绍依赖关系混淆的几个方面,包括不良行为者如何识别私有注册表中的包以及防止攻击的策略。
依赖混淆攻击如何运作
许多流行的编程语言都有关联的包管理器。 其中包括 pip(适用于 Python)、Cargo(适用于 Rust)、RubyGems(适用于 Ruby)和 npm(适用于 Node.JS 和 Javascript)等。包管理器自动执行安装和更新依赖项的过程。 而且,许多包管理器都连接到公共代码注册表。 例如,npmjs 是 npm 包管理器的公共注册表,PyPI 是 pip 包管理器的存储库。
许多组织还使用私有注册表,这使开发团队能够轻松共享和重用专有代码。 但是,由于在私有存储库中发布的包不会同时推送到公共存储库,因此两个地方都可以存在同名的包。
那么,当组织想要使用在私有和公共存储库上具有相同名称版本的包时,会发生什么情况呢? 任何在私有注册表之前或之外检查公共注册表的包管理器都会面临依赖性混乱。 如果具有相同名称的包发布到公共注册表,那么包管理器将看到它并尝试将其拉入(pip 和其他管理器存在一些细微差别,但总体思路是一致的)。
当然,这提出了另一个问题:不良行为者首先如何在私人注册表中找到软件包? Birsan 在他的 Medium 帖子中记录了他的经历:“对一些目标公司的私人软件包名称进行了整整几天的搜索后发现,在 GitHub 以及主要的软件包托管服务上(在意外发布的内部软件包中,甚至在各种互联网论坛的帖子中)都可以找到许多其他名称。然而,到目前为止,查找私有包名称的最佳位置是……在 javascript 文件中。显然,内部 package.json 文件(包含 javascript 项目依赖项的名称)在构建过程中嵌入到公共脚本文件中,从而暴露内部包名称是很常见的。同样,这些文件中泄漏的内部路径或 require() 调用也可能包含依赖项名称。 苹果、Yelp 和特斯拉只是以这种方式暴露内部名称的公司的几个例子。”
防止依赖混淆漏洞
防御依赖混淆攻击的一种非常有效的方法是在默认/公共注册表上保留(即占用)包名称或命名空间。 这可以防止配置修改意外地将项目暴露于漏洞。即使现在被设置为能够避免依赖混乱的系统也很容易出现错误,从而使项目暴露在攻击向量之下。 通过从源头(公共注册表)防止攻击,任何人为错误都不会导致项目暴露。在注册表方面执行此操作非常容易。 但是,如果命名空间或包名称已经被保留,那么开发人员将需要在内部更改包名称,这会很麻烦。
在 npm 中保留命名空间
让我们考虑一下 CompanyP 在 npm 上的假设情况。 在这里,我们最好保留像 @companyp 这样的名称,并在 @companyp/<packagename> 下发布包。 但是,如果 companyp 已经被占用,我们可能会选择一个替代者,例如@companyppro。 现在,CompanyP(而且只有 CompanyP)可以在 @companyppro 下发布。但是,如果我们的内部代码仍然使用从内部注册表中提取的 @companyp,那么我们仍然会在 npm 发布上暴露给拥有 @companyp 的人(假设我们的配置允许访问 npm)。 在这种情况下,我们建议更新所有内部代码以包含具有命名空间 @companyppro 的包,该名称空间在我们的控制之下。
在 PyPI 中保留包名称
截至今天,PyPI 没有命名空间,因此每个私有包都应该有一个同名的公共包。在所有情况下,域名抢注包不应包含专有代码 – 它应该只是一个空包。 另外,让包在使用后立即抛出错误也会很有帮助; 这样,如果不小心拉入,可以尽快识别。
编者注:本节中的建议并不全面。 为了演示目的,他们仅检查 npm 和 python。 其他包管理器可能会受到影响,即使此处未提及。
摘抄2022年12月恶意软件(参考)
此参考来自2022 年 12 月《恶意软件期刊》,其中,在 npm 注册表中发现了 422 个恶意软件包,主要通过误植或依赖混淆攻击进行数据泄露,包括:ajax-cuuu、angular-nanoscroller、angular-stateful-fastclick、arcgis-charts-shared-utils、arcgis-components、aws-postgres-rotator、aws-rfdk-project、bluebird.node、chart.js-latest、datagrid- text、datagrid-web、jfrog-alfheim、phup.js、react-router-susanin、reactjs-slick、yandex-html5-video-player、yandex-tjson 等等。
在 PyPI 中捕获了 58 个恶意软件包,包括严重混淆的 Discord 令牌窃取程序 proxier-api 和 nitro-api66。 需要注意的是,这里我们仅介绍了我们的人工智能系统在进入您的构建环境之前标记的数百个恶意软件包中的几个。
那些引起我们注意的
MacOS 攻击
AI 检测到的一些恶意软件包针对使用 Mac 计算机的开发人员。 例如,在 cobo-python-api 中,威胁行为者利用依赖关系混淆来诱骗开发人员下载加密库 Cobo Custody Restful 的受污染版本。他们利用了这个包没有通过 PyPI 注册表进行正式发行的事实。 通过在 PyPI 上上传同名的受感染版本,攻击者期望开发人员使用的包管理器 (pip) 会优先考虑恶意版本而不是合法的 GitHub 版本。
他们希望实现什么目标?
该技术众所周知并广泛使用:将恶意代码包含在安装脚本 setup.py 中,以便开发人员在运行命令 pip install 时立即部署恶意软件。如果我们查看 setup.py,我们会发现检查计算机操作系统的代码,如果是 MacOS,它会解码代表两个命令的 4 个十六进制字符串的串联:
下载文件 slack-helper 并使其可执行,并且
在后台运行二进制 slack-helper 并丢弃输出日志。 那时,我们的人工智能系统已经收集了足够多的信息来认为这个包裹可疑。 该二进制文件已被其他四家供应商标记为恶意软件。
RAT 变体(反向访问木马 + 窃取程序)攻击供应链
我们的系统受到标记,并通过特定策略帮助击落了六个攻击 Python 开发人员的恶意软件包——通过结合远程访问木马 (RAT) 和信息窃取程序的功能,这些软件包是我们以前在 PyPI 注册表中从未见过的奇怪突变。
这些恶意软件包的名称包括 easytimestamp、pyrologin、disorder、discord-dev、style.py 和 pythonstyles,会启动一个 PowerShell 脚本,该脚本会获取 ZIP 文件,并以 RAT 方式安装 pynput、pydirectinput 和 pyscreenshot 库,从而允许攻击者控制目标的鼠标和键盘并截取屏幕截图。
如果您不熟悉 RAT,它是一种恶意软件,允许攻击者远程访问和控制受感染的计算机。 它使攻击者能够查看、复制和修改文件,并监视受害者的活动。 一旦 RAT 安装在系统上(在本例中使用简单的 pip install 命令),它就会与攻击者拥有的命令和控制 (C&C) 服务器建立连接,从该服务器不仅可以控制一台,还可以控制多台受感染的计算机。
此外,这些恶意软件包也是窃取者,能够提取敏感信息,例如保存的密码、加密货币钱包数据和 cookie。 他们还寻求安装 Cloudflare,这是 Cloudflare Tunnel 的命令行工具,它允许通过基于 Flask 的应用程序远程访问受感染的计算机。
执行 shell 命令、下载和执行远程文件、窃取文件和目录,甚至运行任意 Python 代码是 Phylum 更详细地描述的这种新颖攻击的一些功能。
PyTorch 扑灭大火
PyPI 代码存储库中每晚构建的用户以一份意想不到的礼物结束了他们的假期:恶意依赖链妥协。 机器学习框架 PyTorch 披露了此次攻击,称该攻击仅影响 PyTorch-nightly 版本的用户,而不影响 PyTorch 稳定包的用户。
2022 年 12 月 25 日至 12 月 30 日期间,夜间构建下载了一个名为 torchtriton 的库,这是一个在导入时执行恶意二进制文件的依赖项。 PyTorch 删除了作为夜间包依赖项的假冒库,并将其替换为在 PyPI 上注册的虚拟包,以防止类似的攻击。
Sonatype 的 Ilkka Turunen 调查了该事件的细节以及供应链攻击中依赖混淆的机制。
反向shell入侵
在之前的《恶意软件月刊》文章中,我们讨论了一系列恶意软件包,这些软件包使用一种称为反向 shell 的技术在攻击者和目标之间建立后门连接。 上个月,我们的 AI 系统捕获了其他利用相同攻击向量的软件包,例如 aidoc-consul、aidoc.genmfa 和 aidoc-e2e-utils。
如果我们看一下其中一个包 aidoc-consul,并解码 base64 字符串,我们会找到命令
这里的攻击者试图在端口 771 上创建到 IP 3.221.152.203 的 TCP 连接,并运行在该连接上发送的 shell 命令,并将命令的输出重定向到 /dev/null,以便它不会出现在终端中。 另一个软件包 Discord 使用了类似的策略,但尝试下载恶意 Python 脚本来执行命令。
更恶意的 __import__ 潜伏在阴影中
按照我们在上个月的版本中描述的技术,我们的自动化系统在 PyPI 上捕获了一系列包,这些包通过使用空格来隐藏其 setup.py 文件中的导入语句,以造成没有可见恶意代码的错觉。
为了刷新您的记忆,当您缩小代码编辑器窗口时,您可以显示隐藏的恶意代码:
这种技术可能会欺骗人眼,但不会欺骗我们人工智能工具的高级眼睛。
pywz、https-rot、aio3、pxhttp、Pycolorio、instantcolor、AutoRequirements、硝基检查器、SeleniumWebdriver 和 BetterColors 等软件包被我们的系统标记为可疑,后来被我们的安全研究团队确认为恶意软件包。 这些软件包都试图做同样的事情:从远程 URL 下载并执行恶意代码。
渗漏检测
如果您问我们的 AI/ML 系统几乎实时捕获的大多数包的共同目标是什么,我们会说将数据泄露到恶意服务器。 机器的正常运行时间、操作系统版本、操作系统版本、系统名称和主机 IP 详细信息等信息通常作为概念验证 (PoC) 或错误赏金计划的一部分而被泄露。 我们的系统标记了数百个这样的包。
使用在大多数情况下不会造成太大危害的简单技术,无论如何,这些包都必须保留在构建环境之外:一些泄露的数据可能是敏感的或导致更复杂的攻击。
例如,hubplus 库不仅利用依赖混淆来获得比上传到 GitHub 的官方版本更高的优先级,而且还窃取数据。 setup.py 中的恶意代码使用“requests”库向 URL hxxps[:]//cdmfmb12vtc00005adp0g8mk8pryyyyyp[.]oast[.]fun 发送 HTTP GET 请求,以窃取主机名、当前工作目录和用户名。
你不希望你的机器向其他人泄露信息,我们标记了试图做到这一点的软件包typing-extnesions、ulrlib3、btoocore、paquete-malicioso1、edenred、edenred- payment、python-edenred- payments、skdh、nnabla-dataset-uploader、hayhanuman、thisismanan 和 oscscreen。
自动防御供应链攻击
自 2019 年以来,我们总共发现了 103,850 个被标记为恶意、可疑或概念证明的软件包。 上面提到的这些只是冰山一角。
Sonatype 的系统使用 ML/AI 技术来识别公共存储库中新发布的组件的异常属性。
通过我们的工具的近实时检测功能提供的数据有助于防止我们的客户无意中消耗恶意组件。
Sonatype Repository Firewall 的用户可以放心,因为他们知道此类恶意软件包将被自动阻止到达其开发版本。