基于Web应用系统攻击和漏洞测试技术研究

2015-04-16 23:42邬凌敏江西省国防科工办南昌市330046
江西通信科技 2015年4期
关键词:漏洞应用程序数据库

邬凌敏 江西省国防科工办 南昌市 330046

基于Web应用系统攻击和漏洞测试技术研究

邬凌敏 江西省国防科工办 南昌市 330046

随着WEB 应用程序在更广泛范围的使用及WEB 工程概念的提出,Web 安全的测试就成为一项重要的工作。而Internet 和Web 媒体的不可预见性使得测试变得困难,必须为测试复杂的基于Web 的系统研究新的方法和技术。文章在分析WEB 系统的部署环境、应用程序、数据库和系统容错等方面存在安全漏洞的基础上,对Web 安全测试的要点和方法进行了探讨。实践表明,提高Web应用系统的安全性具有现实意义,可以减少因Web应用漏洞而对网络系统带来的安全问题。

Web 应用系统 软件安全 测试技术

0 引言

随着互联网和电子商务的广泛应用,基于web的应用系统(以下简称web应用系统)得到了越来越广泛的使用。除了传统的应用如新闻网站、电子邮件等等外,目前越来越多的关键性任务也使用web应用系统来完成,例如网上银行、网上证券、网上购物等涉及到金钱交易的应用,以及政府部门使用互联网来开展电子政务等等。这些关键性的应用对软件安全的要求越来越高,如果由于软件不安全造成信息泄露或系统破坏,将会带来巨大的损失。因此,确保web应用系统的安全是非常重要的。不幸的是,由于web应用系统及其应用环境的开放性。Web应用系统基于http协议开发,而这种协议是无状态的,web应用系统需要自己记录软件状态信息并在客户端与服务器之间来回传送,这就导致软件的内部信息容易被篡改而出现安全问题。同时,由于web应用软件的客户机端是开放的,任何用户都可以访问并使用因此,它很容易受到恶意用户的攻击。

因此,web应用系统在部署和使用前,需要进行广泛的测试,以确保其在复杂的应用环境中能正常运行而不至于导致安全问题。特别是对于电子政务系统、银行证券等金融系统和网上交易等电子商务系统而言,在WEB 系统部署前进行充分的安全性测试是非常必要的。

1 Web网络应用系统安全攻击技术

目前,在典型的IWS 16标准中,主要分为4种类型的行为:收集信息攻击、获取访问权限攻击、拒绝服务攻击和逃避检测攻击。针对Web应用系统软件.进行攻击的方法和技术主要有以下几种:

1)COOKIE假冒

精心修改COOKIE数据并进行用户假冒。

2)认证逃避

攻击者利用不安全的证书和身份来逃避管理。

3)非法输入

在动态网页的输人中使用各种非法数据,获取服务器敏感信息。

4)缓冲区溢出

攻击者利用超出缓冲区大小的请求和构造的二进制代码让服务器执行溢出堆栈中的恶意指令。

5)强制访问

访问未授权的网页。

6)隐藏变量修改

对网页中的隐藏变量进行修改,欺骗服务器程序。

7)拒绝服务攻击

构造大量的非法请求。使WEB服务器不能进行正常用户的访问。

8)跨站脚本攻击

提交非法脚本.趁其他用户浏览时盗取其账号等信息。

9)SQL注入

构造SQL代码让服务器执行,获取敏感信息,并获得相应的权限。攻击者在普通用户输入中插人数据库查询指令。在大多数情况下,这是因为输入检验不严格以及在错误的代码层中编码造成的,攻击者由此可以对数据库进行查询、删除和修改等操作:在特定的情况下,甚至还可以执行系统指令。

2 Web应用系统漏洞检测技术

2.1 Web 应用程序部署环境测试

用来架构Web网站的UNIX、LINUX、WINDOWS 等服务器端操作系统和服务器软件都可能存在漏洞,这些漏洞都会对Web应用程序造成安全威胁。因此,在部署Web应用程序前,应对Web应用程序的部署环境进行严格的测试,检查一切已知的漏洞,发现新的漏洞,将应用程序环境带来的安全威胁降底到最低程度。

2.2 应用程序测试

应用程序中存在的漏洞是影响Web安全的主要方面,程序员编写的软件都可能有漏洞,有些漏洞可能要经过许多年后才会被发现。特别是不断新加的功能,这些改动,都会带来安全方面的问题。因此,应用程序测试要伴随着系统开发、部署和运行的全过程。

1)SQL 注入漏洞

微软技术中心从两个方面对SQL注入攻击进行了描述:一是脚本注入式的攻击;二是恶意用户输入用来影响被执行的SQL脚本。SQL注入就其本质而言,是利用SQL语法,对应用程序中的漏洞的攻击。当攻击者能够操纵数据,在应用程序中插入一些SQL语句时,SQL注入攻击就发生了。理论上,这种攻击对于所有基于SQL语言标准的数据库软件都是有效的,包括MS SQL Server,Oracle,DB2,Sybase,MySQL等。特别是现在一些AQL注入攻击工具的出现,使得Web应用更易遭到SQL注入攻击。原始的手工测试不适用于大型Web应用程序,可使用N-Stealth、WebInspect、Wikto WebScarab、Nikto等工具进行扫描,测试系统是否存在SQL注入的安全漏洞。为防止SQL注入,程序员编写代码时,要对客户端和服务端进行两级检查。检查数据类型、数据长度和敏感字符的合法性。客户端检查可减少网络流量,降低服务器负荷,将一般误操作、低等级攻击与高等级攻击行为区分开来。对于绕开客户端检查的攻击,提交的数据被直接发往服务端,服务端检查到的提交异常基本可以认定为恶意攻击行为所致,就应中止提交信息的处理,进行攻击备案,并对客户端给出出错或警告提示。另外,在构造查询时,应根据用户输入的内容设置参数值来创建参数化查询,从而避免SQL注入及由此带来的安全问题。

2)表单漏洞测试

表单提交的数据的验证和服务端数据接收的方法直接影响到Web 的安全。随着大量的支持参数的“模糊化”(“fuzzing”)、腐朽(corruption)、以及野蛮强制增长工具的出现,使用非校验输入进行攻击造成的安全问题越来越多。因此,表单漏洞测试是Web安全所必需的。

3)Cookie验证漏洞测试

如果系统使用了cookie,就要对cookie 的使用情况进行检测。检查Cookies 在生存期内能否正常工作而且对这些信息是否加密,是否按预定的时间进行保存,是否存在cookie 可被伪造提交的问题,刷新对Cookie 有什么影响及过期处理等。

4)用户身份验证测试

用户身份验证测试主要检查无效的用户名和密码能否登录,密码是否对大小写敏感,是否有验证次数的限制,是否存在不验证而直接进入Web 应用系统的问题,是否存在不登录就可查看非会员页面和权限问题,客户端提交的密码是否加密,服务端验证密码是否使用了MD5。用户身份验证测试一般使用手工和测试工具相结法的方法,若在测试中发现问题,应及时修改代码,使用加密码算法对密码加密,采用Session 对象进行登录验证。

5)文件操作漏洞测试

若系统有上传文件的功能,测试系统是否允许上传脚本文件、可执行文件等有可能给系统带来危害的文件。若有下载功能,可供下载的文件是否与系统的程序分别存放,是否存在数据库文件、包含文件和页面文件下载的可能。文件操作漏洞测试一般使用手工测试的方法,若发现问题,应及时修改代码并将可供下载的文件重新部署。

6)Session 测试

Session测试主要检查Web应用系统是否有超时的限制,也就是检查用户登录后在一定时间内没有点击任何页面,是否需要重新登录才能正常使用,检查超时后能否自动退出,退出之后,浏览器回退按钮是否可以回到登录页面。Session测试一般使用手工测试和工具测试相结合的方法,若发现问题,应及时修改代码。

7)跨网站脚本(XSS)漏洞测试

对于呈增长趋势的跨站脚本(XSS)攻击,可使用内嵌检测的方式进行处理。使用WebInspect工具识别所有的假造参数,使用DevInspect工具通过特定代码关联在页面上发现安全缺陷,对于显示代码,采用CSE HTML Validator工具进行测试。若在检测中发现系统存在跨站脚本(XSS)漏洞,使用输出数据编码也就是将任何数据返回给用户前均采用HTML编码,可以有效防止跨站点脚本攻击。因为通过HTML编码,可将大多数脚本命令自动转换为无害文本。

8)命令注射漏洞测试

命令注射漏洞测试主要检查所有调用外部资源(例如system、exec、fork,或者所有的发出请求的语法)的源代码,查找那些来自于HTTP请求的输入可能发起调用的所有地方。使用相同功能的专门的库函数来代替shell命令和一些系统调用,可以抵御命令注射的攻击,另外一种避免命令注射的保护措施就是确保Web应用程序只是根据它所要执行某个功能时所需的最小权限来实现这个功能。如果必须使用外部命令的话,任何被插入命令的用户信息必须仔细地审查,设立一定的机制来处理可能出现的错误、超时、或者在调用过程中出现的阻塞。

2.3 数据库问题测试

在Web应用中,数据库起着重要的作用,数据库为Web应用系统的管理、运行、查询和实现用户对数据存储的请求等提供空间。因此,Web应用系统中数据库安全测试是一个重要的方面。与数据库相关的应用级漏洞如SQL注入和跨站点脚本攻击等问题前面已提及,在此只讨论数据库本身及数据库使用方面的漏洞。

1)数据库名称和存放位置安全检测

一个常规的数据库名称,并且存放在与Web应用程序文件相同或相关的位置,很容易被下载。若在程序代码中包含有数据库名称和数据库文件绝对位置,一旦代码丢失,同样存在暴库的危险。因此,在部署数据库和编写相关的代码时,要避免问题的发生。

2)数据库本身的安全检测

对数据库本身的安全检测主要检查数据库是否配置了不同的存取权限,所有操作是否都可以审计追踪,敏感数据是否加密等。为了保证数据库的安全,不同权限的用户定义不同的视图,以限制用户的访问范围;不同的敏感数据采取不同的加密算法,重要的数据分开存储。

3)数据使用时的一致性和完整性测试

Web应用系统中,使用数据库时,可能发生数据的一致性和完整性错误,因此,要检测系统中是否有事务管理和故障恢复功能,确认事务数据是否正确保存,检测系统是否有定期数据备份功能。

2.4 容错测试

正常操作时,Web应用程序也总会有错误出现,如内存溢出、空指针异常、系统调用失败、数据库不可用、网络超时等。不当的出错处理可能给网站带来各种各样的安全问题,因此,要对Web应用程序的错误处理进行测试,以保证为用户提供一份有意义的出错信息,为网站维护人员提供诊断信息,而不是为攻击者提供有用的信息。

1)容错方案及方案一致性测试

出错处理应该在整个网站中保持一致性,并且每一个出错处理片断都应该是一个整体设计方案中的一部分。通过代码检查,测试系统差错处理方案是否合理,方案是否可以处理所有可能发生的错误,方案中是否存在泄漏设计细节的问题,是否存在不同的差错处理方案。

2)接口容错测试

检测浏览器与服务器的接口是否正确,中断用户到服务器的网络连接时,系统是否能够正确处理数据;对于有外部接口的Web系统,如网上商店可能要实时验证信用卡数据以减少欺诈行为的发生,中断Web服务器到信用卡验证服务器的连接,检测系统是否能够正确处理这些错误,是否对信用卡进行收费。另外,还要测试系统是否能够处理外部服务器返回的所有可能的消息。

3)压力测试

压力测试是实际破坏一个Web应用系统,也就是测试Web应用系统会不会崩溃,在什么情况下会崩溃。黑客常常提供错误的数据负载,直到Web应用系统崩溃,接着当系统重新启动时获得存取权。压力测试的区域包括表单、登录和其他信息传输页面,可以采用ab(Apache 的测试工具)和OpenSTA(开发系统测试架构)等相应的工具进行自动化测试。

3 结语

目前,黑客攻击已成为一个很严重的网络问题。尽管防火墙和补丁管理已逐渐走向规范化,各类网络安全防护设施比以往更完善,但是,对攻击应用层面的防护能力却较弱。目前有75%的黑客袭击事件都发生在应用程序方面。本文从Web攻击分析到漏洞防范,进行了较详细的探讨,希望对从事WEB应用程序安全研究的人员或者网络管理员有一定的借鉴作用。

[l] 屈晔,张吴.Bugscam 自动化静态漏洞检测的分析.信息安全与通信保密。

[2] 张吴,网络与信息安全测试原型系统的关键技术研究.电子产品可靠性与环境试验。

[3] 张吴,屈晔.网络信息安全黑客攻击技术研究。

[4] 施寅生,邓世伟,谷天阳. web服务安全性测试技术研究, 计算机工程与科学。

[5] 殷正国,针对SQL 注射攻击的一种集成防御策略[D].南京: 南京理工大学。

[6] 徐鑫涛,浅析SQL 注入攻击.中国科技信息。

[7] 胡忠望,刘卫东.Cookie 应用与个人信息安全研究.计算机应用与软件。

[8] NSFOCUS,2007 年5 月之十大安全漏洞.网络安全技术与应用。

[9] 孙志岗,李扎,王宇颖.网络应用软件健壮性测试方法研究.计算机工程与科学。

[10] Simson Garfinkel,Gene Spaford,Web安全与电子商务.何健辉,刘样亚,冯延晖,译.北京:中国电力出版社。

1009-0940(2015)-4-030-04

猜你喜欢
漏洞应用程序数据库
漏洞
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
数据库
三明:“两票制”堵住加价漏洞
漏洞在哪儿
数据库
数据库
数据库
高铁急救应补齐三漏洞