威胁分子利用Discord Webhooks通过npm、PyPI和Ruby包构建C2通道

本文详细分析了威胁分子如何滥用Discord webhooks作为隐蔽的命令与控制通道,通过npm、PyPI和RubyGems软件包窃取敏感数据。文章涵盖了攻击技术细节、跨平台实施方式以及相应的防护措施,包括行为监控和出口控制等缓解建议。

威胁分子利用Discord Webhooks通过npm、PyPI和Ruby包构建C2通道

威胁分子正越来越多地滥用Discord webhooks作为开源软件包内的隐蔽命令与控制(C2)通道,能够在无需搭建专用基础设施的情况下,秘密窃取敏感信息、主机遥测数据和开发环境数据。

Socket威胁研究团队已经记录了在npm、PyPI和RubyGems上的活跃滥用行为,其中硬编码的Discord webhook URL充当只写接收器,通过HTTPS将数据虹吸到攻击者控制的通道。

由于webhook帖子类似于发往广泛允许域的普通JSON流量,这些操作通常能够绕过边界过滤和基于签名的控制。

Discord Webhooks如何成为数据渗漏管道

Discord webhooks是HTTPS端点,只需持有包含ID和秘密令牌的URL即可向频道发布消息。

活动端点通常在成功时返回204 No Content,或在使用?wait=true时返回200 OK,而401、404和429分别表示令牌无效、已删除或达到速率限制。

关键的是,webhook URL是只写的——防御者无法仅从URL读取先前的频道历史记录——这使得清除和追溯调查更加困难,同时降低了攻击者的摩擦和成本。

  • 只写访问:Webhook URL仅允许发布消息,不能读取频道历史记录
  • 最小身份验证:仅需要持有包含ID和秘密令牌的URL
  • 标准HTTP响应:活动端点返回可预测的状态码用于验证
  • 隐蔽优势:流量显示为发往流行Discord域的合法JSON帖子

跨生态系统的恶意软件包

在npm中,mysql-dumpdiscord针对敏感配置工件,如config.json、.env、ayarlar.js和ayarlar.json(土耳其语中的"设置"),在将文件内容分块后通过POST发送到硬编码的Discord webhook。

更简单的是,nodejs.discord实现了对discord.js的薄包装,将任意字符串转发到嵌入的webhook URL;虽然有时用于日志记录,但如果在安装脚本或运行时调用,此模式很容易变成数据接收器。

在PyPI上,malinssx覆盖setuptools的install命令,在pip install期间静默触发对Discord webhook的POST请求,发送越南语通知消息。

相同的软件包(malicus、maliinn)由同一参与者句柄sdadasda232323发布,重复使用相同的webhook——这是在多个名称间自动化或迭代播种以逃避单软件包清除的指标。

  • npm目标:如.env、config.json和土耳其语"ayarlar"设置文件等配置文件
  • PyPI渗透:在pip安装过程中执行的安装时钩子
  • RubyGems利用:包括/etc/passwd和系统元数据的主机级数据收集
  • 跨平台持久性:同一威胁参与者在多个软件包生态系统中部署

在RubyGems上,sqlcommenter_rails更进一步,收集主机级信号,包括/etc/passwd内容、来自/etc/resolv.conf的DNS解析器、用户名、主机名、工作目录和主目录、软件包元数据,以及通过api.ipify.org获取的公共IP,然后在序列化并将完整有效负载发送到硬编码的Discord webhook之前。在整个过程中错误被抑制,倾向于静默失败而非产生嘈杂的异常。

为何此策略有效——以及应对措施

Discord webhook C2改变了供应链滥用的经济性。它是免费的、快速的、通过TLS混合到流行域的流量,并且除了URL持有外不需要身份验证工作流。

当与安装时钩子、安装后脚本或Ruby/Python设置覆盖配对时,这些软件包可以在应用程序运行时控制或EDR检测启动之前很久就从开发人员笔记本电脑和CI运行器中窃取秘密。

在Telegram、Slack和GitHub webhooks中也观察到类似模式,强调了向"商品化C2即服务"的更广泛转变,这削弱了静态IOC的价值。

  • 经济优势:免费基础设施消除了托管成本和技术复杂性
  • 规避策略:发往受信任域的TLS流量绕过大多数安全控制
  • 时机利用:安装时执行发生在运行时安全监控之前
  • 扩大攻击面:在Telegram、Slack和GitHub webhooks中出现类似模式

缓解措施应集中在行为和出口控制上。将webhook端点视为潜在的数据渗漏向量,并在可行的情况下通过DNS和TLS SNI过滤强制执行允许列表。

使用锁文件固定依赖项,要求来源/SLSA证明,并通过PR扫描来把关依赖项更新,标记硬编码的webhook URL、出站网络调用和安装时执行。

在软件包差异中扫描秘密访问,并使用最小权限范围轮换开发人员凭据。在CI中,默认拒绝构建和测试步骤的出站互联网访问,仅授予严格限定范围的例外。

最后,为开发人员工作流配备软件包声誉和恶意软件检测,可以在基于webhook的数据渗漏模式落地之前进行拦截。

入侵指标(IoCs):

ID 技术名称
T1005 来自本地系统的数据
T1016 系统网络配置发现
T1020 自动化渗漏
T1033 账户发现
T1059 命令和脚本解释器
T1059.006 命令和脚本解释器:Python
T1059.007 命令和脚本解释器:JavaScript
T1071.001 应用层协议:Web协议
T1082 系统信息发现
T1119 自动化收集
T1195.002 供应链威胁:软件供应链威胁
T1552.001 不安全凭据:文件中的凭据
T1567 通过Web服务进行渗漏
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计