加密挖矿程序深度解析:分析加密矿工

admin 2025年7月9日01:44:04评论1 views字数 9044阅读30分8秒阅读模式

摘要

在本文中,我们将深入分析多种加密矿工样本,了解它们的内部工作机制。本次重点分析用于挖掘 Monero 和 Zephyr 的矿工程序,因为这两种加密货币被我们认为特别适合恶意挖矿行为。本文将讨论以下内容:

  • • 如何利用区块链网络识别潜在矿工恶意软件的可疑挖矿通信
  • • 四个案例分析,展示不同拓扑结构下矿工如何长期保持活跃和持久性
  • • 一起令人关注的长期持续攻击案例,涉及数千名受害者,每小时产生约 5.50 美元收益
  • • 攻击者在同一攻击活动中使用多种加密货币的情况
  • • 通过网络活动和区块链网络的交叉分析实现检测
  • • 通过进程内存分析及共识算法指纹识别实现检测

我们还在本文末尾列出了来自上述案例的威胁指标(IOC),帮助安全团队防护自身资产。

最后,我们将探讨基于抗 ASIC 算法理念的检测方法,以及针对挖矿行为本身的检测策略。这些检测方法既可应用于网络层,也可应用于操作系统层。

Monero 网络分析

Monero 网络使用 Levin 协议 实现节点之间的点对点(P2P)通信。该协议用于分发区块链操作,如新交易和新区块的传播。它还使得网络能够通过节点信息的发布保持去中心化的自我运作,并通过共识算法抵御攻击。

虽然我们以 Monero 为例,但大多数加密货币的网络都具有类似的区块链发现机制。这是区块链网络去中心化特性的必然结果。

网络发现

由于 Monero 网络是由个人贡献者组成的去中心化 P2P 网络,我们可以直接连接到它。通过对 Monero 网络的映射,可以获得可靠的威胁指标(例如节点的 IP 地址),并发现某些节点中心比其他节点更活跃的潜在异常行为。

这些信息可用于检测和调查挖矿活动,同时还能帮助我们评估网络的安全性和暴露在区块链攻击下的风险。下图(图 1)展示了 Monero 挖矿网络的可视化情况,热力图显示了不同地理区域的节点密度,我们将对外开放的节点用红点标注。

加密挖矿程序深度解析:分析加密矿工
图 1:Monero 网络的可视化映射(截至 2025 年 3 月)

由于该网络由分布式的对等节点组成,任何加密矿工程序都必须直接或间接地与全球大约 30,000 个服务器中的某一个或多个节点进行交互,这些节点都可以在我们的地图上找到。正如我们后续分析所发现的,这张网络地图对于追踪加密矿工样本和检测与区块链的直接网络连接非常有价值。(你可以在GitHub 仓库https://github.com/akamai/CryptominersAnalysisTools中找到更多信息,包括区块链爬取和地图生成的源代码。)

将加密矿工与区块链网络进行交叉关联

利用通过 Monero 网络映射获得的各种威胁指标,可以识别出与区块链网络进行交互的恶意样本。例如,使用 VirusTotal 的 Livehunt 功能,我们可以识别包含已知节点地址的文件,从而帮助我们检测活跃的加密矿工攻击活动(见图 2)。

加密挖矿程序深度解析:分析加密矿工

图 2:VirusTotal Livehunt YARA 规则示例

和安全领域的其他方法一样,这并不是一种万能的狩猎技术。仅靠这种方法可能会产生误报,例如当某个服务器并不只是区块链节点时;也可能导致检测盲区,因为地图无法发现所有的节点。不过,将这种方法与其他威胁指标结合使用,可以有效提升真正的威胁检测率。

该网络地图包含了公开可访问的节点和最近可访问的节点。其中一些节点并不仅仅是 Monero 节点,例如,它们还可能作为 Python 的 PyPi 镜像站,或托管其他服务。图 3 展示了一个同时提供多个服务的服务器示例,这类服务器在狩猎过程中可能带来很多干扰因素。为了降低误报风险,我们在分析中排除了这些服务器。

加密挖矿程序深度解析:分析加密矿工

图 3:Monero 网络中同时提供多种服务的节点示例(来自 VirusTotal)

在威胁狩猎中,排除不相关样本筛选出相关样本同样重要。通过网络分析结合交叉关联的方法,可以揭示隐藏在僵尸网络背后的加密矿工及其完整的挖矿活动。如果再结合一些静态分析技术,例如匹配硬编码的钱包地址,就可以更高效地聚焦于真正恶意的样本。

加密矿工样本分析

由于加密挖矿行为本身对系统的性能消耗较大,即使“肉眼”也很容易察觉它们的活动。一位有警觉性的 IT 人员,不需要复杂的反恶意软件工具,也能凭借异常表现发现矿工的存在。甚至非技术人员也了解自己电脑的正常性能,一旦机器卡顿,通常会请专业人员检查,而专业人员很容易找到恶意挖矿的根本原因。因此,许多加密矿工并不特别注重抵抗分析和检测,而是采取“广撒网”的策略,通过大规模传播感染尽可能多的主机。

在以下案例分析中,我们将介绍一些在实际环境中捕获的加密矿工样本,并深入探讨它们的运行方式和行为细节。这些案例主要基于两个筛选标准:

  1. 1. 使用了前一篇博客文章中提到的、较为适合恶意挖矿的加密货币;
  2. 2. 所采用的挖矿拓扑结构。

案例分析 #1:一个持久且大规模的攻击活动

在本次研究中,我们分析了多个加密矿工样本,其中有一个攻击活动已持续 6 年之久。像这种长期存在的活动,通常是有组织的操作,或者是为第三方部署矿工的恶意软件分发服务。

对该样本的分析表明,它使用了多个代理,总算力达到了 5.6 Mh/s,这相当于感染了数千台机器(见图 4)。这是一场大规模且长期的攻击,而且由于算力保持稳定,可以推测大多数受害者并未察觉,恶意程序仍在持续运行,未被清除。对于攻击者而言,这样的活动可带来极高的非法收益。

加密挖矿程序深度解析:分析加密矿工
图 4:该攻击活动在 Nanopool 矿池上的控制面板,显示总算力情况

该攻击活动至少从 2018 年 6 月开始活跃,且其中的一些迹象(例如样本中使用的语言)可能表明是俄罗斯与中国威胁组织合作的结果。对其指挥控制(C2)服务器的分析也支持了这一推测,但截至本文发布时,这一结论尚未被完全证实。

截至目前,攻击者已累计获得至少 1,702 个 XMR(门罗币),以当前汇率计算约为 28 万美元。按 6 年计算,这意味着仅通过这一项活动,每年平均获利接近 47,000 美元。

该攻击活动的大多数样本,都是基于受害主机的操作系统,采用对应的脚本语言作为初始加载器和下载器。它大量依赖路由转发和伪装的网络连接,可能是为了让恶意文件与 C2 服务器的关联更加隐蔽、难以追踪。

通过对这些样本的进一步分析,我们发现攻击者使用 PowerShell 以隐藏方式部署名为 loader 的可执行程序,并利用 r77 rootkit 进行隐藏。即使不深入分析复杂的 dropper(投递器),也能发现该矿工程序存在多个版本。

有些版本中,矿工程序本身包含了 config.json 文件,存储了挖矿配置;而在另外一些样本中,是通过 OracleLoader 脚本来下发矿工程序并配置挖矿参数。此外,该恶意软件还具备自更新机制,可以在被破坏或清理后恢复僵尸网络的控制能力(详见表 1)。

Characteristic
Value
Note
Malware name
Oracle Loader
Current version
1.1.72.0
<5.133.65.53>/Oracle/ver$77_loader.exe.txt
Related components
OracleLoader.ps1rms.exerms2.exe$77_oracle.exe

表 1:Oracle Loader 特性

该恶意软件还会监听 999 端口,暴露出 XMRig 的 HTTP API 功能。这使得攻击者可以远程访问受害者主机上的矿工程序,方便监控挖矿过程。如果受害者的主机直接暴露在互联网中,且未经过 NAT 路由器或外部防火墙的保护,理论上可以通过 Shodan 这样的网络监控服务发现这些受害者设备。图 5 展示了使用 Shodan 查询检测潜在受害者的结果。

加密挖矿程序深度解析:分析加密矿工
图 5:Shodan 查询潜在受害者的结果(来源:http://shodan.io)

通过使用 XMRig worker monitor 网页应用监控受害者的矿工程序,我们可以获取到受害者的一些信息,例如 CPU 型号和算力等。这个界面只能查询信息,也就是说,虽然我们可以看到矿工的活动情况,但无法通过它控制矿工或将其关闭(见图 6)。

加密挖矿程序深度解析:分析加密矿工
图 6:通过 worker monitor 远程查看受害者主机上的矿工

从矿池的控制面板可以看出,算力长期保持稳定,说明这些受害者分布在全球各地,否则,按时区活跃时间不同,算力应该会有波动。另一种可能性是,攻击者主要针对服务器,而不是像其他矿工活动那样以普通消费者为目标。

案例分析 #2:使用公共矿池拓扑结构的 Zephyr 矿工

虽然有些攻击者像案例 #1 那样动机强烈、技术成熟,长期运营、获利丰厚,但这并不是主流威胁。使用公共矿池的加密矿工才是最常见的。这类矿工不具备复杂功能,如混淆、反分析技术等。它们通常直接使用明文的钱包地址向矿池发起挖矿请求,攻击方式简单,影响范围和收益也相对较小。

加密货币市场为攻击者提供了多种选择,不同货币的挖矿收益率和币值差异较大。尽管从金融角度看,选择收益最高的币种最为合理,但对许多攻击者来说,收益率似乎并不是首要考虑因素。Zephyr 币虽然不如 Monero 有利可图,但却在攻击者中非常常见。这可能与币价波动性相关:无论是攻击者还是正常投资者,都可能会因看好某币种的长期潜力而选择它。

我们观察到的 最大规模的 Zephyr 挖矿活动,拥有超过 1,400 个活跃受害者,总算力达 800 Kh/s,总收益达到 906.3 ZEPH,按当前汇率折合约 2,528 美元。

通过观察僵尸网络的算力变化,我们可以判断攻击者是否针对某些特定区域发起攻击。例如,在另一个活动中,我们发现它结合了代理和直接连接的恶意软件,疑似以俄语用户为目标(见图 7)。

加密挖矿程序深度解析:分析加密矿工
图 7:加密矿工算力随时间变化的曲线图(来源:https://zephyr.hashvault.pro/en/)

这种周期性变化说明,大多数受害者可能是个人用户而非服务器,因为个人设备更有可能定期关机。如果我们进一步分析算力的波动频率,可以发现其周期为 24 小时。假设算力低谷对应夜间时间,就可以推测出大部分受害者所在的时区(见图 8)。

加密挖矿程序深度解析:分析加密矿工
图 8:通过时区地图定位大多数受害者的位置(来源:https://www.timeanddate.com/time/map/)

仅凭时间区间还不足以作为定位受害者的证据,但这一推测得到了 Hashvault 矿池提供的 IP 地理位置查询功能的支持。结合恶意软件分析,以及这些恶意软件的伪装名称多为游戏相关,如 Fortnite、Roblox 的 Solara 执行器等,我们可以更加合理地推断出:该恶意软件伪装成作弊工具,引诱玩家主动下载安装。此外,我们怀疑该恶意软件是通过社交媒体和消息应用(如 Telegram、Discord)传播的。

案例分析 #3:使用挖矿代理拓扑的加密矿工

我们通过 Monero 网络地图收集了超过 25,000 个节点的信息,但其中只有约 10% 是可直接访问的节点。反过来,我们还利用这张地图排查了那些未与区块链网络直接通信的已知矿工程序,由此发现了一起 自 2022 年 4 月以来活跃的攻击活动。

图 9 展示了该恶意软件的攻击路径:它使用像 XMRig-proxy 这样的挖矿代理,并通过盗版软件传播自己的矿工程序,这些盗版软件包括破解版本的 Internet Download Manager(IDM)等。

加密挖矿程序深度解析:分析加密矿工
图9:使用破解程序进行初始访问的加密矿工可视化

攻击流程在该活动的恶意软件样本中相似。通常从 crackingcity.com 的驱动下载开始,触发有效载荷链。然后,在最后阶段,部署连接到托管于 custompool.xyz 代理的加密矿工 dlIhost.exe。攻击者使用环境变量将字符串作为参数传递给其子进程,主要是批处理文件,作为一种规避技术。其工作原理是解密嵌入的压缩包,并在操作防御者排除列表后执行脚本或文件。

攻击者于2022年4月29日以 custompool.xyz 名义注册了代理域名,仅在VirusTotal首次检测后三天。第一个样本名为VScan.exe,是一个自解压档案,使用了两个批处理文件。第一个是 main.bat,使用隐藏在环境变量中的密码来解压第二阶段批处理文件 VS.bat。我们可以通过调试器以两种方式提取隐藏信息:当访问名为“l3”的环境变量时断点(图10),或在每次修改环境变量时断点。

加密挖矿程序深度解析:分析加密矿工
图10:动态分析揭示加密压缩包密码

加密挖矿程序深度解析:分析加密矿工
使用密码 un#912345678@rar,我们可以解压连接到另一个C2域名 crackingcity.com 的第二阶段加载器。在最后阶段,恶意软件执行 dlIhost.exe(本质上是一个带有嵌入配置指向 custompool.xyz 矿池的修改版XMRig客户端),此时该配置为直接IP(图11)。

加密挖矿程序深度解析:分析加密矿工
图11:通过静态分析拦截配置数据

现在有一个关于服务器类型的问题。它是私有矿池?还是挖矿代理?或者是某种我们视为私有矿池的自定义节点?为了解答这些问题,我们需要一种方法从服务器提取一些标识符。通过专用节点进行独立挖矿需要矿工在守护进程模式下运行(RPC请求通过HTTP传输),而该配置中并不存在这种模式,因此显然不是这种情况。

JSON结构在序列化过程中保持不变,这使我们能够通过发送XMRig代理支持的各种Stratum方法,尝试从服务器获取响应。如果服务器的响应与键和值的顺序匹配,这可能强烈表明服务器使用了XMRig代理或基于其构建。

XMRig支持三种Stratum协议方法:

  1. 1. Login — 挖矿工作者发起的第一个请求,通常包含作为登录的钱包地址
  2. 2. Keepalived — 保持连接存活
  3. 3. Submit — 在找到有效份额时提交结果

当请求无效方法时,XMRig代理会返回错误(图12)。这可以指示服务器类型,因为其他服务如矿池通常会忽略错误请求,而不是返回错误。综合以上,我们得出结论:我们面对的是XMRig代理。

加密挖矿程序深度解析:分析加密矿工
图12:XMRig代理响应基线

我们将提交(submit)方法分为三种情况,这些情况应当从XMRig代理返回明确的错误(表2)。

  • • 低难度份额(low-difficulty share)是指矿工提交的哈希值低于预期目标值。
  • • 无效随机数(invalid nonce)是指根据NiceHash设计,随机数超出范围。
  • • 最大难度哈希(maximum difficulty hash)是特意构造的哈希,可能满足任何任务的目标。在这种情况下,我们绕过了XMRig代理的难度验证,直接传输到矿池,矿池返回错误。
Request
XMRig-proxy
MoneroOcean
HashVault
Nanopool
SupportXMR
C3Pool
Login
(baseline)
Keepalived
(baseline)
Unknown
(baseline)
Submit — low difficulty
(baseline)
Submit — invalid nonce
(baseline)
NA — blocked IP
Submit — maximum difficulty
Repeat pool response message
NA — blocked IP

表2:XMRig代理与各公共矿池之间Stratum协议请求的对比;✅表示与基线相同,✕表示数据不同,≈表示数据相同但顺序不同

我们不仅能区分XMRig代理与常用矿池,还能区分各矿池之间。这些信息在通过其他网络组件(如反向代理)路由到矿池时非常有用。在这种情况下,当我们提交最大难度的挖矿结果时,错误来自后端矿池而非代理。利用这些信息,我们可以识别攻击者使用的是Nanopool,但由于缺少钱包地址,无法评估该活动的受害者数量或利润。

案例研究#4:使用Stratum代理拓扑隐藏区块链通信

Stratum协议代理在网络层工作,通过直接转发Stratum协议请求到另一台服务器而不修改钱包地址,确保每个矿工的工作归属到其对应的钱包。Stratum代理的实现可以使用基本的传输层网络代理,或理解并处理该协议的专用应用代理。

我们发现一个活跃活动,使用该拓扑结构,通过Stratum代理连接到公共矿池。我们无法确定它是网络层的反向代理,还是拦截Stratum协议并作为应用代理运行。不论哪种方式,它都会重定向Stratum消息以隐藏后端矿池或节点。通过扫描公共矿池中的该钱包,发现其连接的是MoneroOcean公共矿池。

该活动至少活跃了四个月,总利润为1.158 XMR(约合180美元)。单凭这一点来看,这并不是一个非常成功的活动,但威胁行为者明显付出了努力,显示出潜在更大的计划,包括自主开发整个活动——基础设施、加密矿工及用于投放的各种恶意文件。攻击者还自行分发该活动,不依赖第三方,同时实施了反逆向工程机制,包括加密、混淆和阻止使用监控工具(图13)。

加密挖矿程序深度解析:分析加密矿工
图13:持久化加密矿工使用Stratum代理隐藏后端矿池

虽然该活动看似“懒散”,但我们可以看到恶意软件的精心设计,尤其是在混淆过程中。恶意软件试图通过在运行时下载压缩包,并用合法系统文件名执行进程来隐藏有效载荷

检测

一般来说,检测可以有多种途径。单一方法可能无法独立成效,但与其他检测机制结合时效果显著。加密矿工也不例外;实际上,由于其表面特征较为“良性”,它们很难被检测。它们仅利用大多数操作系统中不需特殊权限的资源——计算(CPU时间)。

网络连接

要检测这些矿工,我们可以将区块链网络(如之前爬取的门罗网络)与网络可视化工具(如防火墙或网络分割解决方案)获取的数据进行交叉比对。由于每个节点或矿池都必须与门罗区块链交互,这为网络管理员提供了极具价值的出网流量洞察。结合网络端口检测更为简单,因为大多数加密矿工使用特定端口号,如999、3333或7777。尽管本案例中使用的是门罗,但区块链网络映射可应用于所有基于工作量证明(PoW)的网络

但需注意,并非所有与门罗节点的流量都属于加密挖矿,因为这些节点有时提供多项服务。例如,我们在门罗网络映射中发现的IP 157[.]90[.]212[.]53,同时也是Tor网络的出口节点。一个门罗节点提供其他服务可能有多种原因,可能被攻破,或是多功能设计。无额外信息,仅凭网络连接可能导致误报,这也是端口号信息对准确检测至关重要的原因。

误报的另一个原因是映射更新不及时。一个合法服务器可能被分配先前用于门罗节点的IP,若映射未及时更新,可能引发误报。

该检测不能单独依赖,但可作为更全面检测逻辑或调查的触发条件。任何加密矿工操作都必须包含与Stratum服务器的通信以获取挖矿任务。通常它连接公开矿池,但有时会用代理隐藏,不会出现在网络映射中。

算法执行检测

加密矿工大量使用受害者计算资源,监测系统使用率激增可能提示感染。但和网络映射交叉对比一样,该方法单独使用难以准确检测。

结合多种可检测的IOC(威胁指标)将提升检测置信度,减少误报。成功的挖矿操作需满足关键条件:加密矿工必须使用选定币种的共识算法进行工作量证明。每种算法在运行时会产生独特指纹,提取这些特征可以形成有效的恶意加密矿工检测方法。

抗ASIC算法,如RandomX,通常实现复杂操作集合,具有唯一识别性。例如,RandomX开发者基于该假设开发了检测工具。通过遍历系统运行线程,可探测线程状态,包括CPU寄存器值。RandomX利用了许多现代[CPU特性](https://github.com/tevador/RandomX/blob/master/doc/design.md#:~:text=The actual program execution should utilize as many CPU components as possible. Some of the features that should be utilized in the program are%3A),检测工具中使用舍入控制配置即为其中一种方式。

事实上,将其与硬件AES操作及hugepage配置等其他指标结合,将提升检测率。总之,可通过查找SSE寄存器中的独特AES密钥或查询线程访问令牌权限实现检测。

这些方法也可扩展到其他操作系统,因大多数加密矿工目标是平台无关,在不同系统中表现相似。非单一操作系统定位使活动潜在目标数量大幅增加,成功可能性提升。

在进程内存中定位钱包

当加密矿工直接与矿池通信而非通过代理时,矿工钱包应驻留在进程内存中。这是因为Stratum协议要求矿工认证服务器,并告知其有效份额应奖励哪个账户。通常使用钱包地址,门罗挖矿特别是基于XMRig软件。基于这些假设,我们可通过钩取各类套接字API拦截钱包发送到矿池的过程,或(理论上)利用中间人攻击(MITM)拦截矿工发送的认证消息。

还可通过正则表达式搜索整个进程分配的内存,寻找95字符的钱包地址,其格式严格,以4或8开头,字符为BASE58有效字符。模式*/[48][1-9A-HJ-NP-Za-km-z]{94}/*足够完成此任务,也可嵌入YARA规则。扫描可在加密矿工首次连接矿池后随时进行,因为矿工必须保持钱包地址以备重新连接

最后,可利用上述任一技术查找Stratum协议相关的其他字符串并解析钱包。此类指标可降低误报,因为协议的JSON结构极具唯一性。例如,见图14中的登录请求;我们可以创建包含多个键的更强签名,实现更准确检测。

  {"id": 1,"jsonrpc": "2.0","method": "login","params": {"login": "<wallet address>","pass": "<Usually the worker name>","agent": "<Usually xmrig agent>","algo": ["rx/0"       ]   }}

图14:登录请求示例;匹配该模式可实现更准确的检测

结论

我们观察到恶意加密矿工不仅使用了知名的门罗币,还结合了Zephyr。通过采用不同的挖矿拓扑结构,这些加密矿工能够隐藏信息,减少被识别和暴露的风险。

在了解了不同加密矿工及整体挖矿过程的结构后,提出了一个问题:我们能否阻止加密矿工僵尸网络的挖矿活动?有效阻断挖矿活动将关闭感染受害者机器、消耗其资源的加密矿工。我们将在后文探讨这一问题。

IoC

加密挖矿程序深度解析:分析加密矿工
获取更多精彩内容,尽在Track安全社区~:https://bbs.zkaq.cn

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。

原文始发于微信公众号(白帽子左一):加密挖矿程序深度解析:分析加密矿工

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年7月9日01:44:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   加密挖矿程序深度解析:分析加密矿工http://cn-sec.com/archives/4233221.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息