加密货币劫持(俗称恶意挖矿)是一种新兴的在线威胁,它隐藏在服务器或PC等设备上,并利用设备资源来“挖掘”加密货币。挖矿威胁尽管相对较新,但它已经成为最常见的网络威胁之一,很有可能成为网络世界下一个主要的安全威胁。
与网络世界中大多数其它恶意攻击一样,挖矿最终动机也是因为有利可图。在了解挖矿的机制以及如何保护自己免受挖矿的荼毒之前,需要先了解一些背景。
什么是加密货币
加密货币是一种数字货币的形式,仅存在于网络世界中,没有实际的物理形式。它们以分散的货币单位形式存在,可在网络参与者之间自由转移。
与传统货币不同,加密货币不受特定政府或银行的支持,没有政府监管或加密货币的中央监管机构。加密货币的分散性和匿名性意味着并没有监管机构决定有多少货币将会流入市场。
大多数加密货币,正是通过“挖矿”方式开始进入流通。挖矿实质上是将计算资源转变为加密货币。起初,任何拥有计算机的人都可以挖掘加密货币,但它很快就变成了军备竞赛。如今,大多数挖矿者使用功能强大的专用计算机来全天候地挖掘加密货币。不久,人们开始寻找挖掘加密货币的新方法,挖矿木马应运而生。黑客不用购买昂贵的采矿计算机,仅需要感染常规计算机,就可以窃取他人的资源来牟取自身利益。
什么是“挖矿”行为
“挖矿”是一种使用他人设备,并在他人不知晓、未允许的情况下,秘密地在受害者的设备上挖掘加密货币的行为。黑客使用“挖矿”手段从受害者的设备中窃取计算资源,以获得复杂加密运算的能力。
以比特币挖矿为例,每隔一个时间点,比特币系统会在节点上生成一个随机代码,互联网中的所有计算机都可以去寻找此代码,谁找到此代码,就会产生一个区块。根据比特币发行的奖励机制,每促成一个区块的生成,该节点便获得相应奖励。这个寻找代码获得奖励的过程就是挖矿。但是要计算出符合条件的随机代码,需要进行上万亿次的哈希运算,于是部分黑客就会通过入侵服务器等方式让别人的计算机帮助自己挖矿。
挖矿攻击的危害十分严重,这是因为挖矿利用了计算机的中央处理器(CPU)和图形处理器(GPU),让它们在极高的负载下运行。这就如同在开车爬坡时猛踩油门或者开启空调,会降低计算机所有其他进程的运行速度,缩短系统的使用寿命,最终使计算机崩溃。当然,“挖矿者”有多种方法来“奴役”控制你的设备。
第一种方法:就像恶意软件一样,一旦点击恶意链接,它会将加密代码直接加载到您的计算机设备上。一旦计算机被感染,挖矿者就会开始挖掘加密货币,同时保持隐藏在后台。因为它感染并驻留在计算机上,所以它是本地的一种持续的威胁。
第二种方法:被称为基于Web的加密攻击。与恶意广告攻击类似,比如通过将一段JavaScript代码嵌入到网页中。之后,它会在访问该页面的用户计算机上执行挖矿,该过程不需要请求权限并且在用户离开初始Web站点后仍可长时间保持运行。那些用户认为可见的浏览器窗口已关闭,但隐藏的浏览器窗口仍然打开。
如何发现、清除“挖矿”木马
当出现下述这些情况的时候,说明你的设备很有可能是遭到恶意挖矿了。
1. CPU使用率居高不下;
2. 响应速度异常缓慢;
3. 设备过热,冷却风扇长期高速运转;
这时,需要确定是设备本身(以服务器为主)感染了挖矿木马,还是浏览器挖矿。
服务器挖矿知多少?
目前服务器挖矿使用最多的入侵方式为SSH弱口令、Redis未授权访问,其他常见的入侵方式如下:
(1)未授权访问或者弱口令。包括但不限于:Docker API未授权访问,Hadoop Yarn 未授权访问,NFS未授权访问,Rsync弱口令,PostgreSQL弱口令,Tomcat弱口令,Telnet弱口令,Windows远程桌面弱口令。
(2)新爆发的高危漏洞。每次爆出新的高危漏洞,尤其命令执行类漏洞,那些长期致力于挖矿获利的黑客或挖矿家族都会及时更新挖矿payload。因此,在新漏洞爆发后,黑客会紧跟一波大规模的全网扫描利用和挖矿行动。
例如2018年爆发的WebLogic反序列化漏洞,Struts命令执行漏洞,甚至12月爆出的ThinkPHP5远程命令执行漏洞已经被buleherowak挖矿家族作为攻击荷载,进行挖矿。
一旦发现服务器存在挖矿迹象,又应该如何操作呢?需要尽快确认挖矿进程、挖矿进程所属用户、查看用户进程、清除挖矿木马等。
确定挖矿进程
可以使用top命令直接筛选出占用CPU过高的可疑进程,来确定挖矿进程。比如部分挖矿进程的名字由不规则数字和字母组成,可直接看出(如ddg的qW3xT.4或zigw等)。
当然,挖矿进程也有可能被修改为常见名称来干扰运维人员。但是这种伪装方法比较简单(比如利用XHide修改进程名或直接修改可执行文件名),所以排查过程中也要关注所有占用CPU较高的可疑进程。
如果看到了可疑进程,可以使用lsof -p pid 查看进程打开的文件,或查看/proc/pid/exe 指向的文件。
Isof
proc
从上图可以看到,python进程所指向的文件明显为异常文件,此时就需要重点排查该文件。
此外,如果挖矿木马有隐藏进程的功能,那么很难直接从top中确定可疑进程名。这时,可从以下几方面进行排查:
1、是否替换了系统命令
使用 rpm -Va 查看系统命令是否被替换,如果系统命令已经被替换,可直接从纯净系统拷贝ps,top等命令到受感染主机上使用。
可以看到,系统的ps、netstat、lsof 三个命令均被替换。
ps命令被替换后,会修改ps输出的内容,从而隐藏可疑进程。此时直接使用ps命令时,会导致查询不准确。比如gates木马会替换ps命令,直接使用ps -ef命令查看进程时,会隐藏一个位于/usr/bin/下的进程。如下所示,使用busybox可看到可疑进程,但是使用系统的ps命令就不会看到/usr/bin/bsd-port/recei进程。
2、是否修改了动态链接库
如果找不到占用CPU较高的进程,可考虑排查是否修改了动态链接库,使用cat /etc/ld.so.preload 或echo $LD_PRELOAD 命令查看是否有预加载的动态链接库文件。
也可以使用ldd命令查看命令依赖库中是否有可疑动态库文件,如图,在将libprocesshider.so文件加入ld.so.preload文件中后,ldd 命令可看到top命令预先加载了可疑动态库。
确认已经加载恶意动态链接库后,直接移除恶意动态链接库文件或清除ld.so.preload中对该库文件的引用内容即可。
3、以上情况都可以直接通过静态编译的busybox进行排查。
查看挖矿进程所属用户
一般挖矿进程为自动化攻击脚本,所以很少有提权的过程,那么很大可能挖矿进程所属用户即为攻击进入系统的用户。后续的排查过程可根据此寻找攻击者的入侵途径。
top
ps -ef |grep pid
两种方式都可以看到,挖矿进程所属用户为 weblogic。
查看用户进程
确定已失陷用户后,可查询该用户所属其他进程,判断其他进程是否有已知漏洞(Weblogic反序列化、Struts2系列漏洞、Jenkins RCE)或弱口令(Redis未授权、Hadoop yarn未授权、SSH弱口令)等问题。
ps -ef|grep username
可以看到,weblogic用户下除了两个挖矿进程,还有一个weblogic应用的进程,所以这时候就应该判断该weblogic应用是否有已知的漏洞(比如WebLogic反序列化漏洞)。如果有的话,那么该挖矿进程很可能是利用了该漏洞进入主机。
确定原因
排查出挖矿木马后对木马类型进行分析,根据木马的传播特征和传播方式,初步判断本次入侵的原因。然后结合应用日志以及漏洞利用残留文件确定本次攻击是否利用了该漏洞。
比如,利用redis未授权访问漏洞后,一般会修改redis的dbfilename和dir的配置,并且使用redis写文件时,会在文件中残留redis和版本号标识,可以根据以上两个信息排查是否利用了redis。
清除挖矿木马
1、及时隔离主机
部分带有蠕虫功能的挖矿木马在取得本机的控制权后,会以本机为跳板机,对同一局域网内的其他主机进行已知漏洞的扫描和进一步利用,所以发现挖矿现象后,在不影响业务的前提下应该及时隔离受感染主机,然后进行下一步分析。
2、阻断与矿池通讯
iptables -A INPUT -s xmr.crypto-pool.fr -j DROP
iptables -A OUTPUT -d xmr.crypto-pool.fr -j DROP
3、清除定时任务
大部分挖矿进程会在受感染主机中写入定时任务完成程序的驻留,当安全人员只清除挖矿木马时,定时任务会再次从服务器下载挖矿进程或直接执行挖矿脚本,导致挖矿进程清除失败。
使用crontab -l 或 vim /var/spool/cron/root 查看是否有可疑定时任务,有的话直接删除,或停止crond进程。
还有/etc/crontab、/var/spool/cron、/etc/cron.daily/、/etc/cron.hourly/、/etc/cron.monthly/、/etc/anacrontab 等文件夹或文件中的内容也要关注。
4、清除启动项
还有的挖矿进程为了实现长期驻留,会向系统中添加启动项来确保系统重启后挖矿进程还能重新启动。所以在清除时还应该关注启动项中的内容,如果有可疑的启动项,也应该进行排查,确认是挖矿进程后,对其进行清除。
排查过程中重点应该关注:/etc/rc0.d/、/etc/rc1.d/、/etc/rc2.d/、/etc/rc3.d/、/etc/rc4.d/、/etc/rc5.d/、/etc/rc6.d/、/etc/rc.d/、/etc/rc.local /etc/inittab等目录或文件下的内容。
5、清除公钥文件
在用户家目录的.ssh目录下放置authoruzed_keys文件,从而免密登陆该机器也是一种常见的保持服务器控制权的手段。在排查过程中应该查看该文件中是否有可疑公钥信息,有的话直接删除,避免攻击者再次免密登陆该主机。
[UserDIR]/.ssh/authorized_keys
6、kill挖矿进程
对于单进程挖矿程序,直接结束挖矿进程即可。但是对于大多数的挖矿进程,如果挖矿进程有守护进程,应先杀死守护进程再杀死挖矿进程,避免清除不彻底。
kill -9 pid 或 pkill ddg.3014
在实际的清除工作中,应找到本机上运行的挖矿脚本,根据脚本的执行流程确定木马的驻留方式,并按照顺序进行清除,避免清除不彻底。
浏览器挖矿不可不防
首先要做的是确定吞噬资源的过程。通常使用Windows Taskmanager或MacOs的Activity Monitor足以识别罪魁祸首。但是,该进程也可能与合法的Windows文件具有相同的名称,如下图所示。
如果该进程是浏览器时,更加难以找到罪魁祸首。
当然,可以粗暴地终止该进程,但精确找到究竟是浏览器中的哪一个站点占用了如此之多的CPU性能是一个更好的办法。比如,Chrome有一个内置工具,被称为Chrome任务管理器,通过单击主菜单中的“更多工具”并在其中选择“任务管理器”来启动它。
此任务管理器显示各个浏览器选项卡和扩展项的CPU使用情况,因此如果您的某个扩展程序包含一个挖矿者,则它也会显示在列表中。
写在最后
2017年是挖矿木马爆发的一年,而2018年是挖矿木马从隐匿的角落走向大众视野的一年,2019年可能是木马疯狂的一年。阻止挖矿木马的兴起是安全人员的重要责任,而防范挖矿木马的入侵是每一位服务器管理员、PC用户需要时刻注意的重点。防御挖矿木马,任重而道远!
相关阅读: