安全性测试(Security Testing)是指有关验证应用程序的安全等级和识别潜在安全性缺陷的过 程,其主要目的是查找软件自身程序设计中存在的安全隐患,并检查应用程序对非法侵入的防范能 力,安全指标不同,测试策略也不同。 但安全是相对的,安全性测试并不能最终证明应用程序是安全的,而只能验证所设立策略的有 效性,这些对策是基于威胁分析阶段所做的假设而选择的。例如,测试应用软件在防止非授权的内 部或外部用户的访问或故意破坏等情况时的运作。 软件安全是软件领域中一个重要的子领域,系统安全性测试包括应用程序和操作系统两个方面 的安全性。而系统安全性又包括两个方面的测试:一是软件漏洞,设计上的缺陷或程序问题;二是 数据库的安全性,这也是系统安全性的核心。 安全测试的常用方法有以下几种:
(1)静态代码检查。 静态代码检查主要是通过代码走读的方式对源代码的安全性进行测试,常用的代码检查方法有 数据流、控制流、信息流等,通过这些测试方法与安全规则库进行匹配,进而发现潜在的安全漏洞。 静态代码检查方法主要是在编码阶段进行测试,尽可能早地发现安全性问题。 (2)动态渗透测试。 动态渗透测试法主要是借助工具或手工来模拟黑客的输入,对应用程序进行安全性测试,进而 发现系统中的安全性问题。动态渗透测试一般在系统测试阶段进行,但覆盖率较低,因为在测试过 程中很难覆盖到所有的可能性,只能是尽量提供更多的测试数据来达到较高的覆盖率。
(3)扫描程序中的数据。 系统的安全性强调,在程序运行过程中数据必须是安全的,不能遭到破坏,否则会导致缓冲区 溢出的攻击。数据扫描主要是对内存进行测试,尽量发现诸如缓冲区溢出之类的漏洞,这也是静态 代码检查和动态渗透测试很难测试到的。 从用户认证、网络、数据库和 Web 四个角度进行安全性测试,需要注意以下几个方面。 (1)用户认证安全性测试。 1)系统中不同用户权限设置; 2)系统中用户是否出现冲突; 3)系统不应该因用户权限改变而造成混乱; 4)系统用户密码是否加密、是否可复制; 5)是否可以通过绝对途径登录系统; 6)用户退出后是否删除其登录时的相关信息; 7)是否可以使用退出键而不通过输入口令进入系统。 (2)网络安全性测试。 1)防护措施是否正确装配完成,系统补丁是否正确; 2)非授权攻击,检查防护策略的正确性; 3)采用网络漏洞工具检查系统相关漏洞(常用的两款工具为 NBSI 和 IPhackerIP); 4)采集木马工具,检查木马情况; 5)采用各种防外挂工具检查程序外挂漏洞。 (3)数据库安全性测试。 1)数据库是否具备备份和恢复的功能; 2)是否对数据进行加密; 3)是否有安全日志文件; 4)无关 IP 禁止访问; 5)用户密码使用强口令; 6)不同用户赋予不同权限; 7)是否使用视图和存储过程。 (4)Web 安全性测试。 1)部署与基础结构; 2)输入验证; 3)身份验证; 4)授权; 5)配置管理; 6)敏感数据; 7)会话管理;8)加密; 9)参数操作; 10)异常管理; 11)审核和日志记录。