一、问题现象
事情起因是突然发现一台oracle服务器外网流量跑的很高,明显和平常不一样,最高达到了200M左右,这明显是不可能的,因为oracle根本不与外界交互,第一感觉是服务器被入 侵了。被人当做肉鸡了,在大量发包。
这是台centos7.5 64位的系统,已经在线上运行了70多天了。
二、排查问题
排查问题的第一步是查看此服务器的网络带宽情况,通过监控系统显示,此台服务器占满了200M的带宽,已经持续了半个多小时,接着第二步登录服务器查看情况,通过ssh登录服务器非常慢,这应该就是带宽被占满的缘故,不过最后还是登录上了服务器,下面是一个top的结果;
可以看到,有一个异常的进程占用资源比较高,名字不仔细看还真以为是一个Web服务进程。但是这个Nginx1确实不是正常的进程。
接着,通过pe -ef命令又发现了一些异常:
发现有个/etc/nginx1进程,然后查看了这个文件,是个二进制程序,基本断定这就是木 马文件。
同时又发现,/usr/bin/dpkgd/ps -ef这个进程非常异常,因为正常情况下ps命令应该在/bin目录下才对。于是进入/usr/bin/dpkgd目录查看了一下情况,又发现了一些命令,如下图所示:
由于无法判断,用了最笨的办法,找了一台正常的机器,查看了一下ps命令这个文件的大小,发现只有80K左右,又检查了/usr/bin/dpkgd/ps,发现文件大小不对,接着又检查了两个文件的md5,发现也不一样。
初步判断,这些文件都伪装的外壳命令,其实都是有后门的木 马.
继续查看系统可疑目录,首先查看定时任务文件crontab,并没有发现异常,然后查看系统启动文件rc.local,也没有什么异常,接着进入/etc/init.d目录查看,又发现了比较奇怪的脚本文件DbSecuritySpt、selinux,如下图所示:
这两个文件在正常的系统下是没有的,所以也初步断定是异常文件。
接着继续查看系统进程,通过ps -ef命令,又发现了几个异常进程,一个是/usr/bin/bsd-port,另一个是/usr/sbin/.sshd,这两个进程时隐时现,在出现的瞬间被我抓到了。
查看发现/usr/bin/bsd-port是个目录,进入目录,发行了几个文件,如下图:
有getty字眼,这不是终端管理程序吗,它用来开启终端,进行终端的初始化,设置终端,这里出现了终端,马上联想到是否跟登录相关,于是紧接着,又发现了/usr/sbin/.sshd,很明显,这个隐藏的二进制文件.sshd就是个后 门文件,表面像sshd进程,其实完全不是。
最后,又查看了木 马最喜欢出现的目录/tmp,也发现了异常文件,从名字上感觉好像是监控木 马程序的,如下图所示:
检查到这里,基本查明了系统中可能出现的异常文件,当然,不排除还有更多的,下面的排查就是查找更多可疑文件,然后删除即可。
三、查杀病毒文件
要清楚系统中的牧马病毒,第一步要做的是先清除这些可疑的文件,这里总结了下此类植入牧马各种可疑的文件,供大家参考:
检查是否有下面路径文件
cat /etc/rc.d/init.d/selinux cat /etc/rc.d/init.d/DbSecuritySpt ls /usr/bin/bsd-port ls /usr/bin/dpkgd
检查下面文件大小是否正常,可以和正常机器中的文件做比对:
ls -lh /bin.NETstat ls -lh /bin/ps ls -lh /usr/sbin/lsof ls -lh /usr/sbin/ss
如果发现有上面可疑文件,需要全部删除,可删除的文件或目录如下:
rm -rf /usr/bin/dpkgd (ps netstat lsof ss) #这是加壳命令目录 rm -rf /usr/bin/bsd-port #这是木 马程序 rm -f /usr/bin/.sshd #这是木 马后门 rm -f /tmp/gates.lod rm -f /tmp/moni.lod rm -f /etc/rc.d/init.d/DbSecuritySpt #这是启动上述描述的那些木 马后的变种程序 rm -f /etc/rc.d/rc1.d/S97DbSecuritySpt #删除自启动 rm -f /etc/rc.d/rc2.d/S97DbSecuritySpt rm -f /etc/rc.d/rc3.d/S97DbSecuritySpt rm -f /etc/rc.d/rc4.d/S97DbSecuritySpt rm -f /etc/rc.d/rc5.d/S97DbSecuritySpt rm -f /etc/rc.d/init.d/selinux #这个selinux是个假象,其实启动的是/usr/bin/bsd-port/getty程序 rm -f /etc/rc.d/rc1.d/S99selinux #删除自启动 rm -f /etc/rc.d/rc2.d/S99selinux rm -f /etc/rc.d/rc3.d/S99selinux rm -f /etc/rc.d/rc4.d/S99selinux rm -f /etc/rc.d/rc5.d/S99selinux
上面的一些命令(ps netstat lsof ss)删除后,系统中这些命令就不能使用了,怎么恢复这些命令呢,有两种方式:一个是从别的同版本机器上拷贝一个正常的文件过来,另一个是通过rpm文件重新安装这些命令。
例如,删除了ps命令后,可以通过yum安装ps命令:
[root@server ~]#yum -y reinstall procps
其中,procps包中包含了ps命令。
[root@server ~]#yum -y reinstall net-tools [root@server ~]#yum -y reinstall lsof [root@server ~]#yum -y reinstall iproute
上面三个命令是依次重新安装netstat、lsof、ss命令。
四、找出异常程序并杀死
所有可疑文件都删除后,通过top、ps等命令查看可疑进程,全部kill掉即可,这样进程kill之后,因为启动文件已经清除,所以也就不会再次启动或者生成牧马文件了。
这个案例是个典型的文件级别rootkit植入系统导致的,最后检查植入的原因是由于这台oracle服务器有外网IP,并且没设置任何防火墙策略,同时,服务器上有个oracle用户,密码和用户名一样,这样一来,黑 客通过服务器暴露在外网的22端口,然后通过暴力破解,通过这个oracle用户登录到了系统上,进而植入了这个rootkit病毒。