# 记一次阿里云服务器被拿去挖矿的排查及解决过程

597 阅读5分钟

前言

自用的云服务器除了运行着一个web服务外,已经很久没有去管它了。早上,对象的手机突然收到了阿里云的“威胁短信”,如果7月26日还是没有解决服务器挖矿的现象,就将服务器停用。对象大惊,于是作为家里的劳动力担当,我便被派去解决这一次事件。

思路

首先既然被阿里云识别是挖矿行为,可以先登录控制台看一下为什么会被定位成挖矿行为的原因。不出所料,CPU的使用率已经高达100%。

e3d468436330f7b1d8cb254506ba481f.jpg

支线

过程中发现有个警告事件:非常用IP登录。20号进行过通过SSH登录了服务器,IP在西班牙。由于已经很久没上过服务器,所以应该是密码被爆破或者通过某种渠道获取到了。做了两个措施:

  1. 安全组里对该IP进行了全端口的拦截。
  2. 更改root账户密码 passwd root。考虑新建账户然后关闭root账户的远程访问权限,不过还有问题没解决,这个操作先滞后。

主线

旁枝末节的事情处理完毕,该处理被拿去挖矿这件大事。首先通过top命令可以看到,有个ld-linux-x86-64进程的CPU使用率高达99.9%,基本已经确定确实是挖矿行为导致的。这是一种标准的行为,通过伪装成系统级的执行指令触发的进程来混淆视线。不过奇怪的是,网上查到的只要是跟挖矿相关的基本都是ld-linux-x86-64,难道这种黑别人服务器来挖矿的行为是已经同质化了?一键黑服务器然后一键运行统一脚本?

借助网上冲浪,大致了解了一下大家遇到这个问题的一些解决思路。主要思路都是:找到执行程序 => 杀死进程 => 删除执行程序。

一开始想的是黑客说不定比较笨,直接访问服务器然后操作。通过history看了一下,并没有发现异常。后来了解到history是不靠谱的,可以被清空的,并且默认只显示1k行,之前也没做过特别的操作收集的操作,失败。

然后尝试通过进程去定位执行源 ps -ef | grep 进程标识,并没有看出异常所在。有考虑是不是父进程,top上通过快捷键f进入展示选项,通过空格选择了PPID(进程的父进程),Q退出,结果发现父进程的PID是1.... 系统进程,由于数据量太杂,并没有发现实际有效的信息,失败。

看到网上有个方案是通过相似名称去匹配找到了执行程序,尝试了一下:

find -r -name "ld-linux*" /

居然!

真的!

找到了!

4af484e68888552786d8c0aa3fa2e5e0.jpg

支线

不过一开始我犯了一个比较憨憨的问题,以为找到了,然后加上网上方案没细说,加上自己着实是一个Linux小白,就直接把/usr/lib64/ld-linux-x86-64.so.2删除了。。。。删除了。。。于是除了cd以外的像ls where之类指令都没法使用了。

5116dddfe771dd7c76ff9b1377372891.jpg

紧急查了一下解决方案,还好还好,我删的应该是一个软连接,只需要重新建立一下软连接就可以。既然是软连接,我只需要找到它的实际指向位置,重新建立一下就好。

8e17395202453365026be3efc74b5271.jpg

不过

c67589f523fc55e85494c18c37a09f15.jpg

等会。。我怎么知道它的实际指向位置?

这文件都被我删了,而且相关指令都不能用了,啊这,这可咋整,难道我要重装了么,可是服务器有正在运行的服务还没有备份,而且我该如何向对象交代。。。。

46311a51f9e3807a574d6aeb5717def4.jpg

怀着忐忑的心情,决定先不告诉她,我再挣扎一下。我看网上的方案里实际的地址都是/lib64/ld-2.28.so,试了一下

49e4ccacd6641aac348095b7c9a52d7a.jpg

难道我这个系统还跟别人的不一样?想到我是阿里云的云服务器,立马找了一个有阿里云的朋友,让他给了我他服务器的软连接实际映射地址/lib64/ld-2.21.so。不愧是阿里云,这都不一样,然后我试了一下。

3a50af65fa737a6a46074d481f8356cb.jpg

c40b8f93655c943573810997bc180a72.jpg

这可咋搞,没帮我对象解决服务器问题,反而让她用不了了,虽然她昨天榴莲吃坏了,不会有新榴莲,但搓衣板在所难免。惆怅之时,我发现了一个规律,发现网上的是ld-2.28.so,我那朋友的ld-2.21.so,实际的映射路径应该是ld-2.xx.so,不过可能根据不同的设备和系统,可能xx这里的数据会有不同,而这一定是个数字,也就是说,我可以物理爆破,我还有机会!

嗯,挺好,也就试了17次成功了。然后执行:

/lib64/ld-2.17.so/bin/ln -s /lib64/ld-2.17.so /lib64/ld-linux-x86-64.so.2

建立软连接,哦吼,一切正常,今天可以昂着头回家了。

继续主线

这次留了个心眼,看了一下/dev/shm/.x/里的文件,run文件里有个IP地址,有cron.d配置了重启后在启动,已经具有非常高的嫌疑。做了个压缩备份,然后毅然rm -rf .x重启了一下。挖矿程序总算没有再执行,经过一段时间的观测,基本确认已经将挖矿的内容解决掉了。哦吼,已经不用担心7月26日的停机了。

后续

要想办法避免以后再次出现被拿去挖矿的情况, 要避免主账户登录,防止账户泄露。