方案背景

对于网络服务程序的模糊测试,当前的解决方案主要有:hook libc socket调用、修改afl、修改网络程序等,其中无论哪种方式,几乎都需要修改网络服务程序。

AFLplusplus的开发者在仓库中推荐使用hook socket 的方案,这种方案灵感来源于preeny。基于 LD_PRELOAD hook libc中socket相关的函数将网络流转换为标准输入的IO,但是这种方案在一些复杂的网络程序中并不一定通用。

以nginx为例,在nginx启动后,程序会持续运行并监听对应的网络端口,如果没有异常并不会主动退出。而AFL需要每次重新启动程序,在这种场景下进行测试时就需要修改nginx的源代码。

另一个较为自然的方案是直接修改AFL传递输入的方式。这种方式中比较有代表性的是Monash University的研究者提出的aflnet。aflnet在afl的基础上,将标准输入修改为网络发包的方式,并加入了网络传输的功能,可以较为高效的测试网络服务程序。

但是afl的分支众多,有着不同的优劣势,也有着不同的应用场景。基于修改AFL的方案在移植其它优化策略时需要较大的工作量,另外aflnet同样需要对待测程序进行一定的修改以适应测试。

点击收藏 | 0 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖