Linux下后门查找初步
1. 帐号后门
检查/etc/passwd、/etc/shadow文件中如下帐号是否已经拥有合法登录shell、登录口令
bin、daemon、adm、lp、sync、shutdown、halt、mail、news、uucp、games、
gopher、ftp、nobody、xfs、named、gdm、sys、nuucp、listen
/etc/passwd文件格式如下
username : password : uid : gid : comment : home_directory : shell
建议对/etc/passwd、/etc/shadow文件做备份,保留在其他主机或可移动介质上,定期对
比,检查是否增加了异常帐号。
2. $HOME/.rhosts后门
趁系统干净的时候,记录、备份/etc/hosts.equiv和$HOME/.rhosts文件,定期扫描检查
是否增加了这类文件以及原有文件内容是否改变
3. binary木马后门
二进制木马后门是将系统二进制可执行文件替换成特洛伊(trojan)木马文件来达到放置后
门的效果。可能是获取了源代码,修改后重新编译。或者借助其他技术直接向二进制程序
文件中植入代码。
对这类后门检测的第一步是检查时间戳与校验和,假设已经对文件用类似TripWire这类工
具作了时间戳与校验和记录。如果没有使用过TripWire,用"ls -l"和"stat"命令检查时
间戳,是否有明显不协调的文件。如果存在,极可能被替换成特洛伊木马植入后门了,仔
细作进一步查证。
对于网络应用程序,运行后用netstat和lsof命令查看是否存在不正常的行为。尤其是查
看有无异常端口被打开,有无异常文件被打开。
作进一步查证时,第一步是用strings命令查找程序中有无异常字符串。第二步,如有必
要,需要将现有二进制代码与确认干净的二进制代码进行比较。
对于这类后门,重点检查这样一些程序
in.ftpd、in.telnetd、in.rshd、in.rlogind、in.rexecd、in.talkd、in.tnamed、
in.uucpd、in.tftpd、in.fingerd、sadmind、rquotad、rpc.rusersd、rpc.sprayd、
rpc.rwalld、rpc.rstatd、rpc.rexd、rpc.ttdbserverd、rpc.cmsd、kcms_server、ufsd、
fs.auto、cachefsd、kerbd、in.lpd、gssd、dtspcd、in.comsat
/etc/init.d目录中启动脚本调用的二进制可执行程序
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
除了上面所列的,还要注意下面这些后门
1) login后门
如果"strings /usr/bin/login | grep crypt"有输出,很可能是木马。
2) ls、dir、vdir后门
ls、dir、vdir后门的用意在于隐藏文件和目录。如果执行这些命令时可以加"-/"选项(原
有代码中不支持这个选项),则说明已经被植入木马了。
检查/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/***
如果有,说明已经有木马了。如果strings ls | grep "/dev/pty"有输出,或者直接
strings ls发现可疑路径和文件名,说明已经有木马。对dir、vdir也一样。
3) du后门
du后门同样是用来隐藏文件和目录的。如果命令行中执行这个命令可以加"-/"选项(原有
代码中没有这个选项),那么说明已经被植入木马了。检查/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/***
如果有,说明已经有木马了。如果strings du | grep "/dev/pty"有输出,或者直接
strings du发现可疑路径和文件名,说明已经有木马。
4) ifconfig后门
ifconfig后门就是把下面一行代码注释掉
if ( ptr->flags & IFF_PROMISC ) printf( "PROMISC " );
以去掉网卡混杂模式显示。如果"strings /sbin/ifconfig | grep PROMISC"没有输出,
ifconfig肯定已被修改过了。
5) netstat后门
检查/dev目录,检查是否存在"/dev/ptyq"一类的文件,用"ls -l"看结果是否为
-rw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyq
而不是
crw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyq
或
brw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/***
如果有,而执行netstat时用lsof发现它被打开,说明netstat被植入木马。如果命令行
中netstat接受"-/"选项(原有代码中没有这个选项),那么,netstat肯定被修改过了。
如果strings netstat | grep "/dev/pty"有输出,或者直接strings netstat发现可疑
路径或文件名,说明已经被修改过。
netstat木马程序的一个实现不支持"-p"选项,而系统自身的netstat实现支持"-p"选项。
因此如果发现netstat不支持"-p"选项,肯定netstat被修改过。另外,Linux系统的"-p"
选项表示打印出进程号(pid)和程序名(program name)信息,而Solaris系统上"-p"表示打
印出ARP Cache信息。如果发现与这一点不符,netstat就被修改过。
6) ps后门
检查/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/***
如果有,而执行ps时用lsof发现它被打开,说明ps被植入木马。如果命令行中ps接受"-/"
选项(原有代码中没有这个选项),那么ps肯定被修改过。如果
strings ps | grep "/dev/pty"有输出,或者直接strings ps发现可疑路径和文件名,说
明已经被植入木马。
7) top后门
检查/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/***
如果有,而执行top时用lsof发现它被打开,说明ps被植入木马。如果命令行中top接
受"-/"选项(原有代码中没有这个选项),那么top肯定被修改过。如果
strings top | grep "/dev/pty"有输出,或者直接strings top发现可疑路径和文件名,
说明已经被植入木马。
8) tcpd后门
tcpd中有一段代码,这段代码对远程主机名进行查询和检查,拒绝可疑连接。木马的目的
是使这段代码失效。
检查/dev目录,查找是否有诸如"/dev/ptyq"之类的文件,用"ls -l"看结果是否为
-rw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyq
而不是
crw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/ptyq
或
brw-rw-rw- 1 root tty 2, 164 May 6 1998 /dev/***
如果有,而启动tcpd时用lsof发现它被打开,说明tcpd被植入木马。如果tcpd接受"-/"
选项(原有代码中没有这个选项),那么tcpd肯定被修改过。如果
strings tcpd | grep "/dev/pty"有输出,或者直接strings tcpd发现可疑路径和文件名,
说明已经被植入木马。
9) 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'
... ...
- 最新评论
