错误处理码是很重要的,但是很难在现实中测试。因此很多难以找到的bug在错误处理码中存在,并且一旦触发会导致很严重的安全问题。已有的fuzz方法在测试错误处理码方面是有限的,因为有些错误处理码只能被偶尔的错误而不是输入触发,例如内存不足和网络连接失败。
本文提出了一个新的fuzz框架FIFUZZ,可以测试错误处理码并且检测bug。FIFUZZ的核心是一个上下文敏感的软件错误注入(SFI)方法,这种方法可以在不同的调用上下文中有效覆盖错误处理码来找到复杂上下文下错误处理码的深层bug。实现了FIFUZZ,并且在9个常用C程序上评估了,报告了由50个独特bug触发的317个报警,其中32个已经被确认。作者还比较了FIFUZZ和已有的fuzz工具,发现FIFUZZ找到了很多个被这些工具忽略的bug。
错误处理是重要的,但是它本身是容易出错的。首先很难正确实现,因为经常包含特殊和复杂的语法。其次错误处理码很难测试,因为这些代码不经常执行并且没有受到足够重视,所以其中会有很多bug,在实际执行中也很难发现。一些DoS和信息泄露漏洞也是由于这个原因产生的。
由于错误是无法确定产生的,测试错误处理码是困难的。一种解决方案是使用SFI,可以将错误注入到程序,并测试程序运行时是否可以正确处理注入的错误。错误可以注入到某个点,称为错误点。
现有的基于SFI的方法只注入上下文不敏感的错误,很难测试到深层错误。即只根据源代码中的错误点进行错误注入,不考虑上下文。但是很多错误处理会考虑上下文,只有上下文满足一定条件时才会触发bug。
本文提出了一种上下文敏感的基于SFI的fuzz方法。这种方法考虑到了运行时的上下文,引导SFI最大化bug找到率。包含6步