最近服务器碰到反应速度变慢问题。一看进程,有个进程名字为乱码的9-10位英文的进程(例如rrgjpvryri),一直在满CPU在跑。并且启动方式是绑定基本的系统指令(例如top,ls等指令)启动的。
并且不断kill之后,过一小段时间又会产生一个新的另一个名字的进程继续跑。在网上查找了一些资料,发现是自己的服务器中了病毒,被别人当成矿机在挖bitcoin了。
解决问题的方法:
第一步: 查看与该进程相关联的文件
root@ubuntu:~# lsof -p 24183
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rrgjpvryr 16137 root cwd DIR 252,0 4096 29622273 /root
rrgjpvryr 16137 root rtd DIR 252,0 4096 2 /
rrgjpvryr 16137 root txt REG 252,0 625878 8920905 /usr/bin/rrgjpvryri
rrgjpvryr 16137 root 0u CHR 1,3 0t0 6 /dev/null
rrgjpvryr 16137 root 1u CHR 1,3 0t0 6 /dev/null
rrgjpvryr 16137 root 2u CHR 1,3 0t0 6 /dev/null
rrgjpvryr 16137 root 3u sock 0,8 0t0 32843925 protocol: UDP
可以看出来,这个进程的启动文件是在/usr/bin/下面,然后通过UDP与对方(挖矿的人)保持连接的。
第二步: 检查/etc/crontab
这种病毒大多数是通过定时任务来启动的。检查/etc/crontab,会发现这里有个每3分钟定时启动的gcc.sh (刚看到这个文件完全不敢相信这是病毒文件)
将这句话注释掉。然后我们来看一下gcc.sh下到底是什么内容:
像这种头部没注释(一般系统文件都会带有较长的注释,还有License之类的),创建时间又不长的文件,极大概率就是病毒。然后可以看见,这个文件将 libudev.so 不断复制,这么来看,病原体主要就是这个文件。
了解后将/etc/cron.hourly下的gcc.sh删除。注意删除gcc.sh之后不要直接kill掉挖矿进程,这样gcc.sh又会重新出现
第三步:处理libudev.so
找到病原体之后,尝试将libudev.so删除,但是已删除之后,立马又会出现一个新的libudev.so。这时候检查gcc.sh还是被删除的状态。我怀疑是现在正在跑的挖矿进程在监视这个文件,一旦删除立马新建一个这样的.so文件。于是我尝试直接kill掉rrgjpvryri进程,但是这样又会出现一个新的乱码挖矿进程继续跑,并且这时候再看/etc/cron.hourly下面,gcc.sh又再次出现。
这样看来,这个病毒是自己组成了一个环路,一旦运行起来之后互相不断创建。所以想要解决问题,只能说是减断某条道路,让他们不能组成一个环路。
成功的步骤:
1. 删除gcc.sh,如步骤一。
2. 删除所有的病毒系统启动项
这个病毒把自己添加到了开机启动的目录中。检查/etc/init.d目录,/etc/rc#.d/目录下的所有文件,通过创建日期和进程名判断该启动项是否为病毒。也可以通过内容查看是否为病毒,一般病毒文件里面内容短小,并且写法一样,如下图:
然后/bin目录下的所有病毒启动文件最好也一并删除,一般启动文件都是当天创建的,把/bin目录下的当天创建的启动项删掉就好:
以上这些当天创建的启动文件都是病毒创建的,通过命令:
find /bin -mtime -1 -file f -print | xargs rm -rf
记住一定要加 -file f, 要不它会把/bin下面的所有文件删掉(我就照着某傻逼知道来做,然后全删了gg,系统命令用不了,没想到最后靠git曲线救国了)。
3. 重启服务器
到这里按道理一开始病毒没有通过守护进程开机启动的话,就不会再启动了,这时候再把libudev.so删掉,就没有问题了。注意要按照顺序来,要不生生死死轮回不止。。。
中间还有用到一些限制更改之类的操作,如果中间某个步骤跟预想的不符的话,可以试试:
chattr +i /etc/init.d/
chattr +i /lib/libudev4.so
4. 检查
重启之后再检查一下进程。到这里应该是没问题了。
思考:
这个病毒是怎么进来的呢?阿里云服务器上似乎有很多人都遭遇了这个问题,这个问题是由于Redis的漏洞造成的。要把未授权的redis服务设置密码,修改端口号,修改root密码等,防止再次被入侵。