加密货币挖矿程序深度解析:关停挖矿僵尸网络

Maor Dahan

寫於

Maor Dahan

June 24, 2025

Maor Dahan

寫於

Maor Dahan

Maor Dahan 是 Akamai 的高级安全研究员,在网络安全领域拥有十多年的深厚经验。Maor 擅长操作系统内部原理分析、漏洞研究和恶意软件分析,并为 EDR、EPP 和基于虚拟化的安全防护等创新安全产品设计和开发了先进的检测和防御机制。

通过提交“错误份额”,我们成功地阻止了网络中的采矿代理,关停了其挖矿操作。
通过提交“错误份额”,我们成功地阻止了网络中的采矿代理,关停了其挖矿操作。

目录

前言

欢迎浏览“加密货币挖矿程序深度解析”系列博文的最后一期:

  • 第一篇博文中,我们讨论了加密货币的基础知识、它们的各种属性以及其中一些加密货币对攻击者更有吸引力的原因。 

  • 第二篇博文中,我们分析了多个加密货币挖矿示例,它们分别利用了不同的挖矿技术。 

  • 本期博文是第三期,也就是这一系列的最后一期,我们将探讨两项可用于抵御加密货币挖矿程序的新型主动式技术。

除了这几篇博文之外,我们还在资料库中发布了几种分析工具。

所有人都知道,进攻就是最好的防御:由于加密挖矿活动具有分散在各地的特点,要想破坏它们可能极有难度。

在本博文中,我们将展示如何利用常见挖矿拓扑的设计来有效地关停挖矿进程,从而克服这个问题。尽管我们描述的技术曾被用于抵御 Monero 加密货币挖矿程序,但同样的原理也适用于其他加密货币。

关停加密货币挖矿程序操作

在检测到恶意加密货币挖矿程序操作时,目前可以通过以下两种方法尝试将其关停:

  1. 请求矿池服务封禁攻击者帐户

  2. 尝试停止攻击者基础架构中的其他服务,以对攻击活动造成干扰

但这些方法也存在问题,那就是会变得非常复杂,并且会由于第三方的信任而耗费很长时间。

我们找到了一种更好的方法。

我们利用挖矿拓扑和矿池策略开发了两种技术,可将加密货币挖矿程序僵尸网络的有效性降低到完全关停的程度,从而迫使攻击者对其基础架构进行彻底变更,甚至是放弃整个攻击活动

这两种都建立在利用 stratum 通信的基础之上,其方法是允许阻止代理或钱包之类与挖矿操作帐户相关联的关键组件。

从 330 万降为零

我们将目标对准了一项活跃长达六年之久的恶意加密货币挖矿程序操作。通过阻止攻击者的挖矿代理(这是挖矿拓扑中的一个中心故障点),我们成功地将其哈希率从每秒 330 万个哈希降为零(图 1)。

这一过程就像攻击者赚钱一样轻松,我们只花了几秒钟时间,就终结了每年都有可能给攻击者带来丰厚回报的财路。仅仅是简单地使用一台笔记本电脑,我们就造成了哈希率暴跌,导致加密货币挖矿程序操作者每年损失了 2.6 万美元的现金收入。

By banning the attacker’s mining proxy, a central point of failure in the mining topology, we were able to reduce its hashrate from 3.3 million hashes per second all the way down to zero (Figure 1). Fig. 1: A malicious mining proxy losing 100% of its hashrate

什么是错误份额?

图 2 中的视频展现了这种技术,我们称之为“错误份额”。该视频讲述了一台连接至恶意挖矿代理的加密货币挖矿程序受害机器。通过提交“错误份额”,我们成功地阻止了网络中的采矿代理,关停了其挖矿操作,并使受害机器的 CPU 使用率从 100% 降至 0%

图 2:在我们的实验室设置中应用错误份额技术

无法击败,但可以阻止

通过矿池 执行加密货币挖矿的基础是提交有效哈希计算(称为份额)。为产生收益,加密货币挖矿程序需要向矿池提交份额。收到份额之后,矿池将验证哈希结果及其难度。

份额验证是矿池服务器需要处理的最繁重任务之一,特别是在无效份额的情况下。与现实生活中一样,总有可能会犯错;例如,硬件故障可能会导致向矿池提交不正确的份额。

无效份额的处理需要消耗大量资源,矿池必须保护自己在大量提交无效份额的情况下不至于崩溃。因此,当提交的份额无法通过服务器验证时,大多数矿池将对挖矿程序实施处罚,其形式通常为临时阻止。

在尝试关停恶意挖矿操作时,这种互动可能会非常有趣。如果我们能让后端节点或矿池阻止攻击者挖矿程序(也可称为受害机器),就能停止加密货币挖矿程序对资源的利用,最终解放这些受害机器

在以下各个部分中,我们以之前探讨过的两项挖矿活动为目标介绍了这一概念,其中每项活动都代表着一种不同的挖矿拓扑:一种是挖矿代理,另一种是直接公共矿池连接。

利用错误份额来阻止攻击者的挖矿代理

恶意加密货币挖矿程序最常使用的一种挖矿拓扑是挖矿代理(图 3)。这种设置可以通过隐藏攻击者的后端和钱包地址来增强其隐私,从而保护他们的身份并降低在网络内追溯的可能性。

One of the most popular mining topologies used by malicious cryptominers is a mining proxy (Figure 3). Fig. 3: Mining topology based on a mining proxy

挖矿代理对网络检测提出了独特的挑战,因为挖矿程序连接的目标矿池通常可以通过网络检查技术检测出来,而挖矿代理则可以将其“隐藏”起来。它们还会隐藏钱包地址,这又进一步减少了挖矿程序的可检测足迹。但我们发现,挖矿代理也有可能成为加密货币挖矿程序的致命弱点

在使用代理挖矿时,所有受害机器都会连接至同一台服务器,这表示干扰代理就能停止整个挖矿操作。我们开发了一项技术,恰好就能做到这一点。

其思路非常简单:在作为挖矿程序连接到恶意代理之后,我们就可以提交无效的挖矿作业结果(即错误份额),它们将绕过代理验证并提交到矿池。连续不断的错误份额最终会导致该代理被阻止,从而有效停止整个加密货币挖矿僵尸网络的挖矿操作。

与代理进行通信

加密货币挖矿程序必须先使用 Stratum 登录方法连接至代理。如果未设定其他配置,挖矿程序会在 XMRig 代理服务器中被默认识别为 x(图 4)。

The cryptominer must first connect to the proxy using the Stratum login method. If no other configuration was set, the miner identifies as x by default in the XMRig proxy server (Figure 4). Fig. 4: JSON representation of the login request

如果连接成功,就意味着代理端有一个侦听器。我们可以通过解析响应来确保它真的是一个挖矿代理——有效的响应将是一个符合 Stratum 协议的 JSON 文档,而结果则是一个作业

尽管完整的挖矿过程非常复杂(如 Monero 清零中所述),但创建一份定制份额相对比较简单。需要做的只是从代理响应中提取几个值:工作人员 id作业 idnicehash nonce。必须获取所有这三个值,才能跟踪特定的挖矿作业;因此,如果我们希望代理接受我们的错误份额,就必须正确填写这些字段(图 5)。

 All three are required to keep track of a specific mining job, so if we want the proxy to accept our bad shares we have to fill out those fields correctly (Figure 5). Fig. 5: JSON representation of job assignment response

在收到来自挖矿程序的份额之后,代理会将其几乎保持原样地转发到矿池,但有一点关键的不同之处——它是在攻击者的钱包地址之下提交的。正因为如此,我们永远无法通过加密货币挖矿程序样本来获取钱包信息,也无法了解关于攻击者帐户或矿池的其他任何信息。

XMRogue

要想以受害机器之一的身份入侵加密货币挖矿程序僵尸网络,其实并不困难。通常并不需要特殊授权——大多数情况下,它会使用 XMRig 这样的标准应用程序作为挖矿程序,并使用 XMRig-proxy 作为挖矿代理。

了解这一点后,我们开发了 XMRogue。XMRogue 工具使我们能够伪装成挖矿程序、连接至挖矿代理、连续提交错误份额,最终阻止挖矿代理与矿池的通信(图 6)。

This led us to develop XMRogue. XMRogue is a tool that enables us to impersonate a miner, connect to a mining proxy, submit consecutive bad shares, and eventually ban the mining proxy from the pool (Figure 6). Fig. 6: Bad shares technique sequence diagram

有一个很重要的点需要考虑,那就是代理级别的份额验证:当我们的错误份额被代理转发到矿池时,有可能会被识别出来并丢弃。

例如,常用的 XMRig-proxy 会验证其随作业提供的 nicehash nonce 以及结果的难度。如果 nonce 或难度不正确,错误份额将不会转发到后端矿池。图 7 显示了代码内的验证,其中带有低难度哈希值或不正确 nicehash 值和份额将被丢弃。

In Figure 7, we see the validation within the code, where shares with low difficulty hashes or incorrect nicehash values are discarded. Fig. 7: XMRig-proxy code that handles mining errors. (Source: https://github.com/xmrig/xmrig-proxy/blob/501d9722454e20de90ed205e26da8cbf304c2ac8/src/proxy/Miner.cpp#L259)

我们可以解析作业请求,并精心构造一个被代理判定为有效的“恶意”作业结果,从而解决这些验证,使代理将我们的份额转发到矿池中。

理论检验

为检验我们的技术,我们选择将在本系列第二篇博文中发现的一项挖矿活动作为目标。我们成功提取了选定活动使用的所有挖矿代理的地址,这样就有了大量信息可加以利用。例如,我们可以看到中央攻击者的代理(创造性地命名为“代理”)获得了 Nanopool 的最高评级,这表明其应用范围非常广泛(图 8)。

 For example, we can see that the central attacker’s proxy — creatively named “proxy” — has a maximum rating from Nanopool, which indicates extended use (Figure 8). Fig. 8: Worker list of the malicious campaign

此代理每秒生成 300 万个哈希,大约相当于每小时 3 美元(每年 2.6 万美元)的收入。我们使用 XMRogue 并以此代理为目标,成功地迅速阻止了它与矿池的通信,并且停止了与其连接的所有受害机器的挖矿活动。只要检查一下该代理的哈希率,就能看到它一路下降到了零(图 9)。

If we inspect the hashrate of the proxy, we can see that it dropped all the way down to zero (Figure 9). Fig. 9: The campaign mining dashboard during XMRogue work

如果我们考虑 XMRogue 对攻击者整体活动的影响,就会发现其盈利能力大幅下降。在首次记录此活动情况时,它每年能创造差不多 5 万美元的收入。在对其进行破坏并打破其平衡后,该活动的年收入下降了 76%,减少到只有 1.2 万美元。在将其他代理作为目标后,收入有可能完全下降为零。这种影响很容易迫使攻击者永久放弃他们的活动,否则就只能冒着被识别出来的风险做出受监控的更改。

利用其他挖矿矿池策略

攻击者不会一直使用代理。许多情况下,受害机器都会直接连接至矿池,这意味着前面介绍的抵御技术将不再有效。提交错误份额只能从矿池中阻止我们自己的 IP 地址,对挖矿操作不会有任何影响。

Public pool topology Fig. 10: Public pool topology; a victim miner connected directly to a public pool

在检查挖矿矿池的源代码后,我们想到了另一种方法:以钱包地址作为目标。前面所述的错误份额策略是以挖矿程序的 IP 地址为目标,但我们发现在钱包级别还实施了另一种策略——如果工作人员数量超过 1,000,矿池会将钱包地址阻止一小时

在使用代理挖矿时,攻击者可以将其钱包地址以排他方式嵌入到代理服务器上,使自己能够有效地伪装。但如果是执行直接挖矿,则钱包地址必须存在于受害机器上,这就使我们有机会提取到该数据。

在此情况下,阻止攻击者就变得很简单了。我们只需要使用攻击者的钱包同时发送 1,000 次以上的登录请求,就能迫使矿池阻止攻击者的钱包。这种技术已作为一个操作模式添加到 XMRogue 工具中。

为阐明这一想法,我们使用了另一项被发现使用公共矿池 MoneroOcean 的活动为例。该活动最初的哈希率为 22 kH/秒(图 11)。此活动的规模远远小于我们前面所讨论的活动,但该技术本身应该能涵盖更广泛的加密货币挖矿活动配置。

To illustrate this idea, we used another campaign we uncovered that uses the public pool MoneroOcean. The campaign's initial state was a 22 kH/s hashrate (Figure 11). Fig. 11: Active cryptominer campaign uses MoneroOcean public pool

在启动我们的脚本之后,它立即发起了数千次登录,我们发现挖矿速率直线下降,最终完全停止下来(图 12)。

After launching our script, which instantly initiates thousands of logins, we saw the mining rate plummet, eventually seizing entirely (Figure 12). Fig. 12: Continuous decrease of the cryptominers’ mining hashrate

范围越广,猎物越浅

这种策略可以中断更多的挖矿操作,但并不是一劳永逸的解决方案。一旦我们停止多重登录连接,活动的哈希率又会死灰复燃(图 13)。

This tactic could interrupt more mining operations, but it isn’t a permanent solution. Once we stopped the multiple login connections, the campaign's hashrate recovered (Figure 13). Fig. 13: The account recovered after we stopped XMRogue's multiple login sequence

总结

上述技术展示了防御者如何利用矿池策略,在不破坏合法矿池操作的情况下有效地关停恶意加密货币挖矿程序活动。合法挖矿程序能够从此类攻击中迅速恢复,因为它们可以在本地轻松修改其 IP 或钱包地址。

而恶意加密货币挖矿程序就很难做到这一点,因为它需要修改的是整个僵尸网络。但对于不太复杂的挖矿程序来说,这种防御措施有可能使僵尸网络完全失去作用。

系列总结

本篇博文对我们的“加密货币挖矿程序深度解析”系列进行了总结。通过捕捉实施不同挖矿拓扑的活跃活动,我们揭示了加密货币挖矿的基本原理,并且探索了攻击者的心理。

我们相信,加密货币挖矿程序的威胁将不断加剧。但如今,我们能够发起反击并扰乱攻击者的运作,从而使其通过挖矿程序有效变现的难度大大增加。



Maor Dahan

寫於

Maor Dahan

June 24, 2025

Maor Dahan

寫於

Maor Dahan

Maor Dahan 是 Akamai 的高级安全研究员,在网络安全领域拥有十多年的深厚经验。Maor 擅长操作系统内部原理分析、漏洞研究和恶意软件分析,并为 EDR、EPP 和基于虚拟化的安全防护等创新安全产品设计和开发了先进的检测和防御机制。