利用Discord攻击主流软件供应链的技术分析

安全研究人员发现新型供应链攻击,攻击者通过在PyPI、npm和RubyGems包中植入恶意代码,利用Discord Webhook作为C2服务器窃取敏感数据。文章详细分析了恶意代码的工作原理和感染机制。

PyPI、Ruby、npm - 利用Discord攻击主流软件供应链

这并非攻击者首次针对软件供应链。不久前我们曾报道过npm开源库遭受攻击的事件,现在又出现了新的威胁 - 隐藏在PyPI、Ruby以及上述npm包中的恶意软件。

TLDR摘要

  • Socket公司的安全研究人员发现新的攻击向量,恶意代码被植入npm、PyPI和Ruby包中
  • 恶意软件的任务是窃取敏感信息
  • Discord被用作C2服务器
  • 攻击规模尚不清楚,仅知多个生态系统中的一系列包受到感染

攻击技术细节

安全研究人员从Socket.dev识别出一系列受恶意软件感染的软件包,其主要任务是窃取敏感信息并将其发送到攻击者控制的频道。通信通过Discord平台进行,具体是利用了Discord Webhook机制。

什么是Webhook?

Webhook可定义为应用程序之间在发生特定事件后自动交换数据的PUSH机制。它通过向预先设定的接收方URL发送HTTP请求(通常是POST),携带关于该事件的详细信息。这些信息通常以JSON格式记录,并附带元数据,允许额外验证消息来源。在Discord中,Webhook具有类似功能,但信息被传输到服务器上的特定频道。

为什么选择Discord作为C2?

攻击者选择Discord作为命令与控制(C2)频道,主要原因是其提供免费的云数据托管服务,以及自动化和配置新频道的便利性。通过这些频道,攻击者可以向被控系统发送单独的控制命令并接收被盗数据。如果频道被封锁,建立新的全功能实例仅需几分钟。

恶意软件检测过程

恶意软件是研究人员在例行分析软件包源代码时发现的。他们观察到不寻常的discord webhook使用,从软件包逻辑角度来看本不应存在。

npm环境中的恶意代码

在npm环境中,恶意代码负责传输配置文件,包括:config.json、.env以及包含诊断信息的日志。代码并不复杂,恶意软件搜索配置文件,然后将数据发送到Discord频道(频道地址被硬编码 - WEBHOOK_URL)。由于Discord的消息长度限制,无论文件大小如何,最多只传输1900个字符。

PyPI包中的恶意代码

在PyPI可用包中观察到类似情况。以已从PyPI管理器删除的malinssx包为例,代码显示了将已安装包信息传输到攻击者控制频道的机制(频道地址由WEBHOOK_URL常量定义)。

感染发生在使用pip install [packet_name]命令安装包时。第一步准备包含包安装尝试信息的JSON。然后数据(已安装包的名称及其版本)被编码并发送给攻击者。如果安装过程中出现错误或警告,它们会被捕获并对用户隐藏。该机制确保脚本在安装过程中遇到错误时仍能运行,并掩盖可能警告用户的可疑活动。

RubyGems生态系统中的恶意代码

恶意包也在RubyGems生态系统中被检测到。恶意软件的行为与上述情况略有不同,但共同点是都利用了Discord频道(discord webhook)。

恶意脚本读取/etc/passwd文件内容、网络配置/etc/resolv.conf、主机名、用户名、主目录、机器IP地址,然后将收集的数据发送到相应的Discord频道(url变量存储Discord频道地址)。

安全建议

威胁是真实存在的,但适当的工作卫生习惯可以降低感染风险。滥用webhook作为C2通道意味着需要实施新的防御策略。除了阻止恶意域名外,还应采取专注于监控软件包安装脚本和观察行为的措施。

迄今为止,尚未确定攻击幕后黑手。

来源:socket.dev/blog/ ~_secmike

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计