软件安全测试点以及测试⽅法
软件安全性测试主要包括程序、数据库安全性测试。根据系统安全指标不同测试策略也不同。
⽤户⾝份认证安全的测试要考虑问题:
1.明确区分系统中不同⽤户权限
2.系统中会不会出现⽤户冲突
3.系统会不会因⽤户的权限的改变造成混乱
4.⽤户登陆密码是否是可见、可复制
5.系统的密码策略,通常涉及到隐私,钱财或机密性的系统必须设置⾼可⽤的密码策略。
5.是否可以通过绝对途径登陆系统(拷贝⽤户登陆后的链接直接进⼊系统)
6.⽤户推出系统后是否删除了所有鉴权标记,是否可以使⽤后退键⽽不通过输⼊⼝令进⼊系统
系统⽹络安全的测试要考虑问题:
1.测试采取的防护措施是否正确装配好,有关系统的补丁是否打上
2.模拟⾮授权攻击,看防护系统是否坚固
3.采⽤成熟的⽹络漏洞检查⼯具检查系统相关漏洞(即⽤最专业的⿊客攻击⼯具攻击试⼀下,现在最常⽤的是 NBSI系列和 IPhacker IP )
4.采⽤各种⽊马检查⼯具检查系统⽊马情况
5.采⽤各种防外挂⼯具检查系统各组程序的客外挂漏洞
数据库安全考虑问题:
1.系统数据是否机密(⽐如对银⾏系统,这⼀点就特别重要,⼀般的⽹站就没有太⾼要求)
2.系统数据的完整性(我刚刚结束的企业实名核查服务系统中就曾存在数据的不完整,对于这个系统的功能实现有了障碍)
3.系统数据可管理性
4.系统数据的独⽴性
5.系统数据可备份和恢复能⼒(数据备份是否完整,可否恢复,恢复是否可以完整)
浏览器安全
同源策略:不同源的“document”或脚本,不能读取或者设置当前的“document”
同源定义:host(域名,或者IP),port(端⼝号),protocol(协议)三者⼀致才属于同源。
要注意的是,同源策略只是⼀种策略,⽽⾮实现。这个策略被⽤于⼀些特定的点来保护web的安全。
<script>,<img>,<iframe>,<link>等标签都可以跨域加载资源,不受同源策略的限制。
XMLHttpRequest,DOM,cookie受到同源策略的限制。
⽹站可以通过提供l来允许某些源跨域访问⾃⼰的资源。
google chrome使⽤了多进程来隔离代码运⾏的环境,从⽽起到提⾼web安全的作⽤
Q & A
Q:cookie为什么需要同源策略?
A:cookie有同源策略是必须的,这样可以保证A⽹站的⽤户(识别)信息不会被B⽹站获取到
Q:XMLHttpRequest为什么需要同源策略?
A:两个例⼦:
(1)加⼊没有同源策略,某个⽹站的某张页⾯被你写⼊了⼀些js ,这些js有些ajax操作,如果某个⽤户访问了这张页⾯,你的js就可以获得⽤户的某些信息(cookie,本地⽂件等)然后通过ajax发送回你的。这就是安全问题,信息泄漏。
其实这个就是XSS攻击,为了防⽌XSS攻击后,⽤ajax请求返回⽤户敏感信息。但是其实XSS的攻击仅靠XMLHttpRequest的同源策略根本没⽤,后⾯的章节会看到。这也许是当时XSS还没那么丰富的时候,还算⽐较有效的安全策略。
(2)先假设浏览器没有限制跨域,A站的xhr请求B站的⼀个url,那么浏览器是要带上谁家的cookie⼀起请求呢?(每次http请求都要带上该站下的所有cookie)显然是B家的。假设B家的⽹站当前⽤户已经登录,那么cookie⾥⾃然记录下了sessionId相关的东西以标识当前⽤户的⾝份,那么本次xhr请求很easy的通过了⾝份认证,然后后果就是的。
这个就很正确,如果A可以⽤xhr跨站访问B,带着B的cookie⾃然可以通过B⽹站的验证,从⽽获取到敏
感数据。所以这点是关键。
web安全测试⽅法:
⼯具扫描
⽬前web安全扫描器针对OSinjection, XSS、SQL injection 、OPEN redirect 、PHP File Include漏洞的检测技术已经⽐较成熟。
商业软件web安全扫描器:有IBM Rational Appscan、、Acunetix WVS 、burp suite
免费的扫描器:W3af 、Skipfish 等
根据业务资⾦,可以考虑购买商业扫描软件,也可以使⽤免费的,各有各的好处。
⾸页可以对⽹站进⾏⼤规模的扫描操作,⼯具扫描确认没有漏洞或者漏洞已经修复后,再进⾏以下⼿⼯检测。
⼿⼯检测
对于CSRF、越权访问、⽂件上传、修改密码等漏洞,难以实现⾃动化检测的效果,这是因为这些漏洞
涉及系统逻辑或业务逻辑,有时候还需要⼈机交互参与页⾯流程,
因此这类漏洞的检测更多的需要依靠⼿动测试完成。
⼿⼯检测⽹站URL、后台登陆是否具有
SQL注⼊
Admin--
‘or --
‘ and ( ) exec insert * % chr mid
and 1=1 ; And 1=1 ; aNd 1=1 ; char(97)char(110)char(100) char(49)char(61)char(49) ; %20AND%201=2
‘and 1=1 ; ‘And 1=1 ; ‘aNd 1=1 ;
and 1=2 ; ‘and 1=2
and 2=2
and user>0
and (select count(*) from sysobjects)>0
and (select count(*) from msysobjects)>0
and (Select Count(*) from Admin)>=0
and (select top 1 len(username) from Admin)>0(username 已知字段)
;p_cmdshell “net user name password /add”—
;p_cmdshell “net localgroup name administrators /add”—
and 0<>(select count(*) from admin)
XSS:
对于get请求的URL⼀般漏洞扫描软件都可扫描到是否存在XSS漏洞。(但是软件没有完美的,也有误报,或者有遗漏的情况)
对于POST的请求的(例如留⾔板,评论,等等),就是要在输⼊框输⼊的情况,则要进⾏以下测试
★~!@#$%^&*()_+<>,./?;'"[]{}\-
★%3Cinput /%3E
★%3Cscript%3Ealert('XSS')%3C/script%3E
★<input type="text"/>
★<input/>
★<input/
★<script>alert('xss')</script>
★<script>alert('xss');</script>
★</script><script>alert(‘xss’)</script>
★javascript:alert(/xss/)
★javascript:alert(/xss/)
★<img src="#" onerror=alert(/xss/)>
★<img src="#" >
★<img src="#"/**/onerror=alert(/xss/) width=100>
★=’><script>kie)</script>
★1.jpg" onmouseover="alert('xss')
★"></a><script>alert(‘xss’);</script>
★xxx';alert('xss');var/ a='a
★’”>xss&<
★"onmouseover=alert('hello');"
★&{alert('hello');}
★>"'><script>alert(‘XSS')</script>
★>%22%27><img%20src%3d%22javascript:alert(%27XSS%27)%22>
★>"'><img%20src%3D%26%23x6a;%26%23x61;%26%23x76;%26%23x61;%26%23x73;%26%23x63;%26%23x72;%26%23x69; %26%23x70;%26%23x74;%26%23x3a;alert(%26quot;XSS%26quot;)>
★AK%22%20style%3D%22background:url(javascript:alert(%27XSS%27))%22%20OS%22
★%22%2Balert(%27XSS%27)%2B%22
★<table background="javascript:alert(([code])"></table>
★<object type=text/html data="javascript:alert(([code]);"></object>
★<body onload="javascript:alert(([code])"></body>
★a?<script>alert(’Vulnerable’)</script>
★<!--'">&:
var from = ‘$!String(’from’)';
var from = ”;kie);”;
上⾯这些同样适⽤于GET请求
经过以上测试,如果发现输⼊框代码溢出,则说明可能存在XSS漏洞,说明要进⾏过滤.
关于越权操作的问题
例如A⽤户的个⼈资料ID为1 B⽤户个⼈资料ID为2,我通过登陆B⽤户,把ID修改为1 就可以查看到⽤户A的个⼈资料,这就是越权。测试⽅法:通过查看URL的get参数对那些类似明显的顺序数字进⾏修改,看是否能越权访问。
关于登陆安全的问题
除了SQL注⼊,还有回密码功能会出现安全问题
邮箱回密码测试⽅法:
先从邮箱参数修改开始,看填⼊⽤户名和⾃⼰修改的邮箱账号,看是否能收到邮箱,收到后是否能修改。
如果不能修改邮箱参数那么,我们就让它邮箱回,接着点击邮箱内修改密码的链接,看链接的邮箱参数是否可以修改,⽤户名是否可以修改,加密的urlcode 是否可以逆向解密。
如果是⼿机回密码功能:则测试⼿机收到的验证码是否是纯数字、纯字母的,如果是请修改为字母与数字的组合。
关于⽤开源程序的问题
关注⽹上你所⽤的开源程序的官⽹更新情况和安全事件。
关于上传:
1.上传⽂件是否有格式限制,是否可以上传exe⽂件;
2.上传⽂件是否有⼤⼩限制,上传太⼤的⽂件是否导致异常错误,上传0K的⽂件是否会导致异常错误,上传并不存在的⽂件是否会导致异常错误;
3.通过修改扩展名的⽅式是否可以绕过格式限制,是否可以通过压包⽅式绕过格式限制;
4.是否有上传空间的限制,是否可以超过空间所限制的⼤⼩,如将超过空间的⼤⽂件拆分上传是否会出现异常错误。
5.上传⽂件⼤⼩⼤于本地剩余空间⼤⼩,是否会出现异常错误。
6.关于上传是否成功的判断。上传过程中,中断。程序是否判断上传是否成功。
7.对于⽂件名中带有中⽂字符,特殊字符等的⽂件上传。
下载:
避免输⼊:\..\web.
修改命名后缀。
输⼊验证
客户端验证服务器端验证(禁⽤脚本调试,禁⽤Cookies)
1.输⼊很⼤的数(如4,294,967,269),输⼊很⼩的数(负数)
2.输⼊超长字符,如对输⼊⽂字长度有限制,则尝试超过限制,刚好到达限制字数时有何反应
3.输⼊特殊字符,如:~!@#$%^&*()_+<>:”{}|
4.输⼊中英⽂空格,输⼊字符串中间含空格,输⼊⾸尾空格
5.输⼊特殊字符串NULL,null,0x0d 0x0a
6.输⼊正常字符串
7.输⼊与要求不同类型的字符,如: 要求输⼊数字则检查正值,负值,零值(正零,负零),⼩数,字母,空值; 要求输⼊字母则检查输⼊数字
8.输⼊html和JavaScript代码
9.对于像回答数这样需检验数字正确性的测试点,不仅对⽐其与问题最终页的回答数,还要对回答进⾏添加删除等操作后查看变化
例如:
1.输⼊<html”>”gfhd</html>
2.输⼊<input type=”text” name=”user” onclick="alert(1)"/>,看是否出现⽂本框;
3.输⼊<script type=”text/javascript”>alert(“提⽰”)</script>看是否出现提⽰。
4.输⼊”><script type=”text/javascript”>alert(“提⽰”)</script>看是否出现提⽰。
5.输⼊ ”><script><” 看是否出现代码溢出
页⾯权限泄露
测试在不登陆的情况下是否可以访问到后台的页⾯,这个只要把后台的⽬录的URL全部浏览⼀遍即可
关于任意⽂件下载
查看上传的图⽚⽂件是否可以删除,如果可以删除,查看删除的URL⾥⾯的参数是否可以修改。
详细的测试点:
1.跨⽹站脚本攻击
通过脚本语⾔的缺陷模拟合法⽤户,控制其账户,盗窃敏感数据
2.注⼊攻击
通过构造查询对数据库、LDAP和其他系统进⾏⾮法查询
软件测试的方法有哪些
3.恶意⽂件执⾏
在服务器上执⾏Shell 命令Execute,获取控制权
4.伪造跨站点请求
发起Blind 请求,模拟合法⽤户,要求转账等请求
5.不安全对象引⽤
不安全对象的引⼊,访问敏感⽂件和资源,WEB应⽤返回敏感⽂件内容
6.被破坏的认证和Session管理
验证Session token 保护措施,防⽌盗窃session
7.Session的失效时间限制
Session的失效时间设置是否过长,会造成访问风险
8.不安全的⽊马存储
过于简单的加密技术导致⿊客破解编密码,隐秘信息被盗窃,验证其数据加密
9.不安全的通讯
敏感信息在不安全通道中以⾮加密⽅式传送,敏感信息被盗窃,验证其通讯的安全性
10.URL访问限制失效
验证是否通过恶意⼿段访问⾮授权的资源链接,强⾏访问⼀些登陆⽹页,窃取敏感信息
11.信息泄露和不正确错误处理测试
恶意系统检测,防⽌⿊客⽤获取WEB站点的具体信息的攻击⼿段获取详细系统信息
12.注册与登录测试
验证系统先注册后登录、验证登录⽤户名和密码匹配校验,密码长度及尝试登录次数,防⽌⾮法⽤户登录
13.超时限制
验证WEB应⽤系统需要有是否超时的限制,当⽤户长时间不做任何操作的时候,需要重新登录才能使⽤
14.⽇志⽂件
验证服务器上⽇志是否正常⼯作,所有事务处理是否被记录
15.⽬录⽂件
验证WEB服务器⽬录访问权限,或者每个⽬录访问时有index.htm,防⽌ WEB 服务器处理不适当,将整个WEB⽬录暴露16.⾝份验证
验证调⽤者⾝份、数据库⾝份、验证是否明确服务账户要求、是否强制式试⽤账户管理措施
17.授权
验证如何向最终⽤户授权、如何在数据库中授权应⽤程序,确定访问系统资源权限
18.会话
验证如何交换会话标识符、是否限制会话⽣存期、如何确保会话存储状态安全
19.配置管理
验证是否⽀持远程管理、是否保证配置存储安全、是否隔离管理员特权
20.备份与恢复
为了防⽌系统意外崩溃造成的数据丢失,验证备份与恢复功能正常实现、备份与恢复⽅式是否满⾜Web系统安全性要求
21.数据库关键数据是否进⾏加密存储,是否在⽹络中传递敏感数据
22.在登录或注册功能中是否有验证码存在,防⽌恶意⼤批量注册登录的攻击
23.Cookie⽂件是否进⾏了加密存储,防⽌盗⽤cookie内容
24.密码强度提醒
建议对密码的规则进⾏加强设置
25.密码内容禁⽌拷贝粘贴