一、前言

最近这几个月遇见的应急内容最多的就是关于挖矿的通报,所以就有个想法关于挖矿的治理工具,通过调研目前有一个比较简单的思路,在避免花钱买设备的条件下自己通过现有的技术去实现。

很多被入侵的服务器,攻击者其实并不会做太复杂的横向移动,而是直接部署挖矿程序开始“赚钱”。这类行为通常具有几个比较明显的特点:

  • CPU 长时间处于高负载状态
  • 主机持续连接外部矿池服务器
  • 网络流量规模不大,但连接持续时间很长

在实际排查过程中,经常会看到服务器中运行类似 XMRig 这样的挖矿程序。攻击者往往利用漏洞或弱口令进入系统之后直接部署挖矿程序,从而长期占用服务器算力。

从攻击者收益角度来看,目前最常见的目标其实是门罗币(Monero),因为该币种具有匿名性强、CPU 挖矿友好等特点。而像比特币(Bitcoin)这种主流币种基本已经被专业矿机垄断,普通服务器挖矿收益并不高。

在很多实际环境中,终端检测并不一定可靠,例如:

  • 容器环境
  • 云主机环境
  • 无法安装 EDR 的服务器
  • 大规模资产环境


二、为什么选择 Suricata

在流量检测领域,比较常见的 IDS/IPS 系统主要是 Snort 和 Suricata。

最终选择 Suricata 的原因主要有以下几点。

1 多线程性能

Suricata 本身是多线程架构,在高带宽网络环境下能够更好地利用多核 CPU 资源。

2 协议解析能力

Suricata 内置了大量协议解析模块,例如:

  • HTTP /DNS /TLS /SMB /FTP

3 规则兼容性

Suricata 兼容 Snort 规则语法,同时支持更多扩展能力,例如 Lua 扩展和高级协议识别。

三、实现原理

四、挖矿软件通信机制分析

这里我使用是门罗币的程序创建钱包进行流量分析

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

创建一个新的钱包

这个是钱包备份信息

设置密码

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

钱包地址

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

填入前面获取的钱包地址

挖矿设备选择

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

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

xmrig.exe --donate-level 5 -o monerohash.com:9999 -u > 43N1FcgCgF5PkAdHWSk5uEJxeQHJDcqpYgZbQmhR8YjYe9KExFHeP9C1hqBCxBKFVmjUySTkJ8HbwFDUfiYeF4fXS7dziRk -k --tls

在编写检测规则之前,需要先了解挖矿程序在网络中的通信方式。本次主要分析了几个常见挖矿软件:

  • XMRig
  • BTC
  • LTC

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) 来识别挖矿行为,例如:

  • 矿池 IP 地址
  • 矿池域名
  • 挖矿服务器黑名单

但这种方式存在明显局限:

  1. 攻击者可以快速更换矿池地址
  2. 私有矿池很难被情报库收录
  3. 情报更新存在时间差

而基于 Suricata 的检测方案更多依赖 协议行为特征,即使攻击者部署新的矿池服务器,只要通信行为符合挖矿协议特征,仍然能够被识别。

3 检测能力更加灵活

Suricata 支持 自定义规则编写,因此可以根据实际环境快速调整检测策略,例如:

  • 新增挖矿协议特征
  • 添加矿池域名规则
  • 结合 TLS 指纹识别
  • 引入自定义 Lua 检测逻辑

相比很多商业安全设备固定的检测规则,这种方式更加灵活,也更适合进行安全研究和快速迭代。

标签: none

添加新评论