Linux下初步后门查找
作者: 来源: 添加时间:2006-5-23 8:29:029) syslogd后门
检查/dev目录,查找是否有诸如"/dev/ptys"之类的文件,用"ls -l"看结果是否为
-rw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptys
而不是
crw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptys
或
brw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/***
如果有,而启动syslogd时用lsof发现它被打开,说明syslogd被植入木马。如果
strings syslogd | grep "/dev/pty"有输出,或者直接strings syslogd发现可疑路径和
文件名,说明已经被植入木马。
10) killall后门
检查/dev目录,查找是否有诸如"/dev/ptyp"之类的文件,用"ls -l"看结果是否为
-rw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyp
而不是
crw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyp
或
brw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/***
如果有,而执行killall时用lsof发现它被打开,说明killall被植入木马。如果killall
接受"-/"选项(原有代码中没有这个选项),那么killall肯定被修改过。如果
strings killall | grep "/dev/pty"有输出,或者直接strings killall发现可疑路径和
文件名,说明已经被植入木马。
11) pop3d后门
pop3d-trojan.tar.gz
12) sshd后门
sshd后门把ssh发行包里的login.c作了修改,加入内置的帐号/口令。执行
"strings sshd",发现诸如"hax0r3d"这样的字符串,说明sshd已被植入木马
13) cgi后门
在cgi-bin/目录下检查这类cgi程序,尤其是perl写的脚本
14) find后门
检查/dev目录,查找是否有诸如"/dev/ptyr"之类的文件,用"ls -l"看结果是否为
-rw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyr
而不是
crw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyr
或
brw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/***
如果有,而执行find时用lsof发现它被打开,说明find被植入木马。如果find接受"-/"
选项(原有代码中没有这个选项),那么find肯定被修改过。如果
strings find | grep "/dev/pty"有输出,或者直接strings find发现可疑路径和文件名,
说明已经被植入木马。
15) chfn后门
16) chsh后门
4. 守护进程后门
binary木马后门是把系统上原有的二进制可执行程序换成特洛伊(trojan)木马程序。另一
类后门是在系统上隐藏一些可执行程序,这些可执行程序原来系统上并不存在。按照网络
协议来分类,它们有如下类别
1) UDP后门
启动一个守护进程,侦听某个UDP端口,收到特定UDP报文后启动一个shell。例如
udp-backdoor-v2.0.tgz,就是这类后门的安装包。可用"netstat -na -P udp"查看这类后
门。
2) TCP后门
诸如bdoor.c之类的小程序。执行"netstat -na -P tcp" 查看这类后门是否在活动。
3) Raw Socket后门
这类后门打开一个raw socket,通过发ICMP包来进行网络通讯。
如果已对文件系统用TripWire之类的工具作了备份和记录,检测这类后门的第一步当然是
用这类工具检查是否增加了新文件,特别是可执行文件。如果有,需仔细检查,它极可能
是后门程序。
另一方面,在系统上安置守护进程后门后,攻击者要做的事就是如何启动它。如果没有启
动,后门毫无用处。Unix系统上守护进程通过rc脚本来启动,对网络守护进程,还可以
通过inetd 超级服务器来启动。相应地,检测这类后门也依据这些,并结合这类后门大都
要进行网络通讯的特征
1) 检查rc脚本
对Solaris系统,在/etc目录下有这样一些rc脚本
rcS、rc0、rc1、rc2、rc3、rc5、rc6
对Linux,rc脚本在/etc/rc.d目录下,它们是rc、rc.local、rc.sysinit。
对Solaris系统,rc[S-6]脚本名最后一个数字或字母表示运行级别。/etc目录下另有
rc0.d、rc1.d、rc2.d、rc3.d、rcS.d五个目录,目录名中'.'前面的数字或字母同样是表
示运行级别。rc[S-6] 脚本的作用是,按运行级别,对相应的rc[S-6]目录下文件名以'S'
打头的脚本文件,赋给参数start,启动相应的守护进程,以'K'打头的脚本文件,赋给参
数stop,关闭相应的守护进程。其中的例外是,rc5和rc6脚本启动或关闭的是rc0.d中
的守护进程。此外,rcS、rc0、rc1、rc5、rc6脚本还进行文件系统安装或拆卸工作。特
别是 rcS,它是系统启动时必须执行的,它对文件系统进行检查和安装,进行各项系统配
置。
对Linux系统,/etc/rc.d目录下有rc0、rc1、rc2、rc3、rc4、rc5、rc6这七个目录。
/etc/rc.d/rc脚本依据运行级别象Solaris上一样通过rc[0-6]目录中的脚本启动或关闭
守护进程。同时,对每个运行级别,rc.local脚本都将执行。rc.sysinit脚本系统启动时
必须执行,它检查和安装文件系统,进行各项系统配置。
检查上面的几个脚本文件,如果发现文件被修改,加有别的东西执行别的程序,必须仔细
检查这些程序,很可能是启动某个后门程序。
上面所列的rc?.d目录中的脚本文件,对Solaris,都是到/etc/init.d目录中某个脚本文
件的符号连接或者硬链接,对Linux,都是到/etc/rc.d/init.d目录中某个脚本文件的符
号连接或者硬链接。这些rc?.d目录中的脚本文件名为SNN***或KNN***,NN为数字,它
的大小表明脚本执行的次序,***为字符串,表示服务名。对脚本文件名的 *** 部分,在
Solaris上大致为下面这些
ANNOUNCE MOUNTFSYS PRESERVE RMTMPFILES ab2mgr
afbinit audit autofs autoinstall buildmnttab
cachefs.daemon cachefs.root cacheos cacheos.finish cron
devlinks drvconfig dtlogin inetinit inetsvc
init.dmi init.snmpdx initpcmcia keymap lp
mkdtab nfs.client nfs.server nscd pcmcia
power rootusr rpc savecore sendmail
spc standardmounts sysetup sysid.net sysid.sys
syslog ufs_quota utmpd volmgt xntpd
在Linux上,大致为下面这些
anacron apmd arpwatch atd crond functions
gpm halt httpd httpd.orig identd inet
ipchains ipsec irda kdcrotate keytable killall
kudzu linuxconf lpd named netfs network
nfs nfslock pcmcia portmap random rstatd
rusersd rwalld rwhod sendmail single snmpd
syslog xfs ypbind yppasswdd ypserv
仔细检查这些rc?.d 目录,如果发现某个脚本文件不是到/etc/rc.d/init.d或/etc/init.d
目录中某个脚本文件的符号连接、硬链接,或者出现与上面文件名规则不相符的脚本文件,
或者增加了某个脚本文件,它很可能是用来启动后门进程的,必须仔细检查这些脚本启动
的程序。
确信rc?.d目录中脚本文件都是到/etc/rc.d/init.d或/etc/init.d目录中某个脚本文件
的符号连接、硬链接后,再cd到/etc/rc.d/init.d或/etc/init.d目录下。检查init.d
目录下的脚本文件。如果某个脚本启动的服务进程与名称不符,或者脚本文件的内容被修
改,加有别的什么东西启动了别的进程,必须仔细检查,极可能是被用来启动后门进程。
除此之外,与二进制木马后门相交*,对init.d目录下脚本文件启动的每一个程序本身,
都要仔细检查,运行起来看看有没有什么不正常的现象,防止它有可能被换成木马。对于
init.d目录中的脚本文件启动的程序,它们的二进制文件大都在/usr/bin、
/usr/local/bin、/sbin、/usr/sbin目录下。
2) 检查/etc/inetd.conf配置文件
注意/etc/inetd.conf中的语法
#
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
形参。检查/etc/inetd.conf,特别是最后两个字段,是否除通常的服务外启动了别的服务。
如果有的话,仔细检查这项服务,很可能是在启动后门程序。
同样,与binary木马后门相交*,对inet.conf所列的每项服务,都要对相应程序进行检
查,很有可能它们被换成木马程序。
3) 使用netstat和lsof命令
如果后门程序作为守护进程启动,通常它侦听某个端口,通过该端口与外网连接。攻击者
借此获取对系统的访问。
对Linux系统,用"netstat -nap"命令列出网络状态信息,特别注意
状态,而系统又没有在这个端口启动服务,从
它肯定是后门程序。如果
端口上配置服务,从
常系统配置允许使用的客户程序,仔细检查该程序,它属于不正常的行为,很可能是后门
程序。
对Solaris系统,先用"netstat -na"列出网络状态信息,取出
local_host_addr:port。再执行"lsof -i tcp@local_host_addr:port"命令,或者对UDP
协议执行"lsof -i udp@local_host_addr:port"命令,这样就得到了netstat命令没有列
出的
local_host_addr 是本机的IP地址或主机名,也可以简化为 tcp:port 或 udp:port,还
可以加上 -T[q、s、w 任意组合] 选项列出队列长度、状态、窗口大小信息。
对于raw socket,用"lsof -n | grep raw"命令进行检查。
5. cron后门
除了以守护进程方式启动后门,还可以利用cron机制启动后门,下面就是植入这类后门的
一个脚本
-------------------------------------------------------------------------------
#! /sbin/sh
# Which port should the shell start on
PORT="31337"
# Where (and under what name) to hide the socket demon
HIDE="/dev/ptyp"
# Time when the demon should start (0-23 h, military time)
START="2"
# Same like above but when should it stop
STOP="3"
if [ "`whoami`" != "root" ]; then
echo "you had to be root to do this!"
exit 1
fi
echo "#define PORT " $PORT > backdoor.c
cat >> backdoor.c << 'EOF'
... ...
EOF
gcc -O3 -o $HIDE backdoor.c
if [ -f $HIDE ]; then
echo "Compiling done"
rm -f backdoor.c
else
echo "Unable to compile"
rm -f backdoor.c
exit 1
fi
echo "STARTTIME = "$START"; ENDTIME = "$STOP"h"
echo "*" $START "* * *" $HIDE > crontabfile
echo "*" $STOP "* * * killall -9 "$HIDE >> crontabfile
crontab crontabfile
rm -f crontabfile
-------------------------------------------------------------------------------
(这个脚本有问题,如果这样做了,会破坏原来的/var/spool/cron/crontabs/root)