《安全软件开发之道 构筑软件安全的本质方法》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:(美)JohnViegaGaryMcgraw著;殷丽华,张冬艳,郭云川,颜子夜译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2014
  • ISBN:9787111459156
  • 页数:316 页
图书介绍:本书被誉为安全技术领域的“黄帝内经”,由安全技术大师亲力打造,畅销全球,数位安全技术专家联袂推荐。综合论述如何在软件开发整个生命周期内建立安全屏障,对于设计安全的软件给出了高屋建瓴的指南,全面翔实,深入浅出。对于任何关注安全软件开发的人来说,都是一本必备之书。 本书分为两大部分。第一部分介绍在编写代码之前应该了解的软件安全知识,讲解如何在软件工程的实践中引入安全性,任何涉及软件开发的人都应该阅读。主要内容包括:软件安全概论、软件安全风险管理、技术的选择、开放源代码和封闭源代码、软件安全的指导原则、软件审计。第二部分涉及软件开发实现的细节,介绍如何在编程中避免一些常见的安全问题,适合编程一线的技术人员参考。主要内容包括:缓冲区溢出、访问控制、竞争条件、随机性和确定性、密码学的应用、信任管理和输入验证、口令认证、数据库安全、客户端安全、穿越防火墙等。

第1章 软件安全概论 1

1.1都是软件惹的祸 1

1.2对安全问题的处理 4

1.2.1 Bugtraq 5

1.2.2 CERT公告 5

1.2.3 RISKS文摘 6

1.3影响软件安全的技术趋势 6

1.4非功能性需求 9

1.4.1什么是安全 10

1.4.2难道只是可靠性 10

1.5.“渗透-修补”是个坏方法 11

1.6艺术和工程 12

1.7安全目标 12

1.7.1预防 13

1.7.2跟踪与审计 13

1.7.3监控 13

1.7.4隐私和保密 14

1.7.5多级安全 14

1.7.6匿名 14

1.7.7认证 15

1.7.8完整性 16

1.8常见软件安全缺陷 16

1.9软件项目目标 17

1.10结论 18

第2章 软件安全风险管理 19

2.1软件安全风险管理概述 19

2.2安全人员的任务 21

2.3软件生命周期中的软件安全人员 22

2.3.1获取需求 22

2.3.2风险评估 23

2.3.3安全设计 24

2.3.4实现 25

2.3.5安全测试 25

2.4现实的权衡 26

2.5让人们去思考安全性 26

2.6软件风险管理实践 26

2.6.1当开发走向歧途 27

2.6.2当安全分析走向歧途 27

2.7通用准则 28

2.8结论 30

第3章 技术的选择 31

3.1语言的选择 31

3.2分布式对象平台的选择 34

3.2.1 COBRA 34

3.2.2 DCOM 35

3.2.3 EJB和RMI 37

3.3操作系统的选择 37

3.4认证技术 38

3.4.1基于主机的认证 39

3.4.2物理令牌 40

3.4.3生物认证 40

3.4.4密码认证 41

3.4.5深度防御与认证 41

3.5结论 42

第4章 开放源代码和封闭源代码 43

4.1通过隐藏实现安全 43

4.1.1逆向工程 45

4.1.2代码混淆 46

4.1.3紧包软件的安全 47

4.1.4通过隐藏实现安全并非万能 47

4.2开源软件 47

4.3.“多眼球现象”是真的吗 47

4.3.1漏洞检测是困难的 49

4.3.2其他的忧虑 50

4.4关于发布加密算法 51

4.5另外两个关于开源的谬论 51

4.5.1微软谬论 51

4.5.2 Java谬论 52

4.6例子:GNU Mailman的安全 52

4.7证据:特洛伊木马 53

4.8开放源码还是不开放源码 54

4.9另一个来自于缓冲区溢出的安全教训 54

4.10忠告 55

4.11结论 55

第5章 软件安全的指导原则 56

5.1确保最薄弱环节的安全 57

5.2深度防御 59

5.3失效安全 60

5.4最小特权 62

5.5分割 63

5.6尽可能简单 64

5.7提升隐私权 66

5.8记住隐藏信息很困难 68

5.9不要轻信 69

5.10使用社会资源 70

5.11结论 70

第6章 软件审计 71

6.1架构的安全性分析 73

6.1.1攻击树 74

6.1.2报告分析结果 78

6.2实现安全性分析 79

6.2.1审计源代码 79

6.2.2源码级的安全审计工具 80

6.2.3在分析中使用RATS 81

6.2.4安全扫描软件的有效性 82

6.3结论 83

第7章 缓冲区溢出 84

7.1什么是缓冲区溢出 86

7.2为什么缓冲溢出是安全问题 87

7.3缓冲区溢出的防御 89

7.4主要的陷阱 89

7.5内部缓冲区溢出 93

7.6更多的输入溢出 93

7.7其他风险 94

7.8帮助工具 94

7.9堆破坏和栈破坏 96

7.10堆溢出 98

7.11栈溢出 101

7.11.1破译堆栈 101

7.11.2陷入无限循环……并更糟 105

7.12代码攻击 113

7.12.1 UNIX漏洞利用 114

7.12.2关于Windows 119

7.13结论 119

第8章 访问控制 120

8.1 UNIX访问控制模型 120

8.1.1 UNIX权限工作原理 121

8.1.2修改文件属性 122

8.1.3修改文件的所有权 124

8.1.4 umask命令 125

8.1.5编程接口 125

8.1.6 Setuid编程 127

8.2 Windows NT的访问控制 130

8.3分割 132

8.4细粒度权限 134

8.5结论 134

第9章 竞争条件 135

9.1什么是竞争条件 135

9.2检查时间与使用时间 138

9.2.1攻破passwd 139

9.2.2避免TOCTOU问题 142

9.3安全的文件访问 143

9.4临时文件 146

9.5文件锁定 146

9.6其他竞争条件 147

9.7结论 148

第10章 随机性和确定性 149

10.1伪随机数发生器 149

10.1.1伪随机数发生器实例 151

10.1.2 Blum-Blum-Shub PRNG 152

10.1.3 Tiny PRNG 153

10.1.4对PRNG的攻击 153

10.1.5在网络赌博游戏中作弊 153

10.1.6 PRNG的统计测试 155

10.2熵的收集和估计 155

10.2.1硬件解决方案 156

10.2.2软件解决方案 158

10.2.3糟糕的熵收集示例 163

10.3处理熵 164

10.4实用的随机数据来源 166

10.4.1 Tiny 166

10.4.2 Windows的随机数据 167

10.4.3 Linux的随机数 167

10.4.4 Java中的随机数 169

10.5结论 171

第11章 密码学的应用 172

11.1一般性建议 172

11.1.1开发者并不是密码专家 173

11.1.2数据完整性 174

11.1.3密码出口的有关法律 174

11.2常用密码库 175

11.2.1 Cryptlib 175

11.2.2 OpenSSL 176

11.2.3 Crypto+++ 177

11.2.4 BSAFE 178

11.2.5 Cryptix 179

11.3利用密码学编程 180

11.3.1加密 180

11.3.2散列算法 184

11.3.3公共密钥加密 185

11.3.4多线程 189

11.3.5 cookie加密 189

11.4加密散列更多的应用 191

11.5 SSL和TLS 192

11.6 Stunnel 194

11.7一次一密 195

11.8结论 198

第12章 信任管理和输入验证 199

12.1关于信任 200

12.2不恰当信任的例子 201

12.2.1信任是传递的 201

12.2.2预防恶意的调用者 204

12.2.3安全地调用其他程序 208

12.2.4源自Web的问题 210

12.2.5客户端安全 212

12.2.6 Perl问题 214

12.2.7格式字符串攻击 215

12.3自动检测输入问题 216

12.4结论 219

第13章 口令认证 220

13.1口令存储 220

13.2向口令数据库中添加用户 222

13.3口令认证的方式 231

13.4口令选择 235

13.4.1更多的建议 236

13.4.2掷骰子 237

13.4.3口令短语 240

13.4.4应用程序选择的口令 241

13.5一次性口令 242

13.6结论 252

第14章 数据库安全 253

14.1基础知识 253

14.2访问控制 254

14.3在访问控制中使用视图 256

14.4字段保护 257

14.5针对统计攻击的安全防卫 260

14.6结论 263

第15章 客户端安全 264

15.1版权保护方案 266

15.1.1许可证文件 273

15.1.2防范偶然性盗版 274

15.1.3其他的许可证特性 275

15.1.4其他的版权保护方案 275

15.1.5对不可信客户端的身份认证 276

15.2防篡改 277

15.2.1反调试措施 277

15.2.2校验和 279

15.2.3应对滥用 279

15.2.4诱饵 280

15.3代码混淆 280

15.3.1基本的代码混淆技术 281

15.3.2加密部分程序 282

15.4结论 284

第16章 穿越防火墙 285

16.1基本策略 285

16.2客户端代理 287

16.3服务器代理 288

16.4 SOCKS 289

16.5对等网络 290

16.6结论 292

附录A密码学基础 293

参考文献 310