服务器挖矿病毒的解决方案
记录一次解决挖矿病毒的过程(进程:susupdate,networkservice)
昨天晚上突然收到阿里云的警报提醒,服务器又被攻击,开始还没当回事,晚上测试的时候发现服务器变的异常卡顿。然后进入后台查看,发现CPU直接飙升到100%.........
1.找出病毒进程
我们使用top命令查看进程运行情况:
(由于当天晚上已经解决,但是忘记截图保存,下面部分图片来自于网络)
找到其中CPU占有率较高的进程,可能不同的环境对应的进程名称不同。
- 分析病毒的执行脚本
# update.sh文件:
# 由Redis侵入,将本机密码set到redis中,dump.rdb文件修改为authorized_keys,然后把文件的目录设置到/root/.ssh下,保证其可以使用 SSH 登录到服务器。
config.json (挖矿配置)、
sysupdate (XMR 挖矿软件)、
update.sh (病毒主脚本)、
networkservice(scanner扫描并入侵其他的主机)、
sysguard(watchdog 用于监控并保证病毒的正常运行以及更新)
2.根据进程号找到运行文件的位置
ls -l proc/{进程号}/exe
在我的服务器下,其运行文件均存放于/etc目录下的。
3.删除病毒进程
kill -9 进程号
4.删除病毒文件
在步骤2中,我们已经找到了病毒文件所在的地方,但是如果直接使用rm -rm
可能显示拒绝操作,没有权限。
4.1 文件无法正常删除如何解决?
- 问题背景
有时候需要修改文件的权限,但是即使在root下使用chmod命令也不一定能成功更改,有时也会遇到Operation not permitted的问题。
一般,Linux下root用户的权限是最大 (Linux下UID数值越小的用户,权限越大,可以看到最小值为0,即root用户)
但是在使用chmod改变文件权限的时候,即使在root用户下,也会遇到operation not permitted的问题。
其实chmod的底层实现是chattr命令,用此命的功能更为强大,甚至可以锁定文件,即使root用户也操作不了此文件。
- 解决办法
lsattr可用来查看文件的属性:
lsattr filename
如果文件属性中有i与a,或者其中一个,使用chattr
命令去掉:
chattr -ia filename
对病毒文件进行删除:
chattr -i sysupdate
rm -f sysupdate
chattr -i sysupdates
rm -f sysupdates
chattr -i networkservice
rm -f networkservice
chattr -i sysguard
rm -f sysguard
chattr -i update.sh
rm -f update.sh
chattr -i config.json
rm -f config.json
5.删除定时任务(重要!!)
这一步一定要做,我第一次删除后忘记定时任务因为权限问题,没删掉,然后隔一段时间又重启了。
crontab -l 查看定时任务
crontab -r 删除所有定时任务
也可以直接进入目录/var/spool/cron下查看定时程序:
这一步直接使用rm -f或者corntab -r可能显示:cannot remove ‘root’: Permission denied
由于此时我已经是root用户,然后使用ll命令查看该定时人物的权限,果然无法修改。
- 尝试使用chomd修改权限
首先使用chattr -ia filename命令将文件的权限去掉;
直接使用chmod 777 filename,修改完毕后已经得到了权限,但是删除仍然报错。
- 需要对/var/spool/下的文件修改权限
# 清除crontab
cd /var/spool/
chattr -i cron/
crontab -r
6.修改/root/.ssh/authorized_keys文件
攻击者很聪明,修改了我的authorized_keys文件,可以直接ssh到我的主机,给自己留了后门。
cd /root/.ssh/
chattr -ia authorized_keys
rm -rf authorized_keys
7.修复SElinux和wget、curl指令
感觉真心无语了,把服务器的wget和curl指令给改了,改为了wge和cur。
- 修改wget和curl
mv /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子系统,我们可以使用getenforce命令查看SELinux状态。
如果你想要重新打开,可以修改/etc/selinux/config文件将SELINUX=disabled改为SELINUX=enforcing,然后重新启动服务器。
8.被攻击的原因
病毒的问题是得到了解决,但是具体是啥东西造成的呢?
居然是Redis!!!
在昨天安装了redis服务后,忘记开启登录密码,唉。
大概原理分析:
1.redis没有做任何安全措施,直接暴露在公网,任何redis客户端都可以直接连接。
2.被恶意的连接连接上后,在他的机器上生成ssh秘钥,然后set到redis中,最后使用redis的config命令,将默认RDB方式出来的dump.rdb文件修改为authorized_keys,然后把文件的目录设置到/root/.ssh下。
3.这样一来,就非常危险了,攻击者可以直接ssh到你的linux主机,接下来,root账户,为所欲为。被挖矿也就不稀奇了。
- 设置redis的登录密码
vi /usr/local/redis/bin/redis.conf
将requirepass yourpassword前的注释去掉,其中yourpassword是你所设置的密码。