威胁分子通过npm、PyPI和Ruby包利用Discord Webhooks进行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服务进行数据窃取 |