二十一世纪,智能化的软件成为商业决策、推广等不可缺少的利器,很多软件涉及了客户商业上重要的信息资料,因此客户很关心软件的安全性。往往一个细小的安全漏洞,对客户产生的影响都是巨大的。所以我们需要尽可能的保证软件的安全性,确保软件在安全性方面能满足客户期望。
  一、那么什么是软件安全性测试 ?
  安全性测试是指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程。应用程序级安全测试的主要目的是查找软件自身程序设计中存在的安全隐患,并检查应用程序对非法侵入的防范能力,根据安全指标不同测试策略也不同。
  二、安全性测试又有哪些方法和手段呢?
  目前有许多种的测试手段可以进行安全性测试,安全测试方法分主要为三种:
  ①静态的代码安全测试:主要通过对源代码进行安全扫描,根据程序中数据流、控制流、语义等信息与其特有软件安全规则库进行匹对,从中找出代码中潜在的安 全漏洞。静态的源代码安全测试是非常有用的方法,它可以在编码阶段找出所有可能存在安全风险的代码,这样开发人员可以在早期解决潜在的安全问题。而正因为如此,静态代码测试比较适用于早期的代码开发阶段,而不是测试阶段。
  ②动态的渗透测试:渗透测试也是常用的安全测试方法。是使用自动化工具或者人工的方法模拟黑客的输入,对应用系统进行攻击性测试,从中找出运行时刻所存在的安全漏洞。这种测试的特点是真实有效,一般找出来的问题都是正确的,也是较为严重的。但渗透测试一个致命的缺点是模拟的测试数据只能到达有限的测试点,覆盖率很低。
  ③程序数据扫描。一个有高安全性需求的软件, 在运行过程中数据是不能遭到破坏的,否则会导致缓冲区溢出类型的攻击。数据扫描的手段通常是进行内存测试,内存测试可以发现许多诸如缓冲区溢出之类的漏洞,而这类漏洞使用除此之外的测试手段都难以发现。例如,对软件运行时的内存信息进行扫描,看是否存在一些导致隐患的信息,当然这需要专门的工具来进行验证(比如:HP WebInspect、IBM Appscan和Acunetix Web Vulnerability Scanner)。
  三、常见的软件安全性缺陷和漏洞有哪些?
  软件的安全包含很多方面的内容,主要的安全问题是由软件本身的漏洞造成的,下面我们说说几种常见的软件安全性缺陷和漏洞,大家在程序开发或是测试时不妨考虑或验证一下,我们所开发或是测试的程序,是否存在这些方面的安全隐患。
  (1)SQL注入
  所谓SQL注入式攻击,是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。
  简单举个小例子,一个登录模块,让你输入用户名密码。我们一般都会老老实实的输入我们的用户名和密码。但如果我们刻意的去绕过登录认证呢?猜想下面这个sql语句,单说用户名,开发人员很可能会这样去数据库里对比:
  Select * from sys_user where username=‘XXX’
  当然可能更复杂,假如我们在输入框里输入下面一句特殊的字符会如何?’or‘1=1
  这是段神奇的字符,因为这样这个sql变成:
  Select * from sys_user where username=‘’or‘1=1’
  这样我们跳过了用户名的验证,实现了入侵,是不是很简单,看到这里大家不妨动手尝试一下吧。
  (2)修改提交数据
  曾经某公司做过一个关于在线支付的商城,在安全性测试过程中,发现通过抓包抓到的提交价格(如使用火狐插件:live http headers),经过修改再发包可以通过。简单来说是本来100块钱买的东西,抓包修改为1块能成功购买。这成为了一个巨大的隐患。