网络安全 频道

Linux环境下发现并阻止系统攻击

三、
    一个笑话里说一个小偷进入到一家,偷光了屋子里所有的东西,但是却用一个相同的东西代替了偷走的东西。但是在网络世界里,这却是可能发生的。一个攻击者利用一个系统漏洞非法入侵进入到你的系统后,当你使用ps命令列出系统中的所有的进程时,却看不到什么异常的证据。你查看你的password文件,一切也是那么的正常。到底发生了什么事情呢?当系统进入到你的系统以后,第一步要做的事情就是取代系统上某些特定的文件:如netstat命令等。当你使用netstat -a命令时,就不会显示系统攻击者存在的信息。当然攻击者将替代所有的可能泄露其存在的文件在linux环境下一个有名的这样的工具包名字是rootkit。通过在任何一个搜索引擎搜索关键字rootkit可以得到数以百计的结果。这些工具一般来说包括:
   ps netstat top .....
    由于这些经过文件已经被取代。所以简单的利用ls命令查看这些文件是看不出什么破绽的。有若干种方法你可以验证系统文件的完整性。如果你安装的是Red Hat, Caldera, TurboLinux或任何使用RPM的系统。你可以利用RPM来验证系统文件的完整性: 首先你应该查明你的那些你需要查看的文件来自哪个软件包,使用rpm命令你可以查明某个文件属于某个包: # rpm -qf /bin/netstat net-tools-1.51-3 然后,可以扫描整个rpm包来查看那些发生了改变。对没有发生改变的包使用该命令将没有任何输出信息,如下所示:
   rpm -V net-tools
    将netstat的5.2版本的二进制可执行文件替换为6.0的版本以后再使用该命令的结果为:
   .......T /bin/netstat
    这说明/bin/netstat/文件已经被修改。若我使用rpm -qf测试ps和top命令可以得到其属于包procps,然后再验证包procps的完整性。下面是一个被''黑''的站点的结果:
   # rpm -qf /bin/ps procps.2.0.2-2
   # rpm -V procps
   SM5..UGT /bin/ps
   ..UGT /usr/bin/top
    攻击者入侵到系统中,并且用自己的ps及top命令替代了我们系统中的命令。从而使管理员看不到其运行的进程,也许是一个sniffer来监听所有的用户所有进出网络的数据并找寻到密码信息。 下面是一个小的script来扫描你系统的所有的rpm库,并检查所有的包是否被篡改。但是应该注意的是并不是所有该scripts报告的问题都是说明该系统文件被攻击者破坏。例如你的password文件一般肯定和你安装系统时是不同的:
   #!/bin/bash
   #
   # Run through rpm database and report inconsistencies
   # for rpmlist in `rpm -qa`
   # These quotes are back quotes
   do echo '' ----- $rpmlist -----'' ;
   rpm -V $rpmlist done > /tmp/rpmverify.out
    当你运行该scripts时,输出被定向到文件/tmp/rpmverify.out你可以使用less命令查看该文件。但是由于文本文件如:/etc/passwd, /etc/inetd.conf等很可能显示为被修改过。但是你如何知道这些是管理员自己修改的还是入侵者修改的呢?方法是:
    在你确保你的系统是干净的,没有被攻击者入侵时,你为这些系统文件创建指纹信息。在你怀疑你的系统被入侵时使用这些这些指纹信息来判定系统是否被入侵。创建文件的指纹信息是通过命令md5sum来实现的:
   # md5sum /etc/passwd d8439475fac2ea638cbad4fd6ca4bc22 /etc/passwd
  
   # md5sum /bin/ps
   6d16efee5baecce7a6db7d1e1a088813 /bin/ps
  
   # md5sum /bin/netsat
   b7dda3abd9a1429b23fd8687ad3dd551 /bin/netstat
    这些数据是我的系统上的文件的指纹信息。不同的系统上的文件的 指纹信息一般是不同的,你应该是使用md5sum来计算自己系统文件的指纹信息。下面是一些你应该创建指纹信息的文件;
   /usr/bin/passwd /sbin/portmap /bin/login /bin/ls
   /usr/bin/top /etc/inetd.conf /etc/services
    通过指纹信息你可以决定是否有系统文件被篡改。
  四、
    上一节中说过,当netstat,ls等命令被修改,从而发现系统已经被入侵,下面该怎么办?根据你系统的重要性的不同,你有很多种选择。但是我推荐对用户目录,password及其他关键的系统文件进行备份。然后重新安装系统。但是不要随便就将备份的文件拷贝到新系统,因为攻击者可能在这些文件中隐藏一些非法的东西。
    也可以不重新安装系统,而是通过TCP wrapper来限制对主机的访问,并且关闭非关键的网络服务。然后更新被影响的包。重新''干净''的启动系统是很重要的,但是要实现这点并不容易。若你发现procps或net-tools包已经被攻击者修改,第一件事情是重新安装干净的包来替换被攻击者做了手脚留下后门的包。一般最好从你的系统发布者处得到最新的包来重新安装。
    一旦攻击者进入到系统其就将在系统上存放一些工具并且将之隐藏起来,使你不容易发现。下面是一个被攻击者入侵的系统的实例。当系统被攻击者入侵,服务器被限制网络访问,并且替代所有的受影响的包。然后就需要通过仔细查看log文件来发现重复的企图进入系统。查看/etc/passwd文件,发现一个不属于合法的用户。进入到该用户的目录下:/home/jon,运行 ''ls -l''得到如下的内容:
   . .. .. .bashrc .bash_history .screenrc emech.tar.gz
    除了一个名字为emech.tar.gz的文件以外,看不出什么异常现象。但是仔细观察,你就会发现系统有两个''..''目录。(指该子目录的上一级目录)是的确很奇怪,我使用命令''cd ..''我就会进入到/home目录。原来其中子目录名字是在两个点后面有一个空格。(''.. '')你可以通过如下命令发现:
   # cd /home/jon
   # echo .* | cat -v
   . .. .. .bashrc .bash_history .screenrc emech.tar.gz
    仔细观察可以发现每个子目录都是被一个空格隔开,而在第二个“..”和.bashrc之间有两个空格。这就
  意味着第二个''..''子目录其实为点-点-空格。下面进入到该目录:
  
   # cd ''.. ''
0
相关文章