软件测试中Web安全测试概述及WEB的多多少少
1. web应用安全与系统安全
能取得某个系统的完全使用权是黑客的终极目标,而且这也是危害性最大的漏洞,因此操作系统,数据库,底层网络设备,各种系统配置和管理方面的安全是最被重视的,也是黑客们最为觊觎的。
web 应用的漏洞则不然,要想单独通过web漏洞来获得相关系统的完全使用权是相当困难的。但是web应用漏洞却是传播性最大的,而且数量最多的,一个有点恶意的人,都能非常容易的利用web应用漏洞造成破坏。一个好奇的儿童,一个心怀不满的雇员,都能有意无意利用web应用漏洞。某公司的调查数据说,超过 70%的攻击其实都是利用了web应用漏洞。
简单地说,系统漏洞会带来少而深的攻击,web漏洞则会带来多而浅的攻击。漏洞的风险通常都是以广播度×危害度而言,不能简单地看能危害多深。试想一个网站三天两头地被人利用web漏洞骚扰,造成商业数据丢失,业务中断,声誉受损,不比被人直接做掉强。因此,web应用的安全在国外已经相当重视,有专门的组织,公司在专门研究和提供服务。如果对web安全有兴趣,可以去owasp和wasc的网站上找资料。
2. web应用漏洞
现在业界对于web应用漏洞的总结和分类太多,不同的公司都会提一套漏洞的列表,还没有形成业界的标准。其中大家对于xss,sql injection都是耳熟能详,但是国内好多人一提web安全,也只能想到这类注入的漏洞。 如果撇开web服务器的配置管理等其他外围因素,单纯从web应用的代码出发,我觉得web应用的漏洞可以分为四类。代码远程执行漏洞,功能逻辑漏洞,泄密漏洞和日志漏洞。
xss,ldap injection,sql injection等各种injection,可疑文件上传,缓冲区溢出,这些漏洞全都是因为输入中有代码,而且这些代码通过某些方式在某处以某些权限被执行。这类漏洞是大家知道最清楚的。
而功能逻辑漏洞则是指业务流程,认证授权方面的逻辑代码有问题。试想一个普通用户可以看其他用户的工资,使用管理员的权限。或者一个流程本来要走审批这一个过程,但是居然不审批也行。这都是逻辑代码有问题,产生了安全问题。这类安全问题国内的还不太重视,但是在owasp上已经有了相关的文档。
泄密漏洞是指由于异常没有处理或者其他原因造成了系统信息的泄漏。比如说我就发现过,有程序员把测试帐号写在网页的注释或者脚本里。日志漏洞这个就属于比较高级的了,可能很多web应用本身都不记日志的,但是关键操作一定要保证日志的真实有效。我原来发现过一个系统记录的日志中的用户帐号居然是来自request里面的隐藏值,换句话说,用户改掉这个值再干操作,就再也无迹可查了。
3. 业界现状
安全市场三大产品:防火墙,入侵检测系统和防病毒软件。安全市场三大服务,安全培训,安全评估,系统整合。上网搜搜web应用安全,国内基本上没有这个职位。现在国内市场上对web应用安全的总体重视度不够。有一些大型互联网公司和专做web应用的公司可能内部会有一些人在搞这块,安全公司基本上都是系统安全和web安全混淆的。web应用安全单独在市场上占的份额还不多。今年奥运会,很多网站在讲安全,但是是否是注重了web应用安全,这点很难讲,呵呵。
在国外,web应用安全的市场相对成熟了,有不少现成的产品。比较有名的是ibm的app scan,hp的web inspect。这两个工具的思想都是在软件开发的生命周期内对web应用的风险进行控制,核心功能是黑盒漏洞探测。其实原理很简单,就是自动播放很多含有测试用例的http请求,根据http的响应来提取特征,进行漏洞识别。另外其他有些专门的工具也可以针对某一个漏洞进行测试,例如sql injection,xss等。但是由于原理局限,黑盒测试工具速度快,范围广,但是误报率和漏报率都还比较高。所以人工测试是必要地补充,而代理工具是web安全测试中必不可少的一部分。 webscarab,paros,charles这些代理工具都能让测试人员突破web ui的限制,去自由地建立测试用例。在自动测试和人工测试的基础上,有一些公司,会专门测试web应用的漏洞,进而提供相关服务。
对web应用漏洞发现的另外一个思路是源代码审计。通过对代码进行分析,提取特征,发现代码里的风险点。商业化比较好的是fortify。当然人工审计代码也是可行的。所以国外也有一些小公司,专门提供源代码审计的服务。另外,在最近两年的web安全会议上,基本上发表的论文也都是关于源代码审计的。
Web安全测试知多少
1. 数据验证流程:一个好的web系统应该在IE端,server端,DB端都应该进行验证。但有不少程序偷工减料,script验证完了,就不管了;app server对数据长度和类型的验证与db server的不一样,这些都会引发问题。有兴趣的可参看一下script代码,设计一些case,这可是你作为一个高级测试人员的优秀之处哦。我曾修改了页面端的script代码,然后提交了一个form,引发了一个系统的重大漏洞后门
2. 数据验证类型: 如果web server端提交sql语句时,不对提交的sql语句验证,那么一个黑客就可暗喜了。他可将提交的sql语句分割,后面加一个delete all或drop database的之类语句,能将你的数据库内容删个精光!我这一招还没实验在internet网站上,不知这样的网站有没有,有多少个。反正我负责的那个web系统曾经发现这样的问题。
3. 网络加密,数据库加密不用说了吧。
WEB软件最常碰到的BUG为:
1、SQL INJETION
2、对文件操作相关的模块的漏洞
3、COOKIES的欺骗
4、本地提交的漏洞
●SQL INJETION的测试方法
原理:
如有一新闻管理系统用文件news.asp再用参数读取数据库里的新闻譬如
http://www.xxx.com/news.asp?id=1这一类网站程序
如果直接用
rs.open "select * from news where id=" &
cstr(request("id")),conn,1,1
数据库进行查询的话即上面的URL所读取的文章是这样读取的
select * from news where id=1
懂得SQL语言的就知道这条语言的意思是在news读取id为1的文章内容。
但是在SQL SERVER里select是支持子查询和多句执行的。如果这样提交URL的话
http://www.xxx.com/news.asp?id=1and 1=(select count(*) from admin
where left(name,1)=a)
SQL语句就变成了
select * news where id=1 and 1=(select count(*)
from admin where left(name,1)=a)
意思是admin表里如果存在字段字为name里左边第一个字符是a的就查询news表里id为1的内容,news表里id为1是有内容的,从逻辑上的角度来说就是1&P。只要P为真,表达式就为真,页面会返回一个正确的页面。如果为假页面就会报错或者会提示该id的文章不存在。黑客利用这点就可以慢慢得试用后台管理员的用户和密码。