近期,多台服务器遭遇挖矿行为。先前一台项目上的服务器被“安恒MSS通报”检测到挖矿木马与矿池通信,但在查看服务器时无明显异常进程,且无高占用CPU进程。大抵是该木马还开始进一步占用CPU。
原因:猜想应该是弱密码的某个用户被破解了密码,好在root用户的密码应该没有被破解。
解决方式:启防火墙,屏蔽大部分出入端口,只留必要的。
现又有一台项目上的完全自用服务器出现挖矿问题,CPU核心被完全占用了一半,但是在使用htop查看时,无法直观的查看到具体高占用CPU的那个进程。显然该进程被隐藏了。
解决流程
1、查找确认该异常进程
由于htop是第三方指令无法显示出隐藏进程,而该木马可能是内核级的隐藏,为了能够直接查找到该进程,会用到以下两个命令。如果没有这两个命令的话,则需要额外安装。
sysdig -c topprocs_cpu # 该命令可以输出cpu占用的排行,经测试可以显示出被隐藏的进程 unhide proc # 自助搜索隐藏进程,linux系统中一切皆文件,proc目录下保存的就是所有正在运行程序的进程ID,即PID
sysdig -c topprocs_cpu (查看到高占用的隐藏进程)
进入挖矿进程的PID目录下,可看出该进程的运行信息。
cd /proc/60818后执行ls -al
2、采取措施
这里显式执行程序已被删除,这里单纯只是系统没有识别到的原因,并不是被真的删除。这里先别急直接用将进程删除掉,以免再次挂起。
# 首先用如下命令查询进行是如何被运行的 systemctl status 60818 # 60818为病毒的PID # 这里的输出结果PID目录下environ文件内容是类似的
结果输出如下
其中bf1e7ddf为病毒进程
这里前前后后删了多次挖矿进程,所以每次挖矿进程的可执行程序的名字和PID都不一样,不过名字都是由8位的16进制数字组成。可以看出这个挖矿进程是被一个mdcheck什么服务启动的。
# 所以这里我先通过如下命令将该服务停掉 journalctl -u mdcheck-4838751a # 终止之前可以用该命令查看服务运行状态 systemctl stop mdcheck-4838751a # 终止该挖矿服务 systemctl disable mdcheck-4838751a # 终止该挖矿服务的开机自启
从上图中可看出终止之后再查看该挖矿进程状态,其中的服务已经变为失败状态。
# 挖矿病毒都会有定时的网络发送信息,所以可用如下命令查看在病毒运行期间,是否存在异常IP地址 netstat -natp
这里我没有截图留念。其中发现了一个来自美国的IP和一堆欧洲IP链接,经过分析后,这个美国IP是黑客日常发送指令的位置,欧洲IP是接收挖矿密钥的位置。
# 知道这些后,我们可以用防火墙firewalld或iptables对这些IP进行封禁 iptables -I INPUT -s IP -j DROP firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="IP" reject' # 其中IP字段替换为真实的黑客IP
但是发现系统提示说是没有iptables指令,我用whereis命令进行查询发现,系统中存在iptables的源文件,但是可执行文件缺失,我就从相同系统环境的另一台机器上把iptables复制过来,并通过如下命令启动防火墙服务。
systemctl enable iptables # 开机自启 systemctl start iptables # 打开服务
然后通过之前的命令把黑客IP进行封禁。
但是重启电脑之后,被关闭的病毒服务又回来了,iptables也被第一时间删除。看来简单关闭挖矿服务是不行的,需要完整的删除。
在上图中,我们可以看到挖矿服务在/etc/dns/mdcheck-的目录下。但是一通操作后,发现目录下是空的。甚至在/etc/dns/下也查询不到mdcheck-文件下,除非输入完整路径信息。
挖矿服务目录
这里我想复制一份挖矿服务程序出来,系统提示如下报错
Operation not permitter
root都没权限进行操作。一通检索后才知,linux怕用户误删一些系统必要指令和文件进行的保护,可通过如下命令进行解除。
chattr -iR /etc/dns # 解除改目录的误删保护,R为递归执行,但是文件夹下的病毒都被隐藏,所以这里的R其实没有起作用
这里需要分别用chattr对该目录下的文件逐一全名的进行解除。然后通过rm -rf对dns目录进行删除。最后再利用kill -9命令将挖矿进程删掉,再次重启之后,挖矿服务没有再次被启动。
通常的病毒只会在crontab中写入定时自启病毒,所以直接删掉即可,这次的病毒在linux系统中注入了服务,让人难以搜索到,尤其是对病毒进程和文件夹进行了隐藏操作,防不胜防。
有条件的可以将服务器中ssh登录都设置为rsa免密登录,这样可以避免绝大多数问题。一般黑客是通过尝试用户名和密码对服务器进行攻击,但是每台服务器中用户名都不同,所以很难攻击,但是root名称一般不会变,所以黑客一般是先攻击这个名称。
----------------------
---------------------