实例解析:一则Linux平台下的入侵响应案例
受到攻击
最近,某校校园网管理员接到国外用户投诉,说该校园网中的一台视频服务器正在对外进行非法的TCP 443端口扫描。该视频服务器的地址是192.168.1.10,操作系统为RedHat7.3,对外开放端口为TCP 22、80、443。
然而,管理员在机器上经过重重仔细检查,未观察到任何异常。在此情况下,我们接受请求帮助他们检查机器。
初步检测
我们首先在交换机上对该服务器的网络流量进行了镜像,发现该主机确实存在对外443端口的扫描流量,但是登录到系统上使用netstat -an命令却看不到任何与443端口相关的网络连接,使用psef命令也没有看到系统中有任何可疑的进程。因此,我们怀疑系统中可能被安装了rootkit(注1)。
为了证实这一点,我们将系统中的ps命令拷贝到另外一台可信的操作系统版本相同的机器上(当然如果你在系统安装初始就维护了一张系统命令md5值表的话,那么你现在只需从别的地方拷一个md5sum程序过来就可以),使用md5sum命令对两个ps进行比对发现192.168.1.10上的ps已经被人修改过,因此可以断定系统确实是被入侵并安装了rootkit级的后门程序。
脱机分析
既然系统命令已经被替换,那么在该系统上所做的任何操作都是不可信的,因此接下来我们将被入侵服务器关闭并取下硬盘挂到另外一台主机上面进行分析。
我们首先查找系统中可疑的登录记录,使用如下命令:
more /var/log/secure |grep Accepted (注2)
我们对系统的登录日志进行了查看,在排除了管理员自己的登录记录后,下面这条记录引起了我们怀疑:
Jul 3 14:01:01 vsp-thu sshd[14042]: Accepted password for news from 82.77.188.56 port 1143 ssh2
这条记录显示在7月3号的下午14:01:01秒,有人使用news账号从82.77.188.56成功登录了系统,经查,82.77.188.56是一个罗马尼亚的地址。根据对方直接使用news账号登录这一点来看,对方攻击成功的时间应该早于7月3号14点,因为系统默认情况下news账号是内置账号没有密码并无法登录,但是我们查看/etc/shadow文件却发现如下记录:
news:$ChmaBoHa$ha.JnyJkIryk5wc5DeWzR1:12967:0:99999:7:::
这说明news账号被入侵者加设了密码,并改成了可以远程登录的账号,之所以做这样的修改,一般是入侵者想留下一个隐藏的登录账号,方便日后登录。我们继续检查系统的其他日志却再没发现任何可疑的纪录,很显然入侵者已经对系统的日志文件进行了修改。
继续深入
线索到这里似乎中断。而我们所知道的仅仅是入侵者可能来自罗马尼亚,他修改了系统的news账号权限,并篡改了系统日志。这些已知信息看起来对整个事件的处理并没有太大的帮助。但是我们有一个很有用的信息,就是攻击发生的大概时间可以定位在7月3号下午2点左右,有了这个时间我们就可以使用find命令来查找出这个时间段里面系统中被修改的文件有哪些?命令格式如下:
Find / -ctime +nprint 〉find.log (注3)
在输出的结果中我们发现入侵者在/var/opt下建了一个名为. (点后面是一个空格字符)(注4)的目录,而该目录下包含表1中所显示子目录和文件。
对这些程序进行分析后,知道其功能如下:
表1 入侵者在/var/opt下建立的名为.的目录
1、z程序是用来清除系统日志中相关信息的,例如:
./z 82.77.188.56这条命令执行后,系统中所有与82.77.188.56这个地址有关的日志信息全部会被清除掉;
2、cata目录下是一个IRC的后门程序,运行后系统会自动连接到以下4个IRC服务器,然后入侵者只要登录相应的IRC聊天室就能向这台机器发送控制指令,4个IRC聊天室服务器地址为:
server 194.134.7.195 6662
server 195.197.175.21 7000
server 161.53.178.240 6667
server 66.198.160.2 8080;
3、login程序是用来替换系统登录进程的木马程序,可以记录登录账号和密码;
4、kaka目录里放置的是用来替换系统命令的相应程序,就是这个目录里的程序使得我们在系统上看不出有任何异常;
5、atp目录下放置的是专门用来扫描https服务和攻击openssl的程序,国外发过来的443端口的扫描投诉就是因为这个目录里的openssl-too程序引起的。这个攻击程序是2005年4月19号被公布出来的,利用的是编号为CAN-2002-0656的openssl程序的漏洞;
另外,在7月3号被入侵者修改的文件还包括以下两个:
/etc/httpd/conf/httpd.conf(注5)
/etc/httpd/logs/ssl_request_log(注6)
由此可见:
1、入侵者修改了httpd.conf文件,注销了httpd.conf的443端口(跟管理员确认了不是他们自己注销的),大概是不想漏洞被其他人利用;
2、入侵者删除了ssl_request_log日志中的7月3号中午12点到14点的所有纪录(因为ssl_request_log并不算系统日志,所以不能用z程序直接清除,入侵者只能手动删除相应时间段的日志记录)。
继续检查相应日志我们又发现在root目录下的.bash_history(注7)文件中有如下一条命令纪录:./z 82.77.188.240
揭开谜团
有了上面这些信息,我们就可以对本次入侵事件做出如下分析:
1、入侵时间:从目录生成时间和入侵者删除ssl_request_log日志中相应时间段记录的情况来看入侵的大概时间应该在7月3号中午13点左右;
2、利用的漏洞:利用漏洞扫描程序对系统进行扫描发现系统中存在多个可被利用的漏洞,但是从入侵者关闭apache的443端口服务和修改ssl_request_log日志文件来看,他利用的是apache的mod_ssl模块的漏洞(CAN-2002-0656)入侵系统的;
3、攻击地址来源:攻击地址来源有两个为82.77.188.56和82.77.188.240(但是这两个地址很有可能也是被入侵者控制的机器);
4、入侵者进入系统后做了以下这些操作:
在系统中安装了通过IRC聊天服务器控制的后门程序修改了系统中news账号的权限和密码;
替换系统中一系列的系统命令;
替换了系统本身的login程序,并获得root的密码(注8);
利用攻击程序对外进行443端口的扫描与攻击;
使用清除程序清除了系统日志中的相关记录。
解决办法
由于系统内核级的程序已经被替换,我们建议用户备份所需数据后重新安装系统,并执行以下操作:
1、安装更高版本的操作系统;
2、安装相应的系统补丁程序;
3、修改系统管理员的密码,并检查同网段内其他使用相同密码的主机。(因为入侵者已经通过木马程序获得了管理员的口令);
4、安装更高版本的apache程序,并关闭不必要服务端口;
5、使用防火墙限制ssh 22端口的登录来源地址。
(作者单位为CERNET应急响应组)
注释
注1:简单点说rootkit就是一种黑客的工具包,它里面通常包括:修改过的系统命令程序、后门程序、攻击程序、日志清除程序等,黑客使用rootkit程序就是为了在被入侵的主机上隐藏自己的攻击行为。
注2:/var/log/secure 记录了系统账号的登录信息,而grep Accepted可以有效地过滤掉那些不成功的登录记录。
注3:这个命令的意思就是查找“/”目录下的所有n天前被修改过的文件,使用>管道符是为了将查询结果输出到find.log文件中,便于后面的分析。
注4:linux系统中以“.”开头的文件和目录都隐藏文件,需要使用ls -al命令才能查看到,而点后面加空格的目录名字很容易在ls -al显示结果中被我们忽略过去)
注5:httpd.conf是apche程序的主配置文件,在这个文件里注释掉443端口,将导致apche无法正常提供443端口的https服务。
注6:ssl_request_log文件是apache的一个日志文件,它记录着用户基于https协议的访问信息。
注7:默认情况下各相应用户主目录下的.bash_history文件记录保存着500条该用户在系统中曾经执行过的操作命令。
注8:既然入侵者已经使用了清除程序清除了系统日志,为什么还在root的.bash_history中留下了./z 82.77.188.240命令的记录呢?这就要从.bash_history的记录机制说起了,用户每次登录系统后所做的任何操作并不会直接就存储到了.bash_history文件中,而是保存在一个变量中,只有当用户退出登录以后,这个变量的值才会被写入到.bash_history文件中。这就说明入侵者最后一次是通过82.77.188.240这个地址使用root账号登录系统的,他在运行./z 82.77.188.240这个命令时./bash_history中还没有这条记录,所以也没有被清除,当他退出系统后,变量中的./z 82.77.188.240就被写入到.bash_history中了。因此我们可以断定入侵者已经通过假冒的login程序获得了root的密码。