0x1 前言
如果说勒索病毒是暴露在大众视野中的“恶魔”,那么挖矿木马就是潜藏在阴暗之处的“寄生虫”。在2017年这个安全事件频发的年份,除了受到全世界关注的“WannaCry”勒索病毒的出现之外,一大波挖矿木马也悄然崛起。不同于勒索病毒的明目张胆,挖矿木马隐蔽在几乎所有安全性脆弱的角落中,悄悄消耗着计算机的资源。由于其隐蔽性极强,大多数PC用户和服务器管理员难以发现挖矿木马的存在,这也导致挖矿木马数量的持续上涨。本文将通过多个方面介绍挖矿木马的种类,发展趋势,危害以及防范措施。
0x2 挖矿木马概述
2009年,比特币横空出世。得益于其去中心化的货币机制,比特币受到许多行业的青睐,其交易价格也是一路走高。图1展示了比特币从2013年7月到2017年12月交易价格(单位:美元)变化趋势。
图1 比特币2013年-2017年交易价格变化趋势
由于比特币的成功,许多基于区块链技术的数字货币纷纷问世,例如以太币,门罗币等。这类数字货币并非由特定的货币发行机构发行,而是依据特定算法通过大量运算所得。而完成如此大量运算的工具就是挖矿机程序。
挖矿机程序运用计算机强大的运算力进行大量运算,由此获取数字货币。由于硬件性能的限制,数字货币玩家需要大量计算机进行运算以获得一定数量的数字货币,因此,一些不法分子通过各种手段将挖矿机程序植入受害者的计算机中,利用受害者计算机的运算力进行挖矿,从而获取利益。这类在用户不知情的情况下植入用户计算机进行挖矿的挖矿机程序就是挖矿木马。
挖矿木马最早出现于2013年。图2展示了自2013年开始国内披露的大规模挖矿木马攻击事件数量。
图2 2013年-2017年国内披露的挖矿木马攻击事件
由于数字货币交易价格不断走高,挖矿木马的攻击事件也越来越频繁,不难预测未来挖矿木马数量将继续攀升。
对于挖矿木马而言,选择一种交易价格较高且运算力要求适中的数字货币是短期内获得较大收益的保障。图3展示了挖矿木马所选择的币种比例。
图3 挖矿木马所选币种比例
不难看出,门罗币是最受挖矿木马亲睐的币种。黑客之所以选择门罗币作为目标主要有以下几个原因:
- 门罗币交易价格不俗。虽然门罗币在交易价格上不比比特币,但其依然保持在一个较高的交易价格。
- 门罗币是一种匿名币,安全性更高。匿名币是一种在交易过程中隐藏交易金额、隐藏发送方与接收方的一种特殊的区块链代币。由于这样一个特性,任何人都无法在区块链浏览器中查找到门罗币交易的金额和交易双方的地址。这也为黑客转移门罗币提供便利。
- 门罗币是基于CryptoNight 算法运算得到的,通过计算机的CPU和GPU即可进行该算法的运算而不需要其他特定的硬件支持。
- 互联网上有许多优秀的开源门罗币挖矿项目,黑客可以“即拿即用”。
- 暗网市场支持门罗币交易。
由于门罗币的这些“优点”,越来越多的挖矿木马选择门罗币作为目标。
在下文中我们将根据挖矿木马的种类分别对不同类型的挖矿木马进行详细介绍和分析。
0x3 挖矿木马详解
- 挖矿木马僵尸网络兴起
僵尸网络(Botnet)是黑客通过入侵其他计算机,在其他计算机中植入恶意程序并通过该恶意程序继续入侵更多计算机,从而建立起来的一个庞大的傀儡计算机网络。僵尸网络中的每一台计算机都是一个被黑客控制的节点,也是一个发起攻击的节点。黑客入侵计算机并植入挖矿木马,之后利用被入侵的计算机继续向其他计算机植入挖矿木马从而构建的僵尸网络就是挖矿木马僵尸网络。
2017年是挖矿木马僵尸网络大规模爆发的一年,出现了“Bondnet”,“Adylkuzz”,“隐匿者”等多个大规模挖矿木马僵尸网络,而其中很大一部分的挖矿木马僵尸网络来自于中国。
- 僵尸网络的建立
僵尸网络是否能成规模关键在于僵尸网络的初步建立。黑客需要一个能够完成大规模入侵的攻击武器以获得更多计算机的控制权。
“永恒之蓝”漏洞攻击武器的出现助长了挖矿木马僵尸网络的建立。2017年4月,shadow broker公布了NSA(美国国家安全局)方程式组织的漏洞攻击武器“永恒之蓝”。2017年5月爆发的造成空前影响的“WannaCry”勒索病毒就是通过“永恒之蓝”进行传播的。而在“WannaCry”爆发之前,已有挖矿木马利用“永恒之蓝”进行传播。“永恒之蓝”有两个其他漏洞利用工具无法企及的优势:
- 攻击无需载体。不同于利用浏览器漏洞或者办公软件漏洞进行的“被动式攻击”,“永恒之蓝”漏洞利用攻击是一种“主动式攻击”,黑客只需要向目标发送攻击数据包而不需要目标进行额外的操作即可完成攻击。
- 攻击目标广。只要目标计算机开启445端口且未及时打补丁,黑客就可以成功入侵目标计算机。黑客完全可以进行全网扫描捕捉猎物。
正因此,“永恒之蓝”一时间成了挖矿木马僵尸网络的标配。表1展示了2017年爆发的几个大规模挖矿木马僵尸网络配备“永恒之蓝”漏洞利用武器的情况。
表1 挖矿木马僵尸网络配置“永恒之蓝”模块情况
挖矿木马僵尸网络家族 | 是否配备“永恒之蓝”模块 |
Adylkuzz | √ |
隐匿者 | √ |
mateMiner | √ |
fontsMiner | √ |
Bondnet | × |
yamMiner | × |
其中一些僵尸网络是完全依靠“永恒之蓝”漏洞攻击武器站稳脚跟的,例如“隐匿者”僵尸网络。图4展示了“隐匿者”僵尸网络僵尸程序传播量变化趋势。不难看出,借助于“永恒之蓝”漏洞攻击武器,“隐匿者”在2017年4月底爆发式增长。(更多细节见报告:http://www.freebuf.com/articles/web/146393.html)
图4 “隐匿者”僵尸网络僵尸程序各版本传播量
随着漏洞的更多细节公之于众,各式各样的“永恒之蓝”漏洞攻击工具问世。在2017年9月出现并呈增长趋势的“mateMiner”僵尸网络中集成了由Powershell编写的“永恒之蓝”漏洞攻击模块。图5展示了部分攻击代码。
图5 “mateMiner”僵尸网络“永恒之蓝”模块部分代码片段
除了“永恒之蓝”漏洞攻击武器之外,其它各类Nday漏洞也备受挖矿木马僵尸网络的亲睐。“yamMiner”僵尸网络就是利用Java 反序列化漏洞进行服务器入侵的。
“yamMiner”僵尸网络2016年底出现,并在2017年呈现增长趋势,目前仍处在活跃状态。该僵尸网络建立之初,通过Java Commons Collections反序列化漏洞入侵服务器,漏洞如下所示:
漏洞 | 描述 |
CVE-2015-7450 | IBM WebSphere Java Comments Collections组件反序列化漏洞 |
CVE-2015-4852 | Oracle WebLogic Server Java反序列化漏洞 |
(更多细节见:http://www.freebuf.com/articles/system/129459.html)
使用Nday漏洞进行入侵攻击对于未打补丁的计算机而言效果立竿见影。而国内未能及时打补丁的计算机数量并不少,这也是这类挖矿木马僵尸网络持续保持活跃的重要原因之一。
(2)僵尸网络的扩张
当僵尸网络初具雏形后,黑客需要通过现有的傀儡机攻击更多的计算机,通过量的积累转化为可见的利益。因此,僵尸网络中的每一台傀儡机都是攻击的发起者,而他们的目标是互联网中的所有计算机。
“永恒之蓝”漏洞攻击武器在僵尸网络的扩张中起到重要的作用。在上文中展示了“永恒之蓝”漏洞攻击武器在僵尸网络建立时发挥的重要作用,这些同样作用于僵尸网络的扩张,在此不再赘述。
端口扫描和爆破也是僵尸网络扩张的帮手。“隐匿者”挖矿木马僵尸网络中带有全网扫描模块,僵尸程序会不断地对随机ip进行指定端口扫描,若端口开放则尝试进行爆破,爆破成功后则登录目标计算机植入挖矿木马和僵尸程序,继续进一步的扩张。图6展示了“隐匿者”挖矿木马僵尸网络端口扫描模块代码片段。表2展示了“隐匿者”僵尸网络爆破模块、爆破对象以及当前支持情况。
图6 “隐匿者”僵尸网络端口扫描模块代码片段
表2 “隐匿者”僵尸网络爆破模块概览
爆破模块 | 爆破目标(端口) | 当前支持情况 |
Cracker:mssql | MSSQL(1433) | 支持 |
Cracker:Telnet | Telnet(23) | 支持 |
Cracker:RDP | RDP(3389) | 支持未完善 |
Cracker:CCTV | CCTV摄像头(不定) | 支持未完善 |
Cracker:MySQL | MySQL(3306) | 已移除 |
Cracker:WMI | WMI(135) | 已移除 |
Cracker:SSH | SSH(22) | 已移除 |
高级内网渗透攻击开始出现在挖矿木马僵尸网络的扩张中。我们在“mateMiner”僵尸网络中发现了使用“pass the hash”攻击进行内网渗透的模块。僵尸网络释放了凭证窃取工具mimikatz获取保存在本计算机中的凭证,并用其进行“pass the hash”攻击。图7展示了“mateMiner”僵尸网络凭证获取模块的代码片段。
图7 “mateMiner”僵尸网络凭证获取模块代码片段
“mateMiner”僵尸网络会首先尝试使用这些凭证登录内网中的其他计算机,一旦登录成功就往这些计算机中植入挖矿木马和僵尸程序,只有尝试登录失败才会使用“永恒之蓝”漏洞攻击武器进行入侵。可见,随着“永恒之蓝”漏洞攻击成功率的降低,诸如 mimikatz这类高级内网渗透工具已经开始被挖矿木马僵尸网络所使用。图8展示了“mateMiner”僵尸网络进行内网渗透的代码片段。
图8 “mateMiner”僵尸网络内网渗透模块代码片段
(3)僵尸程序的持续驻留
黑客是否能够持续控制傀儡机关键在于傀儡机中的僵尸程序能否持续驻留。而挖矿木马僵尸网络也是用尽了各种办法让僵尸程序持续驻留在傀儡机中。
将僵尸程序直接寄生在系统进程中是最好的选择。“yamMiner”僵尸网络在利用Java反序列化漏洞入侵计算机后直接在Java进程中执行命令。而“隐匿者”僵尸网络在通过爆破MSSQL服务入侵其他计算机后以SQLServer Job的形式运行挖矿机,并且在SQLServer中写入多段shellcode。图9展示了“隐匿者”在SQLServer中写入的一段shellcode。
图9 “隐匿者”僵尸网络在SQLServer中写入的shellcode
通过将僵尸程序寄生在系统进程中能够有效逃避杀毒软件的拦截,保证僵尸程序的持续驻留。
WMI, PowerShell都是持续驻留的好帮手。许多僵尸网络通过WMI实现僵尸程序在目标计算机中的持续驻留,并且使用PowerShell协助完成工作。
“隐匿者”僵尸网络在SQLServer中的shellcode就包含了使用WMI进行挖矿机配置文件定时更新的功能。图10展示了这段shellcode的内容。
图10 “隐匿者”僵尸网络使用WMI进行定期更新的shellcode片段
而“mateMiner”僵尸网络仅仅使用一个PowerShell脚本作为僵尸程序,这也是它最大的特点。这个PowerShell脚本完成了包括入侵、持续驻留、挖矿在内的所有功能。图11展示了“mateMiner”僵尸网络从黑客服务器下载执行PowerShell脚本的命令行。
图11 “mateMiner”僵尸网络执行PowerShell命令行片段
除了利用PowerShell脚本完成工作,“mateMiner”更是将WMI的灵活性发挥到了极致,不仅使用WMI的__EventFilter类实现持续驻留,还将shellcode保存为WMI下类属性的值,需要时载入内存执行,真正实现“无文件”攻击。图12展示“mateMiner”使用WMI下类属性存储shellcode的代码片段。
图12 “mateMiner”使用WMI存储shellcode代码片段
由于PowerShell和WMI有极高的灵活性,僵尸网络能够通过两者有效管理傀儡机,并且减少恶意文件的释放,躲避杀毒软件的查杀。
先进的控制与命令方式是持续驻留的关键。每个僵尸网络都有一个最终的控制端,这个控制端负责向僵尸网络中的每个节点下发控制指令。由于控制端的存活时间并不长,其ip地址会频繁进行更换,因此挖矿木马僵尸网络需要一套完备的控制体系以保证随时与控制端联系。
“隐匿者”僵尸网络就拥有一套完善的控制体系。图13展示了“隐匿者”僵尸网络中僵尸程序与控制端之间的交互。
图13 “隐匿者”僵尸网络僵尸程序与控制端交互图
“隐匿者”有多个功能不同的控制服务器,分别负责挖矿木马的更新、僵尸程序的更新以及远控木马的下发。当傀儡机中的僵尸程序启动时,会进行一次自检,以确定是否有新版本的僵尸程序存在。同时,“隐匿者”也在SQLServer中写入这样一段自检的shellcode,以保证僵尸程序被杀后还能从控制端下载新的僵尸程序。而僵尸程序所请求的控制端ip地址是不固定的,“隐匿者”通过访问指定博客获取博文内容,通过博文内容解密得到控制端ip。控制者只需修改博文内容就能够实现控制端ip的更换。
当然,将控制端ip的快速更新展现得淋漓尽致的当数“yamMiner”挖矿木马僵尸网络了。其控制端ip地址基本保持了一星期一更新的频率。图14展示了“yamMiner”僵尸网络2017年11月至12月控制端ip地址更新时间线。
图14 “yamMiner”僵尸网络2017年11月-12月更新概况
通过观察“yamMiner”僵尸网络2017年11月到12月向控制端发起的请求数量我们发现了一个有趣的细节。这可以从图15展现。
图15 “yamMiner”僵尸网络2017年11月-12月发送请求数量概况
不难看出,当“yamMiner”的控制端ip发生变化的时候,傀儡机中的僵尸程序能够立即连接新的ip地址,所以就有了图中新控制端ip地址出现时旧控制端ip地址请求数量下降到0的现象。实现这样的效果就要求傀儡程序能够实时获知ip地址的变化情况,而“yamMiner”就是利用Java Commons Collections反序列化漏洞周期性地在傀儡机上执行命令,修改傀儡程序连接的控制端ip。由于这一功能是在Java进程中实现的,能够有效躲避杀软的查杀。一般情况下僵尸网络控制端ip地址存活时间不长,优秀的挖矿木马僵尸网络会利用漏洞在傀儡机执行命令更改控制端ip或者将控制端ip存储在例如博客内容这类容易修改又不容易被发现的位置。如果傀儡机所有者不修补计算机系统中存在的漏洞或者删除计算机中持续工作的一些项目(例如SQLServer中的恶意Job),僵尸程序就能在傀儡机中生生不息。
(4)总结
挖矿机僵尸网络是2017年大规模爆发的一个安全威胁,它的危害程度可以从黑客获利的金额展现。图16和图17分别展示了 “yamMiner”僵尸网络的门罗币钱包之一和“隐匿者”僵尸网络的门罗币钱包。
图16 “yamMiner”僵尸网络门罗币钱包之一概况
图17 “隐匿者”僵尸网络门罗币钱包概况
截至笔者撰稿时“隐匿者”僵尸网络从傀儡机中总共挖到了2010枚门罗币,合计61万美元。“yamMiner”僵尸网络其中一个钱包就获利4万美元,而“yamMiner”拥有多个门罗币钱包,可想而知其总获利金额。挖矿木马带来的暴利导致各家僵尸网络竞争的白热化,其中不乏对其他僵尸网络的攻击。例如“mateMiner”僵尸网络会根据其他僵尸网络的矿池端口结束相应进程,如图18所示。
图18 “mateMiner”僵尸网络结束其他挖矿木马进程代码片段
当然,这样的竞争还会持续下去,数字货币交易价格的持续走高必将使更多的不法分子加入到这场僵尸网络之战中。
- 网页挖矿脚本横空出世
2017年9月,著名的BT站点,同样也是盗版资源集散地的Pirate Bay(海盗湾)被发现在网页中植入挖矿脚本,网页挖矿开始进入公众的视野。
当用户访问一个网页时,用户的浏览器负责解析该网站中的资源、脚本,并将解析的结果展示在用户面前。当用户访问的网页中植入了挖矿脚本,浏览器将解析并执行挖矿脚本,利用用户计算机资源进行挖矿从而获利。挖矿脚本的执行会导致用户计算机资源被严重占用,导致计算机卡慢,甚至出现死机等情况,严重影响用户计算机的正常使用。
网页挖矿脚本种类众多,目前发现的植入到网页中的挖矿脚本有Coinhive,JSEcoin,reasedoper,LMODR.BIZ,MineCrunch,MarineTraffic,Crypto-Loot,ProjectPoi等,大部分挖矿脚本项目都是开源的,这也方便一些站长或网站入侵者在网页中植入挖矿脚本。图19展示了2017年11月至12月不同网页挖矿脚本的占比情况。
图19 2017年11月-12月不同挖矿脚本占比
可以看出,Coinhive是大多数不法分子的选择,这也归功于Coinhive的便捷性。入侵网站的黑客或者贪图利益的站长并不需要将挖矿的js代码写入网页中,而是在网页中调用Coinhive官网中的js文件coinhive.min.js并指定一个唯一的标识符即可。图20展示了Coinhive的代码范例。
图20 “Coinhive”挖矿脚本代码范例
随着网页挖矿脚本的兴起,许多网站开始通过一些特殊技巧掩盖挖矿时所产生的大量系统资源消耗。2017年9月,有安全研究人员发现后缀为.com.com的域名挂有挖矿代码。这些网站以“安全检查”作为幌子掩盖挖矿时系统的卡慢。如图21所示。
图21 挖矿脚本用“安全检查”迷惑用户
无独有偶,前段时间,malwarebytes安全研究人员发现某些包含挖矿代码的网页会在用户关闭浏览器窗口后隐藏在任务栏右下角继续挖矿。如图22所示。(图片来自:https://blog.malwarebytes.com/cybercrime/2017/11/persistent-drive-by-cryptomining-coming-to-a-browser-near-you/)
图22 挖矿脚本利用任务栏隐藏自身
在这些被植入挖矿脚本的网站中,一部分是贪图利益的站长主动将挖矿脚本嵌入网页中的,而另一部分则是黑客入侵网站之后植入挖矿脚本的。2017年11月我们发现一批网站被植入了带有相同标识符的ProjectPoi挖矿脚本,但这一批网站之间并没有丝毫关联,可以推测,是黑客入侵网站之后植入的挖矿脚本。图23展示了这些网站中植入的挖矿脚本。
图23 一些被黑客入侵的站点中植入的挖矿脚本
不同于通过入侵服务器搭建挖矿木马僵尸网络,网页挖矿脚本更容易被用户所察觉,但由于利益驱使依然有许多网站中被植入了挖矿脚本。图24展示了2017年9月-12月网页植入挖矿脚本数量变化趋势。不难看出,网页挖矿脚本数量还在不断增加,特别是进入12月后数量有明显上涨的趋势。
图24 2017年11月-12月网页挖矿脚本数量变化趋势
网页挖矿脚本之所以如此活跃,主要是因为大部分挖矿脚本都来自于色情网站这一类特殊的站点,由于这类网站的高访问量导致挖矿脚本数量的持续升高。图25展示了网页挖矿脚本在各类网站中出现的比例,不难看出,色情网站是网页挖矿脚本的重灾区。
图25 各类网站植入挖矿脚本比例
相比较挖矿木马僵尸网络,网页挖矿脚本属于后起之秀,但出现时间晚并不能阻止此类挖矿木马的兴起,巨大的利益驱动促使更多的黑产从业者投身挖矿事业中。但由于网页挖矿隐蔽性较低,未来黑产从业者可能会将挖矿目标转移到网页游戏和客户端游戏中,通过游戏的资源高消耗率掩盖挖矿机的运作。而移动平台也有可能是挖矿木马的重要目标。
0x4 防范与总结
挖矿木马的崛起源于数字货币交易价格的持续走高,从当前的情况看,数字货币交易价格还将持续攀升,这也将可能导致挖矿木马数量的激增。因此,如何防范挖矿木马是重中之重。
- 防范挖矿木马僵尸网络
挖矿木马僵尸网络的目标是服务器,黑客通过入侵服务器植入挖矿机程序获利。如果能对黑客的入侵行为进行有效防范,就能够将挖矿木马僵尸网络扼杀在摇篮中。作为服务器管理员,进行如下工作是防范挖矿木马僵尸网络的关键:
(1)避免使用弱口令。从上文可知,“隐匿者”这类规模庞大的僵尸网络拥有完备的弱口令爆破模块,因此避免使用弱口令可以有效防范僵尸程序发起的弱口令爆破。管理员不仅应该在服务器登录帐户上使用强密码,在开放端口上的服务(例如MSSQL服务,MySQL服务)也应该使用强密码。
(2)及时为操作系统和相关服务打补丁。许多挖矿木马僵尸网络利用“永恒之蓝”漏洞利用武器进行传播,而“隐匿者”更是在“永恒之蓝”漏洞利用武器泄露的几天后就开始将它用于真实攻击,可见黑客对于1day,Nday漏洞的利用十分娴熟。由于大部分漏洞细节公布之前相应厂商已经推送相关补丁,如果服务器管理员能够及时为系统和相关服务打补丁就能有效避免漏洞利用攻击。服务器管理员需要为存在被攻击风险的服务器操作系统、Web服务端、开放的服务等及时打补丁。
(3)定期维护服务器。由于挖矿木马会持续驻留在计算机中,如果服务器管理员未定期查看服务器状态,那么挖矿木马就难以被发现。因此服务器管理员应定期维护服务器,内容包括但不限于:查看服务器操作系统CPU使用率是否异常、是否存在可疑进程、WMI中是否有可疑的类、计划任务中是否存在可疑项、是否有可疑的诸如PowerShell进程、mshta进程这类常被用于持续驻留的进程存在。
2.防范网页挖矿脚本
网页挖矿脚本一般针对PC,因此也较容易被发现,用户可以通过以下几方面防范网页挖矿脚本:
(1)浏览网页时留意CPU使用率。由于挖矿脚本的运行会导致CPU使用率飙升,如果用户在浏览网页时发现计算机CPU使用率飙升且大部分CPU使用来自于浏览器,那么网页中可能嵌入挖矿脚本。
(2)不访问浏览器或杀毒软件标记为高风险的网站。如今大部分杀软和主流浏览器都具备检测网页挖矿脚本的能力,若用户访问的网站是被标注为高风险的恶意网站,那么网站中可能嵌入了挖矿脚本。不访问被标记为高风险的网站也能避免挂马攻击。
2017年是挖矿木马爆发的一年,而2018年可能是挖矿木马从隐匿的角落走向大众视野的一年。阻止挖矿木马的兴起是杀毒软件的重要责任,而防范挖矿木马的入侵是每一位服务器管理员、PC用户需要时刻注意的重点。防御挖矿木马,保护用户的计算机安全,任重而道远!
0x5 参考链接
[1] 利用服务器漏洞挖矿黑产案例分析; http://www.freebuf.com/articles/system/129459.html
[2] 悄然崛起的挖矿机僵尸网络:打服务器挖价值百万门罗币;http://www.freebuf.com/articles/web/146393.html
[3] Persistent drive-by cryptomining coming to a browser near you;https://blog.malwarebytes.com/cybercrime/2017/11/persistent-drive-by-cryptomining-coming-to-a-browser-near-you
[4] “门罗币最近没落了吗?什么原因?”问题“艾俊强”的回答;https://www.zhihu.com/question/60058310/answer/222755086