第1章 软件安全概述 1
1.1 软件安全的重要性 1
【案例1】零日攻击、网络战与软件安全 1
【案例1思考与分析】 2
1.2 软件面临的安全威胁 6
1.2.1 软件漏洞 6
1.2.2 恶意代码 7
1.2.3 软件侵权 8
1.3 软件安全的概念 8
1.3.1 软件安全的一些定义 8
1.3.2 用信息安全的基本属性理解软件安全 9
1.3.3 软件安全相关概念辨析 12
1.4 软件安全的研究内容 16
1.4.1 软件安全是信息安全保障的重要内容 16
1.4.2 软件安全的主要方法和技术 18
1.5 思考与实践 20
1.6 学习目标检验 21
第2章 软件漏洞概述 22
2.1 软件漏洞的概念 22
2.1.1 信息安全漏洞 22
2.1.2 软件漏洞 23
2.1.3 软件漏洞成因分析 26
2.2 软件漏洞标准化管理 28
2.2.1 软件漏洞的分类 29
2.2.2 软件漏洞的分级 30
2.2.3 软件漏洞管理国际标准 32
2.2.4 软件漏洞管理国内标准 35
2.3 漏洞管控的思考 37
【案例2-1】白帽黑客的罪与罚 37
【案例2-2】阿里巴巴月饼门 37
【案例2-1和案例2-2思考与分析】 38
2.4 思考与实践 41
2.5 学习目标检验 42
第3章 Windows系统典型漏洞分析 43
3.1 内存漏洞 43
3.1.1 内存结构及缓冲区溢出 43
3.1.2 栈溢出漏洞及利用分析 44
3.1.3 堆溢出漏洞及利用分析 55
3.1.4 格式化字符串漏洞及利用分析 59
3.2 Windows安全漏洞保护分析 63
3.2.1 栈溢出检测选项/GS 63
3.2.2 数据执行保护DEP 64
3.2.3 地址空间布局随机化ASLR 66
3.2.4 安全结构化异常处理SafeSEH 67
3.2.5 增强缓解体验工具包EMET 68
【案例3】Windows安全漏洞保护技术应用 69
【案例3思考与分析】 69
3.3 思考与实践 73
3.4 学习目标检验 74
第4章 Web漏洞分析 75
4.1 Web基础 75
4.1.1 Web基本架构 75
4.1.2 一次Web访问过程分析 76
4.2 Web漏洞概述 77
4.3 SQL注入漏洞 80
4.3.1 漏洞原理及利用 81
4.3.2 漏洞防护的基本措施 84
【案例4-1】SQL注入漏洞源代码层分析 85
【案例4-1思考与分析】 86
4.4 XSS跨站脚本漏洞 93
4.4.1 漏洞原理及利用 93
4.4.2 漏洞防护的基本措施 97
【案例4-2】XSS漏洞源代码层分析 98
【案例4-2思考与分析】 98
4.5 CSRF跨站请求伪造漏洞 104
4.5.1 漏洞原理及利用 104
4.5.2 漏洞防护的基本措施 105
4.6 其他Web漏洞 107
4.6.1 命令执行漏洞原理及利用 107
4.6.2 文件包含漏洞原理及利用 107
4.6.3 文件上传漏洞原理及利用 108
4.7 思考与实践 109
4.8 学习目标检验 112
第5章 软件安全开发模型 113
5.1 软件开发模型 113
5.1.1 软件生命周期 113
5.1.2 软件过程与软件开发模型 114
5.2 软件安全开发模型 116
5.2.1 微软的软件安全开发生命周期模型 116
5.2.2 McGraw的软件内建安全开发模型 123
5.2.3 NIST的软件安全开发生命周期模型 125
5.2.4 OWASP的软件安全开发模型 126
5.2.5 软件安全开发模型特点比较 130
【案例5】Web应用漏洞消减模型设计 132
【案例5思考与分析】 132
5.3 思考与实践 134
5.4 学习目标检验 135
第6章 软件安全需求分析 137
6.1 软件需求分析与软件安全需求分析 137
6.1.1 软件需求分析的主要工作 137
6.1.2 软件安全需求分析的主要工作 138
6.2 软件安全需求的来源 140
6.2.1 软件安全需求的来源分类 140
6.2.2 软件安全遵从性需求 141
6.3 软件安全需求的获取 149
6.3.1 软件安全需求获取相关方 149
6.3.2 软件安全需求获取方法 149
【案例6】一个在线学习系统的安全需求分析 152
【案例6思考与分析】 152
6.4 思考与实践 158
6.5 学习目标检验 159
第7章 软件安全设计 160
7.1 软件设计与软件安全设计 160
7.1.1 软件设计的主要工作 160
7.1.2 软件安全设计的主要工作 161
7.2 软件安全设计原则 163
7.2.1 经典安全设计原则条目 163
7.2.2 安全设计原则介绍 165
7.3 软件安全功能设计 170
7.3.1 一个基本Web应用系统的安全功能设计 170
7.3.2 基于安全模式的软件安全设计 176
7.4 威胁建模 178
7.4.1 威胁建模的概念 178
7.4.2 威胁建模的过程 180
【案例7】对一个简单的Web应用系统进行威胁建模 188
【案例7思考与分析】 188
7.5 思考与实践 191
7.6 学习目标检验 192
第8章 软件安全编码 193
8.1 软件安全编码概述 193
8.1.1 软件安全编码的主要工作 193
8.1.2 软件安全编码的基本原则 195
8.2 开发语言的安全性 197
8.2.1 C语言安全编码 197
8.2.2 Java语言安全编码 199
8.3 安全编码实践 201
8.3.1 输入验证 201
8.3.2 数据净化 202
8.3.3 错误信息输出保护 203
8.3.4 数据保护 204
8.3.5 其他安全编码实践 206
【案例8】基于OpenSSL的C/S安全通信程序 207
【案例8思考与分析】 208
8.4 思考与实践 211
8.5 学习目标检验 213
第9章 软件安全测试 214
9.1 软件测试与软件安全测试 214
9.1.1 软件测试的主要工作 214
9.1.2 软件安全测试的主要工作 215
9.2 软件安全功能测试 218
9.3 代码分析 221
9.3.1 代码静态分析与代码动态分析的概念 221
9.3.2 源代码静态分析的一般过程 223
9.3.3 源代码静态分析工具 224
9.4 模糊测试 226
9.4.1 模糊测试的概念 226
9.4.2 模糊测试过程 228
9.4.3 模糊测试工具 230
9.5 渗透测试 231
9.5.1 渗透测试的概念 231
9.5.2 渗透测试过程 232
9.5.3 渗透测试工具 233
【案例9】Web应用安全测试与安全评估 234
【案例9思考与分析】 235
9.6 思考与实践 238
9.7 学习目标检验 240
第10章 软件安全部署 241
10.1 软件部署与安全 241
10.1.1 软件部署的主要工作 241
10.1.2 软件安全部署的主要工作 243
10.2 软件安装配置安全与运行安全 243
10.2.1 软件安装配置安全 243
10.2.2 软件运行安全 244
10.3 软件运行环境安全配置与运行安全 245
10.3.1 基础环境软件的安全配置 245
10.3.2 基础环境软件漏洞监测与修复 246
【案例10】SSL/TIS协议的安全实现与安全部署 246
【案例10思考与分析】 246
10.4 思考与实践 248
10.5 学习目标检验 248
第11章 恶意代码分析基础 249
11.1 计算机启动过程 249
11.1.1 计算机初始化启动过程及其安全性分析 249
11.1.2 操作系统启动过程及其安全性分析 252
11.2 程序的生成和运行 255
11.2.1 程序生成和运行的典型过程 255
11.2.2 编译/链接与程序的构建 256
11.2.3 加载与程序的运行 258
11.3 PE文件 259
11.3.1 PE文件的概念 259
11.3.2 PE文件的结构 260
11.3.3 地址映射 262
11.3.4 导入函数地址表和导入表 265
【案例11-1】构造一个PE格式的可执行文件 270
【案例11-1思考与分析】 271
11.4 程序的逆向分析 280
11.4.1 逆向工程 280
11.4.2 逆向工程相关工具及应用 285
【案例11-2】OllyDbg逆向分析应用 290
【案例11-2思考与分析】 290
【案例11-3】IDA逆向分析应用 295
【案例11-3思考与分析】 295
11.5 思考与实践 302
11.6 学习目标检验 304
第12章 恶意代码防治 305
12.1 恶意代码机理分析 305
12.1.1 计算机病毒 305
12.1.2 蠕虫 307
12.1.3 木马 308
12.1.4 后门 312
12.1.5 Rootkit 313
12.1.6 勒索软件 315
12.1.7 恶意代码技术的发展 316
【案例12】WannaCry勒索软件分析 317
【案例12思考与分析】 318
12.2 恶意代码涉及的法律问题与防治管理 321
12.2.1 恶意代码涉及的法律问题 321
12.2.2 恶意代码防治管理 329
12.3 面向恶意代码检测的软件可信验证 331
12.3.1 软件可信验证模型 332
12.3.2 特征可信验证 332
12.3.3 身份(来源)可信验证 334
12.3.4 能力(行为)可信验证 336
12.3.5 运行环境可信验证 340
12.4 思考与实践 341
12.5 学习目标检验 343
第13章 开源软件及其安全性 344
13.1 开源软件概述 344
13.1.1 软件分类 344
13.1.2 开源软件的概念 346
13.1.3 开源软件受到追捧的原因 350
13.2 开源软件的知识产权 351
13.2.1 开源软件涉及的主要权益 351
13.2.2 开源软件的授权模式 353
【案例13】主流开源许可证应用分析 356
【案例13思考与分析】 357
13.3 开源软件的安全性反思 357
13.4 思考与实践 360
13.5 学习目标检验 360
第14章 软件知识产权保护 362
14.1 软件知识产权的法律保护 362
14.1.1 软件的知识产权 362
14.1.2 软件知识产权的法律保护途径 363
【案例14-1】对iOS系统越狱行为的分析 365
【案例14-1思考与分析】 366
14.2 软件版权的技术保护 366
14.2.1 软件版权的技术保护目标及基本原则 366
14.2.2 软件版权保护的基本技术 367
【案例14-2】.NET平台下的软件版权保护 374
【案例14-2思考与分析】 375
14.2.3 云环境下的软件版权保护 378
14.3 思考与实践 382
14.4 学习目标检验 383
参考文献 385