Fuzzing,或者 Fuzz Testing

模糊测试是安全行业中一种众所周知的发现软件错误的技术

在传统软件中,通过模糊器(Fuzzer)自动或半自动生成随机数据输入到程序中,监视程序异常:崩溃、断言失败、内存泄漏等

如何通过一些技术和策略生成一些更有意义的数据,经历了不同时代范式的迭代成长,2013年,AFL(American Fuzzy Lop)被提出。

AFL是一款基于覆盖引导的模糊测试工具,它采用遗传算法来有效地提高测试用例的代码覆盖率。

如果一个新的测试用例提升了代码覆盖率,就认为它是好的种子,然后保留下来进入下一轮,不断变异迭代,不断提升代码覆盖率,直到覆盖率不再明显升高。

Untitled

真正的AFL在过程的每一步都有一些策略,比如

基于属性的模糊测试

与传统的软件不一样,智能合约不会崩溃,所以模糊测试对于智能合约来说主要是尝试找出可以破坏合约属性的用例,属性(property) ≈ 不变量(invariant)

比如: