第28卷第7期 2011年7月 计算机应用与软件 Computer Applications and Software V01.28 No.7 Ju1.2011 模糊测试研究进展 陈衍铃 王 正 (电子工程学院网络系安徽合肥230037) 摘要 通过介绍发现安全漏洞的三种方法,引出模糊测试。首先介绍了模糊测试的历史,接着从模糊测试的一般流程,模糊测 试方法,测试对象,测试中存在的问题四个方面详细介绍了模糊测试的研究现状,最后根据模糊测试的研究现状和特点归纳了今后 模糊测试的研究方向和研究方法。 关键词 模糊测试 协议 测试用例 变异 生成 ADVANCEMENT oF THE STUDY oN FUZZY TESTING Chen Yanling Wang Zheng (Department of Network,Eleanc Engineering Institute,Hefei 230037,Anhui,China) Abstract he paper intTroduces three approaches in detecting security leakages.Then it induces the concept of fuzzy testing.Firstly the fuzzy testing history is introduced.Then the contemporary environment of fuzzy testing research is elaborated in detail from four aspects of its general workflow,fuzzy testing methods,objects to test and problems in testing.On the basis of het contemporary environment of fuzzy testing research and its characteristics,the paper has made conclusion for research orientation and methods for fuzzy testing in the future. Keywords Fuzzy testing Protocol Test case Variation Generate 审核工具主要有IDA… 、LogiScan、BugScam、Inspector、Security. 0 引 言 近些年来,利用软件漏洞实施网络攻击的行为层出不穷,互 联网络的各个关键领域都面临着严峻的挑战。如何更好地保证 Review、BinAudit。 1模糊测试发展史 模糊测试作为黑盒测试的一种具体技术,开始于1989年。 Barton Miller教授在Uw.Madison中使用模糊测试的方法来测试 软件质量,减少软件漏洞,成为当前安全领域一个重要的研究方 向。当前用来发现安全漏洞的方法主要有三种:白盒测试,黑盒 测试和灰盒测试。 白盒测试采用的主要方法是源代码审计。因为可以获取所 UNIX应用程序的健壮性” 。当时采用一种简单纯粹的黑盒测 试,只是验证应用程序是否崩溃,具有很高的失效概率。1999 年,Oulu大学开始进行PROTOS测试集的开发工作,结合了白 盒和黑盒的测试方法。2002年Oulu大学发布成熟的PROTOS SN MP测试集 。同年Dave Aitel发布开源的模糊测试器 有的源代码,所有可能的代码路径都可以被审核,所以该方法具 有覆盖能力强的优点。主要的缺点是需要大量的人工分析,复 杂性高。比如重要的软件项目一般包含数十万行代码,源代码 分析工具产生的报告可能非常冗长而不易阅读 J。目前主要 的源代码分析工具主要有三种 J:(1)编译检测器,用于在源 SPIKE,该测试器实现了基于块的方法,具有描述可变长数据块 的能力,主要用于测试网络应用程序 14]。2004年,Michal Zalewski发布了针对web浏览器的模糊测试工具mangleme【15]。 2005年,Michael Sutton等人在Black Hat USA Briefings in 2005 代码编译时查找漏洞。代表工具有微软的PREfast for Driv— er¥ 。(2)源代码浏览器。这类工具允许测试者执行代码的 高级搜索和代码枚举,用来寻找关键函数调用的位置…。当前 流行的代码浏览器主要有Cscope 和Linux Cross.Reference 。 (3)源代码自动审核工具。用于扫描源代码以及自动识别可能 的关键区域…。当前流行的工具有:可参见文献[5~l0]。 黑盒测试是一种不需要知道被测目标内部细节而直接进行 输入测试的一种测试方法。该方法可用性好,操作简单,但是覆 盖能力一般,测试过程中会产生大量无效的测试用例。 灰盒测试介于白盒测试和黑盒测试之间,包括黑盒测试审 核同时也包括通过逆向分析获取汇编形式的源代码,即二进制 审核…。灰盒测试有很好的可用性,但存在很大的复杂性,尤 上发布同时基于变异和生成,用于对文件格式进行模糊测试的 工具,包括FileFuzz【23]、SPIKEfile( 和notSPIKEfile 。同年, 商业模糊器(Codenomicon,Mu Security等)被引人市场,大量的 开发人员开始关注于模糊测试 。2006年开始出现大量针对 ActiveX控件的模糊测试,代表工具有David Zimmer发布的 COMRaider 钊和H.D.Moore发布的AxMan¨ 。 随着越来越多安全领域的研究人员关注于模糊测试,模糊 测试将会有很大的发展。 其在二进制审核工作上要花费大量时间。目前自动化的二进制 收稿日期:2010一o4—15。陈衍铃,硕士生,主研领域:网络安全 292 计算机应用与软件 2011血 标准,同时代码覆盖率很低 。(3)协议变异人工测试。该方 2模糊测试技术研究现状 2.1 自动化模糊测试的一般流程 模糊测试是一种具{本的高度自动化的黑盒测试技术:用大 量半合法的数据作为程序的输入去覆盖大量的界限情况,来更 法主要依靠个人经验构造变异测试用例,常用来测试Web应用 测试 ]。测试时需要大量人工参与,测试结果很大程度上取决 于测试者的个人经验。(4)变异和强制性测试。测试从一个有 效的协议或数据格式样本开始,持续不断打乱文件中的每一个 字节 1j。该测试方法不需要对被测试软件进行研究,实现起来 简单但是很低效。代表工具有notSPIKEfile 和FileFuzz¨ 。 (5)自动协议生成测试。该测试方法需要理解和解析测试对象 的协议规范或者文件格式定义。测试工具动态解析这些模板, 好地保证不存在可以利用的脆弱点” 。 模糊测试自动化实现的一般流程是:首先产生半合法的数 据(该数据是指它具有足够的正确性,能让编译器直接忽略它, 但又有足够的非法性,能 导致错误的发生),接着将 这些数据发送给目标程序 进行处理,然后观察应用 程序,看程序是否在处理 这些数据时发生错误。如 果发生错误,测试工具保 存提交的数据,为后来的 分析作好准备,然后继续 提交畸形的数据。如果应 用程序不会有错误,测试 工具会选择是否删除畸形 的数据,然后继续下一个 循环” 。 主要的测试流程如图 图1 自动化模糊测试的一般流程 1所示。 2.2模糊测试方法分类 模糊测试方法主要分为两类:基于变异的模糊测试和基 于生成的模糊测试。基于变异的模糊测试方法是指将收集的 正确的数据按照一定的方法进行改变。改变的方法可以是随 机变异或者是启发式变异。启发式变异可以是用长的字符串 替换小的字符串,或者将长度值变异成特别大或者是特别小。 基于生成算法的模糊测试开始于一个特定的描述文件格式或 者网络协议的规范,然后通过依据这些规范组合大量测试用 例。该测试方法的关键是构造大量测试用例,每一个测试用 例要区别于正常的数据,使得测试用例既可以触发程序的问 题,又不能使测试用例过于非法,否则目标程序有可能直接丢 弃了非法的测试用例。 基于变异的模糊测试的优点是测试者不需要知道协议或应 用程序的知识就可以进行测试。所有的一切只需要一个或多个 好的样本和一个测试方法。另一个方面,基于生成的测试方法 需要做大量的前期工作来学习特定的规范并且手动产生测试 用例。 在生成和变异两种分类的基础上,Michael Sutton等人将具 体的模糊测试技术分为以下几类…:(1)预先生成测试用例, 即PROTOS框架采用的方法” 。采用该方法时,首先要对一个 专门的协议规范进行研究,目的是为了理解所有被支持的数据 结构和每种结构可以接受的值的范围…,然后依据规范生成特 定的具有一定覆盖率的测试用例,最后将测试用例发送到目标 程序。该测、斌方法没有引入随机机制,测试用例有限,一旦运行 完后,模糊测试就结束了”J。(2)随机方法。该方法只是简单 产生随机测试数据给目标程序。随机测试方法简单但是低效。 该方法产生大量的测试用例,但是这些测试用例很难达到测试 生成测试数据,然后将数据发送到目标程序 j。采用该测试方 法产生的测试用例有效性高,具有较高的代码覆盖率,但是在前 期分析协议时需要花费大量时间。主要的代表工具有: SPIKE E 和SPIKEfile E…。 2.3模糊测试的测试对象 目前模糊测试对象已经渗透到安全领域的各个方面,出现 了很多针对特定测试对象的测试工具。测试对象多种多样,难 以区分。Michael Sutton等人对测试对象进行了大致的分类,主 要有: (1)环境变量和参数测试对象主要是命令行参数和环境 变量。现在的主要工具有iFuzz ,该工具采用c语言开发,存 在一个自动处理目标二进制代码的引擎,主要用于本地的模糊 测试。 (2)Web应用程序和服务器 Web应用容易受到各种类 型的漏洞攻击。主要有:拒绝服务、跨站漏洞、sql注入漏洞、目 录遍历、缓冲区溢出、远程代码注入等 。当前的主要的测试 工具有:Dave Aitel开发的SPIKE代理 和WebScarab 。 SPIKE工具是基于浏览器的Web模糊器。工具采用代理方法 捕获web请求,然后依据一定的规则对目标web站点进行测试。 WebScarab工具可以向应用程序的参数注入模糊值…。另外同 类工具还有SPI 、Codenomicon Http[ 、beSTORM 等等。 (3)文件格式测试对象是针对特定的文件格式,主要用 于发掘客户端文件解析漏洞 J。漏洞主要包括:拒绝服务、整 数溢出、堆栈溢出、逻辑错误、格式化字符串。当前主要的测试 工具有:notSPIKEfile、SPIKEfile、FileFuzz。 (4)网络协议 网络协议的模糊测试原理是通过特定的 Socket形式将变异或者生成的含有错误信息的数据包发送给目 标程序。现有的代表工具有SPIKE和ProtoFuzz。其中SPIKE 比较流行,工具用SPIKE脚本描述目标网络协议,然后设置模 糊器根据协议开始测试。另外还有一些专门针对特定协议的模 糊测试工具。这些工具包括irefuzz 、dhcpfuzz 、Infigo FTP- StressI35I (5)Web浏览器 现在的Web浏览器可以处理动态htHIl 文件、表单、脚本语言等多种目标。随着Web浏览器的功能日 益增强,其存在的漏洞也越来越多。目前应用最广的是针对组 件的测试,尤其是针对ActiveX组件。代表工具有COMRaid— el" 和AxMant 。 2.4模糊测试中存在的问题 如何有效地绕过目标程序对样本数据进行验证的问题。在 模糊测试的测试目标中,有很多目标的格式和协议提供了各种 类型的验证。比如,网络协议和文件格式通常用校验和和哈希 去帮助检测数据包和文件内容的完整性。这些机制会给测试设 置障碍,因为我们要改变文件的内容以达到测试的目的,当文件 第7期 陈衍铃等:模糊测试研究进展 293 内容改变后,提交的数据有可能因为不能通过校验而被应用程 序直接丢弃,导致测试用例的运行仅仅覆盖到目标程序中少量 代码就结束了,极大地影响了测试效果。 所有的测试用例都到达同一测试深度的问题:通过对代码 覆盖率的分析,会发现在一些测试过程中,所有的测试路径都在 代码的同一个地方被阻截下来。如果不做特定的改变,几乎所 有的测试用例所能测试到的代码深度和覆盖率到都是一样的, 大量的测试用例就失去了测试意义,严重影响测试效果。 如何测试加密和压缩数据的问题:加密的数据格式将很难 被挖掘。如果挖掘工具对样本中随机变化的字节不做任何处 理,目标程序的样本识别器或者编译器就不能编译这些数据。 问题的关键在于是否能保证测试工具具备一定的能力去在变异 数据前解密数据,生成数据,然后在提交数据前重新加密数据。 针对通过压缩来验证的数据格式的目标测试程序的解决方法也 一样:测试工具要具有解压和压缩数据的能力。 3进一步研究的方向 随着模糊测试被运用得越来越广泛,该项技术也必将日益 成熟。结合模糊测试的特点和问题,归纳其今后的研究方向主 要有以下几个方面: 协议自动化分析基于协议来生成或变异样本可以产生具 有很好覆盖率的测试用例,进而提高测试效果,该方法还有利于 突破一些验证机制,比如在变异数据后再进行校验和计算,来突 破校验和的验证。这同时也带来一个很明显的缺陷:需要在测 试前花大量的时间分析测试目标的协议或规范,即使是一个很 简单非公开的协议也需要花费大量的时间。协议自动化分析正 好弥补这一缺陷。 代码覆盖技术提高测试效果最好的方法之一就是提高测 试用例的代码覆盖率。在生成测试用例的过程中引入知识,和 一些智能算法,例如遗传算法 ,同时利用调试器检测代码覆 盖率,可以很好地提高测试用例的效果。 故障检测与定住有一些应用程序的错误产生在应用程序 的外部是很难发现的,同时定位到出现错误的地方也很困难。 解决该问题可以提高监视器的检测精度或者结合动态二进制插 装。现在的动态插装系统有DynamoRIO、Dynlnst、Pin。 设计更加高效通用性好的测试平台 当前的测试平台大多 针对特定的系统或者特定的服务和应用,并且大多数都需要借 助于其他工具进行测试评估来提高测试效果,比如需要借助于 代码覆盖率计算工具。设计一个较为完整的测试平台是一个趋 势。该平台需具有自主的协议分析能力,代码监控能力,获取测 试用例执行信息的能力。同时要有高效的算法来协调各个组件 的运行,提高整体测试效率。利用虚拟机技术监测,结合符号执 行技术提高路径覆盖率是一个很好的研究方向。 参考文献 [1]Sutton M,Amini A G P.Fuzzing:Brute Force Vulnerability Discovery [M].黄陇,于莉莉,李虎,译.北京:机械工业出版社,2009. 【2]http://www.microsoft.com/whdc/devtools/tools/PREfast.mspx. [3]http://cseope.sourceforge.net/. [4]http://lxr.1inux.no. [5]http://www.fortifysoflware.corn/security—resources/rats.jsp. [6]http://www.cigita1.corn/itsd/. [7]http://lclint.CS.virginia.edu/. [8]http://www.dwheeler.com/flawfinder/. [9]http://jlint.sourceforge.net/. [10]http://www.owasp.cor/soflware/labs/codespy htm1. [1 1]http://www.datarescue.corn/. [12]http://www.CS.wise.edu/~bar/fuzz/. [1 3]http://www.ee.oulu.fi/research/ouspg/protos/index.htm1. [14]http://immunityinc.corn/resources—freesoflware.shtm1. [15]http://lcamtuf.coredump.cx/. [16]http://www.blackhat.com/presentations/bh—usa一05/bh—US—O5 一sutton.pdf. [17]http://www.musecurity.corn/products/overview.htm1. [18]http://metasploit.eom/users/hdm/tools/axman/. [19]Oehlert P.Violating Assumption with Fuzzing[M].2005. [20]Miller C,Zachary N J.Peterson Analysis of Mutation and Generation— Based Fuzzing Independent Security Evaluators.2007一O3—01. [21]Rainer Gerlich,Ralf Gerlich,Thomas Bol1.Random Testing:From the Classical Approach to Global View and Full Test Automation.2007. [22]Green A.ANDIDEFENSE LABS.notSPlKE.http://labs.idefense.com/ software/2005. [23]Sutton M.ANDIDEFENSE LABS.FileFuzz.http://lbas.idefense.corn/ software/2006. [24]Green A.ANDIDEFENSE LABS.SPIKE.http://labs.idefense.corn/ software/2005. [25]http://www.immunitysec.com/resources—freesoflware.shtm. [26]http://fuzzing.org. [27]http://www.webappsec.org/[)orjects/threat/. [28]http://www.immunitysec.com/resources—freesoifware.shtm1. [29]http://www.owasp.or ̄index.php/Category:OWASP—WebScarab— eroject. [30]http://www.spidynamics,coru/products/webinspeet/toolkit.htm. [3 1]http://www.codenomicon.com/products/intemet/http/. [32]http://www.beyondsecurity.com/BeStorm—Info.htm. [33]http://www.digitaldwarf.be/products/irefuzz.C. [34]http://www.digitaldwarf.be/products/dhcpfuzz.p1. [35]http://www.irdlgo.hr/en/in_focus/tools. [36]http://labs.idefense.corn/software/fuzzing.php#more—eomraider. [.37]http://metasploit.eom/users/hdnVtools/axman/. [38]Merlo E,Galinier P,DelGrosso C,et a1.Detecting buffer overflow via automatic test input data generation. [39]Howard M.Inside the Windows Security Push[J].IEEE Security& Privacy,2003(1/2):57—61. [40]Lipner S,Howard M.The Trustworthy Computing Security Development Lifeeyele[EB/OL].2005.http://msdn.micorsoft.conr/security/de. fault.aspx?pull=/library/en—us/dnsecure/html/sd1.asp. [41]Scott A.Maxwell,The Bulletproof Penguin,Secure Linux throu gh fuzz— ing[EB/OL].2001.http://home.pacbel1.net/s—max/scot/tbulle— tproof—penguin.htm1. [42]Grimes R.The buzz about fuzzers[EB/OL].2005.http://www.in一  ̄wodd.corn/article/05/09/09/37OPseeadvise——1.htm1. 14s]Miler C,Petemon Z N J.Analysis of Mutatina and Generation—Based Fuzzing[EB/OL].2007—03—01.[2009一O6].http://securityeval— uators.com/files/papers/analysisfuzzing.pdf. (下转第295页) 第7期 张小斌等:基于过程控制的网络图片防盗保护方法 布局。 295 1.1动态读取保护 图片资源一般存放在www目录中供用户访问,这样对外 开放容易被搜索引擎记录或者被用户直接下载,被盗的可能性 会显著提高。为了避免此问题,本方法通过“动态响应”策略在 用户和图片目录 架设了一道防火墙,图片预先存放在wWw 目录以外的特定文件夹,只有用户请求浏览图片,且这种请求通 过服务器端严格的合法性校验后,“动态响应”服务脚本才会从 相应图片目录读取图片数据,发送给图片浏览器显示。该保护 可借助ASPJpeg图片处理组件实现,能有效防止图片资源“悄然 图2 Flash图片浏览器实例图 2结语 无声”地大量流失,提高图片访问控制的安全性。 1.2访问超时保护 互联网上的图片资源大部分是“静态”的,用户可通过一个 相同的URL地址访问图片,这为非法用户反复试探该地址进而 盗取图片提供了便利。本方法则引入了一维时间属性概念,使 每个用户每次访问图片的URL地址都不尽相同。当用户通过 该地址查看图片时,服务器端会根据URL中绑定的时间信息 (秒计)判断图片访问是否超过预设的图片允许加载周期(一般 1~3秒)。若访问超时,服务器不会响应读取被请求的图片,而 是返回客户端一张报警图片。由于URL地址中的时间信息经 过特殊加密保护,用户难以修改解除该项保护。 1.3本地缓存保护 Web浏览器为了加快显示速度,通常会在客户端缓存已加 载过的图片资源。该机制使用户有可能在浏览器文件缓存目录 中找到已访问过的图片资源,取为它用。为此,本方法中服务器 端在返回图片数据时,会通过HTrP头信息声明(Cache—Control: nO—store)、HTML Meta标识(Pragma:no—cache)通知浏览器禁止 在客户端缓存图片,以达到缓存防盗保护目的。 1.4地址加密保护 为了防止图片URL地址等重要信息在网上以明文方式传 播,使非法用户能获取更多信息用于破解取图,本方法对图片文 件名、图片访问时间分别采用不同算法、不同密钥实施对称加密 保护,用户随意修改这些加密信息,都会导致服务器端解密失 败,图片访问出错。 1.5看图干扰保护 “截屏抓图”是客户端获取图片最常用的方法,图片显示给 用户的同时已为用户截图创造了条件,目前针对此类情况最常 见的保护方法是在图片关键位置上覆盖醒目版权水印,但会影 响图片完整的示意效果。本方法中专门设计了一种特殊的 Flash嵌入式图片浏览器,既不让图片“原汁原味”地显示在 Web浏览器中,又不影响用户清晰地看到原图。该浏览器包含 上下两个图层,它们均从服务器动态加载原图。下层经过色彩 滤镜处理后呈现灰度效果,并按指定长宽或比例显示;上层覆盖 了遮罩层,用户只能通过圆形mask区域看见原图(如图2所 示)。当mask区域跟随鼠标移动时,上层原图也动态调整坐标 位置,使用户能自由查看原图不同区域,形成“彩色放大镜”的 使用效果。由于mask区域在不停地微缩、微张变化,用户想要 通过截图逐一拼凑恢复原图将十分困难,几乎不可能得到完整 的图片。该浏览器支持在图片边角等位置嵌入版权标识信息, 同一个网页内可嵌入多个图片浏览器,不会影响图片的版面 本方法涉及电子信息网络传播与共享过程中图片版权保护 技术,是一种应对通过恶意下载、复制、截屏等手段获取网上受 保护图片的防范措施,具有图像保真度高、破解难度大、使用成 本低、普及推广容易等优点,其中Flash嵌入式图片浏览器对于 防范“截屏抓图”方法特别有效,可用于保护原创且具有较高价 值图片在网上安全发布与展示。目前,该方法已申请国家发明 专利保护(申请号:2009103011736),并成功应用于国家公益性 行业科研专项项目“外来入侵害虫西花蓟马防控技术研究与示 范”的可视化信息平台(http://www.thrips.com.an)中,为大量 蓟马的原创高清图片网上公开发挥重要的防盗保护作用。 本方法设计的Flash嵌入式图片浏览器虽能有效防范“截 屏抓图”,但它作为图片浏览干扰保护措施,无法证明图片版权 的归属。目前流行的数字图像水印技术能在维持图片较高保真 度的前提下,为电子图片嵌入包含版权归属证明的信 息 J,正好弥补了上述缺点。两种方法综合应用,优势互补,图 片防盗保护功能则更成熟和完善。此外,本方法并未对网上传 播的图像数据流进行保护,还可在服务器端对图像数据进行动 态加密,然后由客户端相应的图片浏览器解密还原显示,以加强 图片保护的安全力度。 参考文献 [1]张利平.关于数字图书馆中版权保护技术的研究[J].农业图书情 报学刊,2008,20(1):78—81. [2]张小斌,郑可峰,钱秋平.农业网络图片版权保护方法与策略[J]. 浙江农业学报,2009,21(5):415—418. 【3]Kayako SupportSuite.Image protection/preventing copyrlsht infringement [EB/OL].(20O9-3—2)[2010—03—18]http://7soft.helpserve.corn/ index.php?m=knowledgebase&a=viewartiele&kbarticleid=21. [4]王焕伟,陈向东,陈显治.数字水印技术与图像版权保护[J]. 军理工大学学报,2001,2(1):32—36. (上接第293页) [44]Bush W R,Pincus J D,Sielaff D J.A static analyzer for finding dynam— ic programming elTOYS[J].Softw.Pract.Exper,2000,30:775—802. [45]Xie Y,Chou A,Engler D.ARCHER:using symbolic,path—sensitive analysis to detect memory access elTors[C]//Proceedings of the 9th European software engineering conference held jointly with 1 1 th ACM SIGSOFT intemational symposium on Foundations of software engineer- ing Helsinki,Finland:ACM,2003. [46]Godefroid P,Klarlund N,Sen K.DART:Directed automated random testing[J].ACM Sigplan Notices,2005,40:213—223. [47]Cadar C,Ganesh V,Pawlowski P M,et a1.EXE:Automatically Genera- ting Inputs ofDeath[J].ACM Trans.Inf.Syst.Secur,2008,12:1—38.