首页>参考读物>金融学>金融投资专业英语

模糊测试—强制性安全漏洞发掘
作者 : Michael Sutton, Adam Greene;Pedram Amini
译者 : 黄 陇 于莉莉 李虎
出版日期 : 2009-02-12
ISBN : 7-111-25755-4
定价 : 59.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 363
开本 : 16开
原书名 : Fuzzing Brute Force Vulnerability Discovery
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

掌握揭露安全性缺陷的最强大技术!
  模糊测试现在已经发展成为一种最有效的软件安全性测试方法。模糊测试是指将一个随机的数据源作为程序的输入,然后系统地找出这些输入所引起的程序失效。著名的模糊测试专家将告诉你如何抢在别人之前使用模糊测试来揭示软件的弱点。
  本书是第一部也是唯一一部自始至终讨论模糊测试的专著,将以往非正式的技巧转变为训练有素的最佳实践,进而将其总结为一种技术。作者首先回顾了模糊测试的工作原理并勾勒出模糊测试相比其他安全性测试方法的关键优势。然后,介绍了在查找网络协议、文件格式及Web应用安全漏洞中的先进的模糊测试,演示了自动模糊工具的用法,并给出多个说明模糊测试强大效力的历史案例。

本书主要内容包括:
  ●为什么模糊测试能够简化测试设计并捕捉利用其他方法捕捉不到的软件缺陷。
  ●模糊测试过程:从识别输入到评估“可利用性”。
  ●理解实施有效模糊测试所要满足的需求。
  ●比较基于变异的和基于生成的模糊器。
  ●在模糊测试中应用并初始化环境变量和自变量。
  ●掌握内存数据的模糊测试技术。
  ●构建定制的模糊测试框架和工具。
  ●实现智能的故障检测。
  攻击者早已经开始使用模糊测试技术。当然,你也应该使用。不论你是一位开发者、一位安全工程师还是测试人员或QA专业人员,本书都将教会你如何构建安全的软件系统。

图书特色

图书前言

我知道“人类和鱼类能够和平共处”。
  —George W. Bush, 2000年9月29日
  简介
  模糊测试的概念至少已经流传了20年,但是直到最近才引起广泛的关注。安全漏洞困扰了许多流行的客户端应用程序,包括Microsoft的Internet Explorer、Word和Excel,它们中的许多漏洞在2006年通过模糊测试技术发现。模糊测试技术的有效应用产生了许多新的工具和日益广泛的影响。本书是第一部公开发表的关于这一主题的专著,这一尴尬事实同时也预示着未来人们将会对模糊测试产生更浓厚的兴趣。
  多年来,我们参与了许多有关安全漏洞的研究工作,并且在日常工作中使用了各种不同的模糊测试技术,从不成熟的、凭借个人嗜好的项目到高端的商业产品,都用到过模糊测试。每一位作者都曾参与开发过自用版本的和公开发行版本的模糊器。这本书凝聚了我们以往的实践经验和正在进行的研究项目所花费的心血,我们希望读者能够从中获益。
  目标读者
  安全性领域的书籍和文章通常由这一领域的研究者所撰写,以方便该领域的其他研究者参考。我们坚信,只要安全性领域的研究小组把解决安全性问题视为其唯一责任,那么安全性问题的数量和严重程度就会随着时间的推移而继续增长。因此,我们付出巨大的努力以使本书能够服务于更多的读者,既包括模糊测试的新手也包括早已对本领域有所了解的读者。
  假设我们只是将开发完成的应用程序提交给一个安全小组,然后让他们在产品发布之前对其进行一个快速审核,相信这样的过程能够产生安全的应用程序显然是不现实的。当开发者或QA组的组员说:“安全根本不是问题—我们有个安全小组关心这件事呢”,如此这般,日子就会一天一天的过去。安全性必须融入软件开发生命周期(SDLC),而不是到了最后才草率处理。
  让开发组和QA组把注意力集中在安全性问题上可能是个过高的要求,特别是对那些以往没有这么做的开发组和QA组来说尤其如此。我们认为模糊测试是一种独一无二的安全漏洞发掘方法学,由于它能够高度自动化,因此学习和掌握这种方法学的读者可以相当广泛。我们希望经验丰富的安全领域的研究者可从本书获得有价值的东西,同样希望开发人员和QA人员从中获益。模糊测试可以并且应该是任何完整SDLC的一部分,不仅在测试阶段需要考虑,在开发阶段也同样需要考虑。缺陷发现得越及时,修补缺陷的成本就越低。
  预备知识
  模糊测试是一个广泛的主题。尽管本书会介绍一些不专属于模糊测试的背景内容,但是我们仍然假设读者应该拥有这一领域的预备知识。在学习本书之前,读者至少应该对程序设计和计算机网络有一定的基本了解。模糊测试涉及自动化安全测试,这本书的内容自然要包括如何构造自动化工具。我们有目的地选择了多种编程语言来完成这个任务。语言的选择是根据具体任务的,这也说明了模糊测试可以用多种方法实现。当然,没有必要一一罗列所用到的所有编程语言的背景知识,但是介绍一两种语言无疑会帮助读者从这些章节中获益。
  本书自始至终都贯穿着对各种安全漏洞的详细描述,并讨论如何通过模糊测试来识别这些漏洞。然而,定义或剖析安全漏洞本身的性质并不是本书的目标。一些优秀的书籍是专门讨论这一主题的。如果需要寻找一部关于软件安全漏洞的初级读本,可以参阅Greg Hoglund、Gray McGraw所著的《Exploiting Software》和Jack Koziol、David Litchfiel等的《Shellcoder誷 Handbook》,它们都是极好的参考读物。
  学习方法
  如何最好地利用本书,这取决于读者的背景和目的。如果你是一位模糊测试的初学者,我们推荐你按顺序逐章消化理解,因为本书的内容进行了精心编排,前面先介绍一些必要的背景信息,随后转入高级主题。反之,如果你已经在使用各种模糊测试工具方面花费了一些时间,那么请不要犹豫,可以直接进入感兴趣的主题,因为本书的不同逻辑章节的划分大致上是相互独立的。
  本书的第一部分主要介绍不同的、具体的模糊测试类型,这些模糊测试类型将在随后的章节中逐一讨论。如果读者对模糊测试比较陌生,可以考虑把这一部分作为必读章节。模糊测试可以作为多种目标下的安全性测试方法,不过这些目标下的方法都遵循相同的基本原则。在第一部分,我们试图将模糊测试定义为一种安全漏洞发掘方法并详细介绍相关的知识,不考虑这种方法运用于何种目的。
  第二部分关注模糊测试的各种相关应用目标。每种目标的介绍跨越了两到三章。最前面的一章介绍每类目标的背景信息,随后的各章集中介绍这些目标下的模糊测试自动化,详细阐述如何针对这种目标构造模糊器。当认为有必要分别介绍Windows平台和UNIX平台下的模糊器工具时,这两个主题分别安排在有关自动化的两章。例如,以第11章“文件格式模糊测试”为例,该章详细描述有关模糊文件分析器的内容,第12章“文件格式模糊测试:UNIX平台上的自动化测试”则深入介绍基于UNIX的文件模糊器的实用程序设计,第13章“文件格式模糊测试:Windows平台上的自动化测试”讲解运行在Windows环境中的文件格式模糊器如何构造。
第三部分讨论模糊测试领域的高级主题。对于那些已经牢固掌握模糊测试背景知识的读者,可以直接跳入第三部分,不过大部分读者很可能需要先了解第一部分和第二部分,然后再学习第三部分。第三部分关注的是近年来浮现出的新技术,这些技术刚刚得到实施,但是未来将成为安全漏洞发掘的高级工具可以利用的模糊测试技术。
  最后,在第四部分,我们将总结学习过本书后的收获,然后深入洞察未来的发展方向。尽管模糊测试并不是一个新概念,但是这一领域仍然有足够的发展空间,并且我们希望本书将为未来的研究空间注入一丝灵感。
  少许幽默
  写书是一件严肃认真的工作,尤其是对诸如模糊测试这样的复杂主题。这就是说,我们希望尽量给随后的读者(实际上这些人可能比写书的人更重要)带来一些乐趣,同时也尽最大的努力让写作的过程更愉快。出于这样的考虑,我们决定在每一章的开头引用美国第43届总统George W. Bush(别名Dubya)的一段话。不论你的政治倾向或信仰是什么,没人能够否定Bush先生在过去几年中所炮制出的一些引文,这些引文甚至能够写满一年的日历!我们从中挑选了一些最喜欢的引文与读者分享,希望读者和我们得到同样的快乐。读完本书后,读者会发现模糊测试可以被应用于各种不同的目标,显然也可以应用到对英语的模糊测试。
  关于封面
  有时,安全漏洞经常被称为“鱼”(例如,可以参见DailyDave安全性邮件列表中关于“The L Word & Fish”的提示线索)。这是一个有用的类比,在讨论安全性和安全漏洞时可以被应用到这个问题的各个方面。可以把这一领域的研究者比喻为钓鱼者。对应用程序的汇编代码实施逆向工程,逐行分析查找安全漏洞,这样的人可比喻为“深海钓鱼者”。同许多其他的审核手段相比,模糊测试充其量只是海面搜索,并且通常只对“容易抓的鱼”更有效。此外,大灰熊是一个著名的“模糊动物”,当然也是强大的动物。本书的封面中有一个模糊的动物,正在捕捉一条鱼,后者代表一个安全漏洞。
  配套站点
  站点www.fuzzing.org绝对是本书不可分割的一部分,并不仅仅起到补充资源的作用。除了包含本书出版后的勘误表外,该站点还是书中所有源代码和工具的一个中央资源仓库。经过一段时间的努力,我们打算让这个站点从一个以图书为中心的资源站点发展成为模糊测试这一学科的资源、工具和信息的有价值的社区。我们欢迎读者提出反馈信息,以帮助我们让该站点成为一个有价值的、开放的知识库。

封底文字

掌握揭露安全性缺陷的最强大技术! 模糊测试现在已经发展成为一种最有效的软件安全性测试方法。模糊测试是指将一个随机的数据源作为程序的输入,然后系统地找出这些输入所引起的程序失效。著名的模糊测试专家将告诉你如何抢在别人之前使用模糊测试来揭示软件的弱点。 本书是第一部也是唯一一部自始至终讨论模糊测试的专著,将以往非正式的技巧转变为训练有素的最佳实践,进而将其总结为一种技术。作者首先回顾了模糊测试的工作原理并勾勒出模糊测试相比其他安全性测试方法的关键优势。然后,介绍了在查找网络协议、文件格式及Web应用安全漏洞中的先进的模糊测试,演示了自动模糊工具的用法,并给出多个说明模糊测试强大效力的历史案例。 本书主要内容包括: ●为什么模糊测试能够简化测试设计并捕捉利用其他方法捕捉不到的软件缺陷。 ●模糊测试过程:从识别输入到评估“可利用性”。 ●理解实施有效模糊测试所要满足的需求。 ●比较基于变异的和基于生成的模糊器。 ●在模糊测试中应用并初始化环境变量和自变量。 ●掌握内存数据的模糊测试技术。 ●构建定制的模糊测试框架和工具。 ●实现智能的故障检测。 攻击者早已经开始使用模糊测试技术。当然,你也应该使用。不论你是一位开发者、一位安全工程师还是测试人员或QA专业人员,本书都将教会你如何构建安全的软件系统。

图书序言

安全漏洞是研究安全问题的生命线。无论是执行渗透测试、评价新产品还是审核关键构件的源代码,安全漏洞都驱动着我们的决策,让我们有理由花费时间,并且很多年来一直影响着我们的选择。
  源代码审核是一种白盒测试技术,这是一种很长时间以来都流行的软件产品安全漏洞检测方法。这种方法需要审核者了解编程概念和产品功能的每一个细节,深入洞察产品的运行环境。除此之外,源代码审核还有一个显而易见的缺陷——必须首先要获得产品的源代码。
  幸运的是,除了白盒技术外,我们还可以使用不需要访问源代码的黑盒技术。模糊测试就是黑盒技术中的一种可选方法,这种方法在发掘那些用审核方法无法发现的产品关键安全漏洞方面被证明是成功的。模糊测试是这样的一个过程:向产品有意识地输入无效数据以期望触发错误条件或引起产品的故障。这些错误条件可以指导我们找出那些可挖掘的安全漏洞。
  模糊测试没有实际的执行规则。它是一种技术,测试结果是这种技术的成功性的唯一度量。任意一个给定的产品都可能接受无限的输入。模糊测试技术旨在预测产品中可能存在的编程错误以及什么样的输入可能会触发错误。正因为如此,与其说它是一门学科,不如说它是一种技术。
  模糊测试可以简单到只是随意敲打键盘来输入随机数据。我的一个朋友有个3岁的儿子,他就是用这么简单的手段发现了Mac SO X操作系统的屏幕界面锁定功能中的一个漏洞。我的朋友锁定了屏幕界面然后到厨房找酒喝。当他回来的时候,他的儿子已经设法成功地解除了锁定,并且打开了浏览器,所用的方法正是随意敲打键盘。
  过去的几年里,我用模糊测试技术和模糊工具在大量的软件中发现了数百个漏洞。2003年12月,我编写了一个简单的程序向一个远程服务发送随机UDP 包流。结果这个程序发现了Microsoft WINS服务器的两个新的漏洞。该程序后来又帮助我在其他产品中找出了少量的缺陷。最后的结果证明,用简单的随机UPD包流能够发现计算机协会的多个产品中的漏洞,包括Norton Ghost管理服务和OS X操作系统的一个公共服务。
  模糊器对发现网络协议以及其他许多产品都有效。在2006年的第一季度,我精心设计了3个不同的浏览器模糊工具,结果发现了多种浏览器中的缺陷。2006年第二季度,我又编写了一个Active X模糊器(AxMan),仅在Microsoft的产品中就发现了超过100个缺陷。这些缺陷许多都是在“Month of Browser Bugs”项目中形成的,结果导致该项目组又进一步开发了“Metasploit”框架中的模块。在最初开发AxMan后的接近一年的时间里,我还利用模糊测试发现了AxMan本身所包含的一些漏洞。模糊器真是一个能够不断赐予我们新礼物的工具。
  本书是一部真正让我们有理由相信模糊测试是一门技术的专著。书中所介绍的内容涵盖了对新产品执行模糊测试以及创建有效的模糊工具所需要的全部知识。有效模糊测试的关键在于明确对什么样的产品使用什么样的测试数据,以及需要什么工具来操纵、监控和管理模糊测试过程。本书的作者是模糊测试技术的先锋,在阐明模糊测试的复杂过程方面作出了卓越贡献。

  祝各位猎捕Bug愉快!
  ——H. D. Moore

作者简介

Michael Sutton, Adam Greene;Pedram Amini:Michael Sutton: 是SPI Dynamics公司的安全布道师。他还是Web应用安全组织(WASC)的成员,负责其中的Web应用安全统计项目。
Adam Greene: 目前担任纽约某大型金融新闻公司的工程师。此前他曾经是iDefense公司的工程师,这是位于Reston, VA.的一家智能技术公司。Adam Greene在计算机安全领域的主要研究兴趣是可靠挖掘方法、模糊测试和基于UNIX系统的审核和挖掘开发。
Pedram Amini: 是TippingPoint公司的安全研究和产品安全评估组的项目领导。此前他曾经是iDefence实验室的主任助手,同时也是该实验室的创建者之一。他的主要兴趣是研究逆向工程——开发自动支持工具、插件和脚本。 这三位作者经常出席Black Hat安全大会并在其中做主题报告。

译者简介

黄 陇 于莉莉 李虎:暂无简介

译者序

模糊测试的基本思想是自动产生和发送大量随机的或经过变异的输入值给软件,如果发生失效或异常,便可挖掘出软件系统存在的薄弱环节和安全漏洞。这种方法由威斯康星州麦迪逊大学的Barton Miller教授首先发明,后来发展成为一种对软件质量有深远影响的测试技术。近年来,模糊测试方法及其支持工具受到研究人员和工程技术人员的日益关注,逐步成为软件测试和系统安全研究领域的一个重要分支。
  本书是迄今为止有关模糊测试的第一部专著性参考文献。书中首次系统地阐述了模糊测试的基本概念、分类和实现技术,总结出模糊测试和其他安全性测试方法相比所具有的优点。本书的内容全面丰富,堪称模糊测试领域的“百科全书”,内容涉及模糊测试的定义、方法、分类和不同操作系统平台下模糊器的应用和开发技术,此外还穿插了许多典型历史案例以说明模糊测试的强大威力。对于从事软件测试、网络安全和信息安全领域的研究和工程人员来说,本书具有极高的参考价值。
译者所在单位北京航空航天大学软件测评实验室(附属于北航软件工程研究所)、总参陆航研究所、二炮软件测试中心等长期从事软件测试、质量保证方法及支持工具的研究开发。作为具有全军装备软件测评资质的军用软件测评实验室,北航软件测评实验室和二炮软件测试中心承担了大量关键软件的第三方测评任务,在软件安全漏洞的分析和发掘方面积累了一定的学术成果和工程经验,为了促进国内同行在这一领域的学习和交流,特组织翻译此书。
  本书的主要内容由黄陇、于莉莉翻译,李虎完成了部分翻译工作并统校全书。参加本书技术校对的还有李晓丽、许福、宋淼、刘辉、王晓博、贾荣飞等。机械工业出版社华章分社的编辑为本书付出了大量辛勤努力,在此向他们表示诚挚的感谢!
  由于译者水平有限,难免存在疏漏和错译之处,欢迎广大读者批评指正。

图书目录

译者序
译者简介
序言
前言
致谢
第一部分  背   景
第1章  安全漏洞发掘方法学 1
1.1  白盒测试 1
1.1.1  源代码评审 1
1.1.2  工具和自动化 3
1.1.3  优点和缺点 5
1.2  黑盒测试 5
1.2.1  人工测试 6
1.2.2  自动测试或模糊测试 7
1.2.3  优点和缺点 8
1.3  灰盒测试 9
1.3.1  二进制审核 9
1.3.2  自动化的二进制审核 11
1.3.3  优点和缺点 12
1.4  小结 12
第2章  什么是模糊测试 13
2.1  模糊测试的定义 13
2.2  模糊测试的历史 14
2.3  模糊测试阶段 17
2.4  模糊测试的局限性和期望 18
2.4.1  访问控制缺陷 18
2.4.2  设计逻辑不良 19
2.4.3  后门 19
2.4.4  内存破坏 19
2.4.5  多阶段安全漏洞 20
2.5  小结 20
第3章  模糊测试方法和模糊器类型 21
3.1  模糊测试方法 21
3.1.1  预先生成测试用例 21
3.1.2  随机方法 21
3.1.3   协议变异人工测试 22
3.1.4  变异或强制性测试 23
3.1.5  自动协议生成测试 23
3.2  模糊器类型 23
3.2.1  本地模糊器 24
3.2.2  远程模糊器 25
3.2.3  内存模糊器 27
3.2.4  模糊器框架 28
3.3  小结 29
第4章  数据表示和分析 30
4.1  什么是协议 30
4.2  协议域 31
4.3  简单文本协议 32
4.4  二进制协议 32
4.5  网络协议 35
4.6  文件格式 36
4.7  常见的协议元素 38
4.7.1  名字-值对 39
4.7.2  块标识符 39
4.7.3  块长度 39
4.7.4  校验和 39
4.8  小结 39
第5章  有效模糊测试的需求 40
5.1  可重现性和文档记录 40
5.2  可重用性 41
5.3  过程状态和过程深度 42
5.4  跟踪、代码覆盖和度量 44
5.5  错误检测 44
5.6  资源约束 45
5.7  小结 46
第二部分  目标和自动化
第6章  自动化测试和测试数据生成 47
6.1  自动化测试的价值 47
6.2  有用的工具和库 48
6.2.1  ETHEREAL/WIRESHARK 48
6.2.2  LIBDASM和LIBDISASM 48
6.2.3  LIBNET /LIBNETNT 49
6.2.4  LIBPCAP 49
6.2.5  METRO PACKET LIBRARY 49
6.2.6  PTRACE 49
6.2.7  PYTHON EXTENSIONS 49
6.3  编程语言的选择 50
6.4  测试数据生成和模糊启发式 50
6.4.1  整型值 51
6.4.2  字符串重复 53
6.4.3  字段分隔符 53
6.4.4  格式化字符串 55
6.4.5  字符翻译 55
6.4.6  目录遍历 56
6.4.7  命令注入 56
6.5  小结 57
第7章  环境变量和参数的模糊测试 58
7.1  本地化模糊测试介绍 58
7.1.1  命令行参数 58
7.1.2  环境变量 58
7.2  本地化模糊测试准则 60
7.3  寻找目标程序 60
7.4  本地化模糊测试方法 63
7.5  枚举环境变量 63
7.6  自动化的环境变量测试 64
7.7  检测问题 65
7.8  小结 67
第8章  环境变量和参数的模糊测试:
自动化 68
8.1  iFUZZ本地化模糊器的特性 68
8.2  iFUZZ的开发 69
8.3  iFUZZ的开发语言 73
8.4  实例研究 73
8.5  益处和改进的余地 74
8.6  小结 74
第9章  Web应用程序和服务器模糊测试 75
9.1  什么是Web应用程序模糊测试 75
9.2  目标应用 77
9.3  测试方法 78
9.3.1  建立目标环境 78
9.3.2  输入 79
9.4  漏洞 88
9.5  异常检测 90
9.6  小结 91
第10章  Web应用程序和服务器的模糊
测试:自动化 92
10.1  Web应用模糊器 92
10.2  WebFuzz的特性 94
10.2.1  请求 94
10.2.2  模糊变量 95
10.2.3  响应 96
10.3  必要的背景知识 97
10.3.1  识别请求 97
10.3.2  漏洞检测 98
10.4  WebFuzz的开发 100
10.4.1  开发方法 100
10.4.2  开发语言的选择 100
10.4.3  设计 100
10.5  实例研究 106
10.5.1  目录遍历 106
10.5.2  溢出 107
10.5.3  SQL注入 109
10.5.4  XSS脚本 111
10.6  益处和改进的余地 114
10.7  小结 114
第11章  文件格式模糊测试 115
11.1  目标应用 115
11.2  方法 116
11.2.1  强制性或基于变异的模糊测试 117
11.2.2  智能强制性或基于生成的模糊测试 118
11.3  输入 118
11.4  漏洞 119
11.4.1  拒绝服务 119
11.4.2  整数处理问题 119
11.4.3  简单的栈和堆溢出 120
11.4.4  逻辑错误 121
11.4.5  格式化字符串 121
11.4.6  竞争条件 121
11.5  漏洞检测 121
11.6  小结 122
第12章  文件格式模糊测试:UNIX平台
上的自动化测试 123
12.1  NOTSPIKEFILE和SPIKEFILE 123
12.2  开发方法 124
12.2.1  异常检测引擎 124
12.2.2  异常报告(异常检测) 124
12.2.3  核心模糊测试引擎 125
12.3  有意义的代码片段 126
12.3.1  通常感兴趣的UNIX信号 127
12.3.2  不太感兴趣的UNIX信号 128
12.4  僵死进程 128
12.5  使用的注意事项 130
12.5.1  ADOBE ACROBAT 131
12.5.2  REALNETWORKS REALPLAYRE 131
12.6  实例研究:REALPLAYER REALPIX
格式化字符串漏洞 131
12.7  语言 133
12.8  小结 133
第13章  文件格式模糊测试:Windows
平台上的自动化测试 134
13.1  Windows文件格式漏洞 134
13.2  FileFuzz的特性 136
13.2.1  创建文件 136
13.2.2  应用程序执行 138
13.2.3  异常检测 138
13.2.4  保存的审核 139
13.3  必要的背景知识 140
13.4  FileFuzz的开发 142
13.4.1  开发方法 143
13.4.2  开发语言的选择 143
13.4.3  设计 143
13.5  实例研究 149
13.6  益处和改进的余地 152
13.7  小结 152
第14章  网络协议模糊测试 153
14.1  什么是网络协议模糊测试 153
14.2  目标应用 155
14.2.1  数据链路层 156
14.2.2  网络层 156
14.2.3  传输层 157
14.2.4  会话层 157
14.2.5  表示层 157
14.2.6  应用层 157
14.3  测试方法 158
14.3.1  强制性或基于变异的模糊测试 158
14.3.2  智能强制性模糊测试和基于生成的
模糊测试 158
14.3.3  修改的客户端变异模糊测试 159
14.4  错误检测 159
14.4.1  人工方法(基于调试器) 160
14.4.2  自动化方法(基于代理) 160
14.4.3  其他方法 160
14.5  小结 160
第15章  网络协议模糊测试:UNIX平台
上的自动化测试 161
15.1  使用SPIKE进行模糊测试 161
15.1.1  选择测试目标 161
15.1.2   协议逆向工程 162
15.2  SPIKE 101 164
15.2.1  模糊测试引擎 164
15.2.2  通用的基于行的TCP模糊器 165
15.3  基于块的协议建模 166
15.4  SPIKE的额外特性 167
15.4.1  特定于协议的模糊器 167
15.4.2  特定于协议的模糊测试脚本 167
15.4.3  通用的基于脚本的模糊器 168
15.5  编写SPIKE NMAP模糊器脚本 168
15.6  小结 171
第16章  网络协议模糊测试:Windows
平台上的自动化测试 172
16.1  ProtoFuzz的特性 172
16.1.1  包结构 172
16.1.2  捕获数据 173
16.1.3  解析数据 173
16.1.4  模糊变量 174
16.1.5  发送数据 175
16.2  必要的背景知识 175
16.2.1  错误检测 175
16.2.2  协议驱动程序 175
16.3  ProtoFuzz的开发 176
16.3.1  开发语言的选择 176
16.3.2  包捕获库 176
16.3.3  设计 177
16.4  实例研究 181
16.5  益处和改进的余地 182
16.6  小结 183
第17章  Web浏览器模糊测试 184
17.1  什么是Web浏览器模糊测试 184
17.2  目标 185
17.3  方法 185
17.3.1  测试方法 185
17.3.2  输入 186
17.4  漏洞 193
17.5  错误检测 194
17.6  小结 195
第18章  Web浏览器的模糊测试:自动化 196
18.1  组件对象模型的背景知识 196
18.1.1  在Nutshell中的发展历史 196
18.1.2  对象和接口 197
18.1.3  ActiveX 197
18.2  模糊器的开发 199
18.2.1  枚举可加载的ActiveX控件 200
18.2.2  属性、方法、参数和类型 203
18.2.3  模糊测试和监视 207
18.3  小结 208
第19章  内存数据的模糊测试 209
19.1  内存数据模糊测试的概念及实施
该测试的原因 209
19.2  必需的背景知识 210
19.3  究竟什么是内存数据模糊测试 213
19.4  目标 214
19.5  方法:变异循环插入 214
19.6  方法:快照恢复变异 215
19.7  测试速度和处理深度 216
19.8  错误检测 217
19.9  小结 217
第20章  内存数据的模糊测试:自动化 219
20.1  所需要的特性集 219
20.2  开发语言的选择 220
20.3  Windows调试API 222
20.4  将其整合在一起 225
20.4.1  如何在特定点将“钩子”植入目标
进程 226
20.4.2  如何处理进程快照和恢复 228
20.4.3  如何选择植入钩子的点 231
20.4.4  如何对目标内存空间进行定位和
变异 231
20.5  一个最好的新工具PyDbg 231
20.6  一个构想的示例 233
20.7  小结 244
第三部分  高级模糊测试技术
第21章  模糊测试框架 245
21.1  模糊测试框架的概念 245
21.2  现有框架 247
21.2.1  antiparser 247
21.2.2  Dfuz 249
21.2.3  SPIKE 252
21.2.4  Peach 255
21.2.5  通用模糊器 257
21.2.6  Autodaf 259
21.3  定制模糊器的实例研究:Shockwave-
Flash 260
21.3.1  SWF文件的建模 261
21.3.2  生成有效的数据 270
21.3.3  对环境进行模糊测试 271
21.3.4  测试方法 272
21.4  模糊测试框架Sulley 272
21.4.1  Sulley目录结构 272
21.4.2  数据表示 274
21.4.3  会话 282
21.4.4  事后验证阶段 286
21.4.5  一个完整的实例分析 290
21.5  小结 295
第22章  自动化协议解析 297
22.1  模糊测试存在的问题是什么 297
22.2  启发式技术 299
22.2.1  代理模糊测试 299
22.2.2  改进的代理模糊测试 300
22.2.3  反汇编启发式规则 302
22.3  生物信息学 303
22.4  遗传算法 305
22.5  小结 309
第23章  模糊器跟踪 310
23.1  我们究竟想要跟踪什么 310
23.2  二进制代码可视化和基本块 311
23.2.1  CFG 312
23.2.2  CFG示例 312
23.3  构造一个模糊器跟踪器 313
23.3.1  刻画目标特征 314
23.3.2  跟踪 314
23.3.3  交叉引用 316
23.4  对一个代码覆盖工具的分析 318
23.4.1  PStalker设计概览 319
23.4.2  数据源 320
23.4.3  数据探查 321
23.4.4  数据捕获 321
23.4.5  局限性 321
23.4.6  数据存储 322
23.5  实例研究 324
23.5.1  测试策略 325
23.5.2  测试方法 327
23.6  益处和改进的余地 330
23.7  小结 333
第24章  智能故障检测 334
24.1  基本的错误检测方法 334
24.2  我们所要搜索的内容 336
24.3  选择模糊值时的注意事项 340
24.4  自动化的调试器监视 341
24.4.1  一个基本的调试器监视器 341
24.4.2  一个更加高级的调试器监视器 344
24.5  调试器在应用程序前先看到的异常和
调试器再次看到程序未捕获的异常的
比较 347
24.6  动态二进制插装 348
24.7  小结 350
第四部分  展   望
第25章  汲取的教训 351
25.1  软件开发生命周期 351
25.1.1  分析 353
25.1.2  设计 353
25.1.3  编码 354
25.1.4  测试 354
25.1.5  维护 354
25.1.6  在SDLC中实现模糊测试 355
25.2  开发者 355
25.3  QA研究者 355
25.4  安全问题研究者 356
25.5  小结 356
第26章  展望 357
26.1  商业工具 357
26.1.1  安全性测试工具beSTORM 357
26.1.2  BreakingPoint系统BPS-1000 358
26.1.3  Codenomicon 358
26.1.4  GLEG  ProtoVer Professional 360
26.1.5  安全性测试工具Mu-4000 361
26.1.6  Security Innovation Holodeck 361
26.2  发现漏洞的混合方法 362
26.3  集成的测试平台 362
26.4  小结 363

教学资源推荐
作者: 厦门大学 杜朝运