躲过了COVID-19 没躲过挖矿病毒
病毒通过 Redis 入侵服务器强制挖矿的真实经历
问题发现
首先是阿里云官方疯狂给我发短信,提示服务器遭受攻击被限制访问部分端口,于是上了阿里云控制台查看了报警提示,显示如下,大致一看还没发现什么。
于是去提示的高风险安全组看了下,意识到6379
是Redis
的默认端口,风险提示的用户名也是 Redis,但是服务器目前并没用 Redis
服务。好吧,也可能是 Redis 被攻击了。
简单处理
早上起床,查了简单的解决方案,将redis
卸载掉,封掉6379
端口。
本以为能够解决问题,才发现 too young too naive
。
阿里云的短信仍然在轰炸我的手机,去到服务器后台查看监控,如下:
好家伙,CPU爆掉了,于是通过top
指令,查询如下:
这个已经不是最新的记录图了,原图应该是有两个redis用户的进程,有一个 sysupdate 进程占用了 CPU 51.2%,另外还有一个进程 networkservice 占用了 47.8% 。这两个加起来,就已经占用了 99% 了。
于是反复用 kill
指令查杀这两个进程,完全没有小效果,进程过几分钟就会重新启动。裂开了~
一顿疯狂搜索知道了是蠕虫病毒通过 Redis 未设置密码的服务进行入侵,将公钥写入目标主机,然后入侵。最终服务器被沦为挖矿的肉鸡,虽然只是个 1核2G的服务器,也难逃这悲惨的命运。
也只能是怪自己之前开 Redis 服务的时候图方便没有设置密码,小白遭受病毒的拷打,脸很痛啊。
问题解决
-
通过
systemctl status {进程号}
查看一下networkservice
的状态信息,以及有没有相关联的进程。 -
通过
ls -l proc/{进程号}/exe
命令查看它具体的位置。最后发现都在 /etc 目录下。绿油油的颜色就发现他们是一伙儿的。 -
有一个
update.sh
,里边肯定写了一些病毒执行相关的命令,简单可以知道如SELINUX
系统被关闭了,我的authorized_keys
文件也被加入了病毒公钥,竟然无耻的还把wget
、curl
等命令改了名字; -
删除定时任务:
通过 crontab -l
查看。 没想到却都没有发现,如果有的话 ,删除 /var/spoool/cron/目录下的所有文件。或者执行crontab -r
命令,清空任务列表。
-
杀掉进程,删除病毒文件:
用
kill -9 {进程号}
把上边的两个进程都杀掉,然后删除/etc
目录下的那五个文件。注意删除文件时,直接用普通的
rm -rf
不能行。因为病毒文件被锁定了,需要通过chattr -i {文件名}
解锁之后,再删除。如果还是不行,改用sudo rm -rf
可以删掉; -
删除 authorized_keys 文件
这个文件里记录了可以通过 ssh 免密登录的所有终端的公钥。路径在
~/.ssh/authorized_keys
,同样采用上面的方法进行删除。 -
恢复
wget
和curl
命令which cur
之后发现,只存在/bin
下,/usr/bin/
不存在1
2
3
4mv /bin/wge /bin/wget
mv /bin/cur /bin/curl
mv /usr/bin/wge /usr/bin/wget
mv /usr/bin/cur /usr/bin/curl -
修复 SELINUX
SELinux 是
linux
的一个安全子系统。可以通过命令getenforce
查看服务状态。其实从
update.sh
文件中也可以看到此服务被关闭了。修改
/etc/selinux/config
文件,将SELINUX=disabled
修改为SELINUX=enforcing
。修改完成后,需要重启服务器才能生效。
回顾
回想自己在几个月前熟悉 Redis 服务时,开了服务,没有设置密码,才导致这次的病毒感染。
最终服务器回归了往日的平静,过程中有一种国土被侵略的感觉,很是炸裂!
在自己解决问题的过程中,部分过程没有详细截图记录,解决方案的描述也是作为一个参考吧。
最终的问题解决指导方案参照【作者:烟雨星空 链接:https://segmentfault.com/a/1190000023279128 】
希望接下来的日子再也没有病毒!