安全测试

上一篇 / 下一篇  2014-06-26 13:46:44 / 个人分类:学习笔记

常用安全测试方法:

静态分析技术:

主要通过对源代码进行安全扫描,根据程序中程序流、控制流、语义等信息跟软件安全规则进行匹对,从中找出代码中潜在的安全漏洞。可以在代码开发阶段找出大部分的安全漏洞。

逆向分析技术:

通过分析反汇编代码(或字节码)来理解其代码功能,如各接口的数据结果等,然后用高级语言重新描述这段代码,逆向推出原软件的思路。

动态分析技术:

在软件运行时验证软件是否正常运行,监控软件内存安全使用情况。

Fuzzing测试:

一种基于缺陷注入自动软件测试技术。通过编写Fuzzer工具向目标程序提供某种形式的输入并观察其响应来发现问题,这种输入可以是完全随机的或精心设计的。

参透测试:

常用的安全测试方法。使用自动化工具或者人工的方法模拟黑客的输入,对应用系统进行攻击性测试,从中找出运行时刻所存在的漏洞。

这种测试方法的特点是:真实有效。一般找出来的问题都是正确的,也是比较严重的。但是由于模拟的测试数据有限,因此覆盖率比较低。AppScan

 

安全漏洞分析与检测

缓冲区溢出:

非常普遍、非常危险的漏洞。在各种操作系统、应用软件中广泛存在。

后果:导致程序运行失败、系统宕机、重新启动等后果。更为严重的可以利用它进行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。

原理:通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程度的堆栈,使程序转而执行其他的指令。

原因:程序中没有检查用户输入的参数。

检测方法:静态分析(RATS,动态分析(BoundsChecker

防范:检查输入;小心使用函数(strcpy/strcat/gets/sprintf/scanf/strdup...)


整数溢出:

数据类型整数存储的是一个固定长度的值,它能存储的最大值是固定的,当尝试存储一个大于固定值的数据时,将会导致一个整数发生“溢出”现象。

整数溢出并不都是可以利用的,因为没有直接改写内存,但是有时候会导致其他类型的错误,例如缓冲区溢出。

检测方法:静态(splint),动态(BoundsChecker/Purify)

防范:对于缓冲区和元素计数,尽量使用无符合的整数;警惕内存分配函数(new、malloc等)的有符合参数,因为它们将被视为无符号的整数;审查从其他编译器或平台迁移过来的代码,可能会使用不同的数据大小;如果代码执行整数操作(如加、乘等)的结果计算缓冲区大小时,请检查数值在合理的范围内。


格式化字符串攻击:

主要是利用由于格式化函数的微妙程序设计错误造成的安全漏洞,通过传递含有格式化指令的文本字符串,以使目标程序执行任意命令。

检测方法:静态(RATS/Fortify)

防范:检查输入;比较传递给格式化函数的实际参数个数和所需的参数个数。

命令注入:
使用系统命令是一项危险的操作,尤其是在视图使用用户输入数据来构造要执行的命令时,如果使用了污染的数据,命令漏洞就产生了。

检测方法:静态分析(Fortify、Klocwork)

防范:检查输入;重点关注System()、popen()、execlp()、execvp()等系统命令调用函数的使用。


SQL注入:
一种广泛的攻击类型,可以穿过防火墙入侵检测系统,破坏服务器后台数据,甚至控制服务器。  C/S 、B/S都有可能。

防范:检查和过滤用户输入;不要动态构建SQL语句,改用参数。


XML注入:

XML通常用于存储数据,如果用户提供的数据是以XML的方式存储的,那么对攻击者来说,注入额外的、攻击者可能不能正常控制的XML是有可能的。

例如:

<?xml version="1.0" encoding="UTF-8"?>

<USER role="guest">User1</USER>

<USER role="admin">User2</USER>


XPath注入:

XPath是能够查询XML文档的语言,类似于结构化查询语言SQL。事实上,许多流行的数据库允许使用XPath来查询数据库。

在许多情况下,攻击者不能够直接访问XML数据,但是,攻击者可以用部分数据来创造XPath语句,而这些语句能够用来查询XML。

防范:假定所有输入都可疑;不仅要验证数据的类型,还要验证其格式、长度、范围和内容(例如,一个鉴定的正则表达式if(/^"*^';&<>()/)就可以找出大多数可疑的特殊字符;改用XQuery参数化。


DOS(拒绝服务):
DOS(denial of service)”拒绝服务“攻击是指故意导致应用程序的可用性降低,例如,让Web应用程序负载过度,使其无法为普通用户服务;或者导致服务器出现故障。

恶意用户可能通过间接的方式攻击应用系统,例如通过频繁的请求让应用系统过于繁忙而无法为其他用户提供服务,或者导致应用程序崩溃,这种攻击方式成为拒绝服务攻击。

检测与防御

  1. 在错误处理模版(例如:try-catch),检查是否包含finally块,以便在出错时释放资源。主要采用代码走查的方式测试。
  2. 在使用或存储用户输入前,测试输入的数据大小是否在限制范围,或者数据类型是否正确。并且检查返回的数据量的合理性。主要采用黑盒测试的方法来测试。例如对数据库的查询,如果数据量很大,检查是否在界面中显示查询结果之前确保了记录数是合理的。
  3. 检查文件上传是否对大小进行了限制。检查在ASP.NET的配置文件,也可以采用黑盒测试的方法,尝试上传一些超大的文件,看应用程序是否会出错。


信息泄漏:

 暴露错误信息对于开发人员和系统维护人员是有用的,可以根据这些错误信息来推断程序出错的原因,并且定位到出错的代码。

对用户来说错误信息不友好,过于技术性。

对于恶意用户来说,这些信息提供了进一步攻击应用系统的机会。

防范:

检查log文件记录规范,除了要记录成功运行,也要记录失败,有助于识别攻击者的意图和计划。

检查调试代码、”后门“代码、备份文件(例如:index.jsp.bak、welcome.jsp.txt等)。

检查代码中是否内嵌秘密数据(扫描代码,寻找特定的关键字secret/key/password/pwd等)


TAG:

 

评分:0

我来说两句

日历

« 2024-04-24  
 123456
78910111213
14151617181920
21222324252627
282930    

我的存档

数据统计

  • 访问量: 8757
  • 日志数: 6
  • 建立时间: 2014-06-25
  • 更新时间: 2014-06-26

RSS订阅

Open Toolbar