行业新闻

基于行为检测的挖矿木马检测技术的研究和有效实践

基于行为检测的挖矿木马检测技术的研究和有效实践

1.挖矿木马入侵和危害

在近些年区块链技术的普及和加密货币投资的高额回报背景下,加密货币凭借其去中心化、匿名度高、全世界流通以及免税等特性,已成为当下全球最热门的投资品类。例如全球最大的虚拟货币比特币,从2020年初至今的价格变化趋势来看,价格一度超过了6万美元/BTC,与2019年底相比暴涨10倍。如下图1所示:

1624355773_60d1b3bd0c9ab40e76fa4.png?1624355773346

图1 近一年来比特币价格曲线(数据来源:www.hqz.com)

与此同时,其他各类虚拟货币的市值也均有大幅增长,在利益驱动下,通过传播挖矿木马来获取数字加密货币的黑产团伙闻风而动,纷纷加入对主机计算资源的争夺之战,典型的方法就是在入侵的受害主机上大批量植入挖矿木马,利用受害者计算机的运算力进行挖矿,从而获取利益。

这类在用户不知情的情况下植入用户计算机进行挖矿的挖矿程序就是挖矿木马。挖矿木马的使用分为3个阶段:

1.攻击者利用主机漏洞或缺陷获取木马上传的必要权限。相关主机漏洞或缺陷如未授权访问漏洞、Web服务器远程代码执行漏洞、服务器系统组件漏洞(例如MS17-010)等;

2.攻击者上传挖矿木马到受害主机上。在获取到必要权限之后,上传恶意挖矿木马到受害内网web服务器或者个人主机,然后启动挖矿木马程序,通过系统计划任务、操作系统自启动、修改系统注册表、修改系统文件权限等方式来达到持久化运行和隐匿自身的目的;

3.挖矿木马开展内网主机之间的扩散。利用受害主机进行内网探测扫描,发现其他潜在受害目标主机,从受控主机传播挖矿木马并感染其他主机,实现挖矿木马在内网主机间的大量蔓延。

由此可见,植入挖矿木马至内网用户的主机,不仅大量消耗主机的系统资源,造成主机无法使用或者运行变慢等问题,而且可能会以内网做跳板进一步入侵其他内网主机,造成挖矿木马扩散传播和其他内网破坏行为,是内网安全的重大隐患。本文在接下来会分“利用CPU/GPU算力进行挖矿”、“利用硬盘挖矿”这两种不同的模式来介绍对应的行为检测原理和有效实践。

2.挖矿木马的行为检测原理和有效实践

挖矿木马的使用,对于利用CPU/GPU算力进行挖矿的加密货币,一般采用基于矿池的挖矿模式,目前主流的挖矿币种是门罗币。原因分析如下:

1.基于矿池的挖矿能使攻击者获得稳定的收益。虽然挖矿有两种模式:SOLO模式和矿池模式,但SOLO模式要求挖矿主机直接连接主机客户端进行挖矿,无法被挖矿木马所采用,矿池模式是给矿工主机分配任务,统计工作量并分发收益,即无论矿池是否挖掘到区块货币,矿工主机都可以根据工作量来获取对应的币种收益。挖矿木马主要采用的方式为矿池模式以获取稳定的收益。

2.比特币主机挖矿效益与投入比的不断降低,使得攻击者转向更具挖矿效率优势的门罗币。因为随着专业矿机的出现,个人电脑与矿机之前巨大的算力差异(高达万倍以上的差距),以及每4年挖矿奖励减半机制,比特币全网挖矿的难度不断增大且单位收益不断降低,比特币已经越来越不适合个人参与,不法分子需要选择新的币种。而随着2014门罗币(Monero,代号XMR)的问世,由于高度匿名性、使用RandomX和CryptoNight等算法能最高效利用CPU挖矿、拥有稳定的维护团队和生态来维持币值的稳定等优势,渐渐成为挖矿木马热衷的主要币种,我们也重点针对门罗币挖矿进行分析和检测。

基于挖矿木马的以上行为特点,我们构建以行为检测和关联分析检测技术为核心、威胁情报分析为辅助的挖矿木马行为检测技术方案。

2.1挖矿木马行为检测技术方案

2.1.1 基于Stratum协议的通信过程行为检测方法

此技术方案为检测矿池与挖矿主机之间的挖矿通信协议。矿池一般采用Stratum协议与挖矿主机进行交互通信,Stratum协议是基于JSON-RPC2.0封装的TCP通讯协议,在挖矿主机和矿池的交互过程中支持挖矿主机登记、任务下发、账号登录、结果提交和挖矿任务难度调整这五种行为。挖矿主机和矿池交互的流程如下图2所示:

1624360678_60d1c6e6ee96cf5482508.png?1624360679610

图2 Stratum协议挖矿通信流程图

我司的挖矿行为检测根据Stratum协议挖矿的不同阶段可检测这五种不同的挖矿行为,并进行多种行为之间有效性的关联分析,最终确认是否存在挖矿木马在使用Stratum协议挖矿。具体方案包括:

(1)挖矿主机登记行为检测,检测挖矿主机启动后是否主动连接矿池进行申请挖矿任务的登记,包括两种子行为的检测:

a)检测挖矿主机采用“mining.subscribe”方法发起向矿池的挖矿任务申请行为;

b)矿池采用“mining.notify”方法进行申请回应,通知挖矿主机收到挖矿任务申请。

挖矿主机数据样例:
{"id":1,"method":"mining.subscribe","params":[]}
矿池回应样例:
{"id":1,"result":[["mining.notify","ae6812eb4cd7735a302a8a9dd95cf71f"],"08000002",4],"error":null}

(2)矿池采用“mining.notify”方法给挖矿主机分配挖矿任务的行为检测。该行为会在挖矿主机登记行为发生后立即触发。

矿池分配挖矿任务的数据样例:
{"params":["bf","4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000", 
"01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff20020862062f50325348
2f04b8864e5008","072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef990332704
8ed988ac00000000",["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"], "00000002","1c2ac4af","504e86b9",false],"id":null,"method":"mining.notify"

以上数据中有分配任务号、区块Hash、交易ID列表、区块版本号、当前时间、通知方法等特征,如果以上特征存在多个,则确认该通信行为为挖矿任务下发。

(3)挖矿主机使用账号和密码登录矿池的行为检测。检测挖矿主机采用mining.authorize方法或者jsonrpc方法登录到矿池,矿池回应的“result”字段为“true”则表示登录成功。

挖矿主机直接通过 mining.authorize 方法登录的数据样例:
{"params":["miner1","password"],"id":2,"method":"mining.authorize"}
矿池回应登录成功的数据样例:
{"error":null,"id":2,"result":true}

挖矿主机通过 jsonrpc 方式登录的数据样例:
{"id":2,"jsonrpc":"2.0","method":"login","params":{"login":"blue1","pass":"x","agent":"Windows NT 6.1; Win64; x64"}}
矿池回应登录成功的数据样例:
{"error":null,"id":2,"jsonrpc":"2.0","result":true}

(4)挖矿主机向矿池提交任务结果的行为检测。挖矿主机挖到区块后,就采用“mining.submit”方法向矿池提交任务。矿池回应的“result”字段为“true”则表示提交成功;否则回应“error”字段给出报错原因。

挖矿主机箱矿池提交任务的数据样例:
{"params":["miner1","bf","00000001","504e86ed","b2957c02"],"id":4,"method":"mining.submit"}
矿池回应结果的数据样例:
{"error":null,"id":4,"result":true}

(5)矿池调整挖矿任务难度的行为检测。矿池采用“mining.set_difficulty”方法调整难度,且“params”字段给出难度值。

矿池调整挖矿任务难度的数据样例:
Server:{"id":null,"method":"mining.set_difficulty","params":[2]}

挖矿主机在收到任务难度调整的通知后,在下一个任务开始时采用新难度,矿池有时会立刻下发一个新任务以便挖矿主机立即以新难度开始工作。

我们的行为检测方法,将前3个行为,包括“挖矿主机登记行为”、“矿池采用‘mining.notify’方法给挖矿主机分配挖矿任务的行为”和“挖矿主机使用账号和密码登录矿池的行为”,看做紧密顺序触发的行为,在预设的时间段内接连顺序发生这3种行为任务是挖矿木马植入并和矿池成功建立通信的第一阶段,检测到第一阶段则确认主机被植入木马并受控。

将挖矿木马主机持续性地向矿池提交任务的行为,看做挖矿木马主动挖矿的第二阶段,即主机挖矿的过程维持阶段,该阶段会统计矿池的地址、提交给每个矿池地址的任务次数,这是作为检测取证的关键证据。

将矿池调整任务难度的行为看做主机受控的辅助证据,用来在只检测到挖矿木马主动挖矿的第二阶段行为时的佐证。

另外,虽然目前矿池与挖矿主机间的通讯都使用的是stratum协议,但是不同币种以及使用不同的工具、流程和流量中的协议字段会存在一定程度的不同,我司的行为检测算法将据此进行调整。

2.1.2 门罗币挖矿代理行为检测方法

挖矿木马的主流币种门罗币,采用Randomx或Cryptonight算法,基于挖矿代理程序xmr-stak或xmrig等连接矿池。与2.1.1节介绍的Stratum协议的通用挖矿木马数据相比,具有如下特点:

1.采用jsonrpc数据样例的格式进行通信;

2.账号登录请求中包含门罗币钱包地址;

3.有些挖矿主机的通信数据中包含代理程序xmr-stak或xmrig等特征和代理程序所使用的算法名称;

因此,在2.1.1节的行为检测算法中根据以上3个特点进行检测算法的调整,能够确认其是否为门罗币挖矿木马。

以使用xmrig6.12.1代理程序为例,说明门罗币与通用stratum协议挖矿数据特征上的不同,包括挖矿主机使用jsonrpc封装数据格式登录添加门罗币钱包地址登录矿池且矿池任务下发、挖矿主机提交任务且矿池下发新任务这些行为的不同。

1. 挖矿主机使用jsonrpc封装数据格式登录矿池,新增的字段algo表示使用的算法,agent字段表示挖矿主机使用的代理程序。矿池在返回登录状态信息的同时进行任务下发:

1624360906_60d1c7ca56c870290d3ad.png?1624360906921

其中,红色字体是挖矿主机使用jsonrpc封装数据格式登录矿池的数据样例,蓝色字体是矿池在返回登录状态信息的同时进行任务下发的数据样例。

2. 挖矿主机使用jsonrpc数据封装格式向矿池提交挖矿结果,矿池返回响应并下发新的挖矿任务:

1624360923_60d1c7db0bead014282c6.png?1624360923533

其中,红色字体是挖矿主机使用jsonrpc数据封装格式向矿池提交挖矿结果的数据样例,蓝色字体是矿池返回响应并下发新的挖矿任务的数据样例。

使用xmr-stak代理程序挖矿与xmrig代理程序相似,区别在于agent字段不同且没有algo字段,因为算法默认使用randomx算法。使用xmr-stak代理程序的数据样例如下:

1624360938_60d1c7ea637f7d79f20ed.png?1624360939014

2.1.3 基于挖矿木马情报IOC的威胁情报检测方法

我司自有的大数据威胁情报系统会及时跟进最新的挖矿矿池情报,并支持独立的知识库升级的方式为使用我司安全产品的用户自动升级。我司支持的挖矿木马情报类型包括挖矿木马家族使用的C奇亚币是借助廉价、冗余且高度分散的未使用硬盘存储空间,来验证其区块链算法,这个模式是“时间-空间证明”,是硬盘空间越大,挖矿效率越高。

目前主流的热门硬盘挖矿货币有奇亚币和FileCoin,两个币种有很大区别。其中,Fil币由于其挖矿机制需要抵押币,即需要先投入一定的资金,按照6月4日https://filfox.info的计算数据来看,新增算力成本为:8.51 FIL/TiB × 95.19$/FIL≈810$/TiB,换算成人民币约为5187 CNY/TiB,除此之外还有较高的硬件成本和维护成本。

1624361414_60d1c9c648cfd56e685c8.png?1624361414579

(数据来源 https://filfox.info/zh)

而奇亚币则与之不同,不需要任何抵押费用,只需要少量的CPU资源、一定的内存和大量的硬盘存储空间,因此目前奇亚币要比Fil币更流行,下文也是基于奇亚币做硬盘挖矿进行技术分析。

3.1奇亚币挖矿流程简析

奇亚币采用的共识机制为POC(Proof of Capacity),通俗来讲是容量证明,与比特币等加密货币的POW共识机制不同的是,POC共识机制采用磁盘空间存储(相当于使用缓存)代替内存算力计算的方式挖矿。简单来说,挖矿主机下载挖矿软件后会进行2步操作:

1. 先进行P(Plot)盘的操作,即挖矿软件先将算好的Hash值存储到硬盘中,该过程中不需要连接网络与其他挖矿节点通信,完成之后进行下一步挖矿;

2. 挖矿开始后,矿工根据最新区块hash、上一区块签名、Target(类似于比特币中的网络难度)计算出deadline,然后同包中查询的deadline比较,若前者小于钱包中的deadline,则返回该挖矿成功。挖矿软件将挖矿的过程比作耕种农田,农田的收获就是奇亚币。

下面详细介绍以上2个过程:

(1)P(Plot)盘操作前先确认开垦农田的大小(用于保存P盘操作写入的hash值,中间也会占用一些临时硬盘空间):

1624361498_60d1ca1a757bb3e243030.png?1624361498972

目前一般要求最小农田大小为K32.其他选项确认之后就会进入开垦过程(将Hash写入硬盘):

1624361512_60d1ca28aa0df39dc8878.png?1624361512950

其中,在临时文件夹下可看到生成大量临时文件:

1624361524_60d1ca34245a948fa75f2.png?1624361524851

开垦完成之后,会在结果文件夹下面生成plot格式的文件:

1624361541_60d1ca4559eaf30cbb056.png?1624361541671

(2)挖矿阶段,挖矿软件在P盘文件中寻找最佳答案,即根据最新区块hash、上一区块签名、Target(类似于比特币中的网络难度)计算出deadline,然后跟钱包中查询的deadline比较,若前者小于钱包中的deadline,则返回该挖矿成功。

1624361561_60d1ca59a7b5807ff8882.png?1624361562050

耕种过程中,需要实时和其他挖矿节点进行信息同步:

1624361574_60d1ca6621d4c8f58d8a6.png

奇亚币挖矿软件提供的节点之间使用8444端口进行通信,且通信流量采用TLS加密:

1624361590_60d1ca7682952c216c077.png?1624361591131

3.2硬盘挖矿的检测

分析3.1节的奇亚币挖矿过程可知,在P盘阶段(开垦农田)挖矿主机不会向外进行通信,无法通过流量检测挖矿行为,但可以检测主机硬盘上是否存在plot文件格式的大文件,作为可疑挖矿的初步判定依据;

然后再在挖矿阶段(耕种农田)捕获挖矿主机与其他节点之间的TLS加密通信,结合奇亚币挖矿软件的默认端口是8444(也可能改变,或者是其他正常应用软件使用该端口)做进一步的判定。由于TLS加密流量无法通过特征或者行为检测方法进行判定,后续我司会基于恶意加密流量AI模型检测技术,通过深入分析硬盘挖矿软件的TLS数据统计特征,训练适用于硬盘挖矿的加密流量的AI模型,用于准确判定硬盘挖矿的加密通信过程。

4.挖矿木马防护建议

检测到内网被植入挖矿木马后,建议做如下应急响应处置:

1.及时更新至最新系统,防止攻击者利用漏洞控制系统;

2.对于Redis、Hadoop Yarn、Docker、XXL-JOB、Postgres等应用增加授权验证,对访问对象进行控制;

3.对SSH、RDP、Mysql、Mssql等服务访问入口使用强密码,减少对外开放的敏感端口;

4.如果服务器部署了Weblogic、Apache Struts、Apache Flink、ThinkPHP等经常曝出高危漏洞的服务器组件,应及时将其更新至最新版本,并且实时关注组件官方网站和各大安全厂商发出的安全公告,根据提示修复相关漏洞;

5.个人电脑建议做好个人防护,安装杀毒软件、及时更新系统,不要点击可疑文件等。

作者:金睛云华

关闭