描述
开 本: 16开纸 张: 胶版纸包 装: 平装是否套装: 否国际标准书号ISBN: 9787121287503
编辑推荐
在日益严峻的信息安全背景下,软件的安全性已经成为信息安全问题的重中之重。本书针对信息安全领域这一核心问题,站在软件开发过程控制的视角,从系统工程基本理论思想出发,借鉴当前国际*的软件安全开发的理论和方法,提出安全属性驱动的软件开发方法。
内容简介
在日益严峻的信息安全背景下,软件的安全性已经成为信息安全问题的重中之重。本书针对信息安全领域这一核心问题,站在软件开发过程控制的视角,从系统工程基本理论思想出发,借鉴当前国际先进的软件安全开发的理论和方法,提出安全属性驱动的软件开发方法。全书以软件安全属性为核心,将安全属性贯穿于软件开发生命周期的每一个阶段,通过对软件开发生命周期全过程的安全质量管理和控制,以期减少开发过程中可能产生的各种漏洞,提高软件产品的本质安全性。全书共分为6章,第1章是软件安全开发相关的基本概念,第2章介绍了软件安全开发方法的历史演化进程以及一些典型的软件安全开发模型,第3章基于需求工程原理阐述了软件安全属性需求获取方法,第4章从系统架构角度出发阐述了软件安全架构的设计方法以及相关安全技术,第5章介绍了软件开发编码过程中的安全问题,第6章对于软件安全性测试进行了全面的阐述。本书的特点是既注重系统性和科学性,又注重实用性,系统性地介绍软件开发生命周期全过程的安全质量保证方法,可作为软件开发组织者、系统分析师、软件架构师、软件设计人员、开发人员、测试人员、系统运维人员以及软件相关专业的在校大学生和研究生学习与实践的较好的参考书。
目 录
第1章 理解软件安全开发 1
1.1 信息安全面临的困境 1
1.2 软件安全基本概念 2
1.2.1 软件定义 2
1.2.2 软件安全错误 2
1.2.3 软件安全的定义 3
1.3 软件安全属性刻画 4
1.3.1 保密性 4
1.3.2 完整性 5
1.3.3 可用性 5
1.3.4 认证性 6
1.3.5 授权 6
1.3.6 可记账性/审计性 7
1.3.7 抗抵赖性 7
1.3.8 可控性 8
1.3.9 可信性 8
1.4 信息产品的安全性评估标准 8
1.5 系统安全工程 9
1.6 系统安全工程能力成熟度模型 10
1.7 属性驱动的软件安全开发的基本思想 11
1.7.1 软件安全开发方法 11
1.7.2 软件定义安全 11
1.7.3 属性驱动的软件安全开发方法 14
1.8 本章小结 14
第2章 将安全嵌入软件开发整个生命周期 16
2.1 系统安全开发方法的进化史 16
2.2 软件安全开发模型 17
2.2.1 启发式软件安全开发模型 17
2.2.2 软件安全生命周期开发模型 18
2.3 微软的SDL模型 20
2.3.1 传统的系统开发瀑布模型 20
2.3.2 软件安全开发生命周期模型SDL 20
2.3.3 敏捷的SDL 23
2.3.4 ISO/IEC 27034 25
2.4 McGraw的软件安全开发模型 26
2.4.1 McGraw的七个接触点模型BSI 26
2.4.2 软件安全开发成熟度模型BSIMM 27
2.5 OWASP的软件安全开发模型 30
2.5.1 CLASP 30
2.5.2 SAMM 33
2.6 NIST的软件安全开发生命周期 34
2.7 属性驱动的软件安全开发生命周期模型 36
2.8 本章小结 36
第3章 软件安全需求分析 37
3.1 概述 37
3.1.1 基本内涵 37
3.1.2 安全需求的来源 39
3.1.3 软件安全需求的内容 39
3.2 核心软件安全需求 40
3.2.1 保密性需求 40
3.2.2 完整性需求 42
3.2.3 可用性需求 43
3.2.4 认证需求 44
3.2.5 授权需求 46
3.2.6 可记账性/审计需求 50
3.3 通用软件安全需求 51
3.3.1 安全架构需求 51
3.3.2 会话管理需求 51
3.3.3 错误和例外管理需求 52
3.3.4 配置参数管理需求 52
3.4 运维安全需求 52
3.4.1 环境部署需求 53
3.4.2 归档需求 54
3.4.3 反盗版需求 54
3.5 其他安全需求 55
3.5.1 顺序和时间需求 55
3.5.2 国际性需求 55
3.5.3 采购需求 56
3.6 软件安全需求获取方法 57
3.6.1 软件安全需求获取的概念 57
3.6.2 头脑风暴 57
3.6.3 问卷调查和访谈 58
3.6.4 策略分解 58
3.6.5 数据分类 60
3.6.6 主/客体关系矩阵 62
3.6.7 使用用例和滥用案例建模 62
3.7 软件安全需求跟踪矩阵 63
3.8 本章小结 64
第4章 软件安全保障设计 65
4.1 概述 65
4.1.1 软件安全设计的概念 65
4.1.2 软件安全设计的基本原则 65
4.1.3 平衡安全设计原则 71
4.2 属性驱动的软件安全设计 72
4.3 软件安全架构设计 73
4.3.1 康威定律 73
4.3.2 软件安全架构的设计方法 74
4.3.3 攻击面评估 75
4.3.4 威胁建模 75
4.3.5 风险分析 82
4.3.6 软件架构的选择 86
4.3.7 软件架构的安全考虑 92
4.3.8 与现有架构的集成 93
4.4 基于核心安全需求的软件安全设计 94
4.4.1 保密性设计 94
4.4.2 完整性设计 99
4.4.3 可用性设计 101
4.4.4 认证设计 102
4.4.5 授权设计 103
4.4.6 可记账性/审计设计 103
4.5 其他安全需求设计 104
4.5.1 接口安全设计 104
4.5.2 互联互通性 106
4.6 软件安全技术 106
4.6.1 认证 106
4.6.2 身份管理 107
4.6.3 凭证管理 109
4.6.4 流控制 112
4.6.5 防火墙和网络代理 113
4.6.6 中间件 114
4.6.7 排队基础设施和技术 114
4.6.8 日志与审计 114
4.6.9 入侵检测系统 115
4.6.10 入侵防御系统 116
4.6.11 数据丢失保护 116
4.6.12 虚拟化 117
4.6.13 数字版权管理 118
4.6.14 可信计算 120
4.6.15 数据库安全 121
4.6.16 编程语言环境 128
4.6.17 公共语言运行库 130
4.6.18 Java虚拟机 131
4.6.19 编译器选项 132
4.6.20 操作系统安全 132
4.6.21 嵌入式系统安全 133
4.7 安全架构与设计检查 134
4.8 本章小结 135
第5章 编写安全的代码 136
5.1 概述 136
5.1.1 漏洞的基本概念 136
5.1.2 漏洞分类 137
5.1.3 漏洞产生的原因 138
5.1.4 通用软件漏洞数据库 139
5.1.5 软件安全编码实践与控制 141
5.2 常见软件漏洞类型分析与防御方法 142
5.2.1 缓冲区溢出 142
5.2.2 注入缺陷 145
5.2.3 认证和会话管理 149
5.2.4 跨站脚本攻击XSS 152
5.2.5 不安全的直接对象引用 154
5.2.6 安全配置错误 156
5.2.7 敏感数据泄露 157
5.2.8 加密机制本身的安全问题 162
5.2.9 缺少功能级检查 163
5.2.10 跨站请求伪造CSRF 164
5.2.11 使用已知漏洞组件 167
5.2.12 未经验证的重定向和转发 167
5.2.13 文件攻击 168
5.2.14 竞争条件 171
5.2.15 边信道攻击 172
5.3 软件安全编码实践 174
5.3.1 输入验证 174
5.3.2 标准化 176
5.3.3 数据净化 177
5.3.4 错误处理 178
5.3.5 安全的API 178
5.3.6 内存管理 179
5.3.7 例外管理 182
5.3.8 会话管理 183
5.3.9 配置参数管理 183
5.3.10 安全启动 184
5.3.11 加密机制的安全保护 184
5.3.12 并发控制 186
5.3.13 标签化 187
5.3.14 沙箱 188
5.3.15 防篡改技术 188
5.4 软件安全编码保证过程 190
5.4.1 选择安全的编程语言 190
5.4.2 版本(配置)管理 190
5.4.3 代码分析 191
5.4.4 代码评审 192
5.4.5 构建安全的软件编译环境 194
5.5 本章小结 195
第6章 软件安全测试 196
6.1 概述 196
6.1.1 软件安全测试的定义和目的 196
6.1.2 软件安全测试的基本内涵 196
6.1.3 软件安全测试框架 199
6.1.4 软件安全测试方法 200
6.1.5 从攻击者角度思考 201
6.2 软件安全功能测试 201
6.2.1 保密性测试 201
6.2.2 完整性测试 202
6.2.3 可用性测试 205
6.2.4 认证性测试 206
6.2.5 授权测试 207
6.2.6 可记账性/审计测试 207
6.3 软件安全漏洞测试 208
6.3.1 攻击面验证 208
6.3.2 环境测试 208
6.3.3 模拟测试 209
6.4 其他测试 210
6.4.1 性能测试 210
6.4.2 可扩展性测试 211
6.4.3 隐私测试 211
6.5 软件安全功能测试方法 212
6.5.1 单元测试 212
6.5.2 集成测试 213
6.5.3 回归测试 213
6.5.4 系统测试 214
6.5.5 逻辑测试 214
6.5.6 用户接收测试 215
6.6 软件安全漏洞测试方法 216
6.6.1 源代码测试 216
6.6.2 白盒测试 216
6.6.3 黑盒测试 217
6.6.4 Fuzzing测试 218
6.6.5 扫描 219
6.6.6 渗透测试 222
6.6.7 静态测试 224
6.6.8 动态测试 225
6.7 几种重要的软件安全漏洞控制测试 225
6.7.1 输入验证测试 225
6.7.2 缓冲区溢出控制测试 226
6.7.3 SQL注入缺陷控制测试 226
6.7.4 XSS脚本攻击控制测试 227
6.7.5 抗抵赖控制测试 227
6.7.6 假冒控制测试 228
6.7.7 失效控制测试 228
6.7.8 优先权提升控制测试 228
6.7.9 抗逆向工程保护测试 229
6.7.10 Web应用漏洞测试 229
6.8 测试过程模型 230
6.8.1 软件安全测试基本过程 230
6.8.2 V模型 231
6.8.3 W模型 231
6.8.4 X模型 232
6.8.5 H模型 232
6.8.6 前
1.1 信息安全面临的困境 1
1.2 软件安全基本概念 2
1.2.1 软件定义 2
1.2.2 软件安全错误 2
1.2.3 软件安全的定义 3
1.3 软件安全属性刻画 4
1.3.1 保密性 4
1.3.2 完整性 5
1.3.3 可用性 5
1.3.4 认证性 6
1.3.5 授权 6
1.3.6 可记账性/审计性 7
1.3.7 抗抵赖性 7
1.3.8 可控性 8
1.3.9 可信性 8
1.4 信息产品的安全性评估标准 8
1.5 系统安全工程 9
1.6 系统安全工程能力成熟度模型 10
1.7 属性驱动的软件安全开发的基本思想 11
1.7.1 软件安全开发方法 11
1.7.2 软件定义安全 11
1.7.3 属性驱动的软件安全开发方法 14
1.8 本章小结 14
第2章 将安全嵌入软件开发整个生命周期 16
2.1 系统安全开发方法的进化史 16
2.2 软件安全开发模型 17
2.2.1 启发式软件安全开发模型 17
2.2.2 软件安全生命周期开发模型 18
2.3 微软的SDL模型 20
2.3.1 传统的系统开发瀑布模型 20
2.3.2 软件安全开发生命周期模型SDL 20
2.3.3 敏捷的SDL 23
2.3.4 ISO/IEC 27034 25
2.4 McGraw的软件安全开发模型 26
2.4.1 McGraw的七个接触点模型BSI 26
2.4.2 软件安全开发成熟度模型BSIMM 27
2.5 OWASP的软件安全开发模型 30
2.5.1 CLASP 30
2.5.2 SAMM 33
2.6 NIST的软件安全开发生命周期 34
2.7 属性驱动的软件安全开发生命周期模型 36
2.8 本章小结 36
第3章 软件安全需求分析 37
3.1 概述 37
3.1.1 基本内涵 37
3.1.2 安全需求的来源 39
3.1.3 软件安全需求的内容 39
3.2 核心软件安全需求 40
3.2.1 保密性需求 40
3.2.2 完整性需求 42
3.2.3 可用性需求 43
3.2.4 认证需求 44
3.2.5 授权需求 46
3.2.6 可记账性/审计需求 50
3.3 通用软件安全需求 51
3.3.1 安全架构需求 51
3.3.2 会话管理需求 51
3.3.3 错误和例外管理需求 52
3.3.4 配置参数管理需求 52
3.4 运维安全需求 52
3.4.1 环境部署需求 53
3.4.2 归档需求 54
3.4.3 反盗版需求 54
3.5 其他安全需求 55
3.5.1 顺序和时间需求 55
3.5.2 国际性需求 55
3.5.3 采购需求 56
3.6 软件安全需求获取方法 57
3.6.1 软件安全需求获取的概念 57
3.6.2 头脑风暴 57
3.6.3 问卷调查和访谈 58
3.6.4 策略分解 58
3.6.5 数据分类 60
3.6.6 主/客体关系矩阵 62
3.6.7 使用用例和滥用案例建模 62
3.7 软件安全需求跟踪矩阵 63
3.8 本章小结 64
第4章 软件安全保障设计 65
4.1 概述 65
4.1.1 软件安全设计的概念 65
4.1.2 软件安全设计的基本原则 65
4.1.3 平衡安全设计原则 71
4.2 属性驱动的软件安全设计 72
4.3 软件安全架构设计 73
4.3.1 康威定律 73
4.3.2 软件安全架构的设计方法 74
4.3.3 攻击面评估 75
4.3.4 威胁建模 75
4.3.5 风险分析 82
4.3.6 软件架构的选择 86
4.3.7 软件架构的安全考虑 92
4.3.8 与现有架构的集成 93
4.4 基于核心安全需求的软件安全设计 94
4.4.1 保密性设计 94
4.4.2 完整性设计 99
4.4.3 可用性设计 101
4.4.4 认证设计 102
4.4.5 授权设计 103
4.4.6 可记账性/审计设计 103
4.5 其他安全需求设计 104
4.5.1 接口安全设计 104
4.5.2 互联互通性 106
4.6 软件安全技术 106
4.6.1 认证 106
4.6.2 身份管理 107
4.6.3 凭证管理 109
4.6.4 流控制 112
4.6.5 防火墙和网络代理 113
4.6.6 中间件 114
4.6.7 排队基础设施和技术 114
4.6.8 日志与审计 114
4.6.9 入侵检测系统 115
4.6.10 入侵防御系统 116
4.6.11 数据丢失保护 116
4.6.12 虚拟化 117
4.6.13 数字版权管理 118
4.6.14 可信计算 120
4.6.15 数据库安全 121
4.6.16 编程语言环境 128
4.6.17 公共语言运行库 130
4.6.18 Java虚拟机 131
4.6.19 编译器选项 132
4.6.20 操作系统安全 132
4.6.21 嵌入式系统安全 133
4.7 安全架构与设计检查 134
4.8 本章小结 135
第5章 编写安全的代码 136
5.1 概述 136
5.1.1 漏洞的基本概念 136
5.1.2 漏洞分类 137
5.1.3 漏洞产生的原因 138
5.1.4 通用软件漏洞数据库 139
5.1.5 软件安全编码实践与控制 141
5.2 常见软件漏洞类型分析与防御方法 142
5.2.1 缓冲区溢出 142
5.2.2 注入缺陷 145
5.2.3 认证和会话管理 149
5.2.4 跨站脚本攻击XSS 152
5.2.5 不安全的直接对象引用 154
5.2.6 安全配置错误 156
5.2.7 敏感数据泄露 157
5.2.8 加密机制本身的安全问题 162
5.2.9 缺少功能级检查 163
5.2.10 跨站请求伪造CSRF 164
5.2.11 使用已知漏洞组件 167
5.2.12 未经验证的重定向和转发 167
5.2.13 文件攻击 168
5.2.14 竞争条件 171
5.2.15 边信道攻击 172
5.3 软件安全编码实践 174
5.3.1 输入验证 174
5.3.2 标准化 176
5.3.3 数据净化 177
5.3.4 错误处理 178
5.3.5 安全的API 178
5.3.6 内存管理 179
5.3.7 例外管理 182
5.3.8 会话管理 183
5.3.9 配置参数管理 183
5.3.10 安全启动 184
5.3.11 加密机制的安全保护 184
5.3.12 并发控制 186
5.3.13 标签化 187
5.3.14 沙箱 188
5.3.15 防篡改技术 188
5.4 软件安全编码保证过程 190
5.4.1 选择安全的编程语言 190
5.4.2 版本(配置)管理 190
5.4.3 代码分析 191
5.4.4 代码评审 192
5.4.5 构建安全的软件编译环境 194
5.5 本章小结 195
第6章 软件安全测试 196
6.1 概述 196
6.1.1 软件安全测试的定义和目的 196
6.1.2 软件安全测试的基本内涵 196
6.1.3 软件安全测试框架 199
6.1.4 软件安全测试方法 200
6.1.5 从攻击者角度思考 201
6.2 软件安全功能测试 201
6.2.1 保密性测试 201
6.2.2 完整性测试 202
6.2.3 可用性测试 205
6.2.4 认证性测试 206
6.2.5 授权测试 207
6.2.6 可记账性/审计测试 207
6.3 软件安全漏洞测试 208
6.3.1 攻击面验证 208
6.3.2 环境测试 208
6.3.3 模拟测试 209
6.4 其他测试 210
6.4.1 性能测试 210
6.4.2 可扩展性测试 211
6.4.3 隐私测试 211
6.5 软件安全功能测试方法 212
6.5.1 单元测试 212
6.5.2 集成测试 213
6.5.3 回归测试 213
6.5.4 系统测试 214
6.5.5 逻辑测试 214
6.5.6 用户接收测试 215
6.6 软件安全漏洞测试方法 216
6.6.1 源代码测试 216
6.6.2 白盒测试 216
6.6.3 黑盒测试 217
6.6.4 Fuzzing测试 218
6.6.5 扫描 219
6.6.6 渗透测试 222
6.6.7 静态测试 224
6.6.8 动态测试 225
6.7 几种重要的软件安全漏洞控制测试 225
6.7.1 输入验证测试 225
6.7.2 缓冲区溢出控制测试 226
6.7.3 SQL注入缺陷控制测试 226
6.7.4 XSS脚本攻击控制测试 227
6.7.5 抗抵赖控制测试 227
6.7.6 假冒控制测试 228
6.7.7 失效控制测试 228
6.7.8 优先权提升控制测试 228
6.7.9 抗逆向工程保护测试 229
6.7.10 Web应用漏洞测试 229
6.8 测试过程模型 230
6.8.1 软件安全测试基本过程 230
6.8.2 V模型 231
6.8.3 W模型 231
6.8.4 X模型 232
6.8.5 H模型 232
6.8.6 前
前 言
当前随着社会经济的发展和科学技术的进步,计算机的应用日益广泛,人们不但直接使用了从微型计算机、平板电脑、智能手机直到超级计算机的不同信息与计算工具,而且在生产装备、运输工具甚至家庭生活用具中也嵌入了各式各样的计算装置。互联网的日益普及主要得益于计算机的应用,在现代生活和工作中人们享受着计算机带来的巨大效益和便利,与此同时对计算机安全工作的依赖性也日益增加。计算机在安全方面的问题不但会影响到生产和生活的正常运行,有时候甚至造成人身伤亡、装备损毁等重大事故,因此近年来人们对日益严重的计算机系统的安全问题开始密切重视。
在计算机系统的硬件和软件两个方面,人们历来重视的是硬件方面的安全性和可靠性,而对比较隐蔽的软件安全性却关注得不够。但是许多安全事故却是出在软件方面,发生在20世纪90年代的Ariane 5运载火箭、SOHO太空飞船等五起航天器事故的罪魁祸首就是软件,而通过软件安全事件每年给全球造成的经济损失已经高达4500亿美元。因此近年来人们开始以很大的注意力关注软件的安全性问题,因为这不仅影响到个人或者企业自身,而且已经上升到国家安全的高度。
软件的安全性可以理解为软件在系统中运行不至于在工作中造成不可接受的风险(如人身伤亡、设备损坏、财产重大损失、严重污染环境等)的能力。为构建这种能力,人们采取了一系列的方法和技术,逐步形成了计算机软件安全的理论。
为了提高软件的安全性,在软件的开发过程中就应该对安全问题加以认真考虑,由此近年来逐步形成了软件安全开发的概念和方法。由于这是一个新的领域,有关的方法和技术还局限于某些具体应用,尚缺少比较系统介绍的著作,本书正是为了填补这一空白而撰写的。
本书作者在书中一开始先介绍了软件安全的基本概念,对软件安全的基本属性进行了深入细致的描绘,分析了软件安全实现的基本方法,对属性驱动的软件安全开发方法的基本思想进行了阐述。然后利用系统工程思想将安全属性嵌入软件开发的整个生命周期。在回顾软件开发方法的演化过程和对各种方法进行对比的基础上,提出了属性驱动的软件安全开发的基本方法和过程。在总揽全局的基础上,依次详尽地探讨了软件安全需求分析、软件安全保障设计、软件安全编码、软件安全性测试问题。全书贯穿了系统工程整体性和有序性的理念和方法而又不失对技术细节的阐述,形成了本书的特点。
由于软件安全开发方法涉及的学科比较多,涵盖了多方面的技术细节,因此建立系统的开发理论和方法体系是一项艰苦的工作。深切希望本书作者能在这本著作的基础上进一步深入探索,以满足日益增长的软件安全开发的要求。
在计算机系统的硬件和软件两个方面,人们历来重视的是硬件方面的安全性和可靠性,而对比较隐蔽的软件安全性却关注得不够。但是许多安全事故却是出在软件方面,发生在20世纪90年代的Ariane 5运载火箭、SOHO太空飞船等五起航天器事故的罪魁祸首就是软件,而通过软件安全事件每年给全球造成的经济损失已经高达4500亿美元。因此近年来人们开始以很大的注意力关注软件的安全性问题,因为这不仅影响到个人或者企业自身,而且已经上升到国家安全的高度。
软件的安全性可以理解为软件在系统中运行不至于在工作中造成不可接受的风险(如人身伤亡、设备损坏、财产重大损失、严重污染环境等)的能力。为构建这种能力,人们采取了一系列的方法和技术,逐步形成了计算机软件安全的理论。
为了提高软件的安全性,在软件的开发过程中就应该对安全问题加以认真考虑,由此近年来逐步形成了软件安全开发的概念和方法。由于这是一个新的领域,有关的方法和技术还局限于某些具体应用,尚缺少比较系统介绍的著作,本书正是为了填补这一空白而撰写的。
本书作者在书中一开始先介绍了软件安全的基本概念,对软件安全的基本属性进行了深入细致的描绘,分析了软件安全实现的基本方法,对属性驱动的软件安全开发方法的基本思想进行了阐述。然后利用系统工程思想将安全属性嵌入软件开发的整个生命周期。在回顾软件开发方法的演化过程和对各种方法进行对比的基础上,提出了属性驱动的软件安全开发的基本方法和过程。在总揽全局的基础上,依次详尽地探讨了软件安全需求分析、软件安全保障设计、软件安全编码、软件安全性测试问题。全书贯穿了系统工程整体性和有序性的理念和方法而又不失对技术细节的阐述,形成了本书的特点。
由于软件安全开发方法涉及的学科比较多,涵盖了多方面的技术细节,因此建立系统的开发理论和方法体系是一项艰苦的工作。深切希望本书作者能在这本著作的基础上进一步深入探索,以满足日益增长的软件安全开发的要求。
媒体评论
在线试读
评论
还没有评论。