软件测试-file fuzzing

来源:互联网 发布:日本找工作知乎 编辑:程序博客网 时间:2024/06/02 09:01

 

关键词:软件测试, fuzzing,  安全, 自动化测试

 

 

Fuzzing是一种基于缺陷注入的自动软件测试技术。通过编写fuzzer工具向目标程序提供某种形式的输入并观察其响应来发现问题,这种输入可以是完全随机的或精心构造的。Fuzzing测试通常以大小相关的部分、字符串、标志字符串开始或结束的二进制块等为重点,使用边界值附近的值对目标进行测试。(This means fuzztesting is an assurance of overall quality, rather than a bug-finding tool)fuzzing不是测试软件正确性,而是一个漏洞发现工具。

 

主要有两种类型的fuzzing技术dumb fuzzing这种测试无需了解协议或文件本身格式,通过提供完全随机的输入或简单改变某些字节去发现问题。这种方法实现起来较简单,容易快速触发错误,但它的完全随机性会导致产生大量无效的输入或格式。Intelligent fuzzing研究目标应用程序的协议或文件格式、功能配置,了解各类漏洞的成因,有目的地编写fuzzer。编写有效的fuzzer需要花费时间,但能够对某些感兴趣的部分集中测试,因此更有效。

 

Fuzzing输入数据

 (any type of program input can befuzzed. Interesting inputs include environment variables, keyboard and mouseevents, and sequences of API calls. Even items not normally considered"input" can be fuzzed, such as the contents of databasesshared memory, or the precise interleaving of threads.) Fuzzing输入数据可以是环境变量,键盘,鼠标,api调用,数据库内容,共享内存,线程切换。

 

在对目标进行fuzzing的过程中,也可能存在各种问题:校验和、加密、压缩等措施会大大增加fuzzer工具的编写难度;编写智能化的fuzzer依赖目标程序的协议文档,因此协议文档的完整性影响fuzzing测试的效果,等等。Fuzzing测试过程中需要采取措施记录目标的状态,通常通过日志的方式记录下各种信息,以便后续分析。目前比较有名的fuzzer工具有SPIKE和Peach,它们提供了对许多协议接口的支持,现有的许多fuzzer都是基于这两个框架实现的。

 

Fuzzing作用

Fuzzing可以检查崩溃(crash),断言(assertionfailures),内存泄漏(memory leaks), 异常处理(error-handlingroutines), incorrect-serialization,补丁(unintentionaldifferences between two versions)。

 

 

FileFuzz

http://www.fuzzing.org/wp-content/FileFuzz.zip

 filefuzz测试pdfreader

Pdf reader没有出现crash, 同志仍需努力 !!

 

Fuzzing测试问题

1.        Fuzzer简化了测试场景。<Thecomputational complexity of the software testing problem is ofexponential order (O(c^n), c>1)and every fuzzer takes shortcuts to find something interesting in atimeframe that a human cares about. >

2.        代码覆盖率

 

 

 

参考资料

《模糊测试-强制性安全漏洞发掘》

http://en.wikipedia.org/wiki/Fuzz_testing


0 0
原创粉丝点击