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的密码。