malware · cryptojacking · crypto-stealer · rust · docker · worm · honeypot · monero

godhive:一个新型 Rust 加密货币窃取与挖矿框架

Kinryū Labs 分析了 godhive,一个新型且未见记录的 Rust 攻击性框架,我们在蜜罐网络上捕获到它滥用一个暴露的 Docker API。它挖门罗币,跨主流交易所和八条以上区块链掏空加密货币钱包,以蠕虫方式传播,并藏身于一条为熬过打击而构建的命令信道之后。我们以高置信度评估,它是专门打造的犯罪软件,并且是由一名开发者从消费级移动网络对自己的工具做实地测试时部署的。

作者 Davis Zheng·

TLP:CLEAR。已批准公开发布。由 Kinryū Labs 蜜罐传感器网络捕获。下文指标均已做无害化(defang)处理。

摘要

  • 6,946单次自动化爆发中的 Docker-API 事件
  • 946二进制中的 Rust 源码模块
  • 8+其钱包掏空器针对的区块链
  • 9命令信道类型

godhive 是一个用 Rust 编译的蠕虫、加密货币窃取器与挖矿框架,它通过一个暴露的 Docker Remote API 抵达我们的蜜罐网络。单个操作者对 Docker 蜜罐发动了一场高流量、自动化的行动,其工具自行报告了 21 次端到端入侵。Kinryū Labs 以高置信度评估,godhive 是专门打造的犯罪软件,而非一款商品化矿工:它带着自己的品牌,其名字在公开威胁情报中并不存在,而取回的二进制包含 946 个各不相同的 Rust 源码模块,以及数月的开发。

操作者从未通过 URL 拉取这个框架。他们把 ELF 用 base64 编码,再通过内联的 printf,一块一块地写进容器。由于蜜罐记录下了每一块,我们从自己的捕获中完整重建了这个二进制:215 块重新拼装成一个 6.2 MB 的 x86-64 ELF(SHA-256 4194f2337c2b261ed6e1fd0b6d18f0ba75388bdc91a2658eb827a154ed784f36),它在 VirusTotal 上并不存在。

最具区分度的发现是:godhive 并非主要是一款矿工。挖矿是它的兜底手段。它的主业是窃取:跨六家主流交易所的自动化提现,以及跨八条以上区块链的资金归集,只有在找不到任何钱包时才去挖门罗币。

关键判断
  • godhive 是新型的、专门打造的 Rust 犯罪软件。它带有定制品牌,在公开报道中并不存在,由 946 个 Rust 模块与 18 个以上的 crate 依赖构建而成。取回的二进制是一套宽泛的攻击性工具包,而非一个简单的投放器。
  • 它的目标是变现,而窃取排在第一位。这个二进制自动化了交易所提现(Binance、Coinbase、Kraken、Bybit、OKX、KuCoin),以及跨 Ethereum、BSC、Polygon、Arbitrum、Optimism、Base、Avalanche、Cronos 和 Solana 的 DeFi 掏空,并优先选择稳定币。用 XMRig 挖门罗币是针对没有钱包的主机的兜底手段。
  • 我们从头到尾观察到的过程。观察到的攻击链是:一个暴露的 Docker API、一个把主机文件系统以读写方式挂载进来的特权容器、逃逸到主机、窃取 /etc/shadow 和 SSH 密钥、部署 XMRig、一条用于带外访问的 ngrok 隧道,以及向一个 Telegram 机器人的外泄,随后是云元数据 SSRF,以及对 Kubernetes 和 Elasticsearch 的扫描。
  • 命令信道是为熬过打击而构建的。godhive 叠加了一张点对点的 Kademlia 网状网络、寄宿于区块链的 C2(EtherHiding)、一个实时的 Cloudflare Workers 中继、算法生成的备份域名,以及 Telegram,并在某条信道沉寂时自动迁移。
  • 操作者的作业手法与其工具恰恰相反。生产级的犯罪软件被从一个消费级移动网络部署出来,配着一个硬编码的明文 Telegram token 和一个公开的文件托管,而且尽管它自带一个反蜜罐模块,却径直撞进了一个蜜罐。我们评估,这最可能是一名开发者在实地测试自己的框架。

投放:一个暴露的 Docker API

入口是容器世界里最古老的那一个:一个在 TCP/2375 上未认证的 Docker Remote API。从那里开始,攻击链是教科书式的主机接管,取自捕获到的 docker_* 事件。

操作者从 alpine:latest 创建一个容器,设为 privileged: true,使用 network_mode: host,并把整个主机文件系统以读写方式绑定挂载进来(/:/host:rw)。单单这一份容器配置就是逃逸本身:把主机根目录挂进一个特权容器,等同于对这台机器拥有 root 级别的控制。随后它清除竞争矿工(pkill -9 xmrig; pkill -9 lolMiner; pkill -9 minerd; pkill -9 godhive_c2),把它的持久化目录写进主机的 /etc/godhive,并直接透过挂载读取主机机密,转储 /etc/shadow/root/.ssh/authorized_keys

只有到这时,那种可辨认的加密劫持(cryptojacking)才出现。godhive 从一个匿名文件托管拉取一个 XMRig 构建,部署它,开一条用于带外访问的 ngrok 隧道,并把结果发到一个 Telegram 机器人。它以查询云元数据服务(169.254.169.254)获取凭据,以及探测 Kubernetes、Elasticsearch 和 Kibana 以扩大触达面来收尾。操作者自己的工具针对我们的传感器记录了 21 次 docker_attack_chain_complete

挖矿是其中最不起眼的部分

取回的二进制远比我们看着运行的那条链更庞大。它的 946 个 Rust 模块及其构建字符串,铺陈出一套宽泛的攻击性工具包。其中一部分有编译后的代码作为支撑(来自 Rust 单态化的重复字面量、错误处理路径,以及 crate 构建目录);另一些部分则只是模块名与配置存根,所以下面这份清单,既要读作已证实的功能,也要读作意图。

变现流水线是核心。一个 harvester 遍历文件系统,寻找 wallet.dat.env、SSH 密钥和 wp-config.php;一个 scorer 参照 CoinGecko 为 BTC、XMR、ETH 和 Ravencoin 定价,并按价值给受害者排序;一个凭据阶段用被窃取的登录信息做撞库,并集成 2CAPTCHA 以攻克登录验证;一个 drainer 则通过 CCXT 交易所库以及链上 DeFi 归集来抽走资金,从被窃取的助记词派生密钥,并为每一笔提现选择最便宜的链。二进制里留下的一条开发者注释,为规避 Ethereum 的 gas 费而对稳定币提现做了优化,正是这种用心程度,把一个能用的 drainer 与一个概念验证区分开来。

环绕这一核心的是这套工具包的其余部分:一个用 Masscan 和 Nuclei 扫描、并利用 Docker、Redis、Kubernetes、Elasticsearch、WordPress,以及一组包含 Log4Shell 在内的 Windows 与 Java 漏洞的蠕虫;一个按进程名针对九家端点厂商的 EDR 杀手;多达五层的持久化,直至一个带 TPM 操纵的 UEFI bootkit;一套 WASM 插件系统,用于在不碰 C2 的情况下向机群推送新能力;一款仅在价值超过 1,000 美元阈值时才触发的勒索软件;一个剪贴板劫持器;一个 DDoS 模块;以及会删除 wtmpbtmp 和 journal 日志、并植入伪造 syslog 噪声以浪费分析师时间的反取证功能。它把每一个模块都伪装在一个假的 sysd 进程名之下,并通过借用真实的 googlevideo.com SNI 主机名,把自己的流量伪装成 YouTube 流媒体。

有两个细节让这幅图景不那么极端。这个框架能检测十五种蜜罐平台以及一整排沙箱和虚拟机管理程序,却漏掉了我们的。而它的若干配置尚未完工:默认矿池已于 2022 年关停,一个剪贴板 ENS 名称从未注册,一个加密密钥仍是 CHANGE_ME 占位符。这些能力是编译进去的、真实存在的;其中一部分还没有接上线。

ngrok,以及它为何是一款黑客工具

最初让这场行动引起注意的样本,是那个合法、带签名的 ngrok 二进制,从 ngrok 自己的 CDN 拉取而来。它不是恶意软件。它是一款商业反向隧道工具,杀毒引擎把它标记为黑客工具,恰恰是因为它在入侵之后如此好用。一旦 godhive 在一个特权容器内取得代码执行,ngrok 便向 ngrok 的云拨出连接,并通过一个公开 URL 暴露某个选定的本地服务,既不打开任何入站端口,也没有任何东西可供边界防火墙或仅出站的 NAT 去拦截。操作者通过轮询 ngrok 的本地代理 API(127.0.0.1:4040/api/tunnels)确认了隧道,并把得到的公开 URL 发到他们的 Telegram 机器人,把每一台刚被拿下的主机都变成一个点击即连的把手。

一条为熬过打击而构建的命令信道

godhive 不依赖单一 C2。它按每条信道被清除的难度,把它们层层叠起。最底层是一张点对点的 Kademlia 网状网络,带工作量证明的加入挑战和 NAT 穿透,没有可供夺取的中心节点。其上是 EtherHiding,当前后端地址被存放在一份无法撤销的区块链智能合约里,运行时通过一个实时的 Cloudflare Workers 中继(c2-proxy.operator.workers[.]dev)来解析,该中继向防御方隐藏后端。再往上是算法生成的备份域名,经由带伪造 SNI 的 DNS-over-HTTPS 获取,一个 Tor 隐藏服务,藏在 GitHub gists 里的死信投递点,八条软件即服务(SaaS)信道,以及作为主操作者信道的 Telegram。烧毁检测(burn detection)会盯着一连串空的命令轮询,并携带一份加密的配置备份,把操作者自动迁移到全新的基础设施上,而一个联邦(federation)功能支持跨多个机器人进行协调。

我们从外部对这个 Cloudflare Workers 中继做了指纹识别,并确认它是实时的、正在处理请求:注册、任务派发和仪表盘端点会路由到一个后端,而未认证的输入会被拒绝,这与二进制用于 C2 认证的 AEAD 加密令牌相吻合。操作者还在它背后运行着一个经过加固的管理仪表盘,带 Argon2 口令散列、多因素认证、基于角色的访问控制,其 TLS 配置里甚至还有后量子选项。这是一个把僵尸网络当作生产基础设施来对待的人,细致到为它导出 Prometheus 指标。

另一半:业余的运作

尽管有着这一切工程能力,这次部署在要紧之处却很粗心。这场行动来自单一的一条美国 Verizon Wireless 消费级移动连接(174.230.35[.]232,反向 DNS 232.sub-174-230-35.myvzw.com,佛罗里达州 Gainesville),而非一个防弹主机或一台 VPS,且是在一次紧凑的自动化爆发中发出的,没有任何基础设施复用。Telegram 机器人 token 以明文硬编码,是一个单点即可打掉的软肋。XMRig 载荷由一个公开的匿名文件托管提供。而这个框架在带着一个专职检测蜜罐的模块的同时,却对着一个蜜罐跑完了它的整条攻击链。

这个二进制是在 macOS 上、以一个名为 dev 的用户、在一个叫 research/godhive 的目录里构建的。把它与操作者对自己 Telegram 身份的刻意匿名化、未完工的配置,以及那种近乎自报家门的部署方式放在一起读,最省事的解读是:一名有本事的独立开发者在测试并运行自己的框架,而不是某个恶意软件即服务平台的客户。品牌打磨得很精致,配着一个定制的金色蜂巢标志,以及标语「one mind, one purpose, one hive」;作业却并非如此。

godhive 的徽记:一枚金色六边形的蜜蜂与王冠纹章,其下是字标 GODHIVE 以及标语 one mind, one purpose, one hive
godhive 自己的徽记,取自操作者的信道。品牌是这场行动中已完工的那一半。

归因

这场行动通过其 Telegram 基础设施与单个操作者关联起来。godhive 把窃取的凭据、隧道 URL 和感染确认信息发到一个硬编码的机器人 @godhive_bot(bot id 8836117161)。其被捕获的 chat_id 指向一个个人账户 @godhive77(user id 7659611777),显示名为若干下划线,没有头像,这是一次匿名化的尝试,却被 godhive77 这个用户名本身给拆穿了。同一个操作者还持有一个相配的预留频道 @godhive(一名订阅者,无公开发帖,转发已禁用),而这个连续的 Telegram user id 把账户的创建时间定在 2024 年底。godhive77 这个用户名是进一步归因的最强支点。

失陷指标

攻击者基础设施已做无害化处理。恶意软件所滥用的合法第三方服务则保持原样,以便检测。

网络与主机

指标说明
c2-proxy.operator.workers[.]dev实时的 Cloudflare Workers C2 中继(请向 Cloudflare 举报)
hxxps://files.catbox.moe/p46h39.gz匿名文件托管上的 XMRig 载荷(SHA-256 cb49ae0793b2…
bin.equinox.io/c/.../ngrok-v3-stable-linux-amd64.tgzngrok 下载(合法 CDN);从服务器外连到 bin.equinox.io 才是信号
127.0.0.1:4040/api/tunnelsngrok 本地代理轮询(读取分配到的公开隧道 URL)
169.254.169.254/latest/meta-data/用于窃取凭据的云元数据 SSRF
api.telegram.orgTelegram 机器人 C2 与外泄;从服务器工作负载外连是狩猎信号
gitlab.com/nzyme/静态工具暂存(sshpass、redis-cli、wget、tor、proxychains)
2captcha.comhashes.orgnitrxgen.net在凭据流水线中被滥用的验证码破解与哈希爆破服务
r[1-20]---sn-*.googlevideo.commanifest.googlevideo.com用于 TLS SNI 伪造的真实 YouTube CDN 主机名;当它们解析到非 Google IP 时告警

攻击者、C2 身份与收款

指标说明
174.230.35[.]232行动来源(Verizon Wireless 移动网络,232.sub-174-230-35.myvzw.com,佛罗里达州 Gainesville);一个封锁价值很低的动态运营商地址
@godhive_bot(Telegram bot id 8836117161恶意软件 C2 与外泄机器人;token 硬编码在二进制中(此处密钥已隐去;已向 Telegram 举报以求下架)
@godhive77(Telegram user id 7659611777操作者的外泄账户,也是最强的归因支点
@godhive(Telegram channel id -1002105830453操作者的预留频道
49aXwwgXBKRKTUVgYuLy3fZkTeLP3PWgMhwiyK55Ur7WhgYXJ33N8JZG87vzUV1UyVdZzPGLvx1w9YQHk7faWPn1UzJte2R已确认的门罗币收款钱包(与实时 XMRig 配置配对)
pool.minexmr.com:4444XMRig 配置矿池;注意 minexmr 已于 2022 年关停,因此这个默认值会失败

文件与痕迹

  • godhive 二进制(重建): SHA-256 4194f2337c2b261ed6e1fd0b6d18f0ba75388bdc91a2658eb827a154ed784f36(6.2 MB x86-64 ELF,不在 VirusTotal 上)。它的 ELF 头部被刻意破坏,谎称约 106 MB 大小,并把代码指向文件末尾之外,以挫败标准工具。
  • 主机持久化: /etc/godhive/host/usr/local/bin/sysd(伪造的 systemd 二进制)、/host/tmp/godhive_deployed.txt、进程 godhive_c2、容器内的定制镜像 godhive:latest
  • 容器逃逸特征: 一个以 Privileged:truenetwork_mode:host 和一个 /:/host:rw 绑定创建的容器。
  • 构建痕迹: /Users/dev/.cargo/registry/src/ 下的 cargo 路径,以及一个 research/godhive 构建目录(macOS 开发者)。
  • 主机加固的破绽: Redis 口令被设为 CHANGED_BY_GODHIVE;在观察到 WordPress 暴力破解的主机上有一个 b374k.php webshell。

行为特征

  • pkill -9 xmrig|lolMiner|minerd|godhive_c2,紧接着 mkdir /host/etc/godhive
  • 从一个容器挂载读取 /host/etc/shadow/host/root/.ssh/authorized_keys
  • 一个并非真正 systemd 的 sysd 进程;efibootmgr 的写入创建了一个标记为「System Core」的 EFI 启动项。
  • Nuclei 工作目录 /tmp/.nuclei_assault-t*

检测

  • 对从服务器出站到 bin.equinox.io 以及任何 *.ngrok* 主机的流量告警,并对 ngrok 代理 API 轮询 127.0.0.1:4040/api/tunnels 告警。
  • 对任何以 Privileged:true 带一个 /:/host 绑定创建的容器告警;这一组合几乎必然是一次逃逸尝试。
  • 对从服务器工作负载外连到 api.telegram.orgc2-proxy.operator.workers[.]devgitlab.com/nzyme/2captcha.com 以及哈希爆破服务的流量告警。
  • 对一个 sysd 进程告警,对 EDR 代理被杀掉或停止(falcon-sensorSentinelOnecbdefensesophos-edrcylancesvc)告警,并对 CONFIG SET requirepass CHANGED_BY_GODHIVE 告警。
  • 把 SNI 为 googlevideo.com 却解析到非 Google IP 的 TLS,以及来自非浏览器进程的 manifest.googlevideo.com,都视作流量伪装。

缓解措施

  • 绝不要在 2375 上未认证地暴露 Docker API。 把它绑定到 localhost,并配上 TLS 客户端认证。这才是根本原因。
  • 强制 no-new-privileges,去掉 --privileged,并限制主机绑定挂载,或者运行 rootless Docker 或 gVisor。
  • 阻断容器访问云元数据服务(169.254.169.254),并要求 IMDSv2。
  • 过滤出口流量:服务器工作负载不应触达匿名文件托管、ngrok、Telegram、验证码破解服务,或上文的静态工具暂存路径。
  • 启用 Secure Boot 以钝化 UEFI 持久化,并在端点代理上启用防篡改保护,godhive 正会试图杀掉它们。
  • 如果任何主机可能已被入侵,请立即轮换交易所 API 密钥;godhive 会自动化提现。

MITRE ATT&CK 映射

战术技术
初始访问T1190 Exploit Public-Facing Application(Docker API;军火库里还有 Redis、Kubernetes、WordPress、Log4Shell)
执行T1610 Deploy Container;T1059.004 Unix Shell
权限提升T1611 Escape to Host(特权容器、主机挂载)
持久化T1543 Create or Modify System Process(sysd);T1542.003 Bootkit(UEFI);T1014 Rootkit
防御规避T1562.001 Impair Defenses(EDR 杀手);T1070 Indicator Removal(删除日志);T1497 Virtualization/Sandbox Evasion(蜜罐/虚拟机检测);T1036 Masquerading(sysd、YouTube SNI);T1027 Obfuscated Files(损坏的 ELF)
凭据访问T1003.008 /etc/passwd and /etc/shadow;T1552.004 Private Keys;T1552.005 Cloud Instance Metadata API
发现T1046 Network Service Scanning(Masscan、Nuclei)
命令与控制T1572 Protocol Tunneling(ngrok);T1090 Proxy;T1071.001 Web Protocols(Telegram、Cloudflare Workers);T1102 Web Service(GitHub gists、SaaS 信道)
影响T1496 Resource Hijacking(XMRig);T1486 Data Encrypted for Impact(勒索软件);T1657 Financial Theft(交易所与 DeFi 掏空);T1498 Network Denial of Service

方法论与备注

  • 分析是对该 ELF 的静态二进制分析(这个 ELF 是从操作者自己、被蜜罐捕获的内联 base64 分块中完整重建的),并结合了对捕获到的 Docker-API 流量的审阅,以及对操作者实时 Cloudflare Workers 中继的授权外部侦察。没有执行任何恶意软件,也没有尝试任何 C2 认证。
  • 指标均已做无害化处理,而恶意软件所滥用的合法第三方服务则保持原样,以便检测。
  • 样本可应其他研究者与防御方的请求提供。请发邮件至 [email protected],并简短说明你的身份以及索取用途。
Sample
godhive · 4194f2337c2b261e…
How to cite
Kinryū Labs (2026). godhive:一个新型 Rust 加密货币窃取与挖矿框架. https://kinryu.sh/zh/reports/godhive-rust-crypto-stealer/