下面经过一个案例介绍下当一个服务器被rootkit入侵后的处理思路和处理过程,rootkit攻击是Linux系统下最多见的攻击手段和攻击方式。html
这是一台客户的门户网站服务器,托管在电信机房,客户接到电信的通知:因为此服务器持续对外发送数据包,致使100M带宽耗尽,因而电信就切断了此服务器的网络。此服务器是Centos5.5版本,对外开放了80、22端口。
从客户那里了解到,网站的访问量并不大,因此带宽占用也不会过高,而耗尽100M的带宽是绝对不可能的,那么极有多是服务器遭受了流量攻击,因而登陆服务器作详细的检测。java
在电信人员的配合下经过交换机对该服务器的网络流量进行了检测,发现该主机确实存在对外80端口的扫描流量,因而登陆系统经过“netstat –an”命令对系统开启的端口进行检查,可奇怪的是,没有发现任何与80端口相关的网络链接。接着使用“ps –ef”、“top”等命令也没有发现任何可疑的进程。因而怀疑系统是否被植入了rootkit。
为了证实系统是否被植入了rootkit,咱们将网站服务器下的ps、top等命令与一个同版本可信操做系统下的命令作了md5sum校验,结果发现网站服务器下的这两个命令确实被修改过,由此判定,此服务器已经被入侵而且安装了rootkit级别的后门程序。web
因为服务器不停向外发包,所以,首先要作的就是将此服务器断开网络,而后分析系统日志,寻找攻击源。可是系统命令已经被替换掉了,若是继续在该系统上执行操做将变得不可信,这里能够经过两种方法来避免这种状况,第一种方法是将此服务器的硬盘取下来挂载到另一台安全的主机上进行分析,另外一种方式就是从一个同版本可信操做系统下拷贝全部命令到这个入侵服务器下某个路径,而后在执行命令的时候指定此命令的完整路径便可,这里采用第二种方法。
咱们首先查看了系统的登陆日志,查看是否有可疑登陆信息,执行以下命令:apache
more /var/log/secure |grep Accepted
经过对命令输出的查看,有一条日志引发了咱们的怀疑:浏览器
Oct 3 03:10:25 webserver sshd[20701]: Accepted password for mail from 62.17.163.186 port 53349 ssh2
这条日志显示在10月3号的凌晨3点10分,有个mail账号从62.17.163.186这个IP成功登陆了系统,mail是系统的内置账号,默认状况下是没法执行登陆操做的,而62.17.163.186这个IP,通过查证,是来自爱尔兰的一个地址。从mail账号登陆的时间来看,早于此网站服务器遭受攻击的时间。tomcat
接着查看一下系统密码文件/etc/shadow
,又发现可疑信息:安全
mail:$1$kCEd3yD6$W1evaY5BMPQIqfTwTVJiX1:15400:0:99999:7:::
很明显,mail账号已经被设置了密码,而且被修改成可远程登陆,之因此使用mail账号,猜测多是由于入侵者想留下一个隐蔽的账号,以方便往后再次登陆系统。
而后继续查看其余系统日志,如/var/log/messages
、/var/log/wtmp
均为空文件,可见,入侵者已经清理了系统日志文件,至于为什么没有清空/var/log/secure
文件,就不得而知了。bash
到目前为止,咱们所知道的状况是,有个mail账号曾经登陆过系统,可是为什么会致使此网站服务器持续对外发送数据包呢?必需要找到对应的攻击源,经过替换到此服务器上的ps命令查看系统目前运行的进程,又发现了新的可疑:服务器
nobody 22765 1 6 Sep29 ? 4-00:11:58 .t
这个.t程序是什么呢,继续执行top命令,结果以下:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 22765 nobody 15 0 1740m 1362m 1228 S 98.3 91.5 2892:19 .t
从输出可知,这个t程序已经运行了4天左右,运行这个程序的是nobody用户,而且这个t程序消耗了大量的内存和cpu,这也是以前客户反映的网站服务器异常缓慢的缘由,从这个输出,咱们获得了t程序的进程PID为22765,接下来根据PID查找下执行程序的路径在哪里:
进入内存目录,查看对应PID目录下exe文件的信息:
[root@webserver ~]# /mnt/bin/ls -al /proc/22765/exe lrwxrwxrwx 1 root root 0 Sep 29 22:09 /proc/22765/exe -> /var/tmp/…/apa/t
这样就找到了进程对应的完整程序执行路径,这个路径很隐蔽,因为/var/tmp
目录默认状况下任何用户可读性,而入侵者就是利用这个漏洞在/var/tmp
目录下建立了一个“…”的目录,而在这个目录下隐藏着攻击的程序源,进入/var/tmp/…/
目录,发现了一些列入侵者放置的rootkit文件,列表以下:
[root@webserver ...]#/mnt/bin/ls -al drwxr-xr-x 2 nobody nobody 4096 Sep 29 22:09 apa -rw-r--r-- 1 nobody nobody 0 Sep 29 22:09 apa.tgz drwxr-xr-x 2 nobody nobody 4096 Sep 29 22:09 caca drwxr-xr-x 2 nobody nobody 4096 Sep 29 22:09 haha -rw-r--r-- 1 nobody nobody 0 Sep 29 22:10 kk.tar.gz -rwxr-xr-x 1 nobody nobody 0 Sep 29 22:10 login -rw-r--r-- 1 nobody nobody 0 Sep 29 22:10 login.tgz -rwxr-xr-x 1 nobody nobody 0 Sep 29 22:10 z
经过对这些文件的分析,基本判断这就是咱们要找的程序攻击源,其中:
1)z程序是用来清除系统日志等相关信息的,例如执行:
./z 62.17.163.186
这条命令执行后,系统中全部与62.17.163.186有关的日志将所有被清除掉。
2)在apa目录下有个后门程序t,这个就是以前在系统中看到的,运行此程序后,此程序会自动去读apa目录下的ip这个文件,而ip这个文件记录了各类ip地址信息,猜测这个t程序应该是去扫描ip文件中记录的全部ip信息,进而获取远程主机的权限,可见这个网站服务器已是入侵者的一个肉鸡了。
3) haha目录里面放置的就是用来替换系统相关命令的程序,也就是这个目录下的程序使咱们没法看到操做系统的异常状况。
4)login程序就是用来替换系统登陆程序的木马程序,此程序还能够记录登陆账号和密码。
到这里为止,服务器上遭受的攻击已经基本清晰了,可是入侵者是如何侵入这台服务器的呢?这个问题很重要,必定要找到入侵的根源,才能从根本上封堵漏洞。
为了弄清楚入侵者是如何进入服务器的,须要了解下此服务器的软件环境,这台服务器是一个基于java的web服务器,安装的软件有apache2.0.63
、tomcat5.5
,apache
和tomcat
之间经过mod_jk
模块进行集成,apache
对外开放80端口,因为tomcat
没有对外开放端口,因此将问题集中到apache
上面。
经过查看apache
的配置发现,apache
仅仅处理些静态资源请求,而网页也以静态页面居多,因此经过网页方式入侵系统可能性不大,既然漏洞可能来自于apache
,那么尝试查看apache
日志,也许能发现一些可疑的访问痕迹,经过查看access.log
文件,发现了以下信息:
62.17.163.186 - - [29/Sep/2013:22:17:06 +0800] "GET http://www.xxx.com/cgi-bin/awstats.pl?configdir=|echo;echo;ps+-aux%00 HTTP/1.0" 200 12333 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.1) Gecko/20121010 Firefox/2.0" 62.17.163.186 - - [29/Sep/213:22:17:35 +0800] "GET http://www.xxx.com/cgi-bin/awstats.pl?configdir=|echo;echo;cd+/var/tmp/.../haha;ls+-a%00 HTTP/1.0" 200 1626 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.8.1) Gecko/20121010 Firefox/2.0"
至此,发现了漏洞的根源,原来是awstats.pl
脚本中configdir
的一个漏洞,经过了解此服务器的应用,客户确实是经过一个Awstats
的开源插件来作网页访问统计,经过这个漏洞,攻击者能够直接在浏览器上操做服务器,例如查看进程、建立目录等。经过上面第二条日志能够看出,攻击者正常浏览器执行切换到/var/tmp/.../haha
目录的操做。
这个脚本漏洞挺可怕的,不过在Awstats
官网也早已给出了修补的方法,对于这个漏洞,修复方法很简单,打开awstats.pl
文件,找到以下信息:
if ($QueryString =~ /configdir=([^&]+)/i) { $DirConfig=&DecodeEncodedString("$1"); } 修改成以下便可: if ($QueryString =~ /configdir=([^&]+)/i) { $DirConfig=&DecodeEncodedString("$1"); $DirConfig=~tr/a-z0-9_-/./a-z0-9_-/./cd; }
经过上面逐步分析和介绍,此服务遭受入侵的缘由和过程已经很是清楚了,大体过程以下:
(1) 攻击者经过Awstats脚本awstats.pl文件的漏洞进入了系统,在/var/tmp目录下建立了隐藏目录,而后将rootkit后门文件传到这个路径下。
(2) 攻击者经过植入后门程序,获取了系统超级用户权限,进而控制了这台服务器,经过这台服务器向外发包。
(3) 攻击者的IP地址62.17.163.186多是经过代理过来的,也多是攻击者控制的其余肉鸡服务器。
(4) 攻击者为了永久控制这台机器,修改了系统默认账号mail的信息,将mail账号变为可登陆,而且设置了mail账号的密码。
(5) 攻击者在完成攻击后,经过后门程序自动清理了系统访问日志,毁灭了证据。
经过对这个入侵过程的分析,发现入侵者的手段仍是很是简单和广泛的,虽然入侵者删除了系统的一些日志,可是仍是留下了不少可查的踪影,其实还能够查看用户下的.bash_history文件,这个文件是用户操做命令的历史记录。
因为系统已经文件被更改和替换,此系统已经变得彻底不可信,所以建议备份网站数据,从新安装系统,基本步骤以下:
(1) 安装稳定版本的操做系统,删除系统默认的而且不须要的用户。
(2) 系统登陆方式改成公钥认证方式,避开密码认证的缺陷。
(3) 安装更高版本的apache和最新稳定版本的Awstats程序。
(4) 使用Linux下的Tcp_Wrappers防火墙,限制ssh登陆的源地址。