软件安全性测试包括程序、网络、数据库安全性测试。
安全测试检查系统对非法侵入的防范能力。安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。例如,①想方设法截取或破译口令;②专门定做软件破坏系统的保护机制;③故意导致系统失败,企图趁恢复之机非法进入;④试图通过浏览非保密数据,推导所需信息,等等。理论上讲,只要有足够的时间和资源,没有不可进入的系统。因此系统安全设计的准则是,使非法侵入的代价超过被保护信息的价值。此时非法侵入者已无利可图。
1.用户程序安全的测试要考虑问题包括:
① 明确区分系统中不同用户权限;
② 系统中会不会出现用户冲突;
③ 系统会不会因用户的权限的改变造成混乱;
④ 用户登陆密码是否是可见、可复制;
⑤ 是否可以通过绝对途径登陆系统(拷贝用户登陆后的链接直接进入系统);
⑥ 用户推出系统后是否删除了所有鉴权标记,是否可以使用后退键而不通过输入口令进入系统。
2.系统网络安全的测试要考虑问题包括:
① 测试采取的防护措施是否正确装配好,有关系统的补丁是否打上;
② 模拟非授权攻击,看防护系统是否坚固;
③ 采用成熟的网络漏洞检查工具检查系统相关漏洞;
④ 采用各种木马检查工具检查系统木马情况;
⑤ 采用各种防外挂工具检查系统各组程序的客外挂漏洞。
3.数据库安全考虑问题:
① 系统数据是否机密(比如对银行系统,这一点就特别重要,一般的网站就没有太高要求);
② 系统数据的完整性;
③ 系统数据可管理性;
④ 系统数据的独立性;
⑤ 系统数据可备份和恢复能力(数据备份是否完整,可否恢复,恢复是否可以完整)。
安全性测试的测试点
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.密码内容禁止拷贝粘贴
常见的软件安全性缺陷和漏洞有哪些?
(1)SQL注入
所谓的sql注入就是通过某种方式将恶意的sql代码添加到输入参数中,然后传递到sql服务器使其解析并执行的一种攻击手法。
小例子
一个登录模块,让你输入用户名密码。如果我们刻意的去绕过登录认证呢?猜想下面这个sql语句,单说用户名,开发人员很可能会这样去数据库里对比:
Select * from sys_user where username=‘XXX’
当然可能更复杂,假如我们在输入框里输入下面一句特殊的字符会如何?’or‘1=1
这是段神奇的字符,因为这样这个sql变成:
Select * from sys_user where username=‘’or‘1=1’
这样我们跳过了用户名的验证,实现了入侵
四种SQL注入方式:
联合注入。当查询数据会返回显示界面时可以考虑使用union联合查询的方式
基于错误的注入。当输入特殊字符页面出现报错信息时则可以考虑使用基于错误的注入
布尔盲注。当查询的结果不会显示在界面,同时不会显示报错信息时,若能从页面反馈中得知SQL语句执行的成功与否可以考虑使用布尔盲注
延时注入。当以上方式都行不通时,只能考虑使用延时注入了。需要用到sleep()函数。
(2)修改提交数据
曾经某公司做过一个关于在线支付的商城,在安全性测试过程中,发现通过抓包抓到的提交价格(如使用火狐插件:live http headers),经过修改再发包可以通过。简单来说是本来100块钱买的东西,抓包修改为1块能成功购买。这成为了一个巨大的隐患。