漏洞发现与解决方案
来源:www.secnumen.com
网站漏洞
随着web应用的日益增多,如电子商务,交流论坛,公司网站等等都使用web作为应用的平台,如何保证web应用的安全性也成为当前日益重要、必须解决的问题。
WEB服务器存在的主要漏洞包括物理路径泄露,CGI源代码泄露,目录遍历,执行任意命令,缓冲区溢出,拒绝服务,条件竞争和跨站脚本执行漏洞,和CGI漏洞有些相似的地方,但是更多的地方还是有着本质的不同。
下面我就开始一一介绍这些漏洞及危害:
ü     物理路径泄露:
物理路径泄露一般是由于WEB服务器处理用户请求出错导致的,如通过提交一个超长的请求,或者是某个精心构造的特殊请求,亦或是请求一个WEB服务器上不存在的文件。这些请求都有一个共同特点,那就是被请求的文件肯定属于CGI脚本,而不是静态HTML页面。
还有一种情况,就是WEB服务器的某些显示环境变量的程序错误的输出了WEB服务器的物理路径,这应该算是设计上的问题。  

ü     CGI源代码泄露:
CGI源代码泄露的原因比较多,例如大小写,编码解码,附加特殊字符或精心构造的特殊请求等都可能导致CGI源代码泄露。

ü     目录遍历:
目录遍历对于WEB服务器来说并不多见,通过对任意目录附加“../”,或者是在有特殊意义的目录附加“../”,或者是附加“../”的一些变形,如“..\”或“..//”甚至其编码,都可能导致目录遍历。前一种情况并不多见,但是后面的几种情况就常见得多,去年非常流行的IIS二次解码漏洞和UNICODE解码漏洞都可以看作是变形后的编码。


ü     执行任意命令:
执行任意命令即执行任意操作系统命令,主要包括两种情况。一是通过遍历目录,如前面提到的二次解码和UNICODE解码漏洞,来执行系统命令。另外一种就是WEB服务器把用户提交的请求作为SSI指令解析,因此导致执行任意命令。

ü     缓冲区溢出:
缓冲区溢出漏洞想必大家都很熟悉,无非是WEB服务器没有对用户提交的超长请求没有进行合适的处理,这种请求可能包括超长URL,超长HTTP Header域,或者是其它超长的数据。这种漏洞可能导致执行任意命令或者是拒绝服务,这一般取决于构造的数据。


ü     拒绝服务:
拒绝服务产生的原因多种多样,主要包括超长URL,特殊目录,超长HTTP Header域,畸形HTTP Header域或者是DOS设备文件等。由于WEB服务器在处理这些特殊请求时不知所措或者是处理方式不当,因此出错终止或挂起。

ü     条件竞争:
这里的条件竞争主要针对一些管理服务器而言,这类服务器一般是以system或root身份运行的。当它们需要使用一些临时文件,而在对这些文件进行写操作之前,却没有对文件的属性进行检查,一般可能导致重要系统文件被重写,甚至获得系统控制权。

ü     跨站脚本执行漏洞:
由于网页可以包含由服务器生成的、并且由客户机浏览器解释的文本和 HTML 标记。如果不可信的内容被引入到动态页面中,则无论是网站还是客户机都没有足够的信息识别这种情况并采取保护措施。攻击者如果知道某一网站上的应用程序接收跨站点脚本的提交,他就可以在网上上提交可以完成攻击的脚本,如JavaScript、VBScript、ActiveX、HTML 或 Flash 等内容,普通用户一旦点击了网页上这些攻击者提交的脚本,那么就会在用户客户机上执行,完成从截获帐户、更改用户设置、窃取和篡改 cookie 到虚假广告在内的种种攻击行为。


ü     SQL注入:
对于和后台数据库产生交互的网页,如果没有对用户输入数据的合法性进行全面的判断,就会使应用程序存在安全隐患。用户可以在可以提交正常数据的URL或者表单输入框中提交一段精心构造的数据库查询代码,使后台应用执行攻击着的SQL代码,攻击者根据程序返回的结果,获得某些他想得知的敏感数据,如管理员密码,保密商业资料等。

发现方法
介绍了这么多web服务器漏洞,那怎样去发现漏洞呢?一种方法是当黑客利用这些漏洞攻击你的服务器后你就自然明白了;还有是主动去发现漏洞:就是使用隐患扫描工具来对你的服务器进行扫描,从而发现漏洞。好的隐患扫描工具能够模拟黑客的行为,对系统设置进行攻击测试,以帮助管理员在黑客攻击之前,找出网络中存在的漏洞。这样的工具可以远程评估你的网络的安全级别,并生成评估报告,提供相应的整改措施。
扫描工具
工具选择
目前,市场上有很多隐患扫描工具,按照不同的技术(基于网络的、基于主机的、基于代理的、C/S的)、不同的特征、不同的报告方法,以及不同的监听模式,可以分成好几类。不同的产品之间,漏洞检测的准确性差别较大,这就决定了生成的报告的有效性上也有很大区别。 选择正确的隐患扫描工具,对于提高你的系统的安全性,非常重要。
每个系统都有漏洞,不论你在系统安全性上投入多少财力,攻击者仍然可以发现一些可利用的特征和配置缺陷。这对于安全管理员来说,实在是个不利的消息。但是,多数的攻击者,通常做的是简单的事情。发现一个已知的漏洞,远比发现一个未知漏洞要容易的多,这就意味着:多数攻击者所利用的都是常见的漏洞,这些漏洞,均有书面资料记载。
这样的话,采用适当的工具,就能在黑客利用这些常见漏洞之前,查出网络的薄弱之处。如何快速简便地发现这些漏洞,这个非常重要。
漏洞,大体上分为软件编写错误造成的漏洞,软件配置不当造成的漏洞两大类, 隐患扫描工具均能检测以上两种类型的漏洞。隐患扫描工具已经出现好多年了,安全管理员在使用这些工具的同时,黑客们也在利用这些工具来发现各种类型的系统和网络的漏洞。
那隐患扫描工具的衡量因素是什么那?
决定是否采用隐患扫描工具来防范系统入侵是重要的第一步。当您迈出了这一步后,接下来的是:如何选择满足您公司需要的合适的隐患扫描技术,这同样也很重要。以下列出了一系列衡量因素:
ü     底层技术 :
比较漏洞扫描工具,第一是比较其底层技术。你需要的是主动扫描,还是被动扫描;是基于主机的扫描,还是基于网络的扫描,等等。一些扫描工具是基于Internet的,用来管理和集合的服务器程序,是运行在软件供应商的服务器上,而不是在客户自己的机器上。这种方式的优点在于检测方式能够保证经常更新,缺点在于需要依赖软件供应商的服务器来完成扫描工作。
扫描古城可以分为"被动"和"主动"两大类。被动扫描不会产生网络流量包,不会导致目标系统崩溃,被动扫描工具对正常的网络流量进行分析,可以设计成"永远在线"检测的方式。与主动扫描工具相比,被动扫描工具的工作方式,与网络监控器或IDS类似。
主动扫描工具更多地带有"入侵"的意图,可能会影响网络和目标系统的正常操作。他们并不是持续不断运行的,通常是隔一段时间检测一次。
基于主机的扫描工具需要在每台主机上安装代理(Agent)软件;而基于网络的扫描工具则不需要。基于网络的扫描工具因为要占用较多资源,一般需要一台专门的计算机。
如果网络环境中含有多种操作系统,您还需要看看扫描其是否兼容这些不同的操作系统(比如Microsoft、Unix以及Netware等)。

ü     管理员所关心的一些特性 :
通常,漏洞扫描工具完成以下功能:扫描、生成报告、分析并提出建议,以及数据管理。在许多方面,扫描是最常见的功能,但是信息管理和扫描结果分析的准确性同样很重要。另外要考虑的一个方面是通知方式:当发现漏洞后,扫描工具是否会向管理员报警?采用什么方式报警?
对于漏洞扫描软件来说,管理员通常关系心以下几个方面:

① 报表性能好;
② 易安装,易使用;
③ 能够检测出缺少哪些补丁;
④ 扫描性能好,具备快速修复漏洞的能力;
⑤ 对漏洞及漏洞等级检测的可靠性;
⑥ 可扩展性;
⑦ 易升级性;
⑧ 性价比好;

ü     漏洞库:
只有漏洞库中存在相关信息,扫描工具才能检测到漏洞,因此,漏洞库的数量决定了扫描工具能够检测的范围。
然而,数量并不意味着一切,真正的检验标准在于扫描工具能否检测出最常见的漏洞?最根本的在于,扫描工具能否检测出影响您的系统的那些漏洞?扫描工具中有用的总量取决于你的网络设备和系统的类型。你使用扫描工具的目的是利用它来检测您的特定环境中的漏洞。如果你有很多Netware服务器,那么,不含Netware漏洞库的扫描工具就不是你的最佳选择。
当然,漏洞库中的攻击特性必须经常升级,这样才能检测到最近发现的安全漏洞。

ü     易使用性:
一个难以理解和使用的界面,会阻碍管理员使用这些工具,因此,界面友好性尤为重要。不同的扫描工具软件,界面也各式各样,从简单的基于文本的,到复杂的图形界面,以及Web界面。

ü     扫描报告:
对管理员来说,扫描报告的功能越来越重要,在一个面向文档的商务环境中,你不但要能够完成你的工作,而且还需要提供书面资料说明你是怎样完成的。事实上,一个扫描可能会得到几百甚至几千个结果,但是这些数据是没用的,除非经过整理,转换成可以为人们理解的信息。这就意味着理想情况下,扫描工具应该能够对这些数据进行分类和交叉引用,可以导到其他程序中,或者转换成其他格式(比如CSV,HTML,XML,MHT,MDB,EXCEL以及Lotus等等),采用不同方式来展现它,并且能够很容易的与以前的扫描结果做比较。

ü     分析与建议:
发现漏洞,才完成一半工作。一个完整的方案,同时将告诉你针对这些漏洞将采取哪些措施。一个好的漏洞扫描工具会对扫描结果进行分析,并提供修复建议。一些扫描工具将这些修复建议整合在报告中,另外一些则提供产品网站或其它在线资源的链接。
漏洞修复工具,它可以和流行的扫描工具结合在一起使用,对扫描结果进行汇总,并自动完成修复过程。

ü     分析的准确性:
只有当报告的结果是精确的,提供的修复建议是有效的,一份包含了详细漏洞修复建议的报告, 才算是一份优秀的报告。一个好的扫描工具必须具有很低的误报率(报告出的漏洞实际上不存在)和漏报率(漏洞存在,但是没有检测到)。

ü     安全问题:
因扫描工具而造成的网络瘫痪所引起的经济损失,和真实攻击造成的损失是一样的,都非常巨大。一些扫描工具在发现漏洞后,会尝试进一步利用这些漏洞,这样能够确保这些漏洞是真实存在的,进而消除误报的可能性。但是,这种方式容易出现难以预料的情况。在使用具备这种功能的扫描工具的时候,需要格外小心,最好不要将其设置成自动运行状态。
扫描工具可能造成网络失效的另一种原因,是扫描过程中,超负荷的数据包流量造成拒绝服务(DOS,Denial Of Service)。为了防止这一点,需要选择好适当的扫描设置。相关的设置项有:并发的线程数、数据包间隔时间、扫描对象总数等,这些项应该能够调整,以便使网络的影响降到最低。一些扫描工具还提供了"安全扫描"的模板,以防止造成对目标系统的损耗。

ü     性能:
扫描工具运行的时候,将占用大量的网络带宽,因此,扫描过程应尽快完成。当然,漏洞库中的漏洞数越多,选择的扫描模式越复杂,扫描所耗时间就越长,因此,这只是个相对的数值。提高性能的一种方式,是在企业网中部署多个扫描工具,将扫描结果反馈到一个系统中,对扫描结果进行汇总。

ü     隐患扫描工具的价格策略:
商业化的扫描工具通常按以下几种方式来发布器授权许可证:按IP地址授权,按服务器授权,按管理员授权。不同的授权许可证方式有所区别。

总的来说在现在的互联网环境中,威胁无处不在。2003年1-3季度,CERT协调中心就收到超过114,000个漏洞事件报告,这个数字超过2002年的总和,这表明,此类事件在不断增长中。为了防范攻击,第一件事就是在黑客发动攻击之前,发现网络和系统中的漏洞,并及时修复。
介绍
不久前各大安全媒体(包括各类安全杂志与网站)纷纷抢先报道2004年世界上最热门的75只黑客/安全工具,其中就有N-Stealth,Nikto,Whisker的名字。
N-Stealth号称是世界上最顶尖的WEB服务器安全扫描工具N-Stealth。能在win98/ME/2000/XP/2003系统下正常地运行,测试扫描目前几乎所有WEB类型的服务器,包括某些网络设备的WEB控制平台,支持大多数的WEB服务应用程序(如: CGI,ColdFusion,ASP,Lotus Domino,FrontPage,PHP等),能进行超过30000种的WEB服务器漏洞测试(注: 免费版最多也就只能进行16000种漏洞测试),能进行SANS/FBI的头10&20漏洞扫描方式,全面支持HTTP与HTTPS(SSL),带有系统辨别探测功能,带避开IDS(入侵测试系统)捕捉的功能,全面支持使用代理服务器,容易解读的图形报告生成模块,报告书外带各种漏洞的解决方案(注:此功能仅限于正式版才能使用),支持虚拟主机,远程扫描测试时你的机器不再需要安装附加软件,准确的错误筛选机制,带有缓冲区溢出测试引擎,带有EMAIL报警功能(MailAlert,注:此功能仅限于正式版才能使用),漏洞数据库能进行智能升级(DB update,注:此功能仅限于正式版才能使用)。

Nikto也是一款非常全面的web扫描器,而且是一款开放源码的扫描软件。
能对web服务器多种安全项目进行测试的扫描软件,能在200多种服务器上扫描出2000多种有潜在危险的文件、CGI及其他问题,支持Linux/BSD/Unix/Windows系统。它也使用LibWhiske库,但通常比Whisker更新的更为频繁。

Whisker/Libwhiske是rCGI缺陷扫描软件和库,也是一款开放源码的扫描软件。Whisker是一款非常好的HTTP服务器缺陷扫描软件,能扫描出大量的已知安全漏洞,特别是些危险的CGI漏洞,支持Linux/BSD/Unix/Windows系统。Libwhisker是一个用perl编写的由Whiskerr使用的程序库,通过它你可以创建自己HTTP扫描器。
这几种工具都比较好用,但最好还是用N-Stealth,功能不错,使用简单。下面我就以N-Stealth来介绍。
请先安装N-Stealth软件。下面介绍N-Stealth的使用:
首先在N-Stealth启动后的主画面输入你要扫描的网站或地址,如下图所示,
我们在地址栏输入本地主机名,端口设置为80。
     然后按下程序界面上的Start Scan 按钮来开始扫描。当扫描完成后显示下列结果:
     你按界面上Summary按钮可以看简报,按Generate按钮生成html或xml报告。打开报告可看到以下结果:
     可以看到N-Stealth发现了7个漏洞。漏洞的详细介绍可以在报表中的列表中看到。

解决方案
当发现了这些漏洞后我们任何解决呢?通常的方法就是在服务器软件的网站上下载最新补丁。但这种方法存在着缺陷,因为服务器软件的开发商在内部测试中不可能将系统中的所有bug 找出来,即使发布了软件后,被发现的漏洞也只会是其中的很小一部分,将来还会不断的有新的安全问题出现,这就是说黑客有可能通过没有找出的漏洞攻击你。既然这个方法有缺陷,那还有没有更好的方法?有!这就是AppRock应用防火墙。AppRock应用防火墙可以阻止将应用行为用于恶意目的的浏览器和HTTP攻击。这些攻击包括利用特殊字符或通配符修改数据的数据攻击,设法得到命令串或逻辑语句的逻辑内容攻击,以及以账户、文件或主机为主要目标的目标攻击。
我们安装AppRock应用防火墙后,使用AppRock应用防火墙动态策略学习,在可信任用户与应用互动时学习合法应用逻辑,然后建立有效的针对Web内容交互的安全策略数据库,通过建立的安全策略数据库对应用服务器进行保护。下面是使用AppRock应用防火墙后用N-Stealth扫描工具进行扫描的结果:
     从上图我们可以看到使用AppRock应用防火墙进行保护后漏洞数为0。从前面的举例与对比中,使用AppRock应用防火墙可以更好的使用和保护你的web。