安全测试测必要性
系统如果有功能性bug,最多是体验不好,损失点用户,本质上问题不是很大,青山还在,柴还有得砍。但是如果有高危漏洞,被黑客入侵,往小了说,服务可能瘫痪导致用户或资金的损失,或是数据丢失和泄露,或是服务资源被黑客恶意利用,或是公司被勒索,导致公司业务无法正常运作或是损失过大。但是往大了说,如果黑客在入侵后在该司对外网站上挂上任何和黄赌毒反动等相关的任何内容,那么就不是公司自己的问题了,根据严重情况决定解决,小则罚款停业整顿,大则直接关停。
安全测试的策略
安全性测试(Security Testing)是指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程,其主要目的是查找软件自身程序设计中存在的安全隐患,并检查应用程序对非法侵入的防范能力,安全指标不同,测试策略也不同。
但安全是相对的,安全性测试并不能最终证明应用程序是安全的,而只能验证所设立策略的有效性,这些对策是基于威胁分析阶段所做的假设而选择的。例如,测试应用软件在防止非授权的内部或外部用户的访问或故意破坏等情况时的运作。
软件安全是软件领域中一个重要的子领域,系统安全性测试包括应用程序和操作系统两个方面的安全性。而系统安全性分两类:一是软件漏洞,设计上的缺陷或程序问题;二是数据库的安全性,这也是系统安全性的核心。
安全测试的常用方法
- 静态代码检(对比安全规则库校验数据流、控制流、信息流)
- 静态代码检查主要是通过代码走读的方式对源代码的安全性进行测试,常用的代码检查方法有数据流、控制流、信息流等,通过这些测试方法与安全规则库进行匹配,进而发现潜在的安全漏洞。静态代码检查方法主要是在编码阶段进行测试,尽可能早地发现安全性问题。
- 动态渗透测试(借助工具模拟黑客的输入)
- 动态渗透测试法主要是借助工具或手工来模拟黑客的输入,对应用程序进行安全性测试,进而发现系统中的安全性问题。动态渗透测试一般在系统测试阶段进行,但覆盖率较低,因为在测试过程中很难覆盖到所有的可能性,只能是尽量提供更多的测试数据来达到较高的覆盖率。
- 扫描程序中的数据(内存)
- 系统的安全性强调,在程序运行过程中数据必须是安全的,不能遭到破坏,否则会导致缓冲区溢出的攻击。数据扫描主要是对内存进行测试,尽量发现诸如缓冲区溢出之类的漏洞,这也是静态代码检查和动态渗透测试很难测试到的。
从用户认证、网络、数据库和Web 四个角度进行安全性测试,需要注意以下几个方面:
用户认证安全性测试
- 验证 不同用户权限或角色设置
- 验证 不同用户是否存在冲突
- 验证 修改后的用户权限
- 验证 用户密码是否加密、是否可复制
- 验证 是否可以通过绝对途径登录系统?
- 用户退出后是否删除其登录时的相关信息
网络安全性测试
- 防护措施是否正确装配完成,系统补丁是否正确
- 非授权攻击,检查防护策略的正确性
- 采用网络漏洞工具检查系统相关漏洞(常用的两款工具为NBSI 和IPhackerIP?)
- 采集木马工具,检查木马情况
- 采用各种防外挂工具检查程序外挂漏洞
数据库安全性测试
- 数据库是否具备备份和恢复的功能
- 是否对数据进行加密
- 是否有安全日志文件
- 无关IP 禁止访问
- 用户密码使用强口令
- 不同用户赋予不同权限
- 是否使用视图和存储过程
Web 安全性测试
- 部署与基础结构
- 输入验证
- 身份验证
- 授权
- 配置管理
- 敏感数据
- 会话管理
- 加密
- 参数操作
- 异常管理
- 审核和日志记录