
| 本书本着小巧、易读、实用的原则,涵盖了目前流行的编程语言和运行平台,覆盖了最为常见的与软件安全相关的19个致命漏洞。该书采用理论和实践相结合的方式,对于每个漏洞都给出了详细的描述、产生的原理、查找的方法、弥补的措施等内容,同时,对于每个漏洞,作者还精选了系统中实际出现的例子加以说明,使其更直观,令读者印象更为深刻。另外,在弥补措施中,作者结合多种不同的语言给出具体的代码弥补方案,从而更增强了实用性。 |
| Michael Howard Microsoft公司安全工程组的高级安全项目管理经理,同时也是获奖书籍Writing Secure Code的作者之一。他还是IEEE Security&Priavacy Magazine杂志“Basic Training”栏目作者之一,美国国家网络安全伙伴任务小组为国土安全部编写的“Processes to Produce Secure Software”一文的作者之一。作为微软“安全开发生命周期”的架构师,Michael花费了大量的时间来制定和实施最佳安全实践,促进软件开发过程改进,为普通用户提供更为安全的软件。 |
| 第1章 缓冲区溢出1 1.1 漏洞概述1 1.2 受影响的编程语言2 1.3 漏洞详细解释2 1.3.1 受漏洞影响的C/C++5 1.3.2 相关漏洞8 1.4 查找漏洞模式8 1.5 在代码审查中查找该漏洞8 1.6 发现该漏洞的测试技巧9 1.7 漏洞示例10 1.7.1 CVE-1999-004210 1.7.2 CVE-2000-0389 — CVE-2000-039210 1.7.3 CVE-2002-0842、 CVE-2003-0095、 CAN-2003-009611 1.7.4 CAN-2003-035211 1.8 弥补措施12 1.8.1 替换危险的字符串 处理函数12 1.8.2 审计分配操作12 1.8.3 检查循环和数组访问12 1.8.4 使用C++字符串来替 换C字符串缓冲区12 1.8.5 使用STL容器替代静 态数组13 1.8.6 使用分析工具13 1.9 其他防御措施13 1.9.1 栈保护14 1.9.2 不可执行的栈和堆14 1.10 其他资源14 1.11 本章总结16 第2章 格式化字符串问题17 2.1 漏洞概述17 2.2 受影响的编程语言18 2.3 漏洞详细解释18 2.3.1 受漏洞影响的C/C++20 2.3.2 相关漏洞20 2.4 查找漏洞模式21 2.5 在代码审查中查找该漏洞21 2.6 发现该漏洞的测试技巧21 2.7 漏洞示例22 2.7.1 CVE-2000-057322 2.7.2 CVE-2000-084422 2.8 弥补措施23 2.9 其他防御措施23 2.10 其他资源23 2.11 本章总结24 第3章 整数溢出25 3.1 漏洞概述25 3.2 受影响的编程语言25 3.3 漏洞详细解释26 3.3.1 受漏洞影响的C和C++26 3.3.2 受漏洞影响的C#31 3.3.3 受漏洞影响的Visual Basic和Visual Basic.net32 3.3.4 受漏洞影响的Java33 3.3.5 受漏洞影响的Perl34 3.4 查找漏洞模式35 3.5 在代码审查中查找漏洞35 3.5.1 C/C++35 3.5.2 C#37 3.5.3 Java37 3.5.4 Visual Basic和Visual Basic.NET38 3.5.5 Perl38 3.6 发现该漏洞的测试技巧38 3.7 漏洞示例38 3.7.1 在Windows脚本引擎中 存在的漏洞可以导致 任意代码执行38 3.7.2 在SOAPParameter的对象 构造函数中存在整数溢出39 3.7.3 在HTR块编码中存在的 堆溢出可以导致Web 服务器遭到入侵39 3.8 弥补措施39 3.9 其他防御措施41 3.10 其他资源41 3.11 本章总结42 第4章 SQL注入43 4.1 漏洞概述43 4.2 受影响的编程语言44 4.3 漏洞详细解释44 4.3.1 受漏洞影响的C#44 4.3.2 受漏洞影响的PHP45 4.3.3 受漏洞影响的Perl/CGI46 4.3.4 受漏洞影响的Java 和JDBC46 4.3.5 受漏洞影响的SQL47 4.3.6 相关漏洞48 4.4 查找漏洞模式49 4.5 在代码审查中查找该漏洞49 4.6 发现该漏洞的测试技巧50 4.7 漏洞示例52 4.7.1 CAN-2004-34852 4.7.2 CAN-2002-055452 4.8 弥补措施52 4.8.1 验证所有的输入52 4.8.2 不要使用字符串连接来 构造SQL语句53 4.9 其他防御措施56 4.10 其他资源56 4.11 本章总结57 第5章 命令注入59 5.1 漏洞概述59 5.2 受影响的编程语言59 5.3 漏洞详细解释59 5.4 查找漏洞模式61 5.5 在代码审查中查找该漏洞61 5.6 发现该漏洞的测试技巧63 5.7 漏洞示例64 5.7.1 CAN-2001-118764 5.7.2 CAN-2002-065264 5.8 弥补措施65 5.8.1 数据验证65 5.8.2 当检查失败时67 5.9 其他防御措施67 5.10 其他资源68 5.11 本章总结68 第6章 未能处理错误信息69 6.1 漏洞概述69 6.2 受影响的编程语言69 6.3 漏洞详细解释69 6.3.1 产生太多的信息70 6.3.2 忽略了错误信息70 6.3.3 曲解了错误信息71 6.3.4 使用了无用的错误值71 6.3.5 处理了错误的异常71 6.3.6 处理所有的异常71 6.3.7 受漏洞影响的C/C++72 6.3.8 Windows上受漏洞 影响的C/C++72 6.3.9 受漏洞影响的C++73 6.3.10 受漏洞影响的 C#、VB.NET及Java73 6.3.11 相关漏洞74 6.4 查找漏洞模式74 6.5 在代码审查中查找该漏洞74 6.6 发现该漏洞的测试技巧75 6.7 漏洞示例75 6.8 弥补措施76 6.8.1 C/C++弥补措施76 6.8.2 C#、VB.NET和Java 弥补措施76 6.9 其他资源77 6.10 本章总结77 第7章 跨站脚本79 7.1 漏洞概述79 7.2 受影响的编程语言79 7.3 漏洞详细解释79 7.3.1 受漏洞影响的 C/C++ ISAPI应用程序 或者过滤程序80 7.3.2 受漏洞影响的ASP81 7.3.3 受漏洞影响的 ASP.NET表单81 7.3.4 受漏洞影响的JSP81 7.3.5 受漏洞影响的PHP81 7.3.6 受漏洞影响的使用 Perl的CGI程序82 7.3.7 受漏洞影响的mod_perl82 7.4 查找漏洞模式82 7.5 在代码审查中查找该漏洞83 7.6 发现该漏洞的测试技巧84 7.7 漏洞示例85 7.7.1 IBM Lotus Domino跨站 脚本和HTML注入漏洞85 7.7.2 Oracle HTTP服务器的 “isqlplus”输入验证漏洞 允许远程用户实施跨站 脚本攻击85 7.7.3 CVE-2002-084085 7.8 弥补措施85 7.8.1 ISAPI C/C++弥补措施86 7.8.2 ASP弥补措施86 7.8.3 ASP.NET表单弥补措施87 7.8.4 JSP弥补措施87 7.8.5 PHP弥补措施89 7.8.6 CGI弥补措施89 7.8.7 mod_perl弥补措施90 7.8.8 关于HTML编码的 注意事项90 7.9 其他防御措施91 7.10 其他资源91 7.11 本章总结92 第8章 未能保护好网络流量93 8.1 漏洞概述93 8.2 受影响的编程语言94 8.3 漏洞详细解释94 8.4 查找漏洞模式96 8.5 在代码审查中查找漏洞96 8.6 发现该漏洞的测试技巧99 8.7 漏洞示例99 8.7.1 TCP/IP100 8.7.2 电子邮件协议100 8.7.3 电子商务100 8.8 弥补措施101 8.9 其他防御措施104 8.10 其他资源104 8.11 本章总结104 第9章 使用Magic URL及隐藏 表单字段105 9.1 漏洞概述105 9.2 受影响的编程语言105 9.3 漏洞详细解释105 9.3.1 Magic URL106 9.3.2 隐藏表单字段106 9.3.3 相关漏洞106 9.4 查找漏洞模式107 9.5 在代码审查中查找该漏洞107 9.6 发现该漏洞的测试技巧108 9.7 漏洞示例109 9.7.1 CAN-2000-1001109 9.7.2 MaxWebProtal隐藏表单 字段修改109 9.8 弥补措施109 9.8.1 攻击者浏览数据110 9.8.2 攻击者重放数据110 9.8.3 攻击者预测数据112 9.8.4 攻击者更改数据113 9.9 其他防御措施114 9.10 其他资源114 9.11 本章总结114 第10章 未能正确使用SSL和TLS115 10.1 漏洞概述115 10.2 受影响的编程语言115 10.3 漏洞详细解释116 10.4 查找漏洞模式118 10.5 在代码审查查找该漏洞119 10.6 发现该漏洞的测试技巧120 10.7 漏洞示例121 10.7.1 电子邮件客户端121 10.7.2 Safari Web浏览器121 10.7.3 Stunnel SSL代理122 10.8 弥补措施122 10.8.1 选择协议版本123 10.8.2 选择加密套件124 10.8.3 确保证书的有效性124 10.8.4 验证主机名126 10.8.5 检查证书撤销126 10.9 其他防御措施128 10.10 其他资源129 10.11 本章总结129 第11章 使用基于弱口令的系统131 11.1 漏洞概述131 11.2 受影响的编程语言131 11.3 漏洞详细解释131 11.4 查找漏洞模式133 11.5 在代码审查中查找该漏洞134 11.5.1 口令内容策略134 11.5.2 口令修改和重置134 11.5.3 口令协议135 11.5.4 口令处理和存储135 11.6 发现该漏洞的测试技巧136 11.7 漏洞示例136 11.7.1 CVE-2005-1505136 11.7.2 CVE-2005-0432137 11.7.3 TENEX漏洞137 11.7.4 Paris Hilton劫持138 11.8 弥补措施138 11.8.1 多方式认证138 11.8.2 存储以及检查口令139 11.8.3 选择协议的原则142 11.8.4 口令重置的原则142 11.8.5 口令选择的原则143 11.8.6 其他原则144 11.9 其他防御措施144 11.10 其他资源145 11.11 本章总结145 第12章 未能安全地存储和 保护数据147 12.1 漏洞概述147 12.2 受影响的编程语言147 12.3 漏洞详细解释147 12.3.1 采用脆弱的访问控制机 制“保护”秘密数据148 12.3.2 受漏洞影响的访问控制149 12.3.3 代码中内嵌秘密数据151 12.3.4 相关漏洞151 12.4 查找漏洞模式151 12.5 在代码审查中查找漏洞152 12.6 发现该漏洞的测试技巧153 12.7 漏洞示例155 12.7.1 CVE-2000-0100155 12.7.2 CAN-2002-1590155 12.7.3 CVE-1999-0886155 12.7.4 CAN-2004-0311156 12.7.5 CAN-2004-0391156 12.8 弥补措施156 12.8.1 使用操作系统的 安全技术157 12.8.2 C/C++ Windows 2000以 及更新版本的弥补措施157 12.8.3 ASP.NET 1.1以及更新 版本的弥补措施159 12.8.4 C# .NET Framework 2.0 弥补措施159 12.8.5 C/C++ Mac OS X 10.2 以及更新版本的 弥补措施159 12.8.6 无需操作系统支持的 弥补措施(不在代码 中保存秘密数据)160 12.8.7 Java和Java KeyStore 的注意事项162 12.9 其他防御措施163 12.10 其他资源164 12.11 本章总结165 第13章 信息泄漏167 13.1 漏洞概述167 13.2 受影响的编程语言167 13.3 漏洞详细解释168 13.3.1 旁路168 13.3.2 TMI:太多的信息!169 13.3.3 信息流安全模型171 13.3.4 受漏洞影响的C#(以 及其他的编程语言)173 13.3.5 相关漏洞173 13.4 查找漏洞模式173 13.5 在代码审查中查找该漏洞173 13.6 发现该漏洞的测试技巧175 13.7 漏洞示例175 13.7.1 Dan Bernstein的 AES定时攻击175 13.7.2 CAN-2005-1411176 13.7.3 CAN-2005-1133176 13.8 弥补措施177 13.8.1 C#(以及其他编程语言) 弥补措施177 13.8.2 本地网络的弥补措施178 13.9 其他防御措施178 13.10 其他资源178 13.11 本章总结179 第14章 不恰当的文件访问181 14.1 漏洞概述181 14.2 受影响的编程语言182 14.3 漏洞详细解释182 14.3.1 在Windows上受 漏洞影响的C/C++182 14.3.2 受漏洞影响的C/C++183 14.3.3 受漏洞影响的Perl183 14.3.4 受漏洞影响的Python183 14.3.5 相关漏洞184 14.4 查找漏洞模式184 14.5 在代码审查中查找该漏洞184 14.6 发现该漏洞的测试技巧185 14.7 漏洞示例186 14.7.1 CAN-2005-0004186 14.7.2 CAN-2005-0799186 14.7.3 CAN-2004-0452和 CAN-2004-0448186 14.7.4 CVE-2004-0115 Microsoft的Mac 版Virtual PC186 14.8 弥补措施187 14.8.1 Perl弥补措施187 14.8.2 *nix上C/C++的 弥补措施187 14.8.3 Windows上C/C++的 弥补措施188 14.8.4 获取用户临时文件 的目录188 14.8.5 .NET代码弥补措施188 14.9 其他防御措施189 14.10 其他资源189 14.11 本章总结189 第15章 轻信网络域名解析191 15.1 漏洞概述191 15.2 受影响的编程语言191 15.3 漏洞详细解释192 15.3.1 受漏洞影响的应用程序194 15.3.2 相关漏洞194 15.4 查找漏洞模式195 15.5 在代码审查中查找该漏洞195 15.6 发现该漏洞的测试技巧195 15.7 漏洞示例196 15.7.1 CVE-2002-0676196 15.7.2 CVE-1999-0024196 15.8 弥补措施197 15.9 其他资源198 15.10 本章总结198 第16章 竞争条件199 16.1 漏洞概述199 16.2 受影响的编程语言199 16.3 漏洞详细解释199 16.3.1 受漏洞影响的代码201 16.3.2 相关漏洞201 16.4 查找漏洞模式202 16.5 在代码审查中查找该漏洞202 16.6 发现该漏洞的测试技巧203 16.7 漏洞示例204 16.7.1 CVE-2001-1349204 16.7.2 CAN-2003-1073204 16.7.3 CVE-2000-0849204 16.8 弥补措施205 16.9 其他防御措施206 16.10 其他资源206 16.11 本章总结207 第17章 未认证的密钥交换209 17.1 漏洞概述209 17.2 受影响的语言209 17.3 漏洞详细解释209 17.4 查找漏洞模式211 17.5 在代码审查中查找该漏洞211 17.6 发现该漏洞的测试技巧212 17.7 漏洞示例212 17.7.1 Novell Netware MITM 攻击212 17.7.2 CAN-2004-0155212 17.8 弥补措施213 17.9 其他防御措施213 17.10 其他资源213 17.11 本章总结214 第18章 密码学强度随机数215 18.1 漏洞概述215 18.2 受影响的编程语言215 18.3 漏洞详细解释215 18.3.1 受漏洞影响的非 密码学生成器216 18.3.2 受漏洞影响的 密码字生成器216 18.3.3 受漏洞影响的真 随机数生成器217 18.3.4 相关漏洞218 18.4 查找漏洞模式218 18.5 在代码审查中查找该漏洞218 18.5.1 什么时候应该 使用随机数218 18.5.2 查找使用PRNG 的地方218 18.5.3 判断CRNG是否 正确地播种219 18.6 发现该漏洞的测试技巧220 18.7 漏洞示例220 18.7.1 Netscape浏览器220 18.7.2 OpenSSL问题221 18.8 弥补措施221 18.8.1 Windows221 18.8.2 .NET代码222 18.8.3 UNIX222 18.8.4 Java223 18.8.5 重放数字流223 18.9 其他防御措施224 18.10 其他资源224 18.11 本章总结224 第19章 不良可用性225 19.1 漏洞概述225 19.2 受影响的语言225 19.3 漏洞详细解释225 19.3.1 谁是您的用户?226 19.3.2 雷区:向您的用户呈现安全相关的信息227 19.3.3 相关漏洞227 19.4 查找漏洞模式227 19.5 在代码审查中寻找该漏洞227 19.6 发现该漏洞的测试技巧228 19.7 漏洞示例228 19.7.1 SSL/TLS证书认证228 19.7.2 Internet Explorer 4.0 根证书安装229 19.8 弥补措施230 19.8.1 简化UI以便用户参与230 19.8.2 为用户做出安全决策230 19.8.3 使有选择的松弛安全策 略变得简单231 19.8.4 明确指出后果232 19.8.5 提供可操作性235 19.8.6 提供集中管理235 19.9 其他资源235 19.10 本章总结236 附录A 19个致命漏洞与OWASP 的“前10名”漏洞的 对应关系237 附录B “要”与“不要”提示总结239 译者术语表247 |
商品评论(0条)