第1部分 漏洞分析基础 3
第1章 软件中的漏洞 3
1.1 漏洞概述 3
1.1.1 漏洞定义 3
1.1.2 漏洞特点 7
1.2 漏洞分类与分级 9
1.2.1 漏洞分类 9
1.2.2 漏洞分级 12
1.3 漏洞的影响 15
1.3.1 漏洞无处不在 15
1.3.2 漏洞分析保障信息安全 18
参考文献 22
第2章 漏洞分析发展历程 25
2.1 软件漏洞分析 25
2.1.1 广义漏洞分析 26
2.1.2 狭义漏洞分析 26
2.2 原始萌芽阶段 28
2.2.1 通信安全 28
2.2.2 分析萌芽 29
2.2.3 信息加密 30
2.3 初步发展阶段 30
2.3.1 计算机安全 31
2.3.2 单一化漏洞挖掘 31
2.3.3 操作系统防护 32
2.4 高速发展阶段 33
2.4.1 互联网安全 33
2.4.2 多样化漏洞分析 34
2.4.3 信息系统防护 36
2.5 综合治理阶段 38
2.5.1 网际安全 38
2.5.2 系统化漏洞管控 39
2.5.3 防御体系建设 44
参考文献 48
第3章 漏洞分析技术概述 56
3.1 漏洞分析技术体系 56
3.2 软件架构安全分析 58
3.2.1 形式化架构分析技术 59
3.2.2 工程化架构分析技术 60
3.2.3 分析技术对比 60
3.3 源代码漏洞分析 61
3.3.1 基于中间表示的分析技术 63
3.3.2 基于逻辑推理的分析技术 64
3.3.3 分析技术对比 64
3.4 二进制漏洞分析 66
3.4.1 静态漏洞分析技术 67
3.4.2 动态漏洞分析技术 68
3.4.3 动静结合的漏洞分析技术 68
3.4.4 分析技术对比 69
3.5 运行系统漏洞分析 70
3.5.1 信息收集 71
3.5.2 漏洞检测 71
3.5.3 漏洞确认 72
3.5.4 分析技术对比 72
参考文献 73
第2部分 源代码漏洞分析 79
第4章 数据流分析 79
4.1 基本原理 79
4.1.1 基本概念 79
4.1.2 检测程序漏洞 80
4.1.3 辅助支持技术 83
4.2 方法实现 85
4.2.1 使用数据流分析检测程序漏洞 85
4.2.2 数据流分析作为辅助技术 98
4.3 实例分析 101
4.3.1 使用数据流分析检测程序漏洞 101
4.3.2 数据流分析作为辅助技术 106
4.4 典型工具 107
4.4.1 Fortify SCA 107
4.4.2 Coverity Prevent 109
4.4.3 FindBugs 112
参考文献 114
第5章 污点分析 116
5.1 基本原理 116
5.1.1 基本概念 116
5.1.2 使用污点分析技术挖掘程序漏洞 117
5.2 方法实现 119
5.2.1 基于数据流的污点分析 119
5.2.2 基于依赖关系的污点分析 125
5.3 实例分析 126
5.4 典型工具 128
5.4.1 Pixy 128
5.4.2 TAJ 130
参考文献 131
第6章 符号执行 134
6.1 基本原理 134
6.1.1 基本概念 134
6.1.2 检测程序漏洞 136
6.1.3 构造测试用例 138
6.1.4 与其他漏洞分析技术结合 140
6.2 方法实现 141
6.2.1 使用符号执行检测程序漏洞 141
6.2.2 使用符号执行构造测试用例 148
6.3 实例分析 149
6.3.1 检测程序漏洞 149
6.3.2 构造测试用例 151
6.4 典型工具 153
6.4.1 Clang 153
6.4.2 KLEE 156
参考文献 158
第7章 模型检测 161
7.1 基本原理 161
7.1.1 基本概念 161
7.1.2 技术框架 162
7.1.3 方法特点 163
7.2 方法实现 164
7.2.1 程序建模 165
7.2.2 安全缺陷属性描述 166
7.2.3 程序漏洞检查 168
7.3 实例分析 170
7.3.1 线性时序逻辑检查 170
7.3.2 分布式软件的漏洞检测 172
7.4 典型工具 175
7.4.1 SLAM 176
7.4.2 MOPS 178
参考文献 182
第8章 定理证明 185
8.1 基本原理 185
8.1.1 基本概念 185
8.1.2 技术框架 186
8.1.3 方法特点 187
8.2 方法实现 187
8.2.1 程序转换 188
8.2.2 属性描述 192
8.2.3 定理证明 194
8.3 实例分析 198
8.3.1 整数溢出漏洞分析 198
8.3.2 TLS协议逻辑漏洞分析 200
8.3.3 输入验证类漏洞分析 203
8.4 典型工具 205
8.4.1 Saturn 205
8.4.2 ESC/Java 207
参考文献 208
第3部分 二进制漏洞分析 215
第9章 模糊测试 215
9.1 基本原理 215
9.1.1 基本概念 215
9.1.2 基本过程 216
9.2 方法实现 217
9.2.1 输入数据的关联分析 217
9.2.2 测试用例集的构建方法 223
9.2.3 测试异常分析 227
9.2.4 模糊测试框架 231
9.3 实例分析 232
9.3.1 文件模糊测试 233
9.3.2 网络协议模糊测试 236
9.3.3 ActiveX控件模糊测试 239
9.4 典型工具 242
9.4.1 Peach 242
9.4.2 Sulley 244
参考文献 246
第10章 动态污点分析 247
10.1 基本原理 247
10.1.1 基本概念 247
10.1.2 动态污点分析原理 248
10.1.3 方法特点 250
10.2 方法实现 251
10.2.1 污点数据标记 252
10.2.2 污点动态跟踪 254
10.2.3 污点误用检查 260
10.3 实例分析 262
10.4 典型工具 264
10.4.1 TaintCheck 265
10.4.2 Argos 265
10.4.3 TaintDroid 267
参考文献 268
第11章 基于模式的漏洞分析 270
11.1 基本原理 270
11.1.1 基本概念 270
11.1.2 二进制文件结构 271
11.2 方法实现 277
11.2.1 反汇编分析 277
11.2.2 逆向中间表示 280
11.2.3 漏洞模式建模 289
11.2.4 漏洞模式检测 293
11.3 实例分析 295
11.3.1 缓冲区溢出类漏洞实例(不安全函数调用) 295
11.3.2 缓冲区溢出类漏洞实例(循环写内存) 298
11.3.3 整数溢出类漏洞实例 299
11.3.4 内存地址对象破坏性调用类漏洞实例 300
11.4 典型工具 302
11.4.1 BinNavi 302
11.4.2 BAP 303
参考文献 304
第12章 基于二进制代码比对的漏洞分析 307
12.1 基本原理 307
12.1.1 研究现状 307
12.1.2 基本原理 308
12.2 方法实现 310
12.2.1 基于文本的二进制代码比对 310
12.2.2 基于图同构的二进制比对 311
12.2.3 基于结构化的二进制比对 313
12.2.4 软件补丁的二进制比对技术 317
12.3 实例分析 318
12.3.1 漏洞信息搜集 318
12.3.2 搭建调试环境 318
12.3.3 补丁比对 319
12.3.4 静态分析 321
12.3.5 动态调试 322
12.4 典型工具 324
12.4.1 Bindiff 324
12.4.2 Eye Binary Diffing Suite 326
参考文献 328
第13章 智能灰盒测试 330
13.1 基本原理 330
13.1.1 基本概念 330
13.1.2 智能灰盒测试的过程 331
13.2 方法实现 332
13.2.1 动态符号执行 333
13.2.2 路径控制与定向遍历 339
13.2.3 路径约束求解 350
13.2.4 漏洞触发数据生成 359
13.3 实例分析 364
13.3.1 关键路径提取 364
13.3.2 中间符号设置 365
13.3.3 污点分析 366
13.3.4 执行Trace获取 368
13.3.5 路径控制与定向遍历 369
13.3.6 约束求解 370
13.3.7 结论 371
13.4 典型工具 371
13.4.1 Dart 371
13.4.2 Smart fuzzing 373
13.4.3 BitBlaze 375
参考文献 376
第4部分 架构安全和运行系统漏洞分析 383
第14章 软件架构安全分析 383
14.1 基本原理 383
14.1.1 软件架构定义 383
14.1.2 架构安全概述 384
14.1.3 架构安全分析过程 386
14.2 方法实现 386
14.2.1 形式化分析技术 386
14.2.2 工程化分析技术 391
14.3 实例分析 400
14.3.1 形式化分析实例——UMLsec 400
14.3.2 工程化分析实例——基于Web应用程序的威胁建模 403
14.4 典型工具 406
14.4.1 威胁建模工具 406
14.4.2 软件架构分析工具 408
参考文献 409
第15章 运行系统漏洞分析 411
15.1 基本原理 411
15.1.1 基本概念 411
15.1.2 运行系统漏洞分析 412
15.2 方法实现 414
15.2.1 信息收集 414
15.2.2 配置管理漏洞检测 417
15.2.3 通信协议漏洞检测 418
15.2.4 授权认证漏洞检测 420
15.2.5 数据验证漏洞检测 423
15.2.6 数据安全性漏洞检测 425
15.3 实例分析 426
15.3.1 信息收集 426
15.3.2 漏洞检测过程 426
15.4 典型工具 429
15.4.1 Nmap 429
15.4.2 Nessus 430
15.4.3 微软基线安全分析器 431
15.4.4 WVS 432
参考文献 434
第5部分 前沿技术及未来展望 439
第16章 漏洞分析领域新挑战 439
16.1 移动智能终端漏洞分析 439
16.1.1 领域背景 439
16.1.2 漏洞分析技术 440
16.1.3 应对措施 443
16.2 云计算平台漏洞分析 444
16.2.1 领域背景 444
16.2.2 漏洞分析技术 446
16.2.3 应对措施 449
16.3 物联网漏洞分析 449
16.3.1 领域背景 449
16.3.2 漏洞分析技术 451
16.3.3 应对措施 455
16.4 工控系统漏洞分析 456
16.4.1 领域背景 456
16.4.2 漏洞分析技术 457
16.4.3 应对措施 461
16.5 其他新兴领域的漏洞分析 462
16.5.1 智能家居的漏洞分析 462
16.5.2 智能交通的漏洞分析 464
16.5.3 可穿戴设备的漏洞分析 466
参考文献 467
第17章 漏洞分析技术展望 476
17.1 理论突破 476
17.1.1 软件模型构建 476
17.1.2 漏洞模式提取 477
17.1.3 技术极限求解 478
17.2 技术发展 479
17.2.1 精确度判定 479
17.2.2 分析性能的提高 480
17.2.3 智能化提升 481
17.3 工程实现 482
17.3.1 大规模软件的漏洞分析 482
17.3.2 新型平台上的漏洞分析 485
17.3.3 通用平台级漏洞分析软件开发 488
参考文献 489
附录A 国内外重要漏洞库介绍 492
A.1 国家级漏洞库 492
A.2 行业级漏洞库 495
A.3 民间级漏洞库 496
参考文献 502
附录B 国内外重要安全标准介绍 503
B.1 总体情况 503
B.2 基础类标准 504
B.2.1 国内标准 504
B.2.2 国际标准 505
B.3 防范类标准 509
B.3.1 国内标准 509
B.3.2 国际标准 512
B.4 管理类标准 514
B.4.1 国内标准 514
B.4.2 国际标准 515
B.5 应用类标准 517
B.5.1 国际标准 517