《软件安全的24宗罪 编程缺陷与修复之道》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:董艳,包战,程文俊著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2010
  • ISBN:9787302226345
  • 页数:306 页
图书介绍:本书内容包括:SQL注入、与Web服务器和客户端相关的漏洞、缓冲区溢出、格式字符串问题。

第Ⅰ部分 Web应用程序漏洞 3

第1章 SQL注入 3

1.1 漏洞概述 3

1.2 CWE参考 4

1.3 受影响的编程语言 5

1.4 漏洞详述 5

1.4.1 关于LINQ的注意事项 5

1.4.2 受漏洞影响的C 5

1.4.3 受漏洞影响的PHP 6

1.4.4 受漏洞影响的Perl/CGI 7

1.4.5 受漏洞影响的Python 7

1.4.6 受漏洞影响的Ruby on Rails&  8

1.4.7 受漏洞影响的Java和JDBC  8

1.4.8 受漏洞影响的C/C++ 9

1.4.9 受漏洞影响的SQL 10

1.4.10 相关漏洞 11

1.5 查找漏洞模式 11

1.6 在代码审查期间查找该漏洞 12

1.7 发现该漏洞的测试技巧 12

1.8 漏洞示例 14

1.8.1 CVE-2006-4953 15

1.8.2 CVE-2006-4592 16

1.9 弥补措施 16

1.9.1 验证所有的输入 16

1.9.2 使用prepared语句构造SQL语句 16

1.9.3 C#弥补措施 17

1.9.4 PHP 5.0以及MySQL 1.1或者以后版本的弥补措施 17

1.9.5 Perl/CGI弥补措施 18

1.9.6 Python弥补措施 19

1.9.7 Ruby on Rails弥补措施 19

1.9.8 使用JDBC的Java弥补措施 19

1.9.9 ColdFusion弥补措施 20

1.9.10 SQL弥补措施 20

1.10 其他防御措施 22

1.10.1 加密敏感数据、PII数据或机密数据 22

1.10.2 使用URLScan 22

1.11 其他资源 22

1.12 本章小结 24

第2章 与Web服务器相关的漏洞(XSS、XSRF和响应拆分) 25

2.1 漏洞概述 25

2.2 CWE参考 26

2.3 受影响的编程语言 26

2.4 漏洞详述 26

2.4.1 基于DOM的XSS或类型0 26

2.4.2 反射XSS,非持续XSS或类型1 27

2.4.3 存储XSS,持续XSS或类型2 28

2.4.4 HTTP响应拆分 29

2.4.5 伪造跨站点请求 31

2.4.6 受漏洞影响的Ruby on Rails(XSS) 32

2.4.7 受漏洞影响的Ruby on Rails(响应拆分) 32

2.4.8 受漏洞影响的使用Python编写的CGI应用程序(XSS) 32

2.4.9 受漏洞影响的使用Python编写的CGI应用程序(响应拆分) 32

2.4.10 受漏洞影响的ColdFusion(XSS) 33

2.4.11 受漏洞影响的ColdFusion(响应拆分) 33

2.4.12 受漏洞影响的C/C++ ISAPI(XSS) 33

2.4.13 受漏洞影响的C/C++ ISAPI(响应拆分) 33

2.4.14 受漏洞影响的ASP(XSS) 34

2.4.15 受漏洞影响的ASP(响应拆分) 34

2.4.16 受漏洞影响的ASP.NET(XSS) 34

2.4.17 受漏洞影响的ASP.NET(响应拆分) 34

2.4.18 受漏洞影响的JSP(XSS) 34

2.4.19 受漏洞影响的JSP(响应拆分) 35

2.4.20 受漏洞影响的PHP(XSS) 35

2.4.21 受漏洞影响的PHP(响应拆分) 35

2.4.22 受漏洞影响的使用Perl的CGI(XSS) 35

2.4.23 受漏洞影响的mod_perl(XSS) 35

2.4.24 受漏洞影响的mod_perl(响应拆分) 36

2.4.25 受漏洞影响的HTTP请求(XSRF) 36

2.5 查找漏洞模式 36

2.6 在代码审查期间查找XSS漏洞 36

2.7 发现该漏洞的测试技巧 38

2.8 漏洞示例 39

2.8.1 CVE-2003-07 12 Microsoft Exchange 5.5 Outlook Web Access XSS 39

2.8.2 CVE-2004-0203 Microsoft Exchange 5.5 Outlook Web Access响应拆分 39

2.8.3 CVE-2005-1674 Help Center Live(XSS和XSRF) 40

2.9 弥补措施(XSS和响应拆分) 40

2.9.1 Ruby on Rails弥补措施(XSS) 40

2.9.2 ISAPI C/C++弥补措施(XSS) 40

2.9.3 Python弥补措施(XSS) 41

2.9.4 ASP弥补措施(XSS) 42

2.9.5 ASP.NET Web表单弥补措施(XSS) 42

2.9.6 ASP.NET Web表单弥补措施(RS) 43

2.9.7 JSP弥补措施 43

2.9.8 PHP弥补措施(XSS) 45

2.9.9 CGI弥补措施(XSS) 45

2.9.10 mod_perl弥补措施(XSS) 46

2.10 弥补步骤(XSRF) 47

2.10.1 关于超时的注意事项 47

2.10.2 XSRF和POST与GET的注意事项 47

2.10.3 Ruby on Rails弥补措施(XSRF) 48

2.10.4 ASP.NET Web表单弥补措施(XSRF) 48

2.10.5 HTML编码的非严格用法 48

2.11 其他防御措施 49

2.11.1 使用HttpOnly cookie 49

2.11.2 对标记的属性使用双引号 50

2.11.3 考虑使用ASP.NET的ViewStateUserKey 50

2.11.4 考虑使用ASP.NET的ValidateRequest 50

2.11.5 使用ASP.NET安全运行时引擎的安全性能 51

2.11.6 考虑使用OWASP CSRFGuard 51

2.11.7 使用Apache::TaintRequest 51

2.11.8 使用UrlScan 51

2.11.9 设置默认的字符集 51

2.12 其他资源 52

2.13 本章小结 53

第3章 与Web客户端相关的漏洞(XSS) 55

3.1 漏洞概述 55

3.2 CWE资源 56

3.3 受影响的编程语言 56

3.4 漏洞详述 56

3.4.1 有漏洞的gadget的秘密 57

3.4.2 受漏洞影响的JavaScript和HTML 58

3.5 查找漏洞模式 58

3.6 在代码审查期间查找该漏洞 59

3.7 发现该漏洞的测试技巧 59

3.8 漏洞示例 60

3.8.1 Microsoft ISA Server XSS CVE-2003-0526 60

3.8.2 Windows Vista Sidebar CVE-2007-3033和CVE-2007-3032 60

3.8.3 Yahoo!Instant Messenger ActiveX控件CVE-2007-4515 61

3.9 弥补措施 61

3.9.1 不要相信输入 61

3.9.2 用更安全的结构替代不安全的结构 62

3.10 其他弥补措施 63

3.11 其他资源 63

3.12 本章小结 63

第4章 使用Magic URL、可预计的cookie及隐藏表单字段 65

4.1 漏洞概述 65

4.2 CWE参考 65

4.3 受影响的编程语言 65

4.4 漏洞详述 66

4.4.1 Magic URL 66

4.4.2 可预计的Cookie 66

4.4.3 隐藏的表单字段 67

4.4.4 相关漏洞 67

4.5 查找漏洞模式 67

4.6 在代码审查期间查找该漏洞 67

4.7 发现该漏洞的测试技巧 68

4.8 漏洞示例 69

4.9 弥补措施 70

4.9.1 攻击者浏览数据 70

4.9.2 攻击者重放数据 70

4.9.3 攻击者预测数据 71

4.9.4 攻击者更改数据 72

4.10 其他防御措施 73

4.11 其他资源 73

4.12 本章小结 73

第Ⅱ部分 实现漏洞 77

第5章 缓冲区溢出 77

5.1 漏洞概述 77

5.2 CWE参考 78

5.3 受影响的编程语言 78

5.4 漏洞详述 79

5.4.1 64位的含义 82

5.4.2 受漏洞影响的C/C++ 82

5.4.3 相关漏洞 84

5.5 查找漏洞模式 85

5.6 在代码审查期间查找该漏洞 85

5.7 发现该漏洞的测试技巧 85

5.8 漏洞示例 86

5.8.1 CVE-1999-0042 86

5.8.2 CVE-2000-0389~CVE-2000-0392 87

5.8.3 CVE-2002-0842、CVE-2003-0095、CAN-2003-0096 87

5.8.4 CAN-2003-0352 88

5.9 弥补措施 88

5.9.1 替换危险的字符串处理函数 88

5.9.2 审计分配操作 89

5.9.3 检查循环和数组访问 89

5.9.4 使用C++字符串来替换C字符串缓冲区 89

5.9.5 使用STL容器替代静态数组 89

5.9.6 使用分析工具 89

5.10 其他防御措施 90

5.10.1 栈保护 90

5.10.2 不可执行的栈和堆 90

5.11 其他资源 91

5.12 本章小结 92

第6章 格式化字符串问题 93

6.1 漏洞概述 93

6.2 CWE参考 94

6.3 受影响的编程语言 94

6.4 漏洞详述 94

6.4.1 受漏洞影响的C/C++ 96

6.4.2 相关漏洞 97

6.5 查找漏洞模式 97

6.6 在代码审查期间查找该漏洞 97

6.7 发现该漏洞的测试技巧 97

6.8 漏洞示例 98

6.8.1 CVE-2000-0573 98

6.8.2 CVE-2000-0844 98

6.9 弥补措施 98

6.10 其他防御措施 99

6.11 其他资源 99

6.12 本章小结 100

第7章 整数溢出 101

7.1 漏洞概述 101

7.2 CWE参考 101

7.3 受影响的编程语言 102

7.4 漏洞详述 102

7.4.1 受漏洞影响的C和C++ 102

7.4.2 受漏洞影响的C 108

7.4.3 受漏洞影响的Visual Basic和Visual Basic .NET 110

7.4.4 受漏洞影响的Java 110

7.4.5 受漏洞影响的Perl 111

7.5 查找漏洞模式 112

7.6 在代码审查期间查找漏洞 112

7.6.1 C/C++ 112

7.6.2 C 114

7.6.3 Java 114

7.6.4 Visual Basic和Visual Basic .NET 114

7.6.5 Perl 115

7.7 发现该漏洞的测试技巧 115

7.8 漏洞示例 115

7.8.1 在Apple Mac OS X的SearchKit API中的多个整数溢出 115

7.8.2 Google Android SDK中的整数溢出 115

7.8.3 在Windows脚本引擎中存在的漏洞可以导致任意代码执行 116

7.8.4 HTR块编码中的堆溢出可以导致Web服务器遭到入侵 116

7.9 弥补措施 116

7.9.1 执行数学计算 116

7.9.2 不使用技巧 117

7.9.3 编写类型转换 118

7.9.4 使用SafeInt 119

7.10 其他防御措施 120

7.11 其他资源 120

7.12 本章小结 120

第8章 C++灾难 121

8.1 漏洞概述 121

8.2 CWE参考 121

8.3 受影响的编程语言 122

8.4 漏洞详述 122

8.4.1 有漏洞的delete调用 122

8.4.2 有漏洞的复制构造函数 123

8.4.3 有漏洞的构造函数 124

8.4.4 有漏洞的没有重新初始化 124

8.4.5 忽略STL 125

8.4.6 有漏洞的指针初始化 125

8.5 查找漏洞模式 126

8.6 在代码审查期间查找该漏洞 126

8.7 发现该漏洞的测试技巧 127

8.8 漏洞示例 127

8.9 弥补措施 127

8.9.1 new和delete不匹配的弥补措施 127

8.9.2 复制构造函数的弥补措施 127

8.9.3 构造函数初始化的弥补措施 128

8.9.4 重新初始化的弥补措施 129

8.9.5 STL弥补措施 129

8.9.6 未初始化指针的弥补措施 129

8.10 其他防御措施 129

8.11 其他资源 130

8.12 本章小结 130

第9章 捕获异常 131

9.1 漏洞概述 131

9.2 CWE参考 131

9.3 受影响的编程语言 131

9.4 漏洞详述 131

9.4.1 有漏洞的C++异常 132

9.4.2 有漏洞的结构化异常处理(SEH) 134

9.4.3 有漏洞的信号处理 136

9.4.4 有漏洞的C#、VB.NET和Java 136

9.4.5 有漏洞的Ruby 137

9.5 查找漏洞模式 137

9.6 在代码审查期间查找该漏洞 137

9.7 查找漏洞的测试技术 138

9.8 漏洞示例 139

9.9 弥补措施 139

9.9.1 C++弥补措施 139

9.9.2 SEH弥补措施 139

9.9.3 信号处理程序的弥补措施 140

9.10 其他资源 140

9.11 本章小结 140

第10章 命令注入 141

10.1 漏洞概述 141

10.2 CWE参考 141

10.3 受影响的编程语言 142

10.4 漏洞详述 142

10.5 查找漏洞模式 144

10.6 在代码审查期间查找该漏洞 144

10.7 发现该漏洞的测试技巧 145

10.8 漏洞示例 145

10.8.1 CAN-2001-1187 146

10.8.2 CAN-2002-0652 146

10.9 弥补措施 146

10.9.1 数据验证 147

10.9.2 当检查失败时 149

10.10 其他防御措施 149

10.11 其他资源 149

10.12 本章小结 150

第11章 未能正确处理错误 151

11.1 漏洞概述 151

11.2 CWE参考 151

11.3 受影响的编程语言 151

11.4 漏洞详细解释 152

11.4.1 产生太多的信息 152

11.4.2 忽略了错误 152

11.4.3 曲解了错误 153

11.4.4 使用了无用的返回值 153

11.4.5 使用了无错误的返回值 153

11.4.6 受漏洞影响的C/C++ 153

11.4.7 Windows上受漏洞影响的C/C++ 154

11.4.8 相关漏洞 155

11.5 查找漏洞模式 155

11.6 在代码审查期间查找该漏洞 155

11.7 发现该漏洞的测试技巧 155

11.8 漏洞示例 155

11.8.1 CVE-2007-3798 tcpdump print-bgp.c缓冲区溢出漏洞 155

11.8.2 CAN-2004-0077 Linux内核do_mremap 155

11.9 弥补措施 156

11.10 其他资源 156

11.11 本章小结 157

第12章 信息泄漏 159

12.1 漏洞概述 159

12.2 CWE参考 160

12.3 受影响的编程语言 160

12.4 漏洞详述 160

12.4.1 旁路 160

12.4.2 TMI:太多信息 161

12.4.3 信息流安全模型 163

12.4.4 受漏洞影响的C#(以及其他编程语言) 164

12.4.5 相关漏洞 165

12.5 查找漏洞模式 165

12.6 在代码审查期间查找该漏洞 165

12.7 发现该漏洞的测试技巧 166

12.8 漏洞示例 166

12.8.1 CVE-2008-4638 166

12.8.2 CVE-2005-1133 167

12.9 弥补措施 167

12.9.1 C#(以及其他编程语言)的弥补措施 168

12.9.2 本地网络的弥补措施 168

12.10 其他防御措施 168

12.11 其他资源 169

12.12 本章小结 170

第13章 竞态条件 171

13.1 漏洞概述 171

13.2 CWE参考 171

13.3 受影响的编程语言 172

13.4 漏洞详述 172

13.4.1 受漏洞影响的代码 173

13.4.2 相关漏洞 174

13.5 查找漏洞模式 174

13.6 在代码审查期间查找该漏洞 174

13.7 发现该漏洞的测试技巧 175

13.8 漏洞示例 176

13.8.1 CVE-2008-0379 176

13.8.2 CVE-2008-2958 176

13.8.3 CVE-2001-1349 176

13.8.4 CAN-2003-1073 176

13.8.5 CVE-2000-0849 177

13.9 弥补措施 177

13.10 其他防御措施 179

13.11 其他资源 179

13.12 本章小结 179

第14章 不良可用性 181

14.1 漏洞概述 181

14.2 CWE参考 181

14.3 受影响的编程语言 182

14.4 漏洞详述 182

14.4.1 谁是您的用户 182

14.4.2 雷区:向用户呈现安全信息 183

14.4.3 相关漏洞 183

14.5 查找漏洞模式 183

14.6 在代码审查期间查找该漏洞 184

14.7 发现该漏洞的测试技巧 184

14.8 漏洞示例 184

14.8.1 SSL/TLS证书认证 185

14.8.2 Internet Explorer 4.0根证书安装 185

14.9 弥补措施 186

14.9.1 简化UI以便用户参与 186

14.9.2 为用户做出安全决策 186

14.9.3 易于有选择地放宽安全策略 187

14.9.4 明确指出后果 188

14.9.5 提供可操作性 189

14.9.6 提供集中管理 189

14.10 其他资源 190

14.11 本章小结 191

第15章 不易更新 193

15.1 漏洞概述 193

15.2 CWE参考 193

15.3 受影响的编程语言 193

15.4 漏洞详述 194

15.4.1 有漏洞的附加软件安装 194

15.4.2 有漏洞的访问控制 194

15.4.3 有漏洞的提示疲劳 194

15.4.4 有漏洞的无知 194

15.4.5 有漏洞的无通知更新 194

15.4.6 有漏洞的一次更新一个系统 195

15.4.7 有漏洞的强制重启动 195

15.4.8 有漏洞的难以打补丁 195

15.4.9 有漏洞的缺乏恢复计划 195

15.4.10 有漏洞的信任DNS 195

15.4.11 有漏洞的信任补丁服务器 195

15.4.12 有漏洞的更新签名 195

15.4.13 有漏洞的打开更新包 196

15.4.14 有漏洞的用户应用程序的更新 196

15.5 查找漏洞模式 196

15.6 在代码审查期间查找漏洞 197

15.7 发现漏洞的测试技巧 197

15.8 漏洞示例 197

15.8.1 苹果公司的QuickTime更新 197

15.8.2 Microsoft SQL Server 2000补丁 197

15.8.3 谷歌的Chrome浏览器 197

15.9 弥补措施 198

15.9.1 安装附带软件的弥补措施 198

15.9.2 访问控制的弥补措施 198

15.9.3 提示疲劳的弥补措施 198

15.9.4 用户无知的弥补措施 198

15.9.5 无通知更新的弥补措施 199

15.9.6 一次更新一个系统的弥补措施 199

15.9.7 强制重启动的弥补措施 199

15.9.8 难以打补丁的弥补措施 199

15.9.9 缺乏恢复计划的弥补措施 200

15.9.10 轻信DNS的弥补措施 200

15.9.11 轻信补丁服务器的弥补措施 200

15.9.12 更新签名的弥补措施 200

15.9.13 打开更新包的弥补措施 201

15.9.14 用户应用程序更新的弥补措施 201

15.10 其他防御措施 201

15.11 其他资源 202

15.12 本章小结 202

第16章 执行代码的权限过大 203

16.1 漏洞概述 203

16.2 CWE参考 203

16.3 受影响的编程语言 203

16.4 漏洞详述 204

16.5 查找漏洞模式 205

16.6 在代码审查期间查找漏洞 205

16.7 发现漏洞的测试技巧 205

16.8 漏洞示例 206

16.9 弥补措施 206

16.9.1 Windows、C和C++ 206

16.9.2 Linux、BSD和Mac OS X 208

16.9.3 .NET代码 209

16.10 其他防御措施 209

16.11 其他资源 209

16.12 本章小结 210

第17章 未能安全地存储数据 211

17.1 漏洞概述 211

17.2 CWE参考 211

17.3 受影响的编程语言 211

17.4 漏洞详述 212

17.4.1 在存储的数据上采用脆弱的访问控制 212

17.4.2 受漏洞影响的访问控制 213

17.4.3 已存储数据的弱加密 215

17.4.4 相关漏洞 215

17.5 查找漏洞模式 215

17.6 在代码审查期间查找漏洞 216

17.7 发现该漏洞的测试技巧 216

17.8 漏洞示例 218

17.8.1 CVE-2000-0100 218

17.8.2 CVE-2005-1411 218

17.8.3 CVE-2004-0907 218

17.9 弥补措施 218

17.9.1 Windows上C++的弥补措施 219

17.9.2 Windows上C#的弥补措施 220

17.9.3 C/C++的弥补措施(GNOME) 220

17.10 其他防御措施 221

17.11 其他资源 221

17.12 本章小结 221

第18章 移动代码的漏洞 223

18.1 漏洞概述 223

18.2 CWE参考 224

18.3 受影响的编程语言 225

18.4 漏洞详述 225

18.4.1 有漏洞的移动代码 225

18.4.2 有漏洞的移动代码容器 225

18.4.3 相关的漏洞 225

18.5 查找漏洞模式 226

18.6 在代码审查期间查找漏洞 226

18.7 发现该漏洞的测试技巧 227

18.8 漏洞示例 227

18.8.1 CVE-2006-2198 227

18.8.2 CVE-2008-1472 227

18.8.3 CVE-2008-5697 227

18.9 弥补措施 228

18.9.1 移动代码容器的弥补措施 228

18.9.2 移动代码的弥补措施 229

18.10 其他防御措施 229

18.11 其他资源 229

18.12 本章小结 230

第Ⅲ部分 加密漏洞 233

第19章 使用基于弱密码的系统 233

19.1 漏洞概述 233

19.2 CWE参考 233

19.3 受影响的编程语言 234

19.4 漏洞详述 234

19.4.1 密码泄露 234

19.4.2 允许使用弱密码 235

19.4.3 密码迭代 235

19.4.4 不要求改变密码 235

19.4.5 默认密码 235

19.4.6 重放攻击 235

19.4.7 存储密码而不是密码验证器 236

19.4.8 对密码验证器的暴力攻击 236

19.4.9 泄露某个失败源自不正确的用户或密码 237

19.4.10 在线攻击 237

19.4.11 返回遗忘的密码 237

19.4.12 相关漏洞 237

19.5 查找漏洞模式 238

19.5.1 密码泄露 238

19.5.2 允许弱密码 238

19.5.3 迭代密码 238

19.5.4 从不改变密码 238

19.5.5 默认密码 238

19.5.6 重放攻击 238

19.5.7 对密码验证器进行暴力攻击 239

19.5.8 存储密码而不是密码验证器 239

19.5.9 在线攻击 239

19.5.10 返回遗忘的密码 239

19.6 在代码审查期间查找该漏洞 239

19.7 发现该漏洞的测试技巧 240

19.7.1 密码泄露 240

19.7.2 重放攻击 240

19.7.3 暴力攻击 240

19.8 漏洞示例 241

19.8.1 Zombies Ahead 241

19.8.2 要修改的Microsoft Office密码 241

19.8.3 Adobe Acrobat加密 241

19.8.4 WU-ftpd核心转储 242

19.8.5 CVE-2005-1505 242

19.8.6 CVE-2005-0432 242

19.8.7 TENEX漏洞 242

19.8.8 Sarah Palin雅虎电子邮件入侵 243

19.9 弥补措施 243

19.9.1 密码泄露的弥补措施 243

19.9.2 弱密码的弥补措施 243

19.9.3 迭代密码的弥补措施 243

19.9.4 密码改变的弥补措施 244

19.9.5 默认密码的弥补措施 244

19.9.6 重放攻击的弥补措施 244

19.9.7 密码验证器的弥补措施 244

19.9.8 在线暴力攻击的弥补措施 245

19.9.9 登录信息泄露的弥补措施 246

19.9.10 忘记密码的弥补措施 246

19.10 其他防御措施 246

19.11 其他资源 246

19.12 本章小结 247

第20章 弱随机数 249

20.1 漏洞概述 249

20.2 CWE参考 249

20.3 受影响的编程语言 250

20.4 漏洞详述 250

20.4.1 受漏洞影响的非密码生成器 250

20.4.2 受漏洞影响的密码生成器 251

20.4.3 受漏洞影响的真随机数生成器 251

20.4.4 相关漏洞 252

20.5 查找漏洞模式 252

20.6 在代码审查期间查找该漏洞 252

20.6.1 什么时候应该使用随机数 252

20.6.2 查找使用PRNG的地方 253

20.6.3 判断CRNG是否正确地播种 253

20.7 发现该漏洞的测试技巧 254

20.8 漏洞示例 254

20.8.1 TCP/IP序列号 254

20.8.2 ODF文档加密标准 255

20.8.3 CVE-2008-0166 Debian“随机”密钥的生成 255

20.8.4 Netscape浏览器 256

20.9 弥补措施 256

20.9.1 Windows、C和C++ 256

20.9.2 带TPM支持的Windows 257

20.9.3 .NET代码 258

20.9.4 UNIX 258

20.9.5 Java 259

20.9.6 重放数字流 259

20.10 其他防御措施 260

20.11 其他资源 260

20.12 本章小结 261

第21章 使用错误的密码技术 263

21.1 漏洞概述 263

21.2 CWE参考 264

21.3 受影响的编程语言 264

21.4 漏洞详述 264

21.4.1 使用自制的加密算法 264

21.4.2 在高级协议可用时,从低级算法中创建一个协议 264

21.4.3 使用脆弱的密码基元 265

21.4.4 不正确地使用密码基元 265

21.4.5 使用错误的密码基元 267

21.4.6 使用错误的通信协议 267

21.4.7 未使用salt 267

21.4.8 未使用随机IV 268

21.4.9 使用脆弱的密钥派生函数 268

21.4.10 未提供完整性检查 268

21.4.11 不使用敏捷加密 268

21.4.12 相关的漏洞 269

21.5 查找漏洞模式 269

21.6 在代码审查期间查找漏洞 269

21.6.1 使用自制的加密算法(VB.NET和C++) 269

21.6.2 在高级协议可用时,从低级算法中创建一个协议 270

21.6.3 使用脆弱的密码基元(C#和C++) 270

21.6.4 不正确地使用密码基元(Ruby、C#和C++) 271

21.6.5 使用错误的密码基元 271

21.6.6 使用错误的通信协议 271

21.7 发现该漏洞的测试技巧 272

21.8 漏洞示例 272

21.8.1 数字证书和脆弱的散列 272

21.8.2 Microsoft Office XOR困惑 272

21.8.3 Adobe Acrobat和Microsoft Office的脆弱KDF 272

21.9 弥补措施 273

21.9.1 使用自制加密算法的弥补措施 273

21.9.2 在高级协议可用时,从低级算法中创建一个协议的弥补措施 273

21.9.3 使用脆弱的密码基元的弥补措施 273

21.9.4 不正确地使用密码基元的弥补措施 274

21.9.5 使用错误的密码基元的弥补措施 275

21.9.6 未使用salt的弥补措施 275

21.9.7 未使用随机IV的弥补措施 275

21.9.8 使用脆弱的密钥派生函数的弥补措施 275

21.9.9 未提供完整性检查的弥补措施 276

21.9.10 不使用敏捷加密的弥补措施 276

21.9.11 使用错误通信协议的弥补措施 277

21.10 其他防御措施 277

21.11 其他资源 277

21.12 本章小结 277

第Ⅳ部分 联网漏洞 281

第22章 未能保护好网络通信 281

22.1 漏洞概述 281

22.2 CWE参考 282

22.3 受影响的编程语言 282

22.4 漏洞详述 282

22.5 查找漏洞模式 285

22.6 在代码审查期间查找漏洞 285

22.7 发现该漏洞的测试技巧 285

22.8 漏洞示例 286

22.8.1 TCP/IP 286

22.8.2 电子邮件协议 286

22.8.3 电子商务 286

22.9 弥补措施 287

22.10 其他防御措施 287

22.11 其他资源 287

22.12 本章总结 288

第23章 未能正确使用PKI,尤其是SSL 289

23.1 漏洞概述 289

23.2 CWE参考 290

23.3 受影响的编程语言 290

23.4 漏洞详述 290

23.5 查找漏洞模式 291

23.6 在代码审查期间查找该漏洞 291

23.7 发现该漏洞的测试技巧 292

23.8 漏洞示例 293

23.8.1 CVE-2007-4680 293

23.8.2 CVE-2008-2420 293

23.9 弥补措施 294

23.10 其他防御措施 297

23.11 其他资源 297

23.12 本章小结 297

第24章 轻信网络域名解析 299

24.1 漏洞概述 299

24.2 CWE参考 299

24.3 受影响的编程语言 299

24.4 漏洞详述 300

24.4.1 受漏洞影响的应用程序 302

24.4.2 相关漏洞 303

24.5 查找漏洞模式 303

24.6 在代码审查期间查找该漏洞 303

24.7 发现该漏洞的测试技巧 304

24.8 漏洞示例 304

24.8.1 CVE-2002-0676 304

24.8.2 CVE-1999-0024 305

24.9 弥补措施 305

24.10 其他资源 306

24.11 本章小结 306