Fuzzing技术最新进展与展望

Fuzz定义与概述

  Fuzzing一般成为软件模糊测试技术,而Fuzzing一词在英文中原意为“起毛”,是指一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。从根本上讲,Fuzzing隶属如软件测试技术的一种,是一种自动化的健壮性、安全性测试技术。

一般模糊测试流程

  从上图可以看到,一般意义上模糊测试可以分为输入器、变异器、输出接口、监控器、反馈器共5个粗粒度模块。在输入器中,大致可分为格式输入(类似Peach Fuzz)、文件输入(类似AFL的seed文件)。在变异器中,大致可分为基于生成(根据固定格 式生成格式数据,比较多见于对文件模糊测试,例如MP3文件等)、基于变异的策略(根据格式变异长度和内容字符的变异,比较多见于协议内容,不定长格式的测试工作)。在输出接口中,一般输出接口指的是数据发送的对象,在计算机体系中可以是空中接口、无线电、串口、USB等各类接口。在监控器模块中,考虑到目标普遍部署在Win、Linux等环境下,在Windows下主要利用Windbg进行监控,在Linux平台下主要用GDB进行监控。在反馈器模块中,主要是使用对dbg文件的分析,获得程序运行的上下文环境。

针对模糊测试系统的扩展性研究

模糊测试系统的扩展方面发展

  在目前针对模糊测试系统中,可以考虑加入实时反馈方式,在提升测试效率的同时,增加了程序覆盖率。在增加漏洞成因分析方面,考虑到目前的Debug工具不具有普适性,接口众多而且开发难度大,漏洞分析方面只能部分做到自动化。

关于模糊测试的时间线问题

模糊测试系统的扩展方面发展

The first fuzzing tool was developed by Miller (1990) and was originally designed to test the reliability of UNIX tools.

  传统的模糊测试技术,从最初的变异、生成、监控、测试等等模块,变化为添加过符号执行、动态监控、自动分析处理等强大功能的软件测试技术。由于早期模糊测试系统的效率极其低下,研究人员引入了各种不同的技术来提高效率、加快测试过程。

监控器监控

  在实际模糊测试系运行中,需要监控程序上下文空间,具体包括符号表达式(Cadar等人,2008;戈德弗罗德等人, 2005,2008;哈勒等人,2013;纽施旺德纳等人,2015;2015;森等 人,2005;斯蒂芬斯等人,2016);路径覆盖数据(扎勒夫斯基, 2016;谷歌2017a,2017b)和污染信息(Ganesh等人,2009;Rawat 等人,2017;王等人,2010)。其中,符号表达式用于生成输入数据,路径覆盖数据用于下一个循环中的种子选择。污染数据用于推断输入中的哪些偏移量会影响程序的执行路径。

先验知识或专家辅助

  在模糊测试中,针对目标程序中那些计算模块、内存处理与申请、端口开放等细节需要人工介入,研究人员发现在大部分的程序安装进程中,需要人工进行进行审计,发现程序中的未知bug或逻辑问题,而许多人工审计工具可以帮助我们做到这一点。


漏洞分析

  持续更新中……