原文地址:http://net.zdnet.com.cn/network_security_zone/2007/0824/468077.shtml
随着Web应用程序的增多,随之而来的就是这些Web应用程序所带来的安全漏洞。不遵从规范化的编码指导,会使企业、员工以及企业的客户面对严重的安全风险,遭到各种恶意攻击。
我们将向大家介绍Open Web Application Security Project(开放式Web应用程序安全项目,OWASP)10要素,以及OWASP建议大家在软件开发生命周期中应该嵌入的标准化方法。
商业风险
现在的企业都在向客户提供通过浏览器访问企业信息的功能,同时集成Web服务的应用程序也越来越多,这些都导致企业所面临的风险不断增加。这并不代表开发人员没有认真的对待程序开发工作,只是当Web应用程序的数量越来越多,其潜在的隐患也会越来越频繁的暴露在互联网下。根据OWASP的观点:
“当企业发布了一个Web应用程序,它们就是在邀请全球的网民向其发送HTTP请求。而攻击内容也可以随着这些正常的HTTP请求穿过防火墙,过滤系统,系统平台上的安全措施以及网络中的入侵检测系统,而不被企业所发现。这意味着企业的Web应用程序代码本身就是企业安全围墙的一部分。随着企业所采用的Web应用程序数量和复杂度的增加,企业的安全围墙将更多的暴露在网络中。”
目前,企业所开发的很多新应用程序都是Web应用程序。另外,Web服务也越来越频繁的被用来集成Web应用程序或与Web应用程序进行交互。所带来的问题就是,Web应用程序和服务的增长已经超越了程序开发人员所接受的安全培训以及安全意识的范围。
随着存在安全隐患的Web应用程序数量的增长,OWASP也总结出了Web应用程序的十大脆弱点。在这个10要素列表中,不但包括了Web应用程序的脆弱性介绍,还包括了OWASP的建议内容,帮助程序开发人员和企业尽量避免这些脆弱点给企业系统带来的风险。
OWASP 10要素中还包括了一个指南,帮助企业决定该如何向客户提供信息。比如联邦贸易委员会(FTC)就在2003年1月的商业案例文档中将这个列表作为了信息安全的参考内容。同年,FTC还将OWASP 10要素列表作为指控Guess公司没有尽力做好客户的信息安全保护工作的参考资料。
10要素列表
以下列表来自OWASP 10要素项目:(OWASP,2006):
一、Unvalidated Input 非法输入——在数据被输入程序前忽略对数据合法性的检验,是一个常见的编程漏洞。随着我们对Web应用程序脆弱性的调查,非法输入的问题已经成为了大多数Web应用程序安全漏洞的一个主要特点。
二、Broken Access Control 失效的访问控制——大部分企业都非常关注对已经建立的连接进行控制,但是,允许一个特定的字符串输入可以让攻击行为绕过企业的控制。
三、Broken Authentication and Session Management 失效的账户和线程管理——良好的访问控制并不代表万事大吉了。企业还应该保护用户的密码,会话令牌,账户列表以及其它任何可以给攻击者提供有利信息帮助他们攻击企业网络的内容。
四、Cross Site Scripting (XSS) Flaws 跨站点脚本攻击——XSS是一种常见的攻击。当攻击脚本被嵌入企业的Web页面或其它可以访问的Web资源中,当没有保护能力的台式机访问这个页面或资源时,脚本就会被启动。这种问题可以影响成百上千的员工以及企业客户的终端电脑。
五、Buffer Overflows 缓存溢出——缓存溢出问题一般出现在较早的编程语言如C语言编写的程序中。这种编程错误其实也是由于没有很好的确定输入内容在内存中的位置所草成的。在本文的后续部分中,我们会讲到,通过一些高级的编程环境,如Java以及.Net,可以很好的控制此类问题。
六、Injection Flaws 注入式攻击——如果没有成功的阻止带有语法含义的输入内容,有可能导致对数据库信息的非法访问。比如在Web表单中输入的内容,应该保持简单,并且不应该还有可被执行的代码内容。
七、Improper Error Handling 异常错误处理——当错误发生时,向用户提交错误提示是很正常的事情,但是如果提交的错误提示中包含了太多的内容,就有可能会被攻击者分析出网络环境的结构或配置。
八、Insecure Storage 不安全的存储——对于Web应用程序来说,妥善的保存密码,用户名,以及其它与身份验证有关的信息是非常重要的工作。对这些信息进行加密是非常有效的方式,但是一些企业会采用那些未经实践验证的加密解决方案,其中就可能存在漏洞。
九、Application Denial of Service 程序拒绝服务——与拒绝服务攻击(DoS)类似,应用程序的DoS攻击利用大量非法用户抢占应用程序资源,导致合法用户无法使用该Web应用程序。
十、Insecure Configuration Management 不安全的配置管理——有效的配置管理过程可以为Web应用程序和企业的网络架构提供良好的保护。 针对以上列表,我有两点要说明一下。首先,这个列表并不能涵盖企业的Web应用程序中的全部脆弱点,它只是OWASP的成员组织最常遇到的问题,因此也是你应该着重检查的内容。
另外,这个列表并没有先后顺序。它只是根据每个OWASP成员根据自己企业的Web应用程序环境的脆弱性所排列的。
跨站点脚本是Web程序很常见的漏洞,不论是个人用户还是商业用户,都会由于这种漏洞而遭受攻击。这里我们将详细介绍跨站点脚本的脆弱性,以及由此使得个人用户和企业用户所面临的风险。最后还会介绍如何消除或者抵御这类攻击。
我们将着重介绍Web应用程序中最大的脆弱性领域――跨站点脚本(XSS)。XSS的脆弱性由来已久,然而,随着越来越多的蠕虫和病毒利用这一脆弱性进行破坏活动,企业系统中与XSS相关的安全风险也越来越明显。
什么是XSS?
XSS漏洞一般出现在可以注入代码的Web程序中。利用这一漏洞的脚本可能来自服务器,但是并不在服务器上执行,而是在客户端的工作站上执行。目前有三种基本的XSS漏洞攻击:映射,存储和基于DOM(文档对象模块)
其中反射攻击最为常见。这类漏洞经常出现在网页中可以动态输入内容并返回结果的区域。搜索页面就是一个很典型的例子。当攻击者发现了存在这一漏洞的网页,他只需要将脚本输入文本框。当页面重新显示整段文字时,脚本便被执行了。
在很多情况下,黑客通过一些社会学工程来引诱用户点击经过特殊处理的链结 ,从而导致攻击发生。这种方式可以让黑客将脚本注入到网页中。(Jeremiah Grossman, "Cross-site Scripting Worms and Viruses," April 2006)
存储型弱点正如其名字所表示的意思。攻击者将恶意代码提交到有XSS漏洞的网站,或者网站的某个经常被用户访问的部分。比如一些社会网站以及用户提交评论的页面。当受害者打开相应的页面时,恶意脚本就会在用户不知情的情况下自动执行。因为浏览器认为这个存储型恶意脚本是来自受信的Web网站或服务器的。
以下是一个非常简单的存储型脚本攻击的例子。
脚本一般会插入到表单中,这在很多论坛或者拥有大量用户的服务器上很常见。比如黑客会将以下代码通过正常的发贴方式上传到在线论坛:
<script>alert('Hello World')</script>
当不知情的用户打开这个帖子,代码就会在用户的电脑上执行。虽然我给出的这段代码没有任何有害的内容,但是如果代码中包含了以下内容,就不那么乐观了:
◆显示许可权限错误信息
◆提示用户输入密码
◆将用户的密码通过邮件发送到黑客设定的服务器上
最后一种XSS弱点是基于DOM的攻击。作为AJAX的一部分,DOM是一种:
“让程序员可以访问和控制Web页面文档内容的接口。它提供了一种结构化的面向对象的方法,可以对页面中特定的内容进行检索以及设定对象的属性。” (Mike Hall, "Introduction to the Document Object Model," 2007).
在客户端的脚本中,存在DOM漏洞。一般来说这出现在脚本模块访问URL需要参数的时候。如果脚本使用的参数信息没有经过编码或过滤就写入到了HTML文件中,那么很有可能会存在XSS漏洞。有关这方面的例子和更详细的说明,可以参考2005年Amit Klein的文章"DOM Based Cross Site Scripting or XSS of the Third Kind,"基于DOM的XSS攻击难以防御。因为DOM页面层中的所有方法都是受信的,植入在参数中的恶意代码可以和其他代码一样被执行。与存储型XSS攻击一样,DOM脚本攻击的防御还是要依靠程序员在编程时的细心和安全意识。
商业冲击
根据Grossman的观点,当攻击者成功利用XSS漏洞进行攻击后,可能进一步实施以下工作:
◆强制发送电子邮件信息
◆转移资本
◆删除或修改数据
◆使用被害人的电脑攻击其他服务器
◆下载非法内容
基本上说,Web网页脚本所能做的工作,黑客都可以通过成功的XSS攻击而实施。
预防XSS攻击
由于很多Web应用程序都包含有漏洞,因此最好的预防XSS攻击的方式就是检测输入内容的合法性。比如,确保输入内容中不包括尖括号。这看上去很简单,但确是防御XSS攻击一个非常有效的手段。根据McClure, Scambray, 以及 Kurtz的说法:
“我们遇到的几乎所有的XSS攻击都没有对输入内容的尖括号进行屏蔽或者重新编码” (Hacking Exposed, p. 565) 。
但是这并不仅仅是尖括号的问题。任何语法符号都不应该被允许。语法符号可能是来自数据库,或其他服务器。输入Web应用程序的任何内容必须经过过滤,确保用户最终看到的是单纯的文本内容。
企业应对XSS攻击的方式还包括:
1.教育员工在点击电子邮件中的链结或即时消息中的链结时,要特别小心。
2.建立互联网接入控制策略,限制企业员工访问高风险网站(比如成人网站以及盗版媒体网站) 以及未知风险的网站。
3.确保用户的电脑上都安装了最新版的防火墙软件和反病毒软件。设置防火墙限制流出的数据。
4.确保所有敏感功能不会通过机器人或者第三方服务器来启动。 (Grossman).
5.手动或自动进行代码扫描,主动发现潜在的XSS漏洞。
总结
XSS漏洞会给企业网络带来严重的安全风险。企业的敏感数据很可能由于XSS漏洞被泄露出去。正如我们上面介绍的,预防XSS攻击,需要企业终端用户以及程序员的协同努力,通过良好的技术方案抵御这种人为危害。
posted on 2008-10-22 13:42
阿蜜果 阅读(997)
评论(1) 编辑 收藏 所属分类:
Web