上一节中说过,当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 "".. ""
然后列出该目录下的内容:
#ls
randfiles mech.set mech.pid checkmech cpu.memory
mech.help mech.usage mech mech.levels emech.users
psdevtab
下一步我们再查看是否其还在其他地方隐藏了文件:
# find / -user jon -print
除了/home/jon目录以外,还发现如下的内容;
/usr/local/bin/.httpd
/tmp/cl
/tmp/.l/bcast
/tmp/.l/.l
/tmp/.l/imapd
/tmp/.l/log
/tmp/.l/pscan
/tmp/.l/pscan.c
/tmp/.l/rpc
/tmp/.l/slice2
/tmp/.l/sniffer
/tmp/.l/sxploit
/tmp/.l/thc
/tmp/.l/ufs.c
这个入侵者已经在系统上安装了Sniffers、端口扫描器,他给自己营造了一个很好的""窝"" 。在查看中,还在合法的用户的目录下发现了一个可怕的名为""tcp.log""的文件。文件该文件有几百行长,包括每一次telnet 及 ftp 出入该系统的连接!除了通告在该文件中出现的可能已经被入侵的机器管理员应该重新安装系统以外,我同样告诉他们需要重新系统的所有的用户的口令。
下面有一些例子来帮助你搜索隐藏的危险。首先查看位于用户目录的具有""suid""或""guid""的文件。这些文件的可执行属性位为s而不是x。如:
#ls -s /usr/bni/passwd
-r-s--x--x 1 root root 10704 Apr 14 1999 /usr/bin/passwd
属性第四位的 ""s"" 表示该命令被执行时,该进程的实际有效用户ID就变为root用户。为了允许普通用户修改自己的密码,这是必须的。第七位的x若为s则表示别的组的用户若运行该程序则该程序则具有用户所有组的有效组ID。使程序能冒充特定的用户或者组并不是一件有害的事情。但是一般来说非管理用户在其目录下不应该具root-suid 程序。我们可以使用下面的命令来查寻这样的文件:
# find /home -perm -4000 -o -perm -2000 -print
下一步我们继续寻找入侵者留下的程序和文件,所以需要一个快速的寻找隐藏目录的方法。下面的方法就是寻找如"".kde""的隐藏目录。你也可以找到如"".. ""或“...""等目录:cracker.
# find / -type d -name "".*"" -print
""-type d""选项指仅仅列出目录。这个命令不会不会将"".""或""..""列出。
作为一个好的系统管理者,为了击败攻击者的攻击行动,最好的方法是了解攻击者的工作原理和机制。它们使用了那些工具,它们如何操作入侵等等。所以深入理解掌握我这里讲解的各种网络工具是很有必要的。
上个星期,我用实例的方式说到了了一个攻击者使用sniffer监听网络流来搜集用户名和密码。下面我们就详细说明sniffer是如何工作的。简单的说,sniffer是一个使你能检测你的网络接口接收到所有的数据报。一般情况下,计算机仅仅接受目的地址是自身的数据报,而sniffer使网络接口进入杂错模式,从而可以接受网卡收到的所有的数据报。
若你运行ifconfig eth0命令,会得到下面的结果:
eth0 Link encap:Ethernet HWaddr 00:C0:4F:E3:C1:8F
inet addr:192.168.22.2 Bcast:192.168.22.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:49448 errors:0 dropped:0 overruns:0 frame:0
TX packets:33859 errors:0 dropped:0 overruns:0 carrier:0
collisions:6 txqueuelen:100
Interrupt:10 Base address:0x300
打开两个终端,一个终端里运行sniffer器-sniffit;
# sniffit -i
另外一个虚拟终端里你可以再次运行ifconfig eth0。你将会发现输出中有下面的内容:
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
注意和上面相比较,增加了一个单词""PROMISC"" 这是杂错模式(promiscuous mode)的缩写,
sniffit是一个轻量级的,基于终端的sniffer器。你可以从http://reptile.rug.ac.be/~coder/sniffit/sniffit.html得到它。
另外一个类似的sniffer是netwatch,你可以从http://www.slctech.org/~mackay/netwatch.html得到它。
如果你不希望在系统中安装另外的sniffer,你可以使用系统中带有的一个工具:tcpdump 这个工具虽然不如前面两个工具那么华丽,但是她可以完成所有同样的功能。
# tcpdump host www.linuxjournal.com -l | tee /tmp/tcpdump.out
其中-l指示tcpdump将输出数据存进入一个文件中。下面是输出的内容:
16:41:49.101002 www2.linuxjournal.com.www > marcel.somedomain.com.1432: F
2303148464:2303148464(0) ack 1998428290 win 16352
16:41:49.101206 marcel.somedomain.com.1432 > www2.linuxjournal.com.www: . ack
1 win 32120 (DF)
16:41:50.001024 www2.linuxjournal.com.www > marcel.somedomain.com.1429: F
1805282316:1805282316(0) ack 1988937134 win 16352
16:41:50.001215 marcel.somedomain.com.1429 > www2.linuxjournal.com.www: . ack
1 win 32120 (DF)
16:41:50.840998 www2.linuxjournal.com.www > marcel.somedomain.com.1431: F
1539885010:1539885010(0) ack 1997163524 win 16352
16:41:50.841198 marcel.somedomain.com.1431 > www2.linuxjournal.com.www: . ack
1 win 32120 (DF)
16:41:51.494356 marcel.somedomain.com.1429 > www2.linuxjournal.com.www: P
1:335(334) ack 1 win 32120 (DF)
16:41:51.497003 marcel.somedomain.com.1433 > www2.linuxjournal.com.www: S
2019129753:2019129753(0) win 32120
(DF)
16:41:51.671023 www2.linuxjournal.com.www > marcel.somedomain.com.1429:
R
Linux系统中可以得到有很多种的sniffer。攻击者在入侵系统以后,也许会使用修改的ps命令来隐藏其运行的sniffer器。或者将其改为一个看上去很正常的进程的名字。
在Linux环境下,比较著名的后门程序名字是rootkit,在各个搜索引擎都可以找到相关资料。你可以尝试使用这些工具来促进你对攻击者使用工具的了解