b>  安全漏洞概述

  经前面分析,网络攻击的一般方法已比较清楚了。为进行第一阶段的攻击,你应该调查多数Internet服务已关闭的安全漏洞。下面的安全漏洞已得到多数厂商修补,并由厂商或CERT公布。然而,类似的漏洞常常在新版本中重新出现,并且许多系统管理员对应付这些漏洞反应迟缓。在此提醒系统管理员应在厂商修补设备时及时将其安装。

  与错误配置不同(本章后面将讲到),这些安全漏洞的产生主要是由于软件程序在网络守护程序中的错误引起的。尽管SATAN中的扫描核心装置不包括各种漏洞,增加对下面漏洞的扫描十分简单。本章最后有增加SATAN中的一个扫描例子。

  1.sendmail -d Debug漏洞

一个sendmail漏洞包括-d命令行选项,该选项允许用户给出一个调试级别。所有的用户必须能调用sendmail发送邮件。通过给出一个很大的值给sendmail的调试选项,一个用户可以覆盖堆栈帧,并导致执行无法预测的命令。这个问题已通过增加对传送值的范围检查而得到修复。SATAN扫描那些包含这一安全漏洞的老版本sendmail。

  2.sendmail Bounce to Program漏洞

  通过指定用户:|/bin/mail amyp@diana.com$#@60;/etc/passwd作为消息发送者,然后给出一个错误接收者,sendmail可以接收该消息。试图将消息发给错误的接收者。一旦发现用用户不存在,就弹回发送者一个错误信息。发送者实际上可能是一个被执行的程序,反而导致一个恶意的行为,例如发送口令文件。sendmail没有灵敏到能防止发送者为一个程序。再次地,SATAN扫描具有这一安全漏洞的老版本sendmail。

  3.sendmail syslog缓冲区问题

  sendmail与其他许多程序一样,利用syslog()调用向syslog守护程序发送信息。专门用于读syslog()写在syslogd守护程序中的缓冲区不希望溢出。syslog()调用可以调用vsprintf()libc调用并使vsprintf()调用的堆栈溢出。 vsprintf()调用已被修改,以防止堆栈帧的溢出。

  一个黑客脚本可以在Sun OS系统上通过向一个SMTP传输的某一适当域写长串信息,导致远程sendmail调用根shell,从而获得根访问权限。

  4.fingerd缓冲问题

  这是一个由著名的Internet“蠕虫”发掘的脆弱点,fingerd用gets()调用读取一行信息,分配给串的缓冲是512字节? 但fingerd程序不检查子程序中读的长度是否大于512字节。如果信息行中的长度比512字节长,数据就写在子程序的堆栈帧返回地址位置上,这样堆栈被重写,允许入侵者创建新shelle及执行命令。

  Internet“蠕虫”向gets()调用写入536字节的信息,溢出24个包含VAX汇编语言代码的字节,在返回main()时,通过调用execve("/bin/sh",0,0)命令执行一个shell。

  5.host.equiv用户名问题

  如果一个用户名在hosts.equiv文件得到,那就说明除了主机名外,在远程主机上的用户可以指定系统上任意一个用户的用户名并获得访问权。例如,如果系统george有一个/etc/hosts.equiv包含行halifax julie,在远程系统halifax上的用户julie可以获取系统george上任意一个用户的权限。这里由ruserol() libc子程序导致的,它试图用一个goto调用影响来自.rhosts检查(check)的代码。

  6.SSL httpd随机化问题

  Netscape Navigator的SSL实现在利用可预测随机数产生器上存在一个缺陷。(SSL代表安全套接字层,一个允许论证与加密的协议--该协议的实现包括一个子程序库,这个库允许一个对标准套接字调用的顺便替代。SSL在本章“SSL”一节中有完整的解释)。因此,即使是用IDEA、RC4-120或Triple-DES加密。密钥长度超过120位,密钥是从范围为16到32位的随机数空间中选出来的。一个对所有随机数的蛮力搜索将很快发现所选择的值,从而发现会话密钥。会话密钥问题在于它们依赖于好的随机数,而且没有一台计算机可以轻松地产生一个好的随机数。这是所有密码系统的脆弱点。RFC1750,安全的随机性需求,试图陈述该问题。有趣的是,Netscape通过Internet为公众提供这些实现(ftp://ftp2.netscape.com/pub/review/rngsrc.tar.z),以强调算法的随机性。

  7.TCP顺序猜测问题

  尽管一个系统已关掉对IP源路由选项的支持,一个入侵者可以哄骗系统相信它是在同一个受托主机通信。入侵者首先用真实IP地址初始化与目标系统的连接,然后退出连接。现在入侵者用一个受托系统的IP地址初始化一条新连接。例如,目标有一个hosts.equiv文件,指出主机B是受托的,入侵者用受托系统的IP地址与目标的remshd端口(shell 512/TCP)建立连接。为了伪装起来,入侵者需要回答(ACK)每个来自目标的TCP包。因为一个新TCP连接选择下一顺序号的算法是可以预测的,入侵者可以轻易的地猜到它。这样,当目标系统向真正的受托系统发响应包时,由于没有活跃的监听程序该包将被丢弃入侵者很快发回合适的响应包并完成TCP连接。然后该入侵者即可以通过rcmds与主机名机制信任的hosts.equiv而获得访问权。

  这个问题的解决方案是使新TCP连接的顺序通过随机化,使其难以被猜中。尽管这不能完全阻止入侵者的猜测,但这的确便得猜中更加困难。多数入侵者无法通过窥探仪直接访问物理网络,因此他们不能利用这一机制抢夺已有的连接。如果他们确实具有物理访问权,就可以抢夺已有的连接。对更深入的分析,见BEllovin(Bellovin,1993)的文章。

  8.ftpd服务器Bource

  ftpd的代理服务特性是允许第三方文件传输。一个用户可以从一个ftpd向另一个远程ftpd请求代理传送。实际上已在RFC需求中被说明的这种特性,当与引用命令相连时,如PORT语句及PASV语句,允许一个用户避免IP访问控制及可跟踪性。

  问题的核心在于用户可以请求远程ftpd服务器向任意一个IP地址与TCP端口发送文件。因此,用户可以请求远程ftpd发送一个包含有效网络协议命令的文件给任意一台主机在任意一个TCP端口上监听的服务程序,导致服务程序相信网络协议连接的源是远程ftpd。

  例如,想像一个在法国的用户想从MIT FTP一个文件,该文件只对美国用户是可用的。MIT ftpd屏闭来自美国以外的IP地址,试图遵守美国对密码材料的出口限制。这个法国用户与美国另外一个ftpd连接,并以匿名用户登录。该法国用户ftp到自己的机器,并置成PASV模式,然后对一个新文件例如foobar做stor,现在,法国用户匿名向该美国ftpd发送一个包含FTP协议语句的文本文件。这些语句包含带有法国ftpd IP地址及端口号的PORT命令,这样引起被动监听民STOR及随后的RETR以检索志需的文件,法国用户现在可以指定一个引用PORT命令给美国ftpd,标识在MIT机器上的FTP控制端口(21)。最后,法国用户用包含命令语句的文本文件指定一个引用RETR命令,并发给美国ftpd。美国ftpd将包含正等待的法国ftpd端口地址及PORT命令的文本文件。发向MIT机器,该文件为foobar的文件。因此,MIT文件被发往法国ftpd,并在那儿存为foobar,而MIT ftpd日志记录显示该文件传给了美国ftpd。

  同样的方法可以通过弹回的ftpd向任意一个系统的任意一个端口发送协议包,且隐藏初始发送方的真实IP地址。有了这种途径,可以做完全不可跟踪的E-mail或Usenet新闻张贴,这还仅仅是利用该漏洞的开始。一个恶意的用户能够完全愚弄任意一个目标系统的IP地址限制。

  避免这一问题的唯一方法是关闭代理功能。有关该漏洞更完整的细节与对ftpd的修正建议请参见文章:ftp://avian.org/random/ftp-attack

  9.portmap转发问题

  portmap程序转发安装请求给rpc.mounted,并导致它们出现在运行portmap系统的IP地址上。这就从实施中消除了NFS服务对IP源的约束。SATAN对这一个portmap脆弱点进行扫描。

  10.全球可写的邮件目录与链接

  当/var/mail目录是全球可写时,任意一个用户可以在该目录中创建文件。如果一个用户创建了一条从用户名至外面文件的链接,sendmail的传送代理,例如/bin/rmail。将向链接的文件写入入境的邮件文件。设想一下,如果用户创建了一条从/var/mail/root到/etc/passwd的链接,则用户可以向根邮送一个新用户名,并使其他出现在/etc/paawd中。/var/mail目录应永远都不是全球可写的。

  11.NFS uid 16-bit问题

  一个NFS服务器依赖于客户端的认证,仅仅检验请求的IP地址,因此对修正NFS服务器脆弱点的声明最多只是一个微小的声明。通常,根访问NFS服务器上的文件需要输出文件中有显式语句,否则,根客户请求必须将它们的uid映射为-2(nobody),这限制了他们对全球可访问文件的访问。

  然而,一个声称客户uid为0+2^16=65536的用户将被NFS接受,并且不重新映射为新uid。当该用户提出请求访问根拥有的文件时,对uid的比较仅对其低16位进行,从而允许该用户伪装成根。

  12.arp -f问题

arp程序用一个-f标记来允许用户指定一个包含arp高速缓存的文件。如果该文件具有不可接受的格式,arp打印出某些内容,以帮助调试。这意味着一个平常用户可以读系统中任何根拥有的文件,只要为使用-f选项的arp指定该文件。

  13.sendmail -C问题

  sendmail允许用户指定一个配置文件。因为任意一个用户可调用sendmail(这是发邮件的需求),并且由于sendmail将uis置为根,这意味着sendmail可以读任意一个根拥有的文件。其安全漏洞在于如果指定的文件是一个不可接受的选择,sendmail将打印出其内容以帮助调试。这意味着通过使用-C选项的sendmail中指定该文件,一个普通用户可以读取系统中的任意一个根拥有的文件。

  14.rwall写问题

  一个用户可以在当前用户的utmp文件中创建一个条目,而该记录实际代表一个文件名。然后调用rwall向所有用户发消息将导致消息被写在该文件中。一个新的/etc/passwd文件或一个a/.hosts文件可以被某一消息写入。这一问题是utmp文件可被普通用户修改这一事实的结果。