《软件安全开发生命周期》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:(美)霍华德等著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2008
  • ISBN:7121052946
  • 页数:329 页
图书介绍:对于安全开发生命周期(SDL)的介绍不仅讲述了一个方法论变迁的历史,还在每一个已经实践过的过程(从设计到发布产品)的每一个阶段为你提供指导,以将安全缺陷降低到最小程度。软件开发方法的发展和采用对提高微软软件产品的安全性和保密性的确卓有成效。由13个阶段的过程组成,统称为安全开发生命周期(SDL)。本书将向您一一呈献。本书的特别之处在于SDL并不是枯燥乏味的理论,而是更具有可操作性的实践指南。SDL有两重目的:其一是减少安全漏洞与隐私问题的数量,其二是降低残留漏洞的严重性。本书适合以下人员阅读:一类是高级管理人员以及具体管理软件开发团队和软件开发过程的管理人员,另一类则是软件设计师和软件架构师。

第1部分 对SDL的需求 3

第1章 适可而止:威胁正在悄然改变 3

1.1 遍布安全和隐私冲突的世界 5

1.2 影响安全的另一因素:可靠性 8

1.3 事关质量 10

1.4 主要的软件开发商为什么需要开发更安全的软件 11

1.5 内部软件开发人员为什么需要开发更安全的软件 12

1.6 小型软件开发者为什么需要开发更安全的软件 12

1.7 总结 13

参考文献 13

第2章 当前软件开发方法不足以生成安全的软件 17

2.1 “只要给予足够的关注,所有的缺陷都将无处遁形” 18

2.1.1 审核代码的动力 18

2.1.2 理解安全bug 19

2.1.3 人员数量 19

2.1.4 “关注越多”越容易失去要点 20

2.2 专利软件开发模式 21

2.3 敏捷开发模式 22

2.4 通用评估准则 22

2.5 总结 23

参考文献 24

第3章 微软SDL简史 27

3.1 前奏 27

3.2 新威胁,新对策 29

3.3 Windows 2000和Secure Windows Initiative 30

3.4 追求可度量性:贯穿Windows XP 32

3.5 安全推进和最终安全评审(FSR) 33

3.6 形成软件安全开发生命周期 36

3.7 持续的挑战 37

参考文献 38

第4章 管理层的SDL 41

4.1 成功的承诺 41

4.1.1 微软的承诺 41

4.1.2 你是否需要SDL? 43

4.1.3 有效承诺 45

4.2 管理SDL 48

4.2.1 资源 48

4.2.2 项目是否步入正轨? 50

4.3 总结 51

参考文献 51

第2部分 软件安全开发生命周期过程 55

第5章 第0阶段:教育和意识 55

5.1 微软安全教育简史 56

5.2 持续教育 58

5.3 培训交付类型 60

5.4 练习与实验 61

5.5 追踪参与度与合规度 62

5.6 度量知识 63

5.7 实现自助培训 63

5.8 关键成功因子与量化指标 64

5.9 总结 65

参考文献 65

第6章 第1阶段:项目启动 67

6.1 判断软件安全开发生命周期是否覆盖应用 67

6.2 任命安全顾问 68

6.2.1 担任开发团队与安全团队之间沟通的桥梁 69

6.2.2 召集开发团队举行SDL启动会议 70

6.2.3 对开发团队的设计与威胁模型进行评审 70

6.2.4 分析并对bug进行分类,如安全类和隐私类 70

6.2.5 担任开发团队的安全传声筒 71

6.2.6 协助开发团队准备最终安全审核 71

6.2.7 与相应安全团队协同工作 71

6.3 组建安全领导团队 71

6.4 确保在bug跟踪管理过程中包含有安全与隐私类bug 72

6.5 建立“bug标准” 74

6.6 总结 74

参考文献 74

第7章 第2阶段:定义并遵从设计最佳实践 75

7.1 常见安全设计原则 76

7.2 受攻击面分析与降低 78

7.2.1 第一步:该特性真的有那么重要么? 81

7.2.2 第二步:究竟谁需要从哪里访问这些功能? 82

7.2.3 第三步:降低特权 83

7.2.4 其他受攻击面组成部分 85

7.3 总结 89

参考文献 90

第8章 第3阶段:产品风险评估 93

8.1 安全风险评估 94

8.1.1 安装问题 94

8.1.2 受攻击面问题 94

8.1.3 移动代码问题 95

8.1.4 安全特性相关问题 95

8.1.5 常规问题 95

8.1.6 分析问卷 96

8.2 隐私影响分级 96

8.2.1 隐私分级1 98

8.2.2 隐私分级2 98

8.2.3 隐私分级3 98

8.3 统一各种因素(Pulling It All Together) 98

8.4 总结 99

参考文献 99

第9章 第4阶段:风险分析 101

9.1 威胁建模产物(Artifact) 103

9.2 对什么进行建模 104

9.3 创建威胁模型 104

9.4 威胁建模过程 105

9.4.1 定义应用场景 105

9.4.2 收集外部依赖列表 106

9.4.3 定义安全假设 106

9.4.4 创建外部安全备注 107

9.4.5 绘制待建模应用的一个或多个数据流图(DFD) 110

9.4.6 确定威胁类型 114

9.4.7 识别系统威胁 116

9.4.8 判断风险 121

9.4.9 规划消减措施 124

9.5 利用威胁模型辅助代码评审 128

9.6 利用威胁模型辅助测试 129

9.7 关键成功因子和指标 129

9.8 总结 130

参考文献 130

第10章 第5阶段:创建安全文档、工具以及客户最佳实践 133

10.1 为什么需要文档和工具? 135

10.2 创建指导性安全最佳实践文档 135

10.2.1 安装文档 136

10.2.2 主线产品使用文档 136

10.2.3 帮助文档 138

10.2.4 开发人员文档 138

10.3 创建工具 139

10.4 总结 140

参考文献 140

第11章 第6阶段:安全编码策略 143

11.1 使用最新版本编译器与支持工具 143

11.2 使用编译器内置防御特性 144

11.2.1 缓冲区安全检查:/GS 144

11.2.2 安全异常处理:/SAFESEH 144

11.2.3 数据执行防护兼容性:/NXCOMPAT 145

11.3 使用源代码分析工具 145

11.3.1 源代码分析工具陷阱 145

11.3.2 源代码分析工具的益处 146

11.4 切勿使用违禁函数 148

11.5 减少潜在可被利用的编码结构或设计 149

11.6 使用安全编码检查清单 150

11.7 总结 150

参考文献 150

第12章 第7阶段:安全测试策略 153

12.1 模糊测试 153

12.1.1 模糊操作文件格式 154

12.1.2 网络协议模糊操作 160

12.1.3 零散模糊测试 163

12.1.4 通过模糊测试修复发现的bug 163

12.2 渗透测试 164

12.3 运行时验证 165

12.4 必要时审核并更新威胁模型 165

12.5 重估软件的受攻击面 166

12.6 总结 166

参考文献 166

第13章 第8阶段:安全推进活动 169

13.1 准备安全推进活动 170

13.2 培训 171

13.3 代码评审 172

13.4 威胁模型更新 174

13.5 安全测试 175

13.6 受攻击面Scrub 175

13.7 文档Scrub 176

13.8 是否已足够? 177

13.9 总结 178

参考文献 179

第14章 第9阶段:最终安全评审 181

14.1 产品团队协调 182

14.2 威胁模型评审 182

14.3 未修复的安全bug评审 183

14.4 工具有效性验证 184

14.5 在最终安全评审完成之后 184

14.6 总结 185

第15章 第10阶段:安全响应规划 187

15.1 为什么准备响应? 187

15.1.1 你的开发团队一定会出错 187

15.1.2 新漏洞一定会出现 188

15.1.3 规则一定会发生变化 189

15.2 准备响应 190

15.3 安全响应与开发团队 208

15.3.1 组建你的响应团队 208

15.3.2 支持你的全线产品 209

15.3.3 支持你的所有客户 210

15.3.4 使你的产品具备更新能力 211

15.3.5 在研究人员之前找到漏洞 212

15.4 总结 213

参考文献 213

第16章 第11阶段:产品发布 215

参考文献 215

第17章 第12阶段:安全响应执行 217

17.1 遵从你的计划 217

17.1.1 保持冷静 217

17.1.2 欲速则不达 218

17.1.3 留意可能改变计划的事件 219

17.1.4 遵从你的计划 220

17.2 尽你所能补救 220

17.2.1 知道该联络何人 220

17.2.2 能创建更新 220

17.2.3 能安装更新 221

17.2.4 明确轻重缓急 221

17.3 深谙取舍之道 221

17.4 总结 222

参考文献 222

第3部分 SDL参考资料 225

第18章 在敏捷模式中集成SDL 225

18.1 在敏捷模式中进行SDL实践活动 226

18.1.1 安全教育 226

18.1.2 项目开始 226

18.1.3 建立并遵从设计最佳实践 227

18.1.4 风险分析 227

18.1.5 创建安全文档、工具以及客户最佳实践 229

18.1.6 安全编码与测试策略 229

18.1.7 安全推进 231

18.1.8 最终安全评审 232

18.1.9 产品发布 233

18.1.10 安全响应执行 233

18.2 利用SDL实践增强敏捷模式 234

18.2.1 用户story 235

18.2.2 小发布与迭代 236

18.2.3 人员轮换 236

18.2.4 简化 236

18.2.5 冲刺(Spike)解决方案 236

18.2.6 重构 237

18.2.7 常规客户可用性 237

18.2.8 依据标准编码 237

18.2.9 优先编写单元测试 238

18.2.10 配对编程 238

18.2.11 多次集成 238

18.2.12 将优化留到最后 238

18.2.13 一旦发现一个bug,就创建一个测试 239

18.3 总结 239

参考文献 239

第19章 SDL违禁函数调用 241

19.1 违禁API 242

19.2 为什么“n”函数会被禁止 245

19.3 重要告诫 246

19.4 选择StrSafe vs.Safe CRT 246

19.5 使用StrSafe 246

19.6 使用Safe CRT 247

19.7 其他替代函数 248

19.8 工具支持 248

19.9 ROI和成本影响 249

19.10 度量和目标 249

参考文献 249

第20章 SDL最低加密标准 251

20.1 高级加密需求 251

20.1.1 加密技术vs低级加密算法 251

20.1.2 使用加密库 252

20.1.3 加密敏捷度 252

20.1.4 默认安全加密算法 253

20.2 加密算法的用法 253

20.2.1 对称块密码与密钥长度 254

20.2.2 对称流密码与密钥长度 254

20.2.3 对称算法模式 255

20.2.4 非对称算法与密钥长度 255

20.2.5 哈希函数 255

20.2.6 消息认证码 256

20.3 数据存储以及随机数生成 256

20.3.1 存储私钥以及敏感数据 256

20.3.2 生成随机数与密钥 257

20.3.3 使用密码或者其他密钥来生成随机数和加密密钥 257

参考文献 257

第21章 SDL必备工具以及编译器选项 259

21.1 必备工具 259

21.1.1 PREfast 259

21.1.2 FxCop 263

21.1.3 应用验证器(Application Verifier) 265

21.1.4 最小编译器与Build工具版本 267

参考文献 268

第22章 威胁树模式 269

22.1 假冒一个外部实体或过程 271

22.2 篡改一个过程 273

22.3 篡改一个数据流 274

22.4 篡改一个数据存储 276

22.5 抵赖 278

22.6 过程信息泄露 280

22.7 数据流信息泄露 281

22.8 数据存储的信息泄露 282

22.9 针对过程的拒绝服务 284

22.10 针对数据流的拒绝服务 285

22.11 针对数据存储的拒绝服务 286

22.12 特权提升 287

参考文献 288