软件测试与概率程序分析前沿技术解析
1. KLUZZER与KLEE的对比实验
在软件测试领域,KLUZZER和KLEE是两款备受关注的工具。在执行过程中,当通过求解约束条件来确定具体值时,可能会出现与给定种子值不同的情况,从而导致路径分歧。例如,调用 malloc 函数并使用符号大小会使KLEE(以及KLUZZER)将输入字节数组的第一个字节具体化。即便给定一个种子,其第一个字节为“正确”值(0xED),KLEE仍会将第一个字节具体化为另一个值(0),进而无法满足后续的比较条件。而KLUZZER则会保留第一个字节,并成功修改种子以匹配魔法数字,从而发现使用后释放(use-after-free)的漏洞。
Zesti是KLEE的一个扩展,解决了上述问题。但它基于非常旧的LLVM 2.9版本,且不再受支持,同时采用在线符号执行和根本不同的搜索启发式方法。
为了评估KLUZZER的性能,我们选择了Google的fuzzer - test - suite中的三个真实世界基准测试:boringssl、llvm - libcxxabi和sqlite。选择这些基准测试是因为它们不依赖其他开源库,便于为模糊测试目标构建LLVM位码。KLUZZER基于与最新版本KLEE 2.0非常接近的版本,因此可以使用推荐的LLVM 6.0和STP 2.3.3作为底层SMT求解器。
实验在一台配备8核Intel Core i7 - 7700 @ 3.60 GHz处理器、32 GB RAM且运行Fedora 28的机器上进行。我们测量了KLUZZER和KLEE在这些基准测试上的边缘覆盖率。由于KLEE执行种子的不精确性,我们对两款工具都不使用任何种子,而是从头开始探
超级会员免费看
订阅专栏 解锁全文
818

被折叠的 条评论
为什么被折叠?



