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

来源:互联网 发布:淘宝孕妇装店铺排行 编辑:程序博客网 时间:2024/06/05 19:02

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

基本信息

原书名:Building Secure Software: How to Avoid Security Problems the Right Way

作者: (美)John Viega    Gary McGraw   

译者: 殷丽华 张冬艳郭云川 颜子夜

丛书名: 信息安全技术丛书

出版社:机械工业出版社

ISBN:9787111459156

上架时间:2014-3-5

出版日期:2014 年3月

开本:16开

页码:1

版次:1-1

所属分类:计算机 > 安全 > 综合

 

更多关于》》》《安全软件开发之道:构筑软件安全的本质方法》

 

内容简介

    书籍

    计算机书籍

  《安全软件开发之道:构筑软件安全的本质方法》被誉为安全技术领域的“黄帝内经”,由安全技术大师亲力打造,畅销全球,数位安全技术专家联袂推荐。综合论述如何在软件开发整个生命周期内建立安全屏障,对于设计安全的软件给出了高屋建瓴的指南,全面翔实,深入浅出。对于任何关注安全软件开发的人来说,都是一本必备之书。

  《安全软件开发之道:构筑软件安全的本质方法》分为两大部分。第一部分介绍在编写代码之前应该了解的软件安全知识,讲解如何在软件工程的实践中引入安全性,任何涉及软件开发的人都应该阅读。主要内容包括:软件安全概论、软件安全风险管理、技术的选择、开放源代码和封闭源代码、软件安全的指导原则、软件审计。第二部分涉及软件开发实现的细节,介绍如何在编程中避免一些常见的安全问题,适合编程一线的技术人员参考。主要内容包括:缓冲区溢出、访问控制、竞争条件、随机性和确定性、密码学的应用、信任管理和输入验证、口令认证、数据库安全、客户端安全、穿越防火墙等。

 

目录

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

译者序

对本书的赞誉

前言

致谢

第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-shubprng 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

 

媒体评论

  “John和Gary对计算机安全性提供了一个令人耳目一新的视角。一开始就做得正确,那么就无须再修修补补。在当今这个‘蹩脚软件’(shovelware)盛行的世界,这无疑是一种超前而又重要的观念!在这个各大软件厂商都在为产品版本的beta测试而伤脑筋的行业中,本书不失为醒脑之音,值得一读!”

  ——Marcus J. Ranum,NFR安全公司CTO,《Web Security Sourcebook》的作者

  “系统开发人员们:学习这本书,捍卫你们的系统,网络空间将变得更好。”

  ——Fred Schneider,康奈尔大学计算机科学教授,《Trust in Cyberspace》的作者

  “我们不断地遇到因软件错误引发的安全问题。系统越复杂,找到问题的难度就越大,花费也越高。当我们期望进行安全可靠的交易,并从物理身份识别领域朝数字身份识别领域迈进时,遵循本书提出的一系列原则就显得越来越重要了。本书写得非常好,对于任何关注安全软件开发的人来说,都是一本必备之书。”

  ——Terry Stanley,Master Card公司芯片安全副总裁

  “在入侵者肆虐之时,很多人都在想着关闭门户,但Viega先生和McGraw先生却在计算机安全的源头入手,研究如何预先在系统中构建安全性。简单来说,就是如何处理基本的安全性优先级问题。”

  —— Charlie Babcock,Interactive Week

  “应用安全问题是阻碍电子商务发展的最重要问题之一。本书以一种简单明了并易于理解的方式提供了复杂的应用程序安全问题的解决方案。例如缓冲区溢出、竞争条件以及实施加密的方式。这是任何应用程序开发人员或安保专家都应读的一本书。”

  ——Paul Raines,巴克莱资本(Barclays Capital)信息风险管理的全球主管,《软件杂志》(Software Magazine)专栏作家

  “Viega和McGraw先生终于完成了技术界期待已久的作品。贯穿全书的中心思想是,两位顶级专家关于如何建立安全系统的全新视角,以及基于风险管理的方法解决安全问题。无论是在代码中避免缓冲区溢出,还是了解元素的完整性和交互性,本书都提供了全面而详实的指南。作者阐释了理解和管理风险对于任何系统项目的重要性。本书是任何从事系统设计、系统构建或系统管理的人必读之书。”

  ——Aviel D. Rubin博士,AT&T实验室首席研究员,《White-Hat Security Arsenal》和《Web Security Sourcebook》的作者

  “本书恰逢其时!”

  ——Michael Howard,微软Windows XP团队小组安全主管

  “对于信息安全,正确的操作似乎已成为一项失传的艺术。本书重新发掘了开发安全系统所需的知识、智慧、原则和纪律,同时也可将其应用在可靠性和良好的软件工程实践方面。”

  ——Peter G. Neumann,《Computer Related Risks》和《Moderator of RISKS digest》的作者

  “John Viega和Gary McGraw先生为设计或实现软件以及关注安全性的专业人士奉献了一本相当实用的手册。本书不仅解释了编写安全软件所涉及的一系列概念和原则,也包含了如何构筑安全软件的具体方法以防范攻击者的破坏,例如,对缓冲区溢出的深入解释,大多数软件灾难的深入分析等。而且,本书还列出了许多有用工具的出处(免费软件等),从而更提高了实用性。这是一本互联网软件开发人员的必读之书。”

  ——Jeremy Epstein,webMethods公司产品安全及性能部总监

  “安全性其实很简单,只需运行完美的软件即可。但完美是不切实际的,必须寻求切实可行的替代办法,否则就得面临长期的安全漏洞问题。Viega和McGraw先生为软件开发商提供了极好的完美软件的替代实现原则。”

  ——Crispin Cowan博士,Oregon研究所副研究员, WireX联合创始人和首席科学家

  “大部分人都在处理各种安全性问题的症状,很少有人去探究导致大多数安全问题的根源:设计和开发周期中的问题。在许多大学中,学生学到的是不安全的编码风格。很多人将开发单用户系统的编程概念带到了彼此关联的网络环境中,这是非常危险的。这些状况正在迅速地削弱国家的重要基础设施以及大多数的商业组织,并将个体公民置于风险当中。当务之急,是大部分软件设计人员要改掉他们的坏习惯并重新学习。因此,我衷心地希望本书能够引起对此领域的关注和重视。毕竟,这个领域是需要‘疗伤’,用户不会总是‘正确地’使用系统,恶意攻击者更是如此。因此,编写安全的代码以抵御恶劣的环境才是真正的解决办法。”

  ——Mudge,Stake公司首席科学家和研发执行副总裁

  “编程是很困难的,程序员非常珍贵,优秀的程序员更是罕见。要尽可能让软件变得容易使用,且物美价廉,为此,我们需要所有的帮助、所有的工具、所有的原则。我们还没能做到这点,但是本书应该有所帮助。”

  ——Bill Cheswick,《Firewalls and Internet Security》的作者

  “这本书不错。”

  ——Peter Gutmann,《Cryptographic Security Architecture》的作者

  摘自本书序:

  “本书在理解安全软件方面是一个非常重要的工具。 Viega和McGraw在表述安全软件设计的理论和实践方面均做得非常出色。本书非常实用,易于理解且非常全面。它并不会奇迹般地让你摇身一变成为软件安全专家,但它会让你对软件的安全更加敏感。而对安全越是敏感,就越接近问题的最终解决。”

  ——Bruce Schneier,Counterpane Internet Security创始人兼首席技术官,《应用密码学》和《网络信息安全的真相》的作者

  

 

本图书信息来源:互动出版

 

 

0 0
原创粉丝点击