Web应用安全分析与解决方案研究

2012-04-29 00:44:03侯莉
电脑知识与技术 2012年20期
关键词:漏洞

侯莉

摘要:随着Internet的蓬勃发展,越来越多的企业将应用系统架构于Web网站之上,由此引发的应用安全问题是所有Web应用系统所面临的重要课题,也得到更多企业的重视。通过对Web应用安全领域所存在的风险以及防范措施进行分析,并从安全软件工程的角度提出了Web应用安全的解决方案,阐述了如何在软件开发的各阶段全面引入安全管理方案。对企业进行信息安全建设具有一定的借鉴意义。

关键词: Web应用安全;安全软件工程;Internet;SSL;漏洞

中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)20-4823-03

Web Application Security Analysis and Solution Studies

HOU Li

(Air China Information Management the Southwest Information Division, Chengdu 610041, China)

Abstract:With the vigorous development of the Internet, more and more enterprises build the architecture of the application on the web site, the application security issues are an important issue facing, and also get more companies to pay attention to. Web application security risks and preventive measures are analyzed, and from the point of view of security software engineering, Web application security solutions are proposed, and it has certain reference significance for companies to develop information security system.

Key words:Web application security; security software engineering; Internet;SSL; loophole

Web安全框架包括物理层面、终端层面、网络层面、数据层面、应用层面以及贯穿这五个层面的管理层面。

1)物理安全:为信息系统的安全运行和信息的安全保护提供基本的计算机、网络硬件设备、设施、环境、介质等方面的全面支持。

2)终端安全:对信息系统中的终端以及主机节点进行安全评估、加固和安全维护,部署安全桌面系统等操作。

3)网络安全:为信息系统在网络环境的安全运行提供支持。一方面,确保网络系统的安全运行,提供有效的网络服务。另一方面,确保在网上传输数据的保密性、完整性、可用性、可控性和不可否认性等。通过访问控制、入侵监测、防病毒设备等安全设备实现网络的安全,同时对网络设备进行安全加固和维护。

4)数据安全:在物理安全的基础上提供安全的操作系统和安全的数据库管理系统,以实现操作系统和数据库管理系统的安全运行以及对操作系统和数据库管理系统所存储、传输和处理数据的安全保护。

5)应用安全:在物理、系统、网络等层面安全的支持下,实现用户安全需求所确定的安全目标。

6)安全管理:主要从安全相关制度规范的建立来加强和落实安全思想和安全操作规范。

该文通过对Web应用安全领域所存在的风险以及防范措施进行分析,并从安全软件工程的角度提出了Web应用安全的解决方案。

1 Web应用安全风险分析与防范

1.1 SQL注入

用户可以提交一段SQL查询代码,根据返回的结果获取他想要知的数据,攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令,从而获取想得到的密码或其它信息,这个就是SQL注入(SQL Injection)。SQL注入具有隐蔽性强、攻击时间短、危害性大等特点。SQL注入一般是在程序员编写包含用户输入的动态数据库查询时产生的,因此主要通过使用参数化查询、采用存储过程、对用户输入进行转义等方法进行防范。

1.2跨站脚本攻击

跨站脚本攻击(XSS)是指攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。XSS攻击主要分为两类:一类是来自内部的攻击,主要指的是利用Web程序自身的漏洞,执行跨站语句。另一类是来自外部的攻击,主要指自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。

防止XSS攻击,首先要阻止攻击者利用在被攻击网站上发布跨站攻击语句。首先代码里对用户输入的地方和变量都需要仔细检查长度,对特殊字符做过滤;其次任何内容写到页面之前都必须加以encode。另外,需要避免Cookie防盗,避免直接在cookie中泄露用户隐私,或者通过使cookie和系统ip绑定来降低cookie泄露后的危险。尽量采用POST而非GET提交表单。

1.3错误的认证和会话管理

错误的认证和会话管理,就是攻击者窃听了用户名和密码,或者是会话,从而得到会话进程的sessionID,进而冒充授权用户进行Http访问的过程。与之相关的漏洞通常存在于Web应用程序的某些特殊区域,如退出、密码管理、超时、保密问题、账户更新等。这些漏洞可能导致部分甚至全部账户遭受攻击。解决此问题的方法是需要全面审查应用系统的架构,确保其认证机制本身必须是简单、集中和标准化的;在系统中使用容器提供标准session id;用SSL(Secure Sockets Layer安全套接层)协议来保护密码和session id。

1.4不正确的直接对象引用

不正确的直接对象引用是指一个已经授权的用户,通过更改访问时的一个参数,从而访问到了原本并未被授权的对象。这种漏洞能损害参数所引用的所有数据,攻击者很容易就访问到业务系统的所有数据。解决此问题的方法是必须控制Web应用程序对文件的访问,对每一个用户可访问的对象(如对象数量、文件名)选择一个适当的方法,如:使用间接对象引用,防止攻击者直接攻击未授权资源。应用程序将每个用户间接引用映射到服务器的实际数据库密匙中;检查访问,来自不受信源所使用的所有直接对象引用都必须包含访问控制审核,以确保用户对要求的对象有访问权限。

1.5伪造跨站请求(CSRF)

伪造跨站请求(CSRF)是一种控制终端用户在已登录的Web应用程序上执行非法操作的攻击方法。攻击者只要借助少许的社会工程手段,就能迫使用户去执行攻击者需要的操作。CSRF的防范机制常用的有以下三种:

1)检查HTTP头部Refer信息,是防止CSRF的最简单易行的方式。根据RFC对于HTTP协议中Refer的定义,Refer信息跟随出现在每个Http请求头部。Server端在收到请求之后,可以检查头信息,只接受来自本域的请求而忽略外部域的请求。

2)使用一次性令牌:对于Get请求,在URL里面加入令牌,对于Post请求,在隐藏域中加入令牌。这个令牌由server端生成,编程人员在客户端发送请求时携带本令牌然后在Server端进行验证。

3)使用验证图片,可防止暴力攻击。在CSRF防范上,应用程序结合验证图片和一次性令牌来做双重保护。这种方式很难被恶意程序在客户端识别,因而能提高更强的保护。1.6安全性误配置

安全性误配置可能存在于Web应用的各个层次,开发人员需要和网络管理人员共同确保所有层次都合理配置。这个漏洞往往使得攻击者能够访问未被授权的系统数据和功能,有时甚至可能导致整个系统被破坏。防范这个漏洞的唯一方法就是尽可能对系统的所有方面都做好安全配置,包括:安装最新版本的软件及补丁;最小化安装;Web文件/数据库文件不存放在系统盘上;不在Web/数据库服务器上运行其他服务;严格检查所有与验证和权限有关的设定;权限最小化;不使用默认路径和预设账号等。

1.7限制远程访问失败

系统虽然对URL访问做了限制,但通常仅限于表示层的访问控制,攻击者能够轻易伪造请求直接访问未被授权的页面,从而造成限制远程访问失败。为此,需要建立起适当的身份验证和授权机制,如:基于角色进行认证和授权,拒绝所有的默认访问,明确授予特定的用户和角色访问每个页面。如果页面参与了工作流,检查并确保在认证条件满足的状态下才允许访问页面。

1.8未验证的重定向和传递

Web应用中重定向很普遍,并且通常重定向的URL带有参数。如果重定向未被验证,那么攻击者就可以引导用户访问一些有风险的站点。这种重定向可以尝试安装恶意软件或欺骗用户泄露密码或其他敏感信息。转发也很普遍,不安全的转发可能允许绕过访问控制。为了保障重定向和转移的安全,可以避免使用重定向和转移;如果用到了,不要在目标中涉及用户参数;如果目标参数无法避免,需要确保参数的有效性。

1.9不安全的加密存储

大多数Web应用程序对敏感数据加密是一种关键的步骤。在实际应用中,使用有缺陷的加密算法,或者使用不合适的密钥,或者没有正确的使用密钥,都会导致敏感数据泄漏,从而造成攻击者能够获取或篡改信息,并进行进一步的攻击。在系统开发时,不能使用自创的不安全的加密算法,不要使用安全强度不强的弱算法。离线生成密钥,谨慎保护私钥,确保在磁盘中加密的数据不会被解密。确保所有的证书、密钥和密码都被安全存放;具有安全的密钥分发和应急处理方案。

1.10不足的传输层保护

不足的传输层保护也是一种缺少对敏感数据保护的漏洞,它更关注数据在网络上的传输。由于未能识别所有的敏感数据,或者未能识别敏感数据发送的位置,或者未能在每个位置对敏感数据提供合理的保护,从而造成攻击者能够获取或篡改信息以进行进一步攻击。在系统开发时,需要对敏感数据的传输提供合理的保护机制,如:在传输前对数据加密,在传输前对信息签名;合理管理密钥和证书,并在使用前验证SSL证书。

2软件全生命周期的安全规划

通过对Web应用安全的风险与防范分析,企业在信息安全建设工作中,除了要关注信息安全基础设施的建设,还需要逐步实施安全软件工程,从需求、设计、编码、测试、运行维护的软件全生命周期进行安全规划、实施,以全面的保障应用系统安全。

2.1需求阶段

确定系统安全需求和风险点,提供针对性的安全目标,确定安全假设,确认数据流,保护边界,并且通过安全威胁分析,建立需求控制矩阵,从而在需求阶段就考虑安全需求:详细说明安全与保密要求;把安全保密分配到处理流程中;确定用户数据的敏感等级;确定安全计划,建立安全模型,尽可能的降低脆弱性。

2.2设计阶段

确认安全原则,根据系统实际网络环境和安全需求分析,以及系统的重要性,架构合理的安全架构,主要从物理安全、网络安全、系统安全、应用安全、终端安全等方面进行系统的安全架构设计。在设计阶段,需要验证安全模型的正确性,设计整体安全机制和安全方案,把安全要求分解到相关模块中,把对数据的安全要求体现在安全数据库的设计中。

2.3编码阶段

1)安全编码原则

根据安全编码原则进行代码的编写:进攻面最小化原则:在软件架构中将最少的功能性代码开放给用户。如:功能代码和界面代码分离,内核代码和用户任务处理代码分离等;深度防卫原则:在软件代码开发中注重代码安全性加入安全防护功能代码,如:防溢出处理,防注入代码,防跨站代码等;最小权限原则:对软件用户或软件运行权限进行最小化,防止使用者恶意突破权限限制非法操作。

2)代码审计

代码审计的实质是一次风险评估,核心就是找到系统的架构失败与编码失败,并与常见的攻击模式进行校验。结合代码评估工具和手工验证的方式来确认代码中存在的缺陷(设计缺陷、实现缺陷)。设计缺陷包括:不正确产生的随机数、不正确的产生加密Key。实现缺陷包括:不正确的函数。

3)安全培训

对系统的开发人员提供专业的安全编码上的培训,提高开发人员安全意识,同时也避免在开发中的一些代码缺陷,逐渐实现代码级的安全,从根本上预防安全威胁的出现。

2.4测试阶段

黑盒测试:通过对网站实施模拟真实黑客入侵,采用多种攻击方式对网站实施良性渗透,在测试阶段以检验系统的安全性。

渗透测试:模拟非法用户从互联网用户(外)和业务维护用户(内)两个角度对系统的所有业务进行业务(流程)渗透测试,测试内容包括:验证码破解、认证漏洞测试、非法业务订购测试、资源正常释放、业务流程验证等。

2.5运行维护阶段

在完成安全基础建设的基础上,辅助以安全监控、安全评估、安全加固、应急响应等措施,实现系统在维护阶段的正常运行。

3小结

Web应用安全是一个动态变化的过程,随着技术的发展,会有越来越多的安全风险产生。企业在信息安全建设工作中,通过逐步的夯实信息安全基础架构,建立健全的安全管理制度,在软件开发中逐步实施和完善安全软件工程,在软件开发的各个阶段建立起相应的安全管理措施,全面应对不断出现的安全风险。

参考文献:

[1]任伟.软件安全[M].北京:国防工业出版社,2010.

[2](美)霍普等.Web安全测试[M].北京:清华大学出版社,2010.

[3](美)斯坎布雷.黑客大曝光:Web应用程序安全[M].北京:机械工业出版社,2011.

[4]王嘉延. Web应用生命周期安全防护探讨[J].计算机安全,2011.

[5]丁妮.Web应用安全研究[D].南京信息工程学院,2007.

[6]郑明.企业应用集成服务的安全策略设计与实现[J].微计算机信息,2009.

猜你喜欢
漏洞
漏洞
今日农业(2022年13期)2022-09-15 01:21:08
网络安全漏洞管理与漏洞情报库建设方案探讨及研究
漏洞在哪里
基于selenium的SQL注入漏洞检测方法
电子制作(2019年11期)2019-07-04 00:34:40
Windows 10被曝新零日漏洞涉及3大版本
侦探推理游戏(二)
三明:“两票制”堵住加价漏洞
中国卫生(2016年5期)2016-11-12 13:25:28
漏洞在哪儿
儿童时代(2016年6期)2016-09-14 04:54:43
Java 反序列化漏洞研究
高铁急救应补齐三漏洞
中国卫生(2015年12期)2015-11-10 05:13:38