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

1.挖矿木马入侵和危害

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

1624355773_60d1b3bd0c9ab40e76fa4.png!small?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!small?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!small?1624360906921

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

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

1624360923_60d1c7db0bead014282c6.png!small?1624360923533

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

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

1624360938_60d1c7ea637f7d79f20ed.png!small?1624360939014

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

我司自有的大数据威胁情报系统会及时跟进最新的挖矿矿池情报,并支持独立的知识库升级的方式为使用我司安全产品的用户自动升级。我司支持的挖矿木马情报类型包括挖矿木马家族使用的C&C域名、恶意文件hash、矿池域名和IP、挖矿木马使用的加密货币钱包地址等,这些类型的情报IOC会集成到产品中检测挖矿木马的通信流量,并产生相关的威胁告警事件。

2.2 基于攻击链关联的挖矿受控主机检测方法

产品中集成的挖矿检测技术,能够将内网主机漏洞或缺陷的利用、挖矿木马的植入和挖矿木马与矿池交互通信等单点检测结果进行关联,基于攻击链追溯的算法还原挖矿木马的整个活动过程,从而进行攻击追溯和绘制更准确的攻击者画像。具体介绍如下。

2.2.1 挖矿木马入侵通道检测

挖矿木马的对内网主机的入侵通道主要有3种:

1).利用内网主机漏洞进行攻击;

2).采用密码爆破攻击获得内网主机登录权限;

3).植入僵尸网络木马控制内网主机。

漏洞攻击的主要常用的攻击形式为RCE(Remote Command/Code Execute)漏洞,据腾讯安全发布的2020挖矿木马年度报告显示,2020年挖矿木马常用RCE漏洞Top10如下图3所示:

1624361011_60d1c83344988b6084b45.png!small?1624361011639

图3 2020挖矿木马常用RCE漏洞Top10(来自:腾讯安全)

其中针对Top3漏洞的检测规则截图如下:

1624361024_60d1c84014893e69d5dd2.png!small?1624361024265

图4 Weblogic CVE-2019-2725检测规则详情

1624361037_60d1c84d9b9b3a51a2458.png!small?1624361037854

图5 Apache Structs2 CVE-2017-5638检测规则详情

1624361052_60d1c85c9cbea4de9aff0.png!small?1624361052988

1624361056_60d1c860172cf2fa85652.png!small?1624361056808

图6 Think PHP5 CNVD-2018-24942检测规则详情

其余漏洞在产品中规则管理中可管理的漏洞及其对应规则编号如下表1所示:

挖矿木马入侵RCE漏洞名称

检测规则编号RID

Confluence CVE-2019-3396

3088141、2027333

Weblogic CVE-2017-10271

3000001、3002119、2829182

Apache solr CVE-2019-0193

3000443、3000444

Tomcat CVE-2017-12615

3002120、2020517

JBOOS CVE-2017-12149

36826

Drupal CVE-2018-7600

3800110、2025646、2025534

Spring CVE-2018-1273

3000211、2836502

表1 挖矿木马入侵RCE漏洞与规则映射表

对于用作挖矿木马入侵通道的密码爆破攻击,产品检测密码爆破的威胁事件举例如下图7所示:

1624361164_60d1c8cc6809e2ea27982.png!small?1624361164704

图7 产品检测密码爆破的威胁事件告警结果

其中,在密码爆破威胁事件中给出密码爆破攻击持续时间,登录用户名、尝试不同密码的列表,攻击频率、攻击者和受害者;如果是密码爆破成功,则给出登录成功的用户名和登录密码(受限查询,具备高级系统全权限可查询)。检测僵尸网络威胁事件举例如下图8所示:

1624361194_60d1c8ea34d42921f3845.png!small?1624361194423

2.2.2 挖矿木马植入检测

攻击者利用2.2.1的挖矿木马入侵通道,完成内网主机上传挖矿木马的准备,通过web文件上传或者通过钓鱼邮件诱导受害主机下载恶意文件中包含的挖矿木马,通过对流量中的邮件附件、特定文件格式的web上传文件进行文件还原,使用多AV、沙箱、文件基因检测恶意文件变种等多种手段进行恶意文件检测,检测结果可在系统中的“WEB威胁监控”、“邮件威胁监控”和“恶意文件监控”等模块中查询,如下图9所示:

1624361228_60d1c90c962e0ddeb3a57.png!small?1624361229013

图9 威胁监控产品功能图

2.2.3 挖矿木马与矿池交互通信的行为检测

基于2.1节的挖矿木马行为检测技术,我司产品具备检测“挖矿主机与矿池之间进行挖矿主机登记”、“任务下发”、“账号登录”、“结果提交”和“挖矿任务难度调整”这五种行为的检测能力。并在这个过程中利用挖矿代理程序和货币钱包签名识别门罗币挖矿类型。

挖矿主机账号登录矿池的威胁事件检测:

1624361269_60d1c935280b1b6f60298.png!small?1624361269489

矿池回应挖矿主机并下发任务的威胁事件检测:

1624361284_60d1c9444745226d39f21.png!small?1624361284642

挖矿主机使用xmrig代理程序登录矿池的威胁事件检测:

1624361299_60d1c953db01f2204098f.png!small?1624361300141

上图中“login”字段中的钱包签名在supportxmr.com网站查询是真实存在的,说明这是个真实的挖矿行为,如下图10所示:

1624361313_60d1c96103008aef9b55b.png!small?1624361313529

图10 门罗币钱包签名在supportxmr.com网站的使用

上图中虽然是基于挖矿行为检测到的通信流量,但也可以基于钱包签名的特征检测针对钱包签名的挖矿流量,比如我们具备特征检测规则检测一些常见的恶意钱包签名,如下图所示:

1624361331_60d1c973c88f4bd6fc41d.png!small?1624361332461

1624361336_60d1c978a11ef602cc152.png!small?1624361337055

其中,特征规则检测的就是钱包签名地址,且钱包地址在supportxmr.com仍查询是真实存在的,所以检测钱包签名的特征也是能够检测挖矿的通信流量。

此外,有些攻击者制作的挖矿木马,能够对挖矿主机与矿池服务器的通信过程进行加密以逃避安全设备的检测,我们的检测技术支持对base64等加密通信过程进行检测,如下图所示:

1624361358_60d1c98e06dd56708072e.png!small?1624361358710

以上加密数据经base64解密之后的原始内容如下图的左侧显示框所示:

1624361375_60d1c99fcc6455074653d.png!small?1624361376406

2.2.4 通过挖矿木马关联分析方法发现受控主机

利用kill-chain的攻击分析模型,将网络攻击分成“探测扫描”、“尝试攻击”、“漏洞利用”、“木马下载”、“远程控制”、“横向渗透”和“行动收割”这7个阶段。

对2.2.1到2.2.3的挖矿木马不同阶段检测结果映射到这个攻击分析模型,挖矿木马入侵通道中的RCE漏洞利用属于漏洞利用阶段、暴力破解属于尝试攻击、僵尸网络木马植入和控制属于远程控制阶段,挖矿木马植入属于木马下载阶段、挖矿木马与矿池通信属于行动收割阶段。

以时间轴为主线,将不同阶段检测到的攻击事件进行关联分析,包括进行IP汇聚、事件可信分级、访问关系关联分析等,最终将可信的挖矿木马相关威胁事件进行关联展示,起到攻击追溯的作用。

与此同时,对于通过行为检测技术确认的矿池IP,将威胁事件中发现“与矿池进行通信的挖矿木马主机”标记为受控主机,将同时间段内“与矿池IP进行外联通信的其他主机”标记为可疑挖矿主机,建议内网管理员对这些主机的挖矿木马进行系统查杀。

3.新型挖矿形式概述-硬盘挖矿

除了前文介绍的利用CPU/GPU挖矿的技术外,还有一种硬盘挖矿的方法也在兴起。例如今年4月份,利用硬盘挖矿的新型币种Chia(奇亚币)的走俏,大容量硬盘的价格也水涨船高。通俗来讲,以往的加密货币挖矿是给你个题目让你算题,算的人越多,算力越大这个题目就越难,只有先算对的人才能获得比特币,这个模式就是工作量证明,是算力越高挖矿效率越高;奇亚币是借助廉价、冗余且高度分散的未使用硬盘存储空间,来验证其区块链算法,这个模式是“时间-空间证明”,是硬盘空间越大,挖矿效率越高。

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

1624361414_60d1c9c648cfd56e685c8.png!small?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!small?1624361498972

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

1624361512_60d1ca28aa0df39dc8878.png!small?1624361512950

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

1624361524_60d1ca34245a948fa75f2.png!small?1624361524851

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

1624361541_60d1ca4559eaf30cbb056.png!small?1624361541671

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

1624361561_60d1ca59a7b5807ff8882.png!small?1624361562050

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

1624361574_60d1ca6621d4c8f58d8a6.png!small

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

1624361590_60d1ca7682952c216c077.png!small?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.个人电脑建议做好个人防护,安装杀毒软件、及时更新系统,不要点击可疑文件等。

作者:金睛云华

来源:freebuf.com 2021-06-22 19:17:45 by: sanfenqiantu

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论