《模糊测试 强制发掘安全漏洞的利器》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:(美)萨顿,(美)格林,(美)阿米尼著;段念,赵勇译
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2013
  • ISBN:9787121210839
  • 页数:532 页
图书介绍:随着软件安全性问题变得越来越关键,传统的仅由组织内的少数安全专家负责安全的模式正在受到越来越多的挑战。模糊测试是一种能够降低安全性测试门槛的方法,它通过高度自动化的手段让组织的开发和测试团队都能参与到安全性测试中,并能够通过启发式等方法不断积累安全测试的经验,帮助组织建立更有效的面向安全性的开发流程。《模糊测试-用强制方法发现安全漏洞》是一本系统性描述模糊测试的专著,本书介绍了主要操作系统和主流应用类型的模糊测试方法,系统性地描述了方法和工具,并使用实际案例帮助读者建立直观的认知。

第一部分 基础知识 2

第1章 安全漏洞发现方法学 2

1.1 白盒测试 3

1.1.1 代码评审(Source Code Review) 3

1.1.2 工具与自动化 5

1.1.3 优点和缺点 7

1.2 黑盒测试 8

1.2.1 手工测试 8

1.2.2 自动化测试或模糊测试 10

1.2.3 优点和缺点 11

1.3 灰盒测试 12

1.3.1 二进制审计 12

1.3.2 自动化的二进制审计 15

1.3.3 优点和缺点 15

1.4 小结 16

第2章 什么是模糊测试 17

2.1 模糊测试的定义 17

2.2 模糊测试的历史 18

2.3 模糊测试各阶段 22

2.4 模糊测试的局限性和期望 24

2.4.1 访问控制漏洞 25

2.4.2 糟糕的设计逻辑 25

2.4.3 后门 26

2.4.4 破坏 26

2.4.5 多阶段安全漏洞(MuliStage Vulnerability) 27

2.5 小结 27

第3章 模糊测试方法与模糊测试器类型 28

3.1 模糊测试方法 28

3.1.1 预生成测试用例 29

3.1.2 随机生成输入 29

3.1.3 手工协议变异测试 30

3.1.4 变异或强制性测试 30

3.1.5 自动协议生成测试 31

3.2 模糊测试器类型 31

3.2.1 本地模糊器 31

3.2.2 远程模糊测试器 34

3.2.3 存模糊测试器 37

3.2.4 模糊测试框架 38

3.3 小结 39

第4章 数据表示和分析 40

4.1 什么是协议 40

4.2 协议中的字段 41

4.3 简单文本协议(Plain Text Protocols) 43

4.4 二进制协议 44

4.5 网络协议 47

4.6 文件格式 48

4.7 常用协议元素 51

4.7.1 名字-值对 51

4.7.2 块识别符 51

4.7.3 块大小 52

4.7.4 校验和 52

4.8 小结 52

第5章 有效模糊测试的需求 53

5.1 可重现性与文档 53

5.2 可重用性 54

5.3 过程状态和过程深度 55

5.4 跟踪、代码覆盖和度量 58

5.5 错误检测 58

5.6 资源约束 60

5.7 小结 60

第二部分 目标与自动化 62

第6章 自动化与数据生成 62

6.1 自动化的价值 62

6.2 有用的工具和库 63

6.2.1 ETHEREAL/WIRESHARK 64

6.2.2 LIBDASM和LIBDISASM 64

6.2.3 LIBNET/LIBNETNT 64

6.2.4 LIBPCAP 65

6.2.5 METRO PACKET LIBRARY 65

6.2.6 PTRACE 65

6.2.7 PYTHON扩展 65

6.3 编程语言的选择 66

6.4 数据生成与模糊试探值(Fuzz Heuristics) 66

6.4.1 整数值 68

6.4.2 字符串重复(String Repetitions) 70

6.4.3 字段分隔符 71

6.4.4 格式字符串 73

6.4.5 字符翻译 73

6.4.6 目录遍历 74

6.4.7 命令注入 75

6.5 小结 75

第7章 环境变量与参数模糊测试 76

7.1 本地模糊测试介绍 76

7.1.1 命令行参数 76

7.1.2 环境变量 77

7.2 本地模糊测试原则 78

7.3 寻找测试目标 79

7.3.1 UNIX文件权限释义 81

7.4 本地模糊测试方法 82

7.5 枚举环境变量 83

7.5.1 GNU调试器(GNU Debug,GDB)法 83

7.6 自动化的环境变量模糊测试 84

7.6.1 库预加载(Library Preloading) 85

7.7 检测问题 86

7.8 小结 88

第8章 自动化的环境变量与参数模糊测试 89

8.1 iFUZZ本地模糊测试器的功能 89

8.2 开发iFUZZ工具 91

8.2.1 开发方法 92

8.3 iFUZZ使用的编程语言 95

8.4 案例研究 96

8.5 优点与改进 97

8.6 小结 98

第9章 Web应用与服务器模糊测试 99

9.1 什么是Web应用模糊测试 99

9.2 测试目标 102

9.3 测试方法 104

9.3.1 设置目标环境 104

9.3.2 输入 105

9.4 漏洞 116

9.5 异常检测 119

9.6 小结 120

第10章 Web应用和服务器的自动化模糊测试 121

10.1 Web应用模糊测试器 122

10.2 WebFuzz的特性 124

10.2.1 请求 124

10.2.2 模糊变量 125

10.2.3 响应 126

10.3 必备的背景信息 128

10.3.1 识别请求 128

10.3.2 检测响应 128

10.4 开发WebFuzz 131

10.4.1 思路 131

10.4.2 选择编程语言 131

10.4.3 设计 131

10.5 案例研究 139

10.5.1 目录遍历(Directory Traversal) 139

10.5.2 溢出 140

10.5.3 SQL注入 143

10.5.4 XSS脚本 145

10.6 优点与可能的改进 148

10.7 小结 149

第11章 文件格式模糊测试 150

11.1 测试目标 151

11.2 测试方法 152

11.2.1 强制或基于变异的模糊测试 152

11.2.2 智能强制或基于生成的模糊测试 154

11.3 测试输入 154

11.4 安全漏洞 155

11.4.1 拒绝服务(Daniel ofService,DoS) 155

11.4.2 整数处理问题 156

11.4.3 简单的栈和堆溢出 157

11.4.4 逻辑错误 157

11.4.5 格式字符串 158

11.4.6 竞争条件(Race Condition) 158

11.5 检测错误 158

11.6 小结 159

第12章 UNIX平台上的文件格式自动化模糊测试 161

12.1 notSPIKEfile和SPIKEfile 162

12.1.1 不具有的特性 162

12.2 开发过程 162

12.2.1 异常监测引擎 163

12.2.2 异常报告(异常监测) 163

12.2.3 模糊测试核心引擎 164

12.3 有意义的代码片段 165

12.3.1 UNIX中常见的我们可能感兴趣的信号 167

12.3.2 我们不感兴趣的信号 167

12.4 僵尸进程(Zombie Process) 168

12.5 使用注意事项 170

12.5.1 Adobe Acrobat 171

12.5.2 RealNetworks RealPlayer 171

12.6 案例研究:RealPlayer RealPix格式字符串漏洞 172

12.7 开发语言 174

12.8 小结 174

第13章 Windows平台上的文件格式自动化模糊测试 175

13.1 Windows文件格式漏洞 175

13.2 FileFuzz工具的功能 178

13.2.1 创建文件 179

13.2.2 执行应用 180

13.2.3 异常检测 181

13.2.4 保存的审计(audit) 182

13.3 必需的背景信息 183

13.3.1 识别目标应用 183

13.4 开发FileFuzz工具 186

13.4.1 开发方法 187

13.4.2 选择开发语言 187

13.4.3 设计 187

13.5 案例研究 194

13.6 优势和提升空间 198

13.7 小结 199

第14章 网络协议的模糊测试 200

14.1 什么是网络协议的模糊测试 201

14.2 选择目标应用 203

14.2.1 第二层:数据链接层 204

14.2.2 第三层:网络层 205

14.2.3 第四层:传输层 205

14.2.4 第五层:会话层 206

14.2.5 第六层:表示层 206

14.2.6 第七层:应用层 206

14.3 测试方法 207

14.3.1 强制(基于变异的)模糊测试 207

14.3.2 智能强制(基于生成的)模糊测试 207

14.3.3 通过修改客户端进行变异模糊测试 208

14.4 错误检测 209

14.4.1 手工方式(基于调试器) 209

14.4.2 自动化方式(基于代理) 209

14.4.3 其他来源 210

14.5 小结 210

第15章 UNIX平台上的自动化网络协议模糊测试 211

15.1 使用SPIKE进行模糊测试 212

15.1.1 选择目标 212

15.1.2 协议分析 213

15.2 SPIKE必要知识 215

15.2.1 模糊引擎 216

15.2.2 基于行的通用TCP模糊测试器 216

15.3 基于块的协议模型 217

15.4 其他的SPIKE特性 219

15.4.1 针对协议的模糊测试器 219

15.4.2 针对协议的模糊测试脚本 219

15.4.3 基于脚本的通用模糊测试器 220

15.5 编写SPIKE NMAP模糊测试器脚本 220

15.6 小结 224

第16章 Windows平台上网络协议的模糊测试 225

16.1 特性 226

16.1.1 数据包结构 226

16.1.2 抓取数据 227

16.1.3 解析数据 227

16.1.4 模糊测试变量 228

16.1.5 发送数据 229

16.2 必备的背景知识 229

16.2.1 检测故障 229

16.2.2 协议驱动程序 230

16.3 开发 231

16.3.1 选择编程语言 231

16.3.2 数据包抓取库 231

16.3.3 设计 232

16.4 案例研究 237

16.5 优势与可改进空间 239

16.6 小结 240

第17章 Web浏览器的模糊测试 241

17.1 什么是Web浏览器模糊测试 242

17.2 目标 242

17.3 方法 243

17.3.1 测试方法 243

17.3.2 测试输入 244

17.4 漏洞 253

17.5 检测 254

17.6 小结 255

第18章 Web浏览器的自动化模糊测试 256

18.1 组件对象模型背景 256

18.1.1 COM简史 257

18.1.2 对象与接口 257

18.1.3 ActiveX 258

18.2 开发模糊测试器 260

18.2.1 枚举可被加载的AcriveX控件 261

18.2.2 属性、方法、参数与类型 266

18.2.3 模糊测试与监视 270

18.3 小结 271

第19章 内存模糊测试 272

19.1 为什么需要内存模糊测试?怎么进行? 273

19.2 必要的背景知识 273

19.3 究竟什么是内存模糊测试的简要解释 277

19.4 目标 278

19.5 内存模糊测试方法之变异循环插入(Mutation Loop Insertion) 279

19.6 内存模糊测试方法之快照恢复变异(Snapshot restoration mutation) 280

19.7 测试速度与处理深度 281

19.8 错误检测 281

19.9 小结 282

第20章 自动化内存模糊测试 284

20.1 内存模糊测试工具特性集 284

20.2 选择开发语言 286

20.3 Windows调试API 288

20.4 整合以上的内容 292

20.4.1 如何在目标应用中特定的点放置“钩子” 292

20.4.2 如何生成与恢复进程快照 295

20.4.3 选择在何处放置钩子 299

20.4.4 如何定位和变异目标内存空间 299

20.5 PyDbg,一个新朋友 299

20.6 一个人造的示例 301

20.7 小结 314

第三部分 高级模糊测试技术 318

第21章 模糊测试框架 318

21.1 什么是模糊测试框架 319

21.2 现有的模糊测试框架 321

21.2.1 antiparser 321

21.2.2 Dfuz 323

21.2.3 SPIKE 327

21.2.4 Peach 330

21.2.5 通用目的模糊测试器 333

21.2.6 Autodafé 335

21.3 定制模糊测试器案例研究:Shockwave Flash 338

21.3.1 为SWF文件建模 339

21.3.2 生成有效的数据 350

21.3.3 模糊测试环境 351

21.3.4 测试方法 351

21.4 模糊测试框架Sulley 352

21.4.1 Sulley的目录结构 353

21.4.2 数据表示 354

21.4.3 会话 365

21.4.4 事后分析 370

21.4.5 一个完整的实例 375

21.5 小结 382

第22章 自动化协议分析 383

22.1 模糊测试的痛处 383

2 2.2 启发式技术 385

22.2.1 代理模糊测试 385

22.2.2 改进的代理模糊测试 388

22.2.3 反汇编启发式技术 389

22.3 生物信息学 390

22.4 遗传算法 394

22.5 小结 398

第23章 模糊测试器跟踪 399

23.1 我们跟踪的究竟是什么 399

23.2 可视化和基础块 401

23.2.1 控制流图 402

23.2.2 控制流图示例 402

23.3 构建一个模糊测试器跟踪器 403

23.3.1 分析目标 404

23.3.2 跟踪 405

23.3.3 交叉参考 407

23.4 分析一个代码覆盖工具 410

23.4.1 PStalker布局预览 411

23.4.2 数据源栏 412

23.4.3 数据浏览栏 413

23.4.4 数据抓取栏 414

23.4.5 局限性 414

23.4.6 数据存储 414

23.5 案例研究 417

23.5.1 测试策略 418

23.5.2 实际操作 421

23.6 优势与将来的改进 425

23.6.1 将来的改进 427

23.7 小结 428

第24章 智能错误检测 429

24.1 原始的错误检测技术 429

24.2 我们寻找的是什么 432

24.3 选择模糊测试值的注意事项 437

24.4 自动化的调试器监视 438

24.4.1 一个基础的调试器监视器 439

24.4.2 更高级的调试器监视器 442

24.5 首轮异常与末轮异常 446

24.6 动态二进制插装 447

24.7 小结 449

第四部分 展望 452

第25章 我们学到了什么 452

25.1 软件开发生命周期 452

25.1.1 分析阶段 455

25.1.2 设计阶段 455

25.1.3 编码阶段 456

25.1.4 测试阶段 456

25.1.5 维护阶段 457

25.1.6 在软件开发生命周期中实现模糊测试 457

25.2 开发者 457

25.3 QA研究员 458

25.4 安全研究者 458

25.5 小结 459

第26章 展望 460

26.1 商业工具 460

26.1.1 BeyondSecurity 司的beSTORM 461

26.1.2 BreakingPoint Systems 的BPS-1000 461

26.1.3 Codenomicon 462

26.1.4 GLEG ProtoVer专业版 464

26.1.5 MU Security公司的MU-4000 465

26.1.6 Security Innovation公司的Holodeck 466

26.2 发现漏洞的混合方法 467

26.3 集成的测试平台 468

26.4 小结 468

附录A 本书引用的小布什语录之详细解读 469

索引 480