作者:xti9er、七夜、Pav1

来源:https://security.tencent.com/index.php/blog/msg/208

一、前言

近年来由于虚拟货币区块链等技术和产品的发展以及虚拟货币价值的持续升高,让原本用于DDoS攻击或者发垃圾邮件的僵尸网络又看到了另一种新的变现途径:虚拟货币”挖矿”。所以一些被攻陷的主机常常也被植入挖矿木马,开始偷偷地消耗服务器资源来挖矿,甚至企业的内鬼也会给服务器安装挖矿木马,防不胜防。

作为企业,如何检测防范挖矿这种危害行为?其实挖矿木马本身是一个程序,同传统的木马检测思路一致,也是从流量层或主机层入手。

二、流量

2.1 挖矿协议

挖矿机器与矿池之间的通信需要遵循特定的协议,目前主流的挖矿协议为Stratum协议,在很久之前还有GBT(getblocktemplate)协议和getwork协议,不过由于带宽和性能的消耗较多,在7、8年前就已经被新的矿机所抛弃[1] 。

回到Stratum协议,该协议在2012年推出,是从getwork协议的基础上演变而来的,解决了getwork协议效率低下的问题[2]。在Stratum中,挖矿机器与矿池之间采用TCP的形式传输数据,数据传输的过程基于JSON-RPC(一个无状态且轻量级的远程过程调用RPC传送协议)。矿机向矿池可使用如下8个发放发送数据:

矿池向矿机则可使用如下7个方法发送数据:

矿机使用Stratum协议的总体工作流程如下:

(1)矿机任务订阅

矿机=>矿池:mining.subscribe 矿池=>矿机:mining.notify

(2)矿机认证

矿机=>矿池:mining.authorize 矿池=>矿机:返回认证的结果,true 或者false

(3)设置难度和extranonceing.set_extranonce,并通知矿机工作

矿池=>矿机:mining.set_difficulty、mining.set_extranonce、mining.notify

(4)矿机提交结果

矿机=>矿池:mining.submit 矿池=>矿机:返回是否接受结果,true 或者false

值得注意的是,上面是标准的Stratum,由slush pool(最大的BTC矿池)提出[3],由于加密货币的种类繁多,不同的加密货币采用的通信协议会有部分不同。比如常见的XMR(门罗币)挖矿程序xmrig[4]、xmr-stak[5]则会将上述的协议进行修改。门罗币简化了上述流程,通过login方法来进行认证和订阅。矿池端在接收到login信息后,如果验证通过,则会直接下发任务 —— 这样子就将标准Stratum协议的三次通信压缩为一次,大大减少了通信流量。

2.2 协议检测

首先看下真正的挖矿流量是什么样子:

可以看出,BTC挖矿采用了标准的Stratum协议,其传输数据采用标准的json格式,有比较明显的方法标识,如mining.subscribe、mining.authorize等。而XMR挖矿流量简化了上述过程,数据包大概分成了两类,一类是登录包,一类是提交包。这两种包也有明显的特点:

(1)首先是有jsonrpc的版本标识,这个是必须要有的。

(2)id字段请求和响应相等,并且逐步递增。

(3)带有明显的特征字段,例如login、submit、params、seed_hash等。

针对上述的特征,可以通过特征工程的方式建立规则,针对性的进行检测。由于挖矿行为本身的特性,一天中的登录和认证包较少,而提交包和下发任务的包很多,可针对这种情况进行优化。

2.3 检测对抗

针对矿机与矿池通信的协议检测仅能覆盖到明文通信的情况,目前绝大多数矿池都支持了加密通信。

协议加密是未来IDS要解决问题。那么针对加密传输的情况,我们能够在握手协议和证书两个层面来做一些事情。由于挖矿的特殊性,矿池的域名、证书是不会轻易进行变化的,并且矿池的具有聚集属性,即越大的矿池集合到的矿机越多,越能够保证收益的稳定性。所以也可以针对排名较为靠前的矿池进行域名和证书的收集,添加针对性的检测策略。

三、主机

早期的挖矿木马在感染主机后显著的行为特征是极大的占用CPU及GPU资源,主要包括:高CPU 和 GPU 使用率、响应速度慢、 崩溃或频繁重新启动、系统过热、异常网络活动(比如连接挖矿相关的域名或 IP)。

随着对抗的深入和区块链技术的升级,挖矿采取更加隐蔽的CPU/GPU占用,防止被用户发现,同时出现了一类以占用硬盘空间和网络带宽来进行挖矿的虚拟货币,CPU并没有表现出极高的使用率,反而是硬盘被占用了极大的空间,比较有代表性的币种是Filecoin、Chia、Swarm和Dfinity。

虽然经过多年的演进,挖矿木马攻击主机的手法越来越多样化和精细化,但从攻击流程来说并没有大的变化,总体上分为三个阶段:

(1)攻击者利用主机或者服务漏洞获取上传挖矿木马的必要权限。比如未授权访问漏洞、Web服务远程代码执行漏洞、服务器系统组件漏洞等;

(2)攻击者将挖矿木马上传到受害主机后,启动木马程序自动实现持久化运行和自身隐藏。

(3)挖矿木马为了实现收益的最大化,使用内网探测扫描,密码爆破等方式发现其他潜在受害目标主机,并在内网主机间进行大范围传播

在整个攻击流程中,主机层面的检测在上述三个阶段中均有合适的切入点,一般会从进程特征,网络连接,文件特征等多个维度进行检测。

在第一阶段,攻击者利用已知漏洞对主机进行自动化攻击,攻击成功后,接着通过命令执行等方式下载执行挖矿木马,同时会检查系统有没有其他挖矿进程运行,如果有就结束掉,确保自己独占挖矿资源。通过对常见挖矿木马脚本命令执行链的进行分析,可以比较容易地发现其中的异常。

在第二阶段,挖矿木马植入到受害主机,一般会写入计划任务实现持久化,并开始挖矿。

挖矿木马在进行挖矿时,会对矿池进行DNS查询和IP连接。通过对比收集的公开矿池域名和IP,在木马进行网络连接的时候可以有效告警。当然,这样不能检测连接私有矿池的挖矿木马,但是对连接公开矿池的挖矿木马具有很好的检测能力。如下所示,这是收集的部分公开矿池地址。

除了命令执行链和主机网络连接信息的检测,大部分挖矿木马会在主机落地。通过收集大量的挖矿木马样本,提取静态检测规则或者使用机器学习的方式训练检测模型来发现潜在的挖矿木马。比如科恩实验室的BianryAI引擎就是类似方法[6]。

在第三阶段,挖矿木马为了实现利益最大化,开始横向移动,感染更多的机器。高级的挖矿木马一般会自带密码库和具备扫描爆破功能,用来爆破登陆同一网段里的主机。这部分可以通过东西向流量检测以及HIDS来发现。

四、挖矿木马的纵深防御

4.1 威胁情报

无论是因为可利用的漏洞数量(且因为补丁更新会不断收敛)的原因,还是网络资源总量的原因,甚至是僵尸网络互相竞争原因,同时期存在于网络中的僵尸网络数量其实是有限的。如果基于威胁情报共享,那么网络和计算资源相对丰富的各大型互联网公司,以及电信运营商所提供的情报几乎可以覆盖现网主要挖矿木马网络。

TSRC在以往的博文中,也分享过不少木马与僵尸网络的IOC信息。从《云端博弈 —— 木马屠城》[7]一文可以看到,通常活跃的僵尸网络,其木马常用的就是几个固定版本,或者有明显的家族特征;从《BORG:一个快速进化的僵尸网络》[8]可以看到,僵尸网络的活跃程度与0day\1day的在网络中的存在周期是相关的,且僵尸网络虽然也在进化,但也有其家族特征,依然是可以通过威胁情报关联检测与打击。

4.2 资金链

虽然虚拟货币有其宣称的匿名性和去中心化特点,但大量的虚拟币需要变现,那么还是会有与资金相关的活动痕迹可追溯。

今年初的时候,币圈掀起一股所谓的“空投”(发行新的虚拟货币的资金募集行为)热潮,其中大部分都是骗子,募集了散户投资者资金之后,根本不会上市交易。笔者曾经追踪过几个“空投”事件,其募集的‘资金(代币)’最终都流入了几个大账户,并且走到了交易所。那么走到交易所之后如何追踪呢?我们来看看下面的案例。

2020年8月27日,某国通过诉讼,追缴黑客入侵加密数字货币交易所盗取的资金。

2020年8月27日,某国通过诉讼,追缴黑客入侵加密数字货币交易所盗取的资金。

“诉讼书中表示,执法人员是通过分析区块链来识别特定BTC/ETH地址的所有者。例如,黑客可能会创建多个BTC地址来接收来自不同地址的BTC,当黑客想要处理它接收到的BTC 时,这些收款地址就会发生聚集和关联。执法部门利用几家不同的区块链分析公司提供的商业服务来调查虚拟货币交易,这些公司通过分析BTC虚拟货币交易背后的数据,创建大型数据库,在数据库中进行数据关联推导,最终追踪溯源到某国黑客的盗窃行为和资金流向。”“诉讼书中表示,执法人员是通过分析区块链来识别特定BTC/ETH地址的所有者。例如,黑客可能会创建多个BTC地址来接收来自不同地址的BTC,当黑客想要处理它接收到的BTC 时,这些收款地址就会发生聚集和关联。执法部门利用几家不同的区块链分析公司提供的商业服务来调查虚拟货币交易,这些公司通过分析BTC虚拟货币交易背后的数据,创建大型数据库,在数据库中进行数据关联推导,最终追踪溯源到某国黑客的盗窃行为和资金流向。”

参考

[1] https://bitcointalk.org/index.php?topic=288963.0 [2] https://zh.braiins.com/stratum-v1 [3] https://braiins.com/stratum-v1/docs [4] https://xmrig.com/ [5] https://github.com/fireice-uk/xmr-stak [6][ 腾讯主机安全(云镜)兵器库:斩杀挖矿木马的利剑-BinaryAI引擎](https://mp.weixin.qq.com/s/9dwUVyI34fi5lEPCDZJz_Q) [7] 云端博弈——木马屠城 [8] BORG :一个快速进化的僵尸网络 [9] 国家升级“挖矿”整治力度,腾讯御界NDR助力反制“挖矿”木马