PointBlank:PyPI RAT 将 C2 隐藏在 JSON-Bin 服务中

PointBlank:一款功能齐全的Python远程控制木马,它通过一个免费的笔记托管服务运行其命令通道。

TL博士

一个名为 PyPI 的软件包 gcli-control 它提供了一套完整的 Windows 远程访问工具:键盘记录、摄像头和麦克风捕获、剪贴板监控、浏览器凭据访问、屏幕控制、持久化、权限提升,以及自称的“140 多个命令”。它毫不掩饰自己的功能:该软件包在 PyPI 上的摘要将其描述为“通过……的远程访问工具”。 npoint.io".

值得停下来仔细琢磨的细节是这句话 “通过 npoint.io。” 植入体并没有像传统方式那样连接到专用服务器,而是使用了 npoint[.]io 它使用一个免费且合法的JSON小型文档托管服务作为命令与控制中继。操作者将命令写入JSON数据桶;植入程序轮询该数据桶,执行命令,并将结果写回。无需封锁攻击者拥有的域名,也无需标记新的IP地址:流量流向的是开发者每天都在使用的服务。

在大约13个半小时内,共发布了六个版本,每个版本都比前一个版本更出色。每个版本都配有乐谱。 ml_predicted_safe 在人工审核之前,自动分类器将该家族重新分类为恶意家族。

攻击解剖

gcli-control 安装导入包 gcli这是一个包含 35 个模块的 Python 代码库。无需安装。 hooks — 期间没有任何程序运行 点安装这项功能存在于模块本身,工具运行时会被调用,模块布局就像产品规格表一样:

能力领域科目
宿主监视keylog, webcam, audio, clipboard, desktop, monitoring
凭证和数据访问browser, forensics, fileops, transfer, users
立足点与升级persistence, elevator, registry, security
主机和网络侦察system, processes, network_config, wifi, bluetooth, netutils
命令与控制client, host, session, protocol, npoint, crypto, encrypt

命令通道才是关键所在。大多数远程访问工具都连接到操作员控制的服务器——一个IP地址、一个域名、一个托管服务提供商,这些都可以被举报并导致服务器离线。 gcli-control 相反,它对待 免费的 JSON-bin 服务可用作死信箱。。 该 n点 该模块读取和写入小型 JSON 文档 npoint[.]io 通过普通的HTTPS; 加密/加密 模块会对交换的有效载荷进行封装,因此 bin 中的内容并非明文命令。其效果是实现经过中介的加密中继:

  • 操作员将(加密的)指令放入 JSON 容器中。
  • 植入程序运行在受害者主机上,轮询该二进制文件,解密,执行其命令处理程序之一,并将(加密的)结果写回。
  • 对网络监控者来说,受害者只是在与……对话。 npoint[.]io — 有正当理由出现在开发者流量中的服务。

这里没有第二阶段下载,也没有混淆加载器:该功能以可读的 Python 代码完整交付,唯一的“隐藏”之处在于中继的选择和中继有效载荷的加密。

值得详细解释一下为什么 JSON-bin 死信箱在操作上很有吸引力,因为它解释了为什么我们预期会再次看到这种模式:

  • 没有运营商拥有的终端节点。 没有C2域名可供注册,没有VPS可供租用,也没有任何东西可供防御者或注册商查封。下架 不触碰频道;撤下 渠道 这意味着要求通用 SaaS 系统管理数百万份文档中的一份。
  • 洗白名誉。 使用 HTTPS 向知名开发者服务发送出站请求不会像使用新域名或原始 IP 地址那样受到信誉惩罚。许多出口过滤配置都默认允许这种做法。
  • 异步性和可否认性。 轮询模型(植入程序按固定时间间隔获取文档,而不是保持打开的套接字)产生的流量看起来像是周期性的 API 轮询,而不是交互式会话。加密文档内容意味着即使是找到垃圾箱的分析人员看到的也是密文,而不是命令列表。
  • 微不足道的旋转切换到不同的文件夹,或者完全切换到不同的笔记/粘贴服务,对操作员来说只需要一行配置更改。任何与特定继电器关联的黑名单在发货时即失效。

操作员需要权衡吞吐量和延迟:死信箱中继比直接连接速度慢、带宽低。对于主要发出短指令并随时间收集结果的监控植入设备而言,这种权衡很容易实现。

时间线

家族事件迅速升级。标记版本的工单创建时间戳显示,整个观察到的事件发展过程大约在13个半小时内,扫描器自身记录的证据数量也随着代码的更新而增加——从第一个版本中的几个标记地点增加到最新版本中的14个。

版本首次发现(UTC)注意:
0.1.02026-07-21 12:59初始上传;最小标记表面
0.5.02026-07-21 18:01能力扩展
0.2.02026-07-21 18:03(版本号并非随上传顺序单调递增)
0.6.02026-07-22 00:44更广泛的模块集
0.7.02026-07-22 01:58近乎完整的工具包
0.7.12026-07-22 02:28最新款;35个模块,功能齐全

版本号的发布顺序并不严格,但方向很明确:先发布一个小版本,然后快速迭代,最终发布功能齐全的 0.7.1 版本。这才是正在积极开发的项目随着发展而逐步推向公共注册中心的模式,而不是一次性发布。

妥协指标

以下所有指标均已根据磁盘上的软件包内容和 0.7.1 版本的确定性指标扫描进行确认;没有一个是推测性的。

类型指示符
软件包(PyPI)gcli-control版本 0.1.0、0.2.0、0.5.0、0.6.0、0.7.0、0.7.1
导入包gcli
C2继电器npoint[.]io (JSON 二进制文件死信箱;加密有效载荷)
声明仓库github[.]com/gcli-control/gcli
行为指纹同址监控模块: keylog, webcam, audio, clipboard, browser此外,该软件包还包含持久化、电梯和客户端/主机/协议命令层。
安装 hooks无:此功能在工具运行时运行,而不是在安装期间运行。

辩护者注: 最强的持久信号不是域(中继主机很容易轮换),而是 塑造:一个包含三个或更多不同主机监控原语的软件包 将命令/响应循环路由到公共内容托管服务。阻塞 npoint[.]io 对于大多数商店来说,直接发出警报是不切实际的;对于既捕获输入设备又与 JSON-bin 服务通信的意外进程发出警报要稳健得多。

观察到的行为和框架

这个样本有两个不同寻常之处,而且这两个都是可观察的事实,而不是关于动机的推断。

它自己做了广告。 PyPI 上发布的软件包摘要以简洁明了的语言列举了其功能——远程访问、桌面控制、用户管理、网络摄像头、音频、键盘记录器、持久化、浏览器数据、WiFi、注册表以及“140 多个命令”。该代码并未试图伪装成构建助手、命令行包装器或 AI 代理工具,而这些伪装在公共注册表中更为常见。这种开放性究竟反映出这是一个未加访问控制的红队工具,还是另有其他含义,仅凭软件包内容本身无法解答;可以肯定的是,任何人都可以安装一个功能齐全的通用远程访问和监控工具包。 点子.

它依靠的是对一项良性服务的信任。 运用 npoint[.]io 中继是关键技术。这是一个更广泛模式的例证——通过合法的SaaS(粘贴网站、JSON容器、聊天网站)路由C2服务器。hooks(例如,云端文档),这样恶意流量就能融入正常的开发者活动中,而且没有运营商拥有的端点可供查封。中继服务器上的有效载荷经过加密,因此普通观察者无法将 bin 文件中的内容解读为命令。

发布商发出的信号单薄且笼统。 包裹上标明了 作者 包含“gcli 贡献者”和 MIT 许可证,并将其主页和存储库字段指向 github[.]com/gcli-control/gcli这些都不是验证:作者信息是自由文本,MIT 许可证头是免费的,软件包元数据中的仓库 URL 只是一种声明,而非出处证明。这种模式——一个全新的名称、一个通用的集体作者,以及一个围绕该软件包创建的自引用组织/仓库——才是专门为承载代码而搭建的项目应有的样子,而不是一个恰好发展出远程控制功能的现有工具。我们仅将这些作为观察结果提出;它们与专门构建的发行版相符,但本身并不能证明这是一个专门构建的发行版。

我们根据其功能和传播方式,将该部署方式描述为恶意行为:一个完整​​的、可运行的远程访问和监视植入程序,通过公开的软件包索引和隐蔽的中继进行分发。我们并未确定其目标或动机。

影响、趋势以及防守者可以做什么

伪装导向型分诊的盲点。 许多自动化包裹分拣密钥 伪装 信号 典型的注册表恶意软件 — 混淆的二进制数据,安装时 hooks仅需几行命令即可获取凭证。一个非常简单的软件包 公开的 RAT由于代码简洁易读且没有安装钩子,因此不会出现上述任何迹象,并且可以绕过那些预期会隐藏此类行为的启发式方法。能够可靠地捕获此类行为的信号是结构性的,而非基于伪装的:功能普查(一个软件包中共存的不同主机监控原语的数量)和 C2 结构分析(通过通用内容托管服务路由的命令/响应循环)。无论程序多么诚实或隐蔽,这些检查都会触发。 混淆 包装是。

SaaS 作为 C2 的趋势。 滥用合法托管服务作为秘密投递点并非新鲜事,但这种做法屡试不爽,因为封锁服务的防御成本很高,而切换服务的进攻成本几乎为零。预计此类事件会越来越多。针对特定恶意域名的网络防御措施会立即失效;而行为规则(例如“此进程读取剪贴板和摄像头,然后与笔记托管 API 通信”)则不会。

具体的探测草图。 持久规则没有提及 npoint[.]io 完全如此。它结合了两个单独来看都很常见,但在普通开发者或持续集成主机上同时出现却很少见的现象:

当单个进程在同一会话中同时满足以下两个条件时,会发出警报:
(A)访问主机监控原语——输入设备(键盘/鼠标钩子)、摄像头、麦克风、屏幕捕获、剪贴板读取循环或浏览器凭据存储(“Login 数据”/“本地状态”/DPAPI);并且
(B)向公共内容托管/粘贴/JSON-bin/聊天webhook服务发出出站请求,然后提交审核,而不管(B)中的具体服务是什么。

单独来看,这两部分都不算可疑:很多合法的工具都会截屏,也有很多工具会向托管 API 发送 JSON 数据。关键在于某个短暂进程内部的连接,它能经受住任何中继轮换。

团队可采取的实用步骤:

  • 将开发者和 CI 主机上的公共软件包安装视为执行边界,而不是便利措施——构建代理上的 RAT 就是窃取您机密信息的 RAT。
  • 优先选择已列入允许列表的内部镜像;一个名称字面意思是远程控制,并且描述的是键盘记录器的软件包,绝不应该在企业索引上解析。
  • 警报 组合 — 输入设备或屏幕捕获加上到内容/粘贴/JSON-bin 服务的出站流量 — 而不是任何单独的原始设备,这些原始设备单独使用时是良性的。
  • 不要依赖自动生成的“安全”评分作为具有广泛主机访问权限的软件包的最终判定;应将其提交人工审核。

该软件包家族已被判定为恶意软件包,并已提交注册表移除。由于基于中继的C2架构不会留下任何运营商拥有的主机作为黑洞,因此​​持久的防御价值在于上述行为特征,而非任何单一的黑名单条目。

sca-tools-软件-成分分析工具
确定软件风险的优先级、进行补救并加以保护
注册免费账号。
不需要信用卡。

保护您的软件开发和交付

使用 Xygeni 产品套件