现象:服务器网站出现偶尔打不开,并不频繁。在查找原因是使用ssh工具连接会经常断掉,无法开展工作。
解决过程:
还好使用其他服务器对另一个内网ip进行ssh连接,可以。首先怀疑外网ip所在的网卡问题。
如何查看流量过高:
1使用ifstat
wget http://distfiles.macports.org/ifstat/ifstat-1.1.tar.gz
ifstat -a 加入监控lo
2使用iftop监控那个端口流量
p 可以显示连接端口
3使用nethogs监控每个进程流量
yum换rpel源
wgethttp://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
yum install nethogs
nethogs eth0
3个工具使用效果对比:
1. ifstat
2.iftop
3 nethogs
D USER PROGRAM DEV SENT RECEIVED
? root 124.172.118.226:6750-14.18.143.59:80 0.000 0.200 KB/sec
? root 124.172.118.226:2508-14.18.143.59:80 0.000 0.200 KB/sec
? root 124.172.118.226:15291-14.18.143.59:80 0.000 0.200 KB/sec
? root 124.172.118.226:52445-14.18.143.59:80 0.000 0.200 KB/sec
? root 124.172.118.226:62124-14.18.143.59:80 0.000 0.200 KB/sec
? root 124.172.118.226:22214-14.18.143.59:80 0.000 0.200 KB/sec
? root 124.172.118.226:7915-14.18.143.59:80 0.000 0.200 KB/sec
? root 124.172.118.226:51793-14.18.143.59:80 0.000 0.200 KB/sec
? root 124.172.118.226:18692-14.18.143.59:80 0.000 0.200 KB/sec
通过上面分析,造成网站打不开的原因就是有进程大量发送数据包到某个ip的80端口,导致服务器网络阻塞,但是通过以上的工具,发现此木马相当的狡猾,无法发使用的那个进程。
在使用netstat、ss通过端口获取木马进程失败后
可以使用top工具,此木马在大量发包时肯定会造成资源的消耗
通过锁定发现了两个进程有大量的嫌疑:
通过ps命令找到进程执行的目录:
/usr/bin/sshupdate-bootsystem-insserv
/tmp/GuiBger
通过持续观察发现时有agent进程一闪而逝,在使用find / -name agent 后
# ll /usr/bin/bsd-port/
总用量 1120
-rwxr-xr-x. 1 root root 1135000 12月 25 11:20agent
-rwxr-xr-x. 1 root root 4 12月 25 11:20 agent.conf
-rw-r--r--. 1 root root 69 12月 25 11:50 conf.n
-rw-r--r--. 1 root root 0 10月 9 19:36 getty
此时,相关的可以进程都找到了,通过测试,在网络阻塞是删除sshupdate-bootsystem-insserv、GuiBger两个进程后,网络流量立即正常。而agent则怀疑是与黑客的通信进程,用于接收命令(瞎猜的)或者监控上面连个进程。
找到这3个进程并不意味结束,因为他们很可以是开机自启动程序,所以要在找到他们的开机自起的配置文件,我通过一个脚本实现这个功能:
#!/bin/sh
echo > /tmp/find_init.log
function ergodic(){
forfile in `ls $1`
do
if[ -d $1"/"$file ] #如果 file存在且是一个目录则为真
then
ergodic$1"/"$file
else
localpath=$1"/"$file #得到文件的完整的目录
localname=$file #得到文件的名字
#做自己的工作.
echo $path
rootkit_init=`cat$path | grep sshupdate | head -n 1`
if[ -z $rootkit_init ];then
echo "sed -i ‘s#$rootkit_init##g‘ $path">> /tmp/find_init.log
fi
fi
done
}
INIT_PATH="/etc/init.d"
ergodic $INIT_PATH
cat /tmp/find_init.log
这个脚本功能很简单,通过遍历/etc/init.d目录所有文件,使用grep搜索进程名关键词,将含有这几个进程的文件找出来。
结果如下:
sed -i‘s#/usr/bin/sshupdate-bootsystem-insserv##g‘ /etc/init.d/DbSecurityMdt
sed -i‘s#/usr/bin/sshupdate-bootsystem-insserv##g‘ /etc/init.d/insserv
还真有自启动配置,迅速删除之
在删除这个木马命令时会遇到无法删除的问题,这个很简单:
lsattr /usr/bin/sshupdate-bootsystem-insserv
查看命令的影藏权限
-------i------e- sshupdate-bootsystem-insserv
发现被限制删除操作了
chattr -i /usr/bin/sshupdate-bootsystem-insserv
取消影藏权限,然后再删除,完成。
最后总结,之所以被黑客在linux服务器上挂马,是因为方便开发上线产品,关闭了iptables,这个教训很深刻,所以使用iptables限制服务器的端口非常有必要,如果可能最好selinux开启。当然定时更换各账户密码也很重要!