威胁分子利用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服务进行渗漏 |