安全漏洞追踪(安全技术大系)(Hunting Security Bugs)
分類: 图书,计算机与互联网,软件工程及软件方法学,软件过程,
品牌: 盖弗
基本信息·出版社:电子工业出版社
·页码:508 页
·出版日期:2008年
·ISBN:7121073714/9787121073717
·条形码:9787121073717
·包装版本:1版
·装帧:平装
·开本:16
·正文语种:中文
·丛书名:安全技术大系
·外文书名:Hunting Security Bugs
产品信息有问题吗?请帮我们更新产品信息。
内容简介《安全漏洞追踪》是一本针对安全测试的书籍,同时也是一本十分适合信息安全研究人员的优秀参考书。《安全漏洞追踪》共20章,其中前3章讨论了安全测试的基础,包括如何从攻击者的角度去思考测试方法,以及如何进行威胁建模和入口点查找。第4章至第19章则通过详细的示例与代码,分别深入地阐述了网络流量和内存数据的操控方法,包括缓冲区溢出、格式化字符串、HTML脚本、XML、规范化、权限、拒绝服务、托管代码、SQL注入和ActiveX再利用等安全漏洞追踪方法,以及在二进制代码条件下查找安全漏洞的逆向工程技术。第20章论述了合理报告安全漏洞的程序,并提出了一个负责的安全漏洞公开流程。最后,《安全漏洞追踪》还提供了一个适于初学者的测试用例列表。
图书目录
媒体推荐我们必须培养一类新型的测试员——一种能像恶意攻击者那样思考的人——一种基于白盒和黑盒测试基础的通过攻击来追踪安全漏洞的人。
——微软主席兼软件体系结构首席执行官比尔·盖茨
编辑推荐《安全漏洞追踪》将向你展现:
如何识别高风险的入口点并创建测试用例
如何测试客户端和服务器,以追踪恶意的请求/响应漏洞
如何利用黑盒和白盒测试方法揭示安全漏洞
如何发现欺骗问题,包括标识欺骗和用户接口欺骗
如何检测能够利用程序逻辑的漏洞,比如SQL注入
如何测试×ML、SOAP和Web服务的安全漏洞
如何识别信息泄露和弱权限问题
如何查找攻击者能够直接操纵内存的地方
如何利用不同的数据表现方式来揭示规范化问题
如何曝光COM和Active×再利用攻击
来自专家的完美的软件安全测试参考书
你将学会像攻击者那样去思考,并发现软件中潜在的安全问题。在这本优秀的参考书中,三位安全测试专家提供了明确实用的指南和代码实例,帮助你在软件发布之前发现、分类和评估安全漏洞。
目录
第1章 安全测试的一般方法1
1.1 安全测试人员的不同类型2
1.2 一种安全测试的方法3
1.2.1 深入理解测试的内容4
1.2.2 从攻击者的角度思考如何攻击目标6
1.2.3 攻击产品8
1.2.4 时刻关注新的攻击8
1.3 小结9
第2章 利用威胁模型进行安全测试10
2.1 威胁建模10
2.2 测试人员如何对威胁模型分级11
2.3 数据流程图12
2.4 入口点和退出点的安全13
2.5 识别威胁的技巧及常见威胁14
2.6 测试人员如何利用一个完整的威胁模型16
2.7 技术实现难以符合产品规范或威胁模型19
2.8 小结20
第3章 查找入口点21
3.1 查找入口点并划分等级22
3.2 常见入口点23
3.2.1 文件23
3.2.2 套接字(Socket)27
3.2.3 HTTP请求29
3.2.4 命名管道32
3.2.5 可插入协议处理程序35
3.2.6 恶意服务器响应37
3.2.7 程序化接口38
3.2.8 SQL39
3.2.9 注册表39
3.2.10 用户接口41
3.2.11 E-mail42
3.2.12 命令行参数44
3.2.13 环境变量45
3.3 小结47
第4章 成为恶意的客户端48
4.1 客户端/服务器交互48
4.1.1 发现服务器正常接收的请求49
4.1.2 操纵网络请求51
4.2 测试HTTP55
4.2.1 理解无状态协议56
4.2.2 接收输入的测试方法56
4.3 快速测试特定的网络请求66
4.4 测试技巧68
4.5 小结69
第5章 成为恶意的服务器70
5.1 理解客户端接收恶意服务器响应的常见方法71
5.2 SSL能否阻止恶意服务器的攻击73
5.3 操纵服务器响应73
5.4 恶意响应漏洞的例子74
5.5 错误认识:对攻击者来说创建恶意服务器非常困难76
5.6 理解降级(Downgrade)MITM攻击77
5.7 测试技巧78
5.8 小结79
第6章 欺骗80
6.1 掌握欺骗问题的重要性80
6.2 寻找欺骗问题82
6.3 常见欺骗案例82
6.3.1 IP地址欺骗83
6.3.2 MAC地址欺骗84
6.3.3 利用网络协议欺骗85
6.4 用户接口(User Interface,UI)欺骗88
6.4.1 重构对话框88
6.4.2 Z-Order欺骗93
6.4.3 让人误解的URL和文件名94
6.5 测试技巧97
6.6 小结97
第7章 信息泄露98
7.1 信息泄露问题98
7.2 定位信息泄露的常见区域99
7.2.1 文件泄露99
7.2.2 网络泄露107
7.3 识别重要的数据111
7.3.1 数据混淆112
7.3.2 隐含泄露113
7.4 小结113
第8章 缓冲区溢出及堆栈/堆操纵114
8.1 了解溢出的工作原理117
8.1.1 堆栈溢出118
8.1.2 整型溢出121
8.1.3 堆溢出128
8.1.4 其他攻击129
8.2 溢出测试:在哪里寻找(测试)用例130
8.2.1 网络130
8.2.2 文档与文件131
8.2.3 较高权限和较低权限用户之间的共享信息131
8.2.4 可编程接口132
8.3 黑盒(功能)测试133
8.3.1 确定期待的是什么数据133
8.3.2 使用你能识别的数据134
8.3.3 了解界限与边界134
8.3.4 保持全部数据的完整性137
8.3.5 改造正常数据使其溢出的策略141
8.3.6 测试首要行为和次要行为143
8.3.7 要查找什么144
8.3.8 运行时工具156
8.3.9 模糊测试158
8.4 白盒测试159
8.4.1 要查找的对象160
8.4.2 溢出的可用性164
8.4.3 Unicode数据169
8.4.4 已过滤的数据170
8.5 其他主题170
8.5.1 无代码执行的溢出也很严重170
8.5.2 /GS编译器开关173
8.6 测试技巧175
8.7 小结176
第9章 格式化字符串攻击177
9.1 什么是格式化字符串178
9.2 理解为什么格式化字符串存在问题178
9.2.1 剖析prinf调用179
9.2.2 堆栈解析错误180
9.2.3 内存覆盖182
9.3 格式化字符串安全漏洞测试183
9.3.1 代码检查183
9.3.2 黑盒测试184
9.4 走查(Walkthrough):经历一个格式化字符串攻击过程185
9.4.1 寻找格式化字符串漏洞185
9.4.2 分析可利用性186
9.4.3 深度挖掘:围绕可利用性问题进行工作189
9.4.4 构建一个简单的负载201
9.5 测试技巧208
9.6 小结209
第10章 HTML脚本攻击210
10.1 理解针对服务器的反射跨站脚本攻击211
10.1.1 例子:一个搜索引擎中的反射XSS212
10.1.2 理解为什么XSS攻击是安全相关的214
10.1.3 利用服务端的反射XSS漏洞216
10.1.4 POST也是可利用的218
10.2 理解针对服务器的持久性XSS攻击219
10.2.1 例子:在一个留言簿中的持久性XSS攻击220
10.2.2 利用针对服务器的持久性XSS攻击221
10.3 识别用于反射和持久性XSS攻击的数据221
10.4 程序员阻止攻击的常用方法224
10.5 理解针对本地文件的反射XSS攻击227
10.5.1 例子:本地文件中的反射XSS228
10.5.2 利用本地文件中的反射XSS漏洞229
10.5.3 理解为何本地XSS漏洞是一个问题229
10.5.4 利用本地XSS漏洞在受害者的机器上运行二进制文件232
10.5.5 HTML资源233
10.5.6 编译后的帮助文件234
10.5.7 在客户端脚本中查找XSS漏洞236
10.6 理解本地计算机区域中的脚本注入攻击237
10.6.1 例子:在Winamp播放列表中的脚本注入237
10.6.2 把非HTML文件当作HTML来解析240
10.7 程序员用于防止HTML脚本攻击的方法243
10.7.1 过滤器243
10.7.2 深入理解浏览器中的解析器245
10.7.3 Style中的注释245
10.7.4 ASP.NET内置的过滤器247
10.8 理解Internet Explorer如何减轻针对本地文件的XSS攻击248
10.8.1 从互联网到本地计算机区域的链接被阻止248
10.8.2 在默认情况下,脚本在本地计算机区域中是禁止运行的248
10.9 识别HTML脚本的脆弱性250
10.10 通过检查代码查找HTML脚本漏洞250
10.10.1 识别所有返回内容给Web浏览器或者文件系统的位置251
10.10.2 确定输出中是否包含攻击者提供的数据251
10.10.3 检查攻击者的数据是否进行了适当的验证或者编码252
10.10.4 ASP.NET自动对数据进行编码253
10.11 小结254
第11章 XML问题255
11.1 测试XML输入文件中的非XML安全问题255
11.1.1 结构良好的XML256
11.1.2 有效的XML257
11.1.3 XML输入中包括非字母数字的数据257
11.2 测试特定的XML攻击260
11.2.1 实体(Entity)260
11.2.2 XML注入(XML Injection)263
11.2.3 大文件引用(Large File Reference)266
11.3 简单对象访问协议(Simple Object Access Protocol)266
11.4 测试技巧271
11.5 小结271
第12章 规范化问题272
12.1 理解规范化问题的重要性272
12.2 查找规范化问题273
12.3 基于文件的规范化问题273
12.3.1 目录遍历274
12.3.2 使文件扩展名检查失效274
12.3.3 导致规范化问题的其他常见错误277
12.4 基于Web的规范化问题282
12.4.1 编码问题282
12.4.2 URL问题287
12.5 测试技巧290
12.6 小结291
第13章 查找弱权限292
13.1 理解权限的重要性293
13.2 查找权限问题294
13.3 理解Windows的访问控制机制295
13.3.1 安全对象295
13.3.2 安全描述符296
13.3.3 ACL296
13.3.4 ACE297
13.4 查找和分析对象的权限298
13.4.1 使用Windows安全属性对话框298
13.4.2 使用AccessEnum300
13.4.3 使用Process Explorer300
13.4.4 使用ObjSD301
13.4.5 使用AppVerifier302
13.5 识别常见的权限问题302
13.5.1 弱自主访问控制列表(DACL)303
13.5.2 NULL DACL307
13.5.3 不恰当的ACE顺序308
13.5.4 对象创建者308
13.5.5 间接访问资源309
13.5.6 忘记恢复原权限309
13.5.7 蹲点(Squatting)攻击310
13.5.8 利用竞争条件311
13.5.9 文件链接312
13.6 确定对象的可访问性315
13.6.1 可远程访问的对象315
13.6.2 本地可访问对象317
13.7 其他的权限考虑318
13.7.1 .NET权限318
13.7.2 SQL权限318
13.7.3 基于角色的安全320
13.8 小结321
第14章 拒绝服务攻击322
14.1 掌握DoS攻击的类型322
14.1.1 查找技术实现缺陷323
14.1.2 查找资源消耗缺陷329
14.1.3 寻找解决严重问题的方法335
14.2 测试技巧336
14.3 小结336
第15章 托管代码问题337
15.1 澄清有关使用托管代码的常见错误认识338
15.1.1 错误认识1:在托管代码中不存在缓冲区溢出338
15.1.2 错误认识2:ASP.NET Web控件可防止跨站脚本339
15.1.3 错误认识3:垃圾回收可以防止内存泄露339
15.1.4 错误认识4:托管代码可防止SQL注入340
15.2 理解代码访问安全的基础340
15.2.1 用户安全和代码安全的比较(User Security vs. Code Security)341
15.2.2 CAS概况341
15.2.3 程序(Assembly)342
15.2.4 物证343
15.2.5 权限343
15.2.6 策略344
15.2.7 全局程序集缓冲区(Global Assembly Cache)348
15.2.8 堆栈审核(Stack Walk)348
15.2.9 堆栈审查修改器(Stack Walk Modifier)350
15.3 使用代码检查方法查找问题352
15.3.1 调用不安全的代码353
15.3.2 查找断言导致的问题355
15.3.3 查找链接查询中的问题357
15.3.4 了解拙劣的异常处理360
15.4 理解使用APTCA带来的问题362
15.5 .NET程序反编译368
15.6 测试技巧368
15.7 小结369
第16章 SQL注入370
16.1 SQL注入的确切含义370
16.2 了解SQL注入的重要性372
16.3 查找SQL注入问题373
16.3.1 利用黑盒测试方法374
16.3.2 利用代码检查385
16.4 避免SQL注入的常见错误387
16.4.1 转义输入中的单引号388
16.4.2 删除分号以阻止多重语句388
16.4.3 只使用存储过程389
16.4.4 删除不必要的存储过程390
16.4.5 将运行SQL Server的计算机安置在防火墙之后390
16.5 理解SQL存储过程的再利用391
16.5.1 示例:备份文档392
16.5.2 搜寻存储过程中的再利用问题393
16.6 识别类似的注入攻击393
16.7 测试技巧394
16.8 小结395
第17章 观察及逆向工程396
17.1 在没有调试器或反汇编工具时的观测结果396
17.1.1 输出比较397
17.1.2 使用监视工具398
17.2 使用调试器跟踪程序的执行并改变其行为399
17.2.1 修改执行流程以旁路限制400
17.2.2 在调试器下读取并修改内存的内容404
17.3 使用反编译器或反汇编工具对一个程序实施逆向工程408
17.3.1 理解二进制本地代码与字节码的区别409
17.3.2 在没有源代码时定位不安全的函数调用411
17.3.3 对算法实施逆向工程以识别安全缺陷415
17.4 分析安全更新417
17.5 测试技巧418
17.6 法律方面的考虑因素419
17.7 小结419
第18章 ActiveX再利用攻击420
18.1 理解ActiveX控件421
18.1.1 在Internet Explorer浏览器中创建ActiveX控件421
18.1.2 ActiveX控件的初始化和脚本解析423
18.1.3 ActiveX控件再利用424
18.1.4 理解ActiveX控件安全模型428
18.1.5 利用ActiveX控件测试方法学434
18.1.6 其他的测试窍门及技术441
18.2 走查(Walkthrough):ActiveX控件测试450
18.2.1 Clear451
18.2.2 ClipboardCopy452
18.2.3 ClipboardPaste453
18.2.4 InvokeRTFEditor455
18.2.5 LoadRTF464
18.2.6 NumChars465
18.2.7 RTFEditor 属性466
18.2.8 RTFEditor PARAM467
18.2.9 RTFEditorOverride468
18.2.10 挑战470
18.3 测试技巧470
18.4 小结471
第19章 其他再利用攻击472
19.1 理解请求外部数据的文档格式472
19.1.1 文档格式请求外部数据的常见的降低风险的方法473
19.1.2 测试请求外部数据的文档格式474
19.2 请求外部数据的Web页面475
19.2.1 通过URL查询字符串进行的CSRF攻击475
19.2.2 通过POST数据进行的CSRF攻击476
19.2.3 防止CSRF攻击的常用方法477
19.2.4 通过SOAP数据进行的CSRF攻击478
19.2.5 对CSRF攻击进行测试479
19.3 理解窗口和线程消息的再利用479
19.4 小结480
第20章 报告安全漏洞481
20.1 报告问题481
20.2 联系开发商482
20.3 期望联系开发商后得到什么484
20.4 公开发布485
20.4.1 确定细节数量485
20.4.2 公开时间选择486
20.5 定位产品中的安全漏洞486
20.5.1 与漏洞发现者联系487
20.5.2 识别漏洞产生的根本原因487
20.5.3 寻找相关的漏洞487
20.5.4 确定受影响的产品及其版本488
20.5.5 测试补丁488
20.5.6 确定减轻措施和相关工作488
20.5.7 为所有受影响的产品及其版本同时发布补丁489
20.6 小结489
附录A 相关工具490
附录B 安全测试用例列表497
……[看更多目录]
序言你可能想知道微软为什么要出版这样一本关于安全测试的书,因为加强软件安全是一件非常困难的事情。当然,微软已经遇到过相当多的软件安全问题,因而有大量的经验供测试人员参考。在2002年可信计算计划被提出之前,我们就已经在微软工作了。自微软实施该计划以来,我们已经看到微软在处理安全问题方面的重大改变。现在,安全问题已经不仅仅是安全专家的职责,已经成为了我们每一个人的责任。这本具有创见性的关于软件安全测试的书,源于我们在微软的工作经验以及为开发出用户购买后能持续安全可靠运行的软件而做出的努力。
应用软件的安全
文摘插图: