一、前言
最近这几个月遇见的应急内容最多的就是关于挖矿的通报,所以就有个想法关于挖矿的治理工具,通过调研目前有一个比较简单的思路,在避免花钱买设备的条件下自己通过现有的技术去实现。
很多被入侵的服务器,攻击者其实并不会做太复杂的横向移动,而是直接部署挖矿程序开始“赚钱”。这类行为通常具有几个比较明显的特点:
- CPU 长时间处于高负载状态
- 主机持续连接外部矿池服务器
- 网络流量规模不大,但连接持续时间很长
在实际排查过程中,经常会看到服务器中运行类似 XMRig 这样的挖矿程序。攻击者往往利用漏洞或弱口令进入系统之后直接部署挖矿程序,从而长期占用服务器算力。
从攻击者收益角度来看,目前最常见的目标其实是门罗币(Monero),因为该币种具有匿名性强、CPU 挖矿友好等特点。而像比特币(Bitcoin)这种主流币种基本已经被专业矿机垄断,普通服务器挖矿收益并不高。
在很多实际环境中,终端检测并不一定可靠,例如:
- 容器环境
- 云主机环境
- 无法安装 EDR 的服务器
- 大规模资产环境

二、为什么选择 Suricata
在流量检测领域,比较常见的 IDS/IPS 系统主要是 Snort 和 Suricata。
最终选择 Suricata 的原因主要有以下几点。
1 多线程性能
Suricata 本身是多线程架构,在高带宽网络环境下能够更好地利用多核 CPU 资源。
2 协议解析能力
Suricata 内置了大量协议解析模块,例如:
3 规则兼容性
Suricata 兼容 Snort 规则语法,同时支持更多扩展能力,例如 Lua 扩展和高级协议识别。
三、实现原理

四、挖矿软件通信机制分析
这里我使用是门罗币的程序创建钱包进行流量分析

选择适配的版本即可,一般仅选择简易模式即可

创建一个新的钱包


这个是钱包备份信息

设置密码

创建完成等待钱包运行建立链接

钱包地址

访问门罗币的官网,匿名挖掘,选择矿池

填入前面获取的钱包地址

挖矿设备选择

赞助,这个赞助是挖出的虚拟币捐赠的百分比

下载挖矿程序,运行命令,即可实现挖矿

xmrig.exe --donate-level 5 -o monerohash.com:9999 -u > 43N1FcgCgF5PkAdHWSk5uEJxeQHJDcqpYgZbQmhR8YjYe9KExFHeP9C1hqBCxBKFVmjUySTkJ8HbwFDUfiYeF4fXS7dziRk -k --tls
在编写检测规则之前,需要先了解挖矿程序在网络中的通信方式。本次主要分析了几个常见挖矿软件:
1.矿机下发流程如图

2.分析
在流量分析的时候注重的是协议类型,tls协议的话特征是比较少的
门罗币 XMR TCP特征
"agent":"XMRig/6.25.0 (Windows NT 10.0; Win64; x64) libuv/1.51.0 msvc/2022"

特征取挖矿软件agent"agent":"XMRig/
alert tcp any any -> any any (
msg:"ENT Monero Mining";
flow:established,to_server;
content:"\"method\":\"login\"";
nocase;
content:"\"agent\":\"XMRig/";
distance:0;
nocase;
classtype:coin-mining;
metadata:confidence High, deployment Production;
sid:9300004;
rev:1;
)
莱特币LTC 比特币BTC
TCP特征
"method":"mining.notify" "mining.set_difficulty"

alert tcp $HOME_NET any -> $EXTERNAL_NET any (
msg:"ENT Stratum mining.notify detected";
flow:established,to_client;
content:"\"method\":\"mining.notify\"";
nocase;
fast_pattern;
classtype:coin-mining;
metadata:attack_target Client, confidence High, deployment Production;
sid:9100001;
rev:1;
)
alert tcp any any -> any any (
msg:"ENT Stratum method regex detect";
flow:established;
content:"method";
fast_pattern;
pcre:"/\"method\"\s*:\s*\"mining\.(notify|set_difficulty|authorize)\"/Ri";
classtype:coin-mining;
metadata:confidence High, deployment Production;
sid:9100010;
rev:1;
)
TLS特征
匹配 TLS/SSL 服务器名称指⽰(SNI)字段出现了矿池域名。btc.ntminer.vip,如果是通过域名连接矿池的话加密通
信的情况下可以通过矿池域名检测。

alert tls $HOME_NET any -> $EXTERNAL_NET any (
msg:"ENT Mining Pool btc.ntminer.vip";
tls.sni;
content:".ntminer.vip";
nocase;
classtype:coin-mining;
sid:9200002;
rev:1;
)
五、治理工具的优势
1 基于协议特征识别挖矿行为
该治理工具主要通过分析挖矿程序的通信协议特征进行检测,例如:
- Stratum 挖矿协议
- JSON-RPC 通信特征
- 挖矿任务提交行为
- 矿池连接模式
2 不依赖矿池情报库
传统安全设备通常通过 威胁情报(Threat Intelligence) 来识别挖矿行为,例如:
但这种方式存在明显局限:
- 攻击者可以快速更换矿池地址
- 私有矿池很难被情报库收录
- 情报更新存在时间差
而基于 Suricata 的检测方案更多依赖 协议行为特征,即使攻击者部署新的矿池服务器,只要通信行为符合挖矿协议特征,仍然能够被识别。
3 检测能力更加灵活
Suricata 支持 自定义规则编写,因此可以根据实际环境快速调整检测策略,例如:
- 新增挖矿协议特征
- 添加矿池域名规则
- 结合 TLS 指纹识别
- 引入自定义 Lua 检测逻辑
相比很多商业安全设备固定的检测规则,这种方式更加灵活,也更适合进行安全研究和快速迭代。