qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

软件安全性测试

 二十一世纪,智能化的软件成为商业决策、推广等不可缺少的利器,很多软件涉及了客户商业上重要的信息资料,因此客户很关心软件的安全性。往往一个细小的安全漏洞,对客户产生的影响都是巨大的。所以我们需要尽可能的保证软件的安全性,确保软件在安全性方面能满足客户期望。
  一、那么什么是软件安全性测试 ?
  安全性测试是指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程。应用程序级安全测试的主要目的是查找软件自身程序设计中存在的安全隐患,并检查应用程序对非法侵入的防范能力,根据安全指标不同测试策略也不同。
  二、安全性测试又有哪些方法和手段呢?
  目前有许多种的测试手段可以进行安全性测试,安全测试方法分主要为三种:
  ①静态的代码安全测试:主要通过对源代码进行安全扫描,根据程序中数据流、控制流、语义等信息与其特有软件安全规则库进行匹对,从中找出代码中潜在的安 全漏洞。静态的源代码安全测试是非常有用的方法,它可以在编码阶段找出所有可能存在安全风险的代码,这样开发人员可以在早期解决潜在的安全问题。而正因为如此,静态代码测试比较适用于早期的代码开发阶段,而不是测试阶段。
  ②动态的渗透测试:渗透测试也是常用的安全测试方法。是使用自动化工具或者人工的方法模拟黑客的输入,对应用系统进行攻击性测试,从中找出运行时刻所存在的安全漏洞。这种测试的特点就是真实有效,一般找出来的问题都是正确的,也是较为严重的。但渗透测试一个致命的缺点是模拟的测试数据只能到达有限的测试点,覆盖率很低。
  ③程序数据扫描。一个有高安全性需求的软件, 在运行过程中数据是不能遭到破坏的,否则就会导致缓冲区溢出类型的攻击。数据扫描的手段通常是进行内存测试,内存测试可以发现许多诸如缓冲区溢出之类的漏洞,而这类漏洞使用除此之外的测试手段都难以发现。例如,对软件运行时的内存信息进行扫描,看是否存在一些导致隐患的信息,当然这需要专门的工具来进行验证(比如: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块就能成功购买。这就成为了一个巨大的隐患。
(3)跨站脚本攻击
  XSS是如何发生的呢?假如有下面一个textbox:
  <input type="text" name="address1" value="value1from">
  value后面的值是来自用户的输入,如果用户输入
  "/><script>alert(document.cookie)</script><!-
  那么就会变成
  <input type="text" name="address1" value=""/><script>alert(document.cookie)</script><!- ">
  嵌入的JavaScript代码将会被执行
  或者用户输入的是:
  "onfocus="alert(document.cookie)
  那么就会变成
  <input type="text" name="address1" value=""onfocus="alert(document.cookie)">
  事件被触发的时候嵌入的JavaScript代码将会被执行。
  (4)缓冲区溢出
  缓冲区溢出已成为软件安全的头号公敌,许多实际中的安全问题都与它有关。造成缓冲区溢出问题通常有以下两种原因。①设计空间的转换规则的校验问题。即缺乏对可测数据的校验,导致非法数据没有在外部输入层被检查出来并丢弃。非法数据进入接口层和实现层后,由于它超出了接口层和实现层的对应测试空间或设计空 间的范围,从而引起溢出。②局部测试空间和设计空间不足。当合法数据进入后,由于程序实现层内对应的测试空间或设计空间不足,导致程序处理时出现溢出。
  (5)加密弱点
  这几种加密弱点是不安全的:①使用不安全的加密算法。加密算法强度不够,一些加密算法甚至可以用穷举法破解。②加密数据时密码是由伪随机算法产生的,而产生伪随机数的方法存在缺陷,使密码很容易被破解。③身份验证算法存在缺陷。④客户机和服务器时钟未同步,给攻击者足够的时间来破解密码或修改数据。⑤未对加密数据进行签名,导致攻击者可以篡改数据。所以,对于加密进行测试时,必须针对这些可能存在的加密弱点进行测试。
  四、做好安全性测试的建议
  其实许多软件安全测试经验告诉我们,想要做好安全测试其实并不是件容易的事,不光要使用高效的软件安全测试技术和工具,而且要充分了解软件安全漏洞,以及一些黑客攻击手段,还要掌握丰富而全面的技能,如编程、网络、数据库等知识。技术在不断的发展,只有不断的学习、积累、总结,从而最终以量变达到质变。
  希望通过这篇文章可以让大家对安全测试有所了解,更多安全测试技术有待我们大家一起交流、探讨。

posted on 2013-09-27 10:41 顺其自然EVO 阅读(1269) 评论(0)  编辑  收藏 所属分类: 安全性测试


只有注册用户登录后才能发表评论。


网站导航:
 
<2013年9月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜