您所在的位置: 首页>>读书频道>>安全>>综合>>

1.3 应用安全的影响

http://book.51cto.com  2007-06-26 11:50  Christopher Steel, Ramesh Nagappan, Ray Lai  机械工业出版社  我要评论(0)
  • 摘要:《J2EE、Web服务和身份管理最佳实践与策略》是一本安全从业者实用指南,介绍在J2EE企业应用、Web服务、身份管理、服务供应和身份识别解决方案中,如何建立健壮的端到端安全性。本书由三位杰出的Java安全架构师编写,其中的模式驱动方法全面反映了确保大型应用安全的最佳实践。本文是应用安全的影响。
  • 标签:J2EE  Web服务  身份管理  J2EE、Web服务和身份管理最佳实践与策略
1.3 应用安全的影响
据加特纳公司(Gartner Group)的一份报告[CSO online]估计,公司员工应对公司信息系统的非授权访问的70%以上负责。另外,造成重大经济损失的信息系统入侵95%以上的责任也应由他们负责。该项调查还特别强调,只有在因违反安全的行为而实际蒙受损失后,多数机构才认识到安全的重要性。通常也只有教训发生后,这些机构才让架构师和应用开发人员着手制定安全措施。企业正逐渐认识到,计算机安全事件有可能源自外部也可能源自内部,而内部攻击比外部攻击的后果更严重,也更具恶意。这类攻击者通过滥用用户权限或窃取特定应用的管理员权限,获得对某些敏感资源的访问,如财务应用或其他机密信息库。随着支持互联网的应用的广泛采用,各企业和机构的安全相关损失不断增长,如拒绝访问、机密数据泄露、非授权交易、身份盗用和数据破坏等。这些问题中的大多数都与应用特定的安全缺陷以及应用缺乏针对已知威胁的防护有很大关系。
据FBI一项涉及500家公司的调查[eWeek]显示,这些公司中的90%都表示曾发生过违反计算机安全的事件,其中的80%还因此蒙受了经济损失。美国联邦贸易委员会(Federal Trade Commission,FTC)2003年的一项调查[FTC findings]发现,在过去的5年时间内,有2730万美国人成为身份盗用的受害者,其中仅2002年一年就高达990万人。据该调查显示,在2002年,商业和金融机构因身份盗用损失近480亿美元,而受害的消费者报告的损失也达到50亿美元。华盛顿大学医学中心(the University of Washington Medical Center[AMNews])也在外界压力下承认黑客曾渗透其计算机系统,并盗取了数千患者的机密记录。还有一则来自一个在线赌场的有趣报道[onlineˉkasion],黑客曾成功地控制这家赌场的赌博程序,并将其修改令参赌者只赢不输,因而就在短短的几个小时内,参赌者们就大赢特赢了190万美元。
大多数组织通常低估应用级安全,直到面临严重的安全攻击行为,并因此造成重大的经济损失或大范围的停机。在大多数时候,故障的原因可能与应用架构和设计、编程、编码安全、运行时平台以及使用的工具和实用程序中的缺陷相关。当然,最主要责任应归咎于负责设计应用和编写代码的应用架构师和开发人员。因此,如今要求在应用开发生命周期中采用积极的安全方法,以甄别重要的安全方面。架构师和开发人员必须积极主动地将安全纳入其
应用设计之中。
接下来介绍一些最常见的与应用相关的安全缺陷和漏洞是如何威胁应用或服务安全的。重要的应用安全缺陷及其利用方法
本节将介绍一些最常见的严重威胁安全的应用缺陷以及黑客对其的利用。
缺乏输入验证
对应用的安全来说,在接受请求并进行后续处理前,对输入的参数进行验证非常重要。不论其来源是否是可信,好的做法是对所有的输入都进行验证,这将有助于避免应用级故障以及来自有意图的黑客和无意图滥用者的攻击。输入验证是一种数据验证机制,包括对数据类型(字符串、整型)、格式、长度、范围的验证,对空值(NullˉValue)的处理,对字符集、地区、模式、上下文环境、值的合法性和有效性的校验等。例如,如果基于表单的Web应用未能对方括号(“[“和”]”)进行编码,那么远程用户就能创建一个精心构造的特殊URL,命令目标用户的浏览器执行任意的脚本代码。这是否会导致恶意代码注入攻击,取决于执行的脚本代码的影响。如果应用依赖于客户端数据验证,则任何缺陷都可能被黑客利用,因而好的做法是总是对输入进行再次检查和验证,即使客户端已验证过。从安全的角度说,在应用处理前对所有输入数据都进行验证是非常重要的,详情请参阅[InputValidation]。
输出净化
再次显示(回显)用户输入的数据值是一项潜在的安全威胁,因为这将为黑客提供一种匹配给定输入及输出的方法。这让黑客能够插入恶意数据输入。对于Web页面来说,如果应用户请求而生成的页面在显示之前未能正确地净化,那么黑客可能从生成的输出中找出弱点,然后设计恶意的HTML标签来创建弹出式横幅。在最坏的情况下,黑客甚至能修改最初在网站上显示的内容。为防止这类问题发生,必须对生成输出中的所有已知值进行审计,删除任何未知值,同时删除输出响应中的注释和标识符。
缓冲区溢出
当应用或进程将数据存储到内存缓冲区时,如果所要存储的数据超出了内存缓冲区的固定长度或能处理的最大容量,多余的信息很可能存储到相邻的缓冲区中,这将使相邻缓冲区存储的正确数据遭到破坏(覆盖),从而造成相关进程突然终止,进而导致整个应用崩溃。为设计这类攻击,黑客通过篡改或操纵输入参数来传入恶意输入,导致应用缓冲区溢出。这种行为经常会导致拒绝服务攻击。通常,缓冲区溢出攻击都是利用与输入验证、输出净化和
数据注入等相关的应用漏洞而发起的。
数据注入漏洞
     在利用用户数据输入环境中的漏洞时,安全入侵者通常以用户数据为桥梁或将恶意代码注入到用户数据中。数据注入缺陷通常出现在,支持弹出式窗口的浏览器(窗口注入漏洞)和直接组装外部数据的SQL语句(SQL注入漏洞)中。在窗口注入漏洞中,用户同时在两个不同的浏览器窗口中打开可信的Web站点和恶意的Web站点,如果可信的Web站点弹出一个带名称的弹出窗口,而恶意Web站点知道该窗口的名称,那么安全入侵者就能“劫持”这个带名称的Web浏览器窗口。要避免数据注入漏洞,必须进行彻底的输入验证,即必须验证所有的输入值、查询字符串、表单字段、cookie、客户端脚本,以确保它们包含已知的和有效的值,否则拒绝它们。详情请参阅[SQLInjection]和[InjectionFlaw]。
跨站脚本
通过跨站脚本(CrossˉSite Scripting,XSS),Web应用使用包含恶意内容的超链接或脚本来收集信息。通常,攻击者使用这种机制来向目标Web服务器注入恶意代码,或向用户提供将其重定向到其他Web服务器的恶意链接。攻击者经常在易受攻击的Web应用中使用JavaScript、VBScript、ActiveX、HTML或Flash来收集当前用户的数据。根据用户与目标Web服务器的交互,这些脚本可能盗取用户的账户信息、修改用户的权限、窃取cookie或会话信息以
及损坏用户特定的内容等。因此,诊断和测试应用的XSS风险和漏洞非常重要。
不恰当的错误处理
如果应用详细地显示出与应用状态有关的内部错误信息,如内存不足、空指针异常、系统调用失败、数据库访问失败和网络超时等,那么将出现与错误处理相关的安全问题。这种错误消息通常泄露了与实现、故障条件和运行环境相关的内部细节,黑客可以利用这些信息找出应用的弱点并设计相应的攻击。在这些信息的协助下,黑客可以通过发送无效数据来迫使应用访问不存在的数据库或资源,进而导致应用崩溃或是显示错误消息。通过采用恰当的
错误处理机制,可以根据用户输入将错误消息显示为用户特定的消息,而不泄露任何与应用环境或其组件相关的内部细节;同时,将所有用户特定的错误消息都映射到底层应用特定的错误条件上,并存储为日志文件以供审计。在遭受攻击时,这些日志文件便可以提供诊断信息,用于核实错误和深入审计。 不安全的数据传输或存储
大多数安全攻击都是在数据用明文表示时发起的,因此数据在传输或存储过程中的机密性非常重要。采用加密机制和数据加密技术有助于确保数据在传输和存储过程中的完整性和机密性。
弱会话标识符
在认证之前或通过未加密的通信信道发布或使用会话标识符,将使黑客能够窃取会话信息,然后盗取相应的用户会话以从事非授权的业务事务。用明文表示会话标识符使黑客能够使用会话属性来伪造用户的身份信息。如果服务提供者或Web应用不对从服务请求者的会话标识符中获得的身份信息进行验证,或者没有为会话设置过期时限,那么这种漏洞将变得尤为危险。要防止这些问题发生,应用应在使用SSL建立安全的通信信道后,再发布加密的会话标
识符,以确保会话信息的机密性和完整性。
弱安全令牌
弱安全令牌指的是使用密码安全令牌,使黑客能够使用密码字典或令牌解密工具来猜出
密码并进而假冒用户。有些Web应用以Base64值的形式回显用户密码,这种方式容易受到攻击
并还原出密码。如果HTML脚本或Web应用回显密码或安全令牌,则黑客可以截获它们,然后假
冒用户进行非授权访问。弱安全令牌是认证和应用会话管理中常见的安全问题。要解决由其
造成的漏洞,通常考虑采用包含强认证或使用数字证书、生物特征识别和智能卡的多重认证
机制。因此,保护密码文件的安全并确保账户密码不易被黑客猜出或破解非常重要。
对弱密码的破解
密码是最弱的用户认证机制,因为黑客可以通过观察击键或使用可从密码文件中提取出密码的破解工具而轻易地猜出或破解密码。密码被窃取后,要识别滥用或攻击应用的罪犯将异常困难。因此,通过加密来保护密码文件,并确保存储的密码不会被黑客检索、轻易地猜出或破解非常重要。强烈推荐采用强认证或使用数字证书、生物特征识别或智能卡的多重认证机制。弱密码破解是支持网络的应用中最常见的安全问题之一,有关这方面的例子,请参
阅[PasswordExploit]。
弱加密
加密指的是使用加密算法将数据由明文变换为密文。使用运算能力很高的计算机可破解较弱的算法。虽然将密钥长度超过56位的算法视为强加密,但在大多数情况下,推荐使用128位或更长的密钥。
会话盗用
会话盗用指的是攻击者成功地创建新会话或重用现有会话,也称为会话劫持。会话盗用通过劫持客户到服务器或服务器到服务器的会话来绕过认证。黑客无需拦截主机间的通信,也不必向通信中注入数据。将同一个会话ID用于多个客户到服务器会话的Web应用也容易遭受会话盗用,在这种情况下,会话盗用可以发生在Web应用的会话级、主机会话级或TCP协议级。在TCP通信中,通常通过IP伪造技术来实施会话劫持,攻击者使用源路由(sourceˉroute
d)IP分组技术,将命令插入到两个通信系统之间的活动TCP通信中,并将自己伪装成通过认证的用户之一。在基于Web的应用中,会话盗用是通过伪造或猜测会话ID和窃取会话IDcookie来实施的。会话信息通常包含某些敏感信息,如信用卡号码、PIN和密码等,因此防止会话盗用是强化Web应用安全的重要步骤之一。通常被认为是防止会话盗用的最佳实践包括:总是让会话注销后立即失效、采用PKI解决方案来加密会话信息和采用安全的通信信道(如SSL/TLS)等。详情请参阅[SessionHijack]。
不安全的配置数据
在应用或其服务器基础设施中,与配置相关的各种问题都影响业务应用的安全,尤其是Web层和业务层。最常见的例子包括错误配置的SSL证书和加密设置、使用默认证书、使用默认密码的默认账户以及错误配置的Web服务器插件等。要防止这些问题发生,必须测试和检查系统环境中与配置相关的弱点。详情请参阅[InsecureConfig]。
认证失效
造成认证失效(broken)的原因是认证机制的配置不正确和凭证管理缺陷,其对应用认证的威胁包括密码修改、密码遗失、账户数字升级和证书问题等。对于存在这类漏洞的应用,攻击者通过操纵凭证(如用户密码、密钥、会话cookie和安全令牌等)发起攻击并假冒用户。为防止认证失效,应用必须对其认证机制进行验证,并实施二次认证,即在授予请求用户访问应用的权限前再次检查其凭证。详情请参阅[BrokenAuth]。
访问控制失效
访问控制决定了通过认证的用户访问应用或数据的权限,因此访问控制失效将导致机密信息的丢失和受保护资源(如应用数据、功能、文件、文件夹和数据库等)的非授权泄漏。访问控制问题直接归咎于未能实施应用特定的安全策略以及未能在应用设计阶段实施必要的策略,因此要防止访问控制失效,必须检查应用特定的访问控制列表,看其是否存在已知风险,并使用渗透测试找出潜在的访问控制失效。详情请参阅[ACLFailure]。
策略失效
安全策略提供了用于决定采用什么样的措施来应对指定事件的规则和条件。通常,企业和机构都在IT应用、防火墙、防垃圾邮件处理、消息路由和服务供应中采用安全策略来实施访问控制。如果规则不足或遗漏、条件或前提无效、规则自相矛盾,那么安全策略处理将无法实施指定的安全规则。因此,策略失效可能导致应用易受攻击。在策略失效的情况下,黑客可能发现并利用任何资源漏洞。策略失效属于应用设计和策略管理方面的安全问题。
审计和日志失效
审计和日志机制提供不可抵赖服务,为全部应用事件提供无可辩驳的证据。它们帮助记录所有重要的应用事件,审计和日志失效将削弱应用诊断可疑活动及挫败恶意攻击的能力。另外,当审计和日志失效时,应用还将无法跟踪异常和特定的程序错误。检查应用的审计和日志进程的高度可用性极其重要,同时必须严格控制对日志文件的访问以保障其安全。
拒绝服务和分布式拒绝服务
拒绝服务(Denial of Service,DOS)和分布式拒绝服务(Distributed Denial of Service,DDOS)是危害最为严重的网络级攻击,它们以众多方式影响应用,其中包括大量占用不可再生资源,如网络带宽、内存、CPU和存储空间等。它们还能破坏主机的配置信息,导致应用故障和操作系统崩溃。传统的DOS是从一台计算机向另一台计算机发起的攻击,而DDOS是由多台计算机协同发起的攻击。应用中与资源管理、认证、错误处理和应用配置相关的漏洞和缺陷都可能被黑客利用从而发起DOS和DDOS攻击。基于Web的应用在面对DOS和DDOS攻击时显得尤为脆弱,因为在有些情况下,无法确定到来的请求是攻击还是正常的数据流。虽然有一些可选用的防范方法,如主机名验证、通过路由器过滤来断开来自不可信主机和网络的攻击连接,但要采取预防性措施来防止DOS和DDOS却极为困难。详情请参阅[DOS]。
中间人攻击
中间人攻击(Manˉinˉtheˉmiddle,MITM)指的是这种攻击:黑客读取或修改通信双方之间传输的业务事务或消息而不被他们觉察。攻击者可以通过伪造业务事务、窃取用户凭证或利用底层公钥基础设施或Web浏览器的漏洞来发起中间人攻击。例如,使用Microsoft Internet Explorer连接SSL服务器的用户可能遭受中间人攻击,Krawczyk对此进行了演示。中间人攻击属于应用设计和应用基础设施方面的安全问题。详情请参阅[Krawczyk]。
多次登录问题
在企业应用集成环境中,多次登录是一个常见的问题。如果集成环境中的应用不使用相同的登录机制,那么用户将必须多次登录。要求用户多次登录将导致应用易受攻击。用户在同一台服务器中的应用间切换时,黑客可使用之前的登录会话凭证来发起安全攻击。另外,用户必须显式地注销同一台服务器中的所有应用会话,从而导致人为错误增多、生产效率下降以及经常无法访问有访问权的应用。
采用单点登录(Single SignˉON,SSO)机制可以解决这些问题,因为采用该机制用户只需记住最初登录应用时所用的用户名和密码。另外,由于无需重复输入用户名和密码或其他形式的认证凭证,单点登录还可以提高效率。 部署问题
很多偶然出现的安全问题和漏洞都可归咎于应用部署问题,例如,应用的配置数据与部署基础设施(主机、网络环境等)不一致甚至相冲突,以及策略实施中的人为错误。在某些情况下,应用设计缺陷及相关问题也会导致部署问题。要防止这些问题,必须对所有基础设施安全策略进行检查和测试,并确保应用级安全策略和基础设施安全策略相一致。如果发现冲突,则需要对这两种策略进行协调,可能还需要对与操作系统管理、服务和协议等相关的约束和限制进行一定的权衡。
编码问题
编码习惯对应用安全的影响极为显著。编码问题也会导致代码和应用流程出现缺陷和错误条件,还可能出现与输入验证、竞态状态、异常和运行时错误等相关的问题。要确保遵循良好的编码习惯,建议采用编码审核方法并辅以源代码扫描,以发现并改正所有潜在的风险和漏洞。
回书目   上一节   下一节
上一篇: 1.2.3 应用或服务 下一篇: 1.4 安全四问
J2EE实用技巧大全
J2EE应用开发专栏
深入Vista应用程序开发
Ruby on Rails 社区网站开发
ASP.NET从入门到精通
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有