内容简介
软件安全问题也许是这个时代面临的*为重要的技术挑战。Web应用程序让业务、社交等网络活动飞速发展,这同时也加剧了它们对软件安全的要求。我们急需建立一个强大的方法来编写和保护我们的互联网、Web应用程序和数据,并基于工程和科学的原则,用一致的、可重复的和定义的方法来测试软件安全问题。本书正是实现这个目标的重要一步,作为一本安全测试指南,详细讲解了Web应用测试的“4W1H”,即“什么是测试”、“为什么要测试”、“什么时间测试”、“测试哪里”以及“如何测试”。本书适合高等院校计算机相关专业师生阅读,也适合广大软件开发人员、测试人员以及所有对软件安全问题感兴趣的读者阅读。
作者简介
OWASP是一个开源的、非盈利的全球性安全组织,致力于应用软件的安全研究,在业界具有一流的影响力和**性。作为OWASP面向中国的区域分支,OWASP中国自2006年正式启动,目前已拥有来自互联网安全专业领域和政府、电信、金融、教育等相关领域的会员近5000个,形成了强大的专业技术实力和行业资源聚集能力,有力推动了共同推动了安全标准、安全测试工具、安全指导手册等应用安全技术在中国的发展,成为了积极推动中国互联网安全技术创新、人才培养和行业发展的中坚力量。作为OWASP中国的运营中心,互联网安全研究中心(Security Zone,简称SecZone)是国内**独立、开源的互联网安全研究机构。中心始终秉持引入、吸收、创新的发展宗旨,专注于互联网安全前沿技术和OWASP项目的深度研究,常年组织开展各类开源培训及沙龙活动,致力于通过对国内外技术、资源的整合、应用和创新,更好地服务业界同仁、服务行业发展,更有力地推动国内互联网安全技术的进步与升级。
目录
第一部分 项目概述及测试框架
第1章 OWASP测试项目 2
1.1 OWASP测试项目概述 2
1.2 测试原则 5
1.3 测试技术说明 9
1.3.1 测试技术说明概述 9
1.3.2 人工检查及复查 9
1.3.3 软件威胁建模 10
1.3.4 代码审查 11
1.3.5 渗透测试 12
1.3.6 需要平衡的测试方法 13
1.3.7 关于Web应用扫描工具的注意事项 14
1.3.8 关于静态源代码复查工具的注意事项 15
1.3.9 安全测试需求推导 15
1.3.10 功能和非功能测试需求 18
1.3.11 安全测试集成于开发与测试工作流程 21
1.3.12 开发人员的安全测试 22
1.3.13 集成系统测试和操作测试 24
1.3.14 安全测试数据分析和报告 25
1.4 OWASP测试项目参考文献 28
第2章 OWASP测试架构 30
2.1 OWASP测试架构概述 30
2.1.1 阶段1:开发前 31
2.1.2 阶段2:设计和定义阶段 31
2.1.3 阶段3:开发阶段 33
2.1.4 阶段4:部署中 33
2.1.5 阶段5:维护和运行 34
2.2 典型SDLC测试流程 34
第二部分 测试方法
第3章 Web应用安全测试 36
3.1 Web应用安全测试概述 36
3.2 什么是OWASP测试方法? 37
第4章 信息收集测试 39
4.1 搜索引擎信息搜集(OTG-INFO-001) 39
4.1.1 信息搜集概述 39
4.1.2 信息搜集测试目标 40
4.1.3 信息搜集测试方法 40
4.2 Web服务器指纹识别(OTG-INFO-002) 42
4.2.1 Web服务器指纹识别概述 42
4.2.2 Web服务器指纹识别测试目标 42
4.2.3 Web服务器指纹识别测试方法 43
4.3 审查Web服务器元文件信息泄露(OTG-INFO-003) 48
4.3.1 审查Web服务器元文件信息泄露概述 48
4.3.2 审查Web服务器元文件信息泄露测试目标 48
4.3.3 审查Web服务器元文件信息泄露测试方法 49
4.4 枚举Web服务器的应用(OTG-INFO-004) 52
4.4.1 枚举Web服务器的应用概述 52
4.4.2 枚举Web服务器的应用测试目标 53
4.4.3 枚举Web服务器的应用测试方法 53
4.5 注释和元数据信息泄露(OTG-INFO-005) 58
4.5.1 注释和元数据信息泄露概述 58
4.5.2 注释和元数据信息泄露测试目标 58
4.5.3 注释和元数据信息泄露测试方法 58
4.6 识别应用的入口(OTG-INFO-006) 60
4.6.1 识别应用的入口概述 60
4.6.2 识别应用的入口测试目标 60
4.6.3 识别应用的入口测试方法 60
4.7 映射应用程序的执行路径(OTG-INFO-007) 62
4.7.1 映射应用程序的执行路径概述 62
4.7.2 映射应用程序的执行路径测试目标 63
4.7.3 映射应用程序的执行路径测试方法 63
4.8 识别Web应用框架(OTG-INFO-008) 64
4.8.1 识别Web应用框架概述 64
4.8.2 识别Web应用框架测试目标 65
4.8.3 识别Web应用框架测试方法 65
4.9 识别Web应用程序(OTG-INFO-009) 69
4.9.1 识别Web应用程序概述 69
4.9.2 识别Web应用程序测试目标 69
4.9.3 识别Web应用程序测试方法 69
4.10 映射应用架构(OTG-INFO-010) 73
4.10.1 映射应用架构概述 73
4.10.2 映射应用架构测试方法 73
4.10.3 防护Web服务器示例 74
4.11 信息收集测试工具 75
4.12 信息收集测试参考文献 81
4.13 信息收集测试加固措施 83
第5章 配置管理测试 87
5.1 网络和基础设施配置测试(OTG-CONFIG-001) 87
5.1.1 网络和基础设施配置测试概述 87
5.1.2 网络和基础设施配置测试方法 88
5.2 应用平台配置测试(OTG-CONFIG-002) 89
5.2.1 应用平台配置测试概述 89
5.2.2 应用平台配置测试方法 89
5.3 敏感信息文件扩展处理测试(OTG-CONFIG-003) 94
5.3.1 敏感信息文件扩展处理测试概述 94
5.3.2 敏感信息文件扩展处理测试方法 95
5.4 对旧文件、备份和未被引用文件的敏感信息的审查(OTG-CONFIG-004) 96
5.4.1 对旧文件、备份和未被引用文件的敏感信息的审查概述 96
5.4.2 对旧文件、备份和未被引用文件的敏感信息产生的威胁 97
5.4.3 对旧文件、备份和未被引用文件的敏感信息的测试方法 98
5.5 枚举基础设施和应用程序管理界面(OTG-CONFIG-005) 101
5.5.1 枚举基础设施和应用程序管理界面概述 101
5.5.2 枚举基础设施和应用程序管理界面测试方法 102
5.6 HTTP方法测试(OTG-CONFIG-006) 103
5.6.1 HTTP方法测试概述 103
5.6.2 任意的HTTP方法 104
5.6.3 HTTP方法测试方法 104
5.7 HTTP强制安全传输测试(OTG-CONFIG-007) 108
5.7.1 HTTP强制安全传输测试概述 108
5.7.2 HTTP强制安全传输测试方法 108
5.8 RIA跨域策略测试(OTG-CONFIG-008) 109
5.8.1 RIA跨域策略测试概述 109
5.8.2 跨域策略测试方法 110
5.9 配置部署管理测试工具 111
5.10 配置部署管理测试参考文献 113
5.11 配置部署管理测试加固措施 116
第6章 身份管理测试 117
6.1 角色定义测试(OTG-IDENT-001) 117
6.1.1 角色定义测试概述 117
6.1.2 角色定义测试目标 117
6.1.3 角色定义测试方法 118
6.2 用户注册流程测试(OTG-IDENT-002) 118
6.2.1 用户注册流程测试概述 118
6.2.2 用户注册流程测试目标 118
6.2.3 用户注册流程测试方法 119
6.3 账户配置过程测试(OTG-IDENT-003) 120
6.3.1 账户配置过程测试概述 120
6.3.2 账户配置过程测试测试目标 120
6.3.3 账户配置过程测试测试方法 120
6.4 账户枚举和可猜测的用户账户测试(OTG-IDENT-004) 121
6.4.1 账户枚举和可猜测的用户账户测试概述 121
6.4.2 账户枚举和可猜测的用户账户测试方法 122
6.5 弱的或未实施的用户策略测试(OTG-IDENT-005) 126
6.5.1 弱的或未实施的用户策略测试概述 126
6.5.2 弱的或未实施的用户策略测试目标 126
6.5.3 弱的或未实施的用户策略测试方法 126
6.6 身份管理测试工具 126
6.7 身份管理测试参考文献 127
6.8 身份管理测试加固措施 128
第7章 认证测试 129
7.1 凭证在加密通道中的传输测试(OTG-AUTHN-001) 129
7.1.1 凭证在加密通道中的传输测试概述 129
7.1.2 凭证在加密通道中的传输测试方法 130
7.2 默认用户凭证测试(OTG-AUTHN-002) 133
7.2.1 默认用户凭证测试概述 133
7.2.2 默认用户凭证测试方法 133
7.3 弱锁定机制测试(OTG-AUTHN-003) 136
7.3.1 弱锁定机制测试概述 136
7.3.2 弱锁定机制测试目标 136
7.3.3 弱锁定机制测试方法 136
7.4 认证模式绕过测试(OTG-AUTHN-004) 138
7.4.1 认证模式绕过测试概述 138
7.4.2 认证模式绕过测试方法 138
7.5 记忆密码功能存在威胁测试(OTG-AUTHN-005) 142
7.5.1 记忆密码功能存在威胁测试概述 142
7.5.2 记忆密码功能存在威胁测试方法 143
7.6 浏览器缓存威胁测试(OTG-AUTHN-006) 143
7.6.1 浏览器缓存威胁测试概述 143
7.6.2 浏览器缓存威胁测试方法 144
7.7 弱密码策略测试(OTG-AUTHN-007) 145
7.7.1 弱密码策略测试概述 145
7.7.2 弱密码策略测试目标 145
7.7.3 弱密码策略测试方法 146
7.8 弱安全问答测试(OTG-AUTHN-008) 146
7.8.1 弱安全问答测试概述 146
7.8.2 弱安全问答测试方法 147
7.9 弱密码的更改或重设功能测试(OTG-AUTHN-009) 148
7.9.1 弱密码的更改或重设功能测试概述 148
7.9.2 弱密码的更改或重设功能测试目标 148
7.9.3 弱密码的更改或重设功能测试方法 148
7.10 在辅助信道中较弱认证测试(OTG-AUTHN-010) 150
7.10.1 在辅助信道中较弱认证测试概述 150
7.10.2 在辅助信道中较弱认证测试示例 151
7.10.3 在辅助信道中较弱认证测试方法 151
7.10.4 关联的测试用例 152
7.11 认证测试工具 152
7.12 认证测试参考文献 153
7.13 认证测试加固措施 155
第8章 授权测试 156
8.1 目录遍历/文件包含测试(OTG-AUTHZ-001) 156
8.1.1 目录遍历/文件包含测试概述 156
8.1.2 目录遍历/文件包含测试方法 157
8.2 绕过授权模式测试(OTG-AUTHZ-002) 160
8.2.1 绕过授权模式测试概述 160
8.2.2 绕过授权模式测试方法 161
8.3 权限提升测试(OTG-AUTHZ-003) 161
8.3.1 权限提升测试概述 161
8.3.2 权限提升测试方法 162
8.4 不安全对象引用测试(OTG-AUTHZ-004) 163
8.4.1 不安全对象引用测试概述 163
8.4.2 不安全对象引用测试方法 163
8.5 授权测试工具 165
8.6 授权测试参考文献 165
8.7 授权测试加固措施 166
第9章 会话管理测试 167
9.1 会话管理架构绕过测试(OTG-SESS-001) 167
9.1.1 会话管理架构绕过测试概述 167
9.1.2 会话管理架构绕过测试方法 168
9.2 Cookie属性测试(OTG-SESS-002) 173
9.2.1 Cookie属性测试概述 173
9.2.2 Cookie属性测试方法 175
9.3 会话固化测试(OTG-SESS-003) 176
9.3.1 会话固化测试概述 176
9.3.2 会话固化测试方法 176
9.4 会话变量泄露测试(OTG-SESS-004) 178
9.4.1 会话变量泄露测试概述 178
9.4.2 会话变量泄露测试方法 178
9.5 跨站伪造请求(CSRF)测试(OTG-SESS-005) 181
9.5.1 跨站伪造请求(CSRF)测试概述 181
9.5.2 跨站伪造请求(CSRF)测试方法 184
9.6 会话管理测试工具 185
9.7 会话管理测试参考文献 186
9.8 会话管理测试加固措施 188
第10章 输入验证测试 190
10.1 反射型跨站脚本测试(OTG-INPVAL-001) 190
10.1.1 反射型跨站脚本测试概述 190
10.1.2 反射型跨站脚本测试方法 191
10.2 存储型跨站脚本测试(OTG-INPVAL-002) 195
10.2.1 存储型跨站脚本测试概述 195
10.2.2 存储型跨站脚本测试方法 196
10.3 HTTP方法篡改测试(OTG-INPVAL-003) 200
10.3.1 HTTP方法篡改测试概述 200
10.3.2 方法篡改测试方法 201
10.4 HTTP参数污染测试(OTG-INPVAL-004) 203
10.4.1 参数污染测试概述 203
10.4.2 参数污染测试方法 205
10.5 SQL注入测试(OTG-INPVAL-005) 207
10.5.1 SQL注入测试概述 207
10.5.2 注入测试方法 208
10.6 LDAP测试(OTG-INPVAL-006) 245
10.6.1 LDAP测试概述 245
10.6.2 LDAP测试方法 246
10.7 ORM注入测试(OTG-INPVAL-007) 247
10.7.1 ORM注入测试概述 247
10.7.2 ORM注入测试方法 247
10.8 XML注入测试(OTG-INPVAL-008) 248
10.8.1 XML注入测试概述 248
10.8.2 XML注入测试方法 248
10.8.3 发现漏洞 250
10.9 SSI注入测试(OTG-INPVAL-009) 255
10.9.1 SSI注入测试概述 255
10.9.2 SSI注入测试方法 256
10.10 XPath注入测试(OTG-INPVAL-010) 257
10.10.1 XPath注入测试概述 257
10.10.2 XPath注入测试方法 258
10.11 IMAP/SMTP注入测试(OTG-INPVAL-011) 259
10.11.1 IMAP/SMTP注入测试概述 259
10.11.2 IMAP/SMTP注入测试方法 260
10.12 代码注入测试(OTG-INPVAL-012) 263
10.12.1 代码注入测试概述 263
10.12.2 代码注入测试方法 264
10.13 命令注入测试(OTG-INPVAL-013) 266
10.13.1 命令注入测试概述 266
10.13.2 命令注入测试方法 267
10.14 缓冲区溢出测试(OTG-INPVAL-014) 269
10.14.1 缓冲区溢出测试概述 269
10.14.2 缓冲区溢出测试方法 269
10.15 潜伏式漏洞测试(OTG-INPVAL-015) 278
10.15.1 潜伏式漏洞测试概述 278
10.15.2 潜伏式漏洞测试方法 279
10.16 HTTP拆分/走私测试(OTG-INPVAL-016) 281
10.16.1 HTTP拆分/走私测试概述 281
10.16.2 HTTP拆分/走私测试方法 282
10.17 输入验证测试工具 285
10.18 输入验证测试参考文献 290
10.19 输入验证测试加固措施 297
第11章 错误处理测试 300
11.1 报错信息测试(OTG-ERR-001) 300
11.1.1 报错信息测试概述 300
11.1.2 报错信息测试方法 302
11.2 堆栈轨迹测试(OTG-ERR-002) 305
11.2.1 堆栈轨迹测试概述 305
11.2.2 堆栈轨迹测试方法 306
11.3 错误处理测试工具 306
11.4 错误处理测试参考文献 307
11.5 错误处理测试加固措施 307
?
第12章 加密体系脆弱性测试 310
12.1 SSL/TLS弱加密、传输层协议缺陷测试(OTG-CRYPST-001) 310
12.1.1 SSL/TLS弱加密、传输层协议缺陷测试概述 310
12.1.2 SSL/TLS弱加密、传输层协议缺陷测试方法 313
12.2 Padding Oracle攻击测试(OTG-CRYPST-002) 342
12.2.1 Padding Oracle攻击测试概述 342
12.2.2 Padding Oracle攻击测试方法 343
12.3 通过未加密信道发送敏感数据测试(OTG-CRYPST-003) 344
12.3.1 通过未加密信道发送敏感数据测试概述 344
12.3.2 通过未加密信道发送敏感数据测试方法 345
12.4 加密体系脆弱性测试工具 347
12.5 加密体系脆弱性参考文献 348
12.6 加密体系脆弱性加固措施(无) 351
第13章 业务逻辑测试 352
13.1 业务逻辑数据验证测试(OTG-BUSLOGIC-001) 354
13.1.1 业务逻辑数据验证测试概述 354
13.1.2 业务逻辑数据验证测试示例 355
13.1.3 业务逻辑数据验证测试方法 355
13.2 伪造请求的测试(OTG-BUSLOGIC-002) 356
13.2.1 伪造请求的测试概述 356
13.2.2 伪造请求的测试示例 357
13.2.3 伪造请求的测试方法 357
13.3 完整性检查测试(OTG-BUSLOGIC-003) 358
13.3.1 完整性检查测试概述 358
13.3.2 完整性检查测试示例 359
13.3.3 完整性检查测试方法 359
13.4 处理耗时测试(OTG-BUSLOGIC-004) 360
13.4.1 处理耗时测试概述 360
13.4.2 处理耗时测试示例 361
13.4.3 处理耗时测试方法 361
13.5 功能使用次数限制(OTG-BUSLOGIC-005) 361
13.5.1 功能使用次数限制概述 361
13.5.2 功能使用次数限制示例 362
13.5.3 功能使用次数限制测试方法 362
?
13.6 工作流程逃逸的测试(OTG-BUSLOGIC-006) 362
13.6.1 工作流程逃逸的测试概述 362
13.6.2 工作流程逃逸的测试示例 363
13.6.3 工作流程逃逸的测试方法 363
13.7 防御应用程序滥用测试(OTG-BUSLOGIC-007) 364
13.7.1 防御应用程序滥用测试概述 364
13.7.2 防御应用程序滥用测试示例 364
13.7.3 防御应用程序滥用测试方法 365
13.8 意外文件类型上传测试(OTG-BUSLOGIC-008) 366
13.8.1 意外文件类型上传测试概述 366
13.8.2 意外文件类型上传测试示例 367
13.8.3 意外文件类型上传测试方法 367
13.9 恶意文件上传测试(OTG-BUSLOGIC-009) 367
13.9.1 恶意文件上传测试概述 367
13.9.2 恶意文件上传测试示例 368
13.9.3 恶意文件上传测试方法 368
13.10 业务逻辑测试工具 369
13.11 业务逻辑测试参考文献 371
13.12 业务逻辑测试加固措施 376
第14章 客户端测试 378
14.1 基于DOM的跨站脚本测试(OTG-CLIENT-001) 378
14.1.1 基于DOM的跨站脚本测试概述 378
14.1.2 基于DOM的跨站脚本的测试方法 378
14.2 JavaScript执行测试(OTG-CLIENT-002) 381
14.2.1 JavaScript执行测试概述 381
14.2.2 JavaScript执行测试方法 381
14.3 HTML注入测试(OTG-CLIENT-003) 382
14.3.1 HTML注入测试概述 382
14.3.2 HTML注入测试方法 382
14.4 客户端URL重定向测试(OTG-CLIENT-004) 384
14.4.1 客户端URL重定向测试概述 384
14.4.2 客户端URL重定向测试方法 384
14.5 CSS注入测试(OTG-CLIENT-005) 385
14.5.1 CSS注入测试概述 385
14.5.2 CSS注入测试方法 386
14.6 客户端资源处理测试(OTG-CLIENT-006) 388
14.6.1 客户端资源处理测试概述 388
14.6.2 客户端资源处理测试方法 388
14.7 跨源资源共享测试(OTG-CLIENT-007) 390
14.7.1 跨源资源共享测试概述 390
14.7.2 跨源资源共享测试方法 391
14.8 跨站Flash测试(OTG-CLIENT-008) 395
14.8.1 跨站Flash测试概述 395
14.8.2 跨站Flash测试方法 395
14.9 点击劫持测试(OTG-CLIENT-009) 401
14.9.1 点击劫持测试概述 401
14.9.2 点击劫持测试方法 402
14.10 WebSockets测试(OTG-CLIENT-010) 411
14.10.1 WebSockets测试概述 411
14.10.2 WebSockets测试方法 412
14.11 Web消息测试(OTG-CLIENT-011) 414
14.11.1 Web消息测试概述 414
14.11.2 Web消息测试方法 415
14.12 本地存储测试(OTG-CLIENT-012) 417
14.12.1 本地存储测试概述 417
14.12.2 本地存储测试方法 417
14.13 客户端测试工具 419
14.14 客户端测试参考文献 421
14.15 客户端测试加固措施 425
第三部分 测试报告
第15章 报告 428
附录A 测试工具 430
附录B 推荐读物 439
附录C 模糊测试向量 444
附录D 编码注入 452
附录E 测试项列表 455
前言/序言
序1
软件安全问题也许是我们这个时代最为重要的技术挑战。Web应用程序实现了业务、社交网络等网络活动的飞速发展,同时也加剧了对软件安全的要求。我们急需建立一个强大的方案来编写和保护我们的互联网、Web应用程序和数据。
OWASP团队努力使安全的软件成为这个世界上正常、规范的产品,而这份OWASP测试指南正是实现这个目标的重要一步。重要的是,我们用来测试软件安全问题的方法是基于工程和科学的原则。我们需要一个一致的、可重复的和定义的方法来测试Web应用程序。而一个没有工程和技术的最低标准的世界将是一个混乱的世界。
毫无疑问,没有进行安全测试就无法建立一个安全的应用程序。测试是建立一个安全的系统使用的广泛措施的一部分。然而,许多软件开发组织的标准软件开发流程中却并不包含安全测试这一步骤。更糟的是,许多安全厂商提供了不同程度的质量和要求的测试。
由于攻击者能够利用无数种方法来攻破应用程序,而安全测试不可能测试全部的攻击方法,所以安全测试其自身并非是衡量应用安全最有效的方法。我们只有有限的时间来测试和捍卫软件安全,而攻击者却没有这样的限制,所以我们不能自己降低对安全的要求。
结合使用其他OWASP项目文档,如《代码审查指南》《开发指南》和类似OWASP ZAP的工具,是建立和维护安全的应用程序的一个好的开始。《开发指南》将告诉你如何设计和构建安全的应用程序,《代码审查指南》将告诉你如何验证应用程序源代码的安全性,而《安全测试指南》将告诉你如何验证正在运行的应用程序的安全性。我强烈推荐使用这些指南作为应用程序安全性验证的一部分。
为什么选择OWASP
创建一本这样的指南是一份艰巨的工作,因为它汇集了数百位世界各地的专家的专业技能才得以完成。测试安全漏洞有许多不同的方式,但是这本指南却在怎样快捷、准确、有效地测试方面获得了权威人士的一致认可。志同道合的安全专家们在OWASP团队中一起工作,构建了安全问题的领先实践方法。
安全不应该躲在暗处,只有少数人可以操作。它应该是向所有人开放,例如QA人员、开发人员和技术管理人员,而不只是专用于安全从业人员。建立这个指南的目的是让需要它的人——你、我和参与构建软件的任何人能掌握这些专业知识。
这本指南必须要在开发者和软件测试者中推广。因为世界上没有足够的应用安全专家来对所有问题做出重要建议。而应用安全最开始的责任肯定是落在软件开发者的肩上,因为他们负责代码的编写。如果开发者没有对软件进行测试,或者在编写时没有考虑可能导致漏洞的Bug,那么他是不能编写出安全的代码的。
保证信息及时更新对这本指南至关重要。通过采用Wiki 方式,OWASP团队能逐渐发展和扩大这本指南中的信息,以跟上快速发展的应用安全威胁的步伐。
本指南很好地证明了OWASP成员和项目志愿者的激情和能量,而这也必将小小地改变世界。
裁剪和优先级
这本指南可以通过裁剪来适用于组织的技术、流程及组织架构。一般在组织中有几个不同的角色会使用到本指南。
● 开发人员:使用本指南以确保编写出安全的代码。这些测试应该是正常的编码和单元测试计划的一部分。
● 软件测试和QA人员:使用本指南以扩充应用程序的测试组,尽早发现这些漏洞,将为以后节省大量的时间和精力。
● 安全专家:结合使用本指南与其他技术指南,作为一种确认方式,以确保应用程序中没有被忽略的安全漏洞。
● 项目经理:思考本指南存在的原因,以及发现在代码和设计缺陷中显现的安全问题。
切记执行安全测试时,要不断调整优先级。因为有无数种可能都会导致应用程序失败,而组织的测试时间和资源是有限的。所以用有限的时间和资源来关注真正的安全漏洞风险业务,以及研究应用风险和其产生的条件是非常明智的做法。
本指南可以看作一组技术,我们可以用它们来寻找不同类型的安全漏洞。但并不是所有的技术同样重要。请尽量避免将本指南作为核对清单来使用,因为新的漏洞总会出现,没有任何指南可以穷尽测试的方法。但是,使用这本指南将是一个好的开始。
自动化工具的作用
有许多公司销售自动化安全分析工具和测试工具,但是这些工具是有局限性的,需要将它们用在恰当的地方。正如迈克尔?霍华德在2006年OWASP西雅图AppSec峰会上所说:“工具不会让软件安全!它们只是去规范过程和加强政策。”
重点是这些工具是通用的。也就是说,它们不是专门为自定义代码,而是为了一般的应用程序而开发设计的。这意味着它们可以找到一些通用的问题,但是它们没有足够的应用程序知识来检测大多数缺陷。根据经验,最严重的安全问题是那些非通用的、深深交织在一起的业务逻辑和定制应用程序设计。
但是这些工具也是有用处的,它们确实发现了很多潜在的问题。运行这些工具并不需要太多时间,但是每一个潜在的问题都需要时间调查和验证。如果我们的目标是尽快找到并消除最严重的缺陷,就最好考虑是否使用自动化工具或采用本指南中所述的技术来检测。另外,这些工具也是一个平衡的应用程序安全计划的一部分,如果使用得当,它们可以支持整个流程,以产生更安全的代码。
行动呼吁
如果你正在构建、设计或测试软件,我强烈建议你熟悉本书中的安全性测试指导。这是一个很好的关于今天面临的最常见应用程序问题的测试汇总,但它并不详尽。如果发现错误,请联系我们修改。这将帮助成千上万使用本指南的人。
欢迎任何一个个人或公司加入我们,这样我们才能继续创建像《安全测试指南》和其他OWASP项目的一样的成果。
感谢所有的在过去和未来为这份指南做出贡献的人们。你们的努力将推进并加强全球应用程序的安全性的发展。
Eoin Keary
OWASP董事会成员
2013年4月19日
序2
1)OWASP的宗旨:开放、协同的知识管理
在第4版OWASPS测试指南中,我们创建了一个新的测试指南,它将成为指导大家执行Web应用渗透测试的事实标准。
——Matteo Meucci
OWASP感谢每一位作者、审稿者和编辑的努力,正是他们的辛勤工作才让测试指南成为今天这个样子。如果你有任何关于本测试指南的意见或建议,请发电子邮件到以下邮箱:
http://lists.owasp.org/mailman/listinfo/owasp-testing
或者直接发邮件给本指南的负责人Andrew Muller 和Matteo Meucci。
2)第4版OWASP测试指南
相比第3版,第4版OWASP测试指南在以下3个方面进行了改进:
①本版测试指南集成了OWASP的其他两个重要文档交付件《开发者指南》和《代码审查指南》。为了做到这一点,我们重新编排了测试类别和测试编号,以便与其他OWASP文档交付件保持一致。《测试指南》和《代码审查指南》的目的是评估《开发者指南》中所描述的安全控件是否达到了要求。
②对所有章节都进行了改进,并将测试用例数量扩展到87个(第3版只有64个),新增以下4个章节的介绍:
? 身份管理测试
? 错误处理
? 密码
? 客户端测试
③在这个版本的测试指南中,我们不仅鼓励有关机构和团体简单地接受本指南所列的测试用例,还鼓励安全测试人员与其他软件测试人员一起设计用于具体测试目标的有针对性的测试用例。如果发现了具有更广泛适用性的测试用例,我们鼓励安全机构和团体将它们分享出来,以完善本测试指南。这将有助于持续构建应用安全知识体系,使本测试指南的开发成为不断迭代的而不是单向的过程。
3)历史修订
第4 版《测试指南》发布于2014 年。OWASP的测试指南于2003年首次发布,Dan Cuthbert 作为最初的编辑之一参与其中。于2005年移交给Eoin Keary 并转变成Wiki 超文本系统。之后,Matteo Meucci 接管了本测试指南,现在是OWASP 测试指南项目负责人。从2012年起Andrew Muller协助Matteo Meucci领导这个项目。
? 2014年OWASP测试指南第4版
? 2008年9月15日OWASP测试指南第3版
? 2006年12月25日OWASP测试指南第2版
? 2004 年12 月OWASP测试指南第1版
? 2004 年7月14日 OWASP WEB应用安全渗透检查表第1.1版
项目领导
? Andrew Muller:从2013年开始领导OWASP测试指南项目
? Matteo Meucci:从2007年开始领导OWASP测试指南项目
? Eoin Keary:2005—2007年领导OWASP测试指南项目
? Daniel Cuthbert:2003—2005年领导OWASP测试指南项目
中文版说明
本书为“OWASP Testing Guide V4.0”的中文版。该版本尽量提供原英文版本中的图片,并与原版本保持相同的风格。存在的差异,敬请谅解。
感谢OWASP中国及SecZone自2008年OWASP Testing Guide V3.0发布以来 ,对该项目持续的跟进、翻译研究分享。同时 ,也对该项目的参与人员表示感谢 。
如果您有关于本书的任何意见或建议,可以通过以下方式联系我们:
电话:4000-983-183
邮箱:cwasp@seczone.org
《安全测试指南(第4版)》 前言 在快速迭代的技术浪潮中,信息安全已不再是可选项,而是企业生存与发展的基石。随着数字资产的价值日益凸显,攻击者的手段也愈发狡猾和多样化,传统的安全防护措施已显不足。因此,掌握系统性的安全测试方法,识别并弥合潜在的漏洞,已成为每一位信息安全从业者、软件开发者乃至企业决策者的必修课。 《安全测试指南(第4版)》正是基于这一深刻的洞察,为广大读者提供了一套全面、权威且实用的安全测试解决方案。本书凝聚了业内顶尖专家的丰富经验和前沿理念,旨在帮助读者构建一个 robust 的安全测试框架,从而在软件生命周期的各个阶段有效应对安全威胁。 本书的第四版,是在前几版基础上的一次深度升级与优化。我们不仅紧跟最新的安全技术趋势和攻击向量,更重要的是,我们将抽象的安全概念落地,通过大量的案例分析、实操步骤和工具介绍,让读者能够真正掌握安全测试的核心技能。我们深知,理论的学习固然重要,但缺乏实践的指导,一切都将是纸上谈兵。因此,本书将理论与实践紧密结合,力求为读者提供一条清晰的学习路径,使其能够从入门到精通,逐步成为一名优秀的安全测试工程师。 在本书的撰写过程中,我们始终秉持着“读者至上”的原则。我们力求用清晰、准确的语言,避免晦涩难懂的专业术语,以便不同背景的读者都能轻松理解。同时,我们注重内容的逻辑性和条理性,确保读者能够循序渐进地掌握知识。我们相信,通过阅读本书,您将不仅提升个人的专业技能,更能为您的组织构建起一道坚实的安全屏障。 第一部分:安全测试基础与策略 第一章:信息安全概述与测试的重要性 本章将从宏观视角出发,为读者构建对信息安全的基本认知。我们将探讨信息安全的核心要素,包括机密性(Confidentiality)、完整性(Integrity)和可用性(Availability),并阐述在当前数字化时代,为何信息安全如此重要。我们将深入分析各类安全威胁的来源、动机以及它们可能造成的破坏,从数据泄露、服务中断到声誉损害,让读者充分认识到安全漏洞的潜在危害。 紧接着,本章将重点阐述安全测试在整个软件生命周期中的关键作用。我们不仅会介绍传统的开发模式(如瀑布模型)下的安全测试点,更会着重讲解在敏捷开发(Agile Development)和DevOps等现代开发模式下,如何将安全测试融入持续集成/持续部署(CI/CD)流程,实现“左移”(Shift-Left)安全。我们将解释为何在早期发现并修复安全漏洞比在后期更为经济和高效,并讨论安全测试如何帮助企业满足合规性要求(如GDPR、PCI DSS等)以及建立客户信任。 第二章:安全测试的原则、方法与流程 本章将深入剖析安全测试的核心原则,为读者打下坚实的理论基础。我们将讲解“以攻为守”的安全测试哲学,强调模拟真实攻击者思维的重要性。此外,还会介绍诸如最小权限原则、纵深防御原则等在安全设计与测试中至关重要的概念。 接下来,我们将详细介绍多种主流的安全测试方法。这包括: 静态应用安全测试(SAST): 讲解其原理,即在不运行代码的情况下,通过分析源代码或字节码来发现潜在的安全漏洞,例如SQL注入、跨站脚本(XSS)等。我们将介绍SAST工具的工作方式以及如何有效解读其扫描结果。 动态应用安全测试(DAST): 阐述其原理,即在应用程序运行时,模拟外部攻击者进行探测,发现运行时存在的安全缺陷,例如身份验证绕过、信息泄露等。我们将探讨DAST工具如何与应用程序交互,以及其局限性。 交互式应用安全测试(IAST): 介绍IAST技术如何结合SAST和DAST的优点,在应用程序运行时,通过 instrument 代码来检测漏洞,并提供更精确的漏洞位置和上下文信息。 软件组成分析(SCA): 讲解SCA在识别开源组件中的已知漏洞(CVE)以及管理许可证风险方面的作用,特别是在依赖日益复杂的现代软件开发中。 渗透测试(Penetration Testing): 详细阐述渗透测试的定义、目标、范围以及不同类型的渗透测试(如黑盒、白盒、灰盒)。我们将介绍渗透测试的典型流程,从侦察、漏洞扫描、漏洞利用到权限提升和后渗透活动。 本章还将梳理一套标准化的安全测试流程,从测试前的准备工作(如需求分析、风险评估),到测试执行过程中的漏洞识别、验证和报告,再到测试后的漏洞修复跟踪和复测。我们将强调团队协作、持续改进以及与开发团队的有效沟通在整个流程中的关键作用。 第三章:安全测试的工具与环境搭建 为了将理论付诸实践,本章将聚焦于安全测试所需的工具和环境。我们将介绍各种类型安全测试工具的特点、适用场景以及优缺点,并提供具体的工具选型建议。 Web应用安全扫描工具: 如Burp Suite、OWASP ZAP、Acronynous等,详细介绍其功能,包括代理、扫描、爬取、fuzzing、注入检测等。 网络漏洞扫描器: 如Nmap、Nessus、OpenVAS等,用于识别网络层面的漏洞,如开放端口、弱密码、已知服务漏洞等。 代码审计工具: 介绍静态代码分析工具,用于帮助开发者在代码层面发现潜在的安全隐患。 漏洞利用框架: 如Metasploit Framework,讲解其在验证漏洞、模拟攻击过程中的强大能力。 密码破解工具: 如Hashcat、John the Ripper,用于测试密码强度和破解弱密码。 流量分析工具: 如Wireshark,用于捕获和分析网络流量,发现潜在的数据泄露或恶意活动。 除了工具介绍,本章还将指导读者如何搭建一个安全测试环境。这可能包括: 虚拟机(VM)和容器(Container)的使用: 如何利用VMware、VirtualBox、Docker等技术创建独立的、隔离的测试环境,避免影响生产系统。 搭建靶场(Lab): 介绍如何配置包含各种操作系统、服务和应用程序的模拟网络环境,用于安全测试和学习。 配置必要的网络设备和代理: 说明如何设置网络连接、代理服务器以实现对目标应用程序的有效测试。 操作系统和常用工具的安装配置: 提供Linux(如Kali Linux)等安全测试常用操作系统的安装与基础配置指南,以及常用安全工具的安装与更新方法。 第二部分:Web应用安全测试 第四章:Web应用常见漏洞原理与检测 本章将深入探讨Web应用程序中最常见的安全漏洞,为读者提供详尽的原理分析和检测方法。我们将遵循OWASP Top 10等行业标准,系统性地讲解各类漏洞。 注入漏洞(Injection Flaws): SQL注入(SQL Injection): 详细解释SQL注入的原理,包括如何利用不安全的输入验证、拼接SQL语句导致的代码执行。我们将演示不同的SQL注入类型(如联合查询注入、盲注、带外注入)以及如何使用工具(如sqlmap)进行检测和利用。 命令注入(Command Injection): 说明如何利用应用程序执行操作系统命令,以及相关的绕过技巧。 XPath注入/LDAP注入: 探讨针对XML解析器和LDAP目录服务的注入攻击。 跨站脚本(Cross-Site Scripting, XSS): 讲解存储型XSS、反射型XSS和DOM型XSS的区别与原理。我们将展示如何通过检测输入输出的过滤情况,以及如何利用XSS漏洞窃取用户Cookie、进行钓鱼攻击等。 身份验证与会话管理漏洞(Broken Authentication and Session Management): 弱密码和暴力破解: 分析常见密码策略的缺陷,以及如何使用工具进行暴力破解。 会话固定(Session Fixation): 解释攻击者如何强制用户使用某个固定的会话ID。 不安全的会话处理: 如过长的会话超时、明文传输会话ID等。 认证绕过: 探讨绕过登录机制的各种技术。 敏感信息泄露(Sensitive Data Exposure): 讲解如何在传输(如HTTP)或存储(如数据库、日志文件)过程中泄露敏感信息,如用户凭证、个人身份信息、支付信息等。我们将介绍如何检查HTTPS配置、加密算法以及敏感数据存储的安全性。 XML外部实体(XML External Entities, XXE): 阐述XXE漏洞的原理,即XML解析器在解析XML文档时,错误地处理了外部实体引用,可能导致文件读取、SSRF等攻击。 访问控制漏洞(Broken Access Control): 不安全的直接对象引用(Insecure Direct Object References, IDOR): 讲解如何通过修改URL参数或请求体中的标识符来访问未经授权的数据。 功能级访问控制失效: 探讨用户绕过权限检查,访问管理员功能或执行未经授权的操作。 安全配置错误(Security Misconfiguration): 涵盖Web服务器、应用服务器、数据库、框架和自定义代码等各个层面可能存在的配置错误,如默认凭证、不必要的服务、过时的组件、详细的错误信息泄露等。 跨站请求伪造(Cross-Site Request Forgery, CSRF): 解释CSRF攻击的原理,即诱导用户在已登录状态下,向目标网站发送非本意的请求。我们将讨论如何检测和防御CSRF攻击(如使用CSRF Token)。 使用含有已知漏洞的组件(Using Components with Known Vulnerabilities): 强调使用过时的、存在已知安全漏洞的第三方库、框架和组件的风险,并介绍如何通过SCA工具进行检测。 第五章:Web应用渗透测试实战 本章将理论与实践相结合,通过详细的案例分析和步骤演示,引导读者进行真实的Web应用渗透测试。 信息收集与侦察(Reconnaissance): 被动侦察: 利用搜索引擎(如Google Hacking)、Whois查询、DNS信息查询、社交媒体等手段,收集目标网站的公开信息。 主动侦察: 使用Nmap扫描目标IP地址和端口,识别开放的服务及其版本。使用目录爆破工具(如Dirb、Gobuster)发现隐藏的目录和文件。 漏洞扫描与分析: 使用自动化扫描工具: 介绍如何配置和运行Burp Suite、OWASP ZAP等工具,进行全面的Web应用扫描。 手动验证与深入分析: 讲解如何结合自动化扫描结果,进行手动复核和深入分析,识别误报并挖掘自动化工具未能发现的漏洞。 漏洞利用与权限提升: 利用SQL注入: 演示如何利用SQL注入获取数据库信息、绕过认证,甚至执行任意命令。 利用XSS: 展示如何通过XSS窃取用户Session、进行钓鱼攻击,或作为进一步攻击的跳板。 利用文件上传漏洞: 讲解如何上传恶意文件(如Web Shell),获取服务器控制权。 利用SSRF(Server-Side Request Forgery): 演示如何利用SSRF攻击内网服务,访问内部资源,甚至进行端口扫描。 利用反序列化漏洞: 探讨Java、PHP等语言中常见的反序列化漏洞,以及如何利用其执行任意代码。 后渗透活动(Post-Exploitation): 信息收集(内部): 在获得初步控制权后,如何进一步收集目标服务器和内部网络的信息。 权限维持(Persistence): 讲解如何通过创建后门、计划任务等方式,确保在服务器重启后仍能保持访问。 横向移动(Lateral Movement): 演示如何利用已获得的凭证或漏洞,在内部网络中进一步渗透,获取更高权限或更多目标。 漏洞报告撰写: 强调编写清晰、准确、可操作的漏洞报告的重要性。报告应包含漏洞描述、影响、复现步骤、截图以及详细的修复建议。 第三部分:网络与系统安全测试 第六章:网络协议安全与扫描 本章将聚焦于网络层面的安全测试,重点关注常见网络协议的潜在安全风险及其检测方法。 TCP/IP协议栈安全: 端口扫描技术: 详细介绍各种端口扫描方法,如SYN扫描(半开放扫描)、Connect扫描、UDP扫描、ACK扫描等,及其优缺点和应用场景。 服务识别与版本探测: 讲解如何利用Nmap等工具识别目标主机上运行的服务及其具体版本,为后续的漏洞利用提供信息。 TTL(Time To Live)和窗口大小(Window Size)分析: 介绍如何利用这些信息来推断操作系统类型。 常见网络协议的安全性: HTTP/HTTPS: 除了Web应用层的安全,还将关注HTTP协议本身的弱点,如明文传输、不安全的请求方法等,以及HTTPS的配置安全性(如TLS/SSL版本、加密套件)。 SSH(Secure Shell): 讨论SSH弱密码、不安全的配置(如root登录、禁用密钥认证)以及SSH隧道的使用。 FTP/SFTP: 讲解FTP的明文传输风险,以及SFTP的安全性优势。 SMB/CIFS: 探讨Windows文件共享协议存在的常见漏洞,如匿名访问、弱密码认证。 DNS(Domain Name System): 介绍DNS劫持、DNS缓存投毒等攻击,以及如何测试DNS服务器的安全性。 DHCP(Dynamic Host Configuration Protocol): 讲解DHCP欺骗和中间人攻击。 网络扫描工具与实践: Nmap深入使用: 演示Nmap的高级脚本引擎(NSE)功能,如何使用脚本进行漏洞探测、服务版本探测、系统类型识别等。 Wireshark流量分析: 讲解如何使用Wireshark捕获和分析网络流量,识别明文传输的敏感信息、异常的网络行为以及潜在的攻击流量。 IDS/IPS(入侵检测/防御系统)的绕过与检测: 简要介绍IDS/IPS的工作原理,以及测试过程中如何避免触发警报。 第七章:操作系统安全加固与漏洞扫描 本章将侧重于对操作系统层面的安全测试,包括常见操作系统(Windows, Linux)的安全配置、漏洞检测与加固。 操作系统安全基础: 用户与权限管理: 讲解操作系统中用户、组、权限的概念,以及如何进行精细化的权限控制。 文件系统安全: 讨论文件和目录的访问权限设置,以及特殊文件(如日志文件、配置文件)的保护。 服务管理: 介绍如何安全地管理和配置系统中运行的服务,禁用不必要的服务以减少攻击面。 补丁管理: 强调及时更新操作系统和应用程序补丁的重要性,以及如何识别未打补丁的系统。 Windows系统安全测试: 本地安全策略(Local Security Policy)审查: 讲解如何检查密码策略、账户锁定策略、审核策略等。 注册表(Registry)安全: 讨论关键注册表项的保护。 Windows Services和Scheduled Tasks: 检查可疑的服务和计划任务。 远程管理服务(RDP, WinRM)的安全: 探讨其配置风险。 Linux系统安全测试: 文件权限(chmod, chown)和SUID/SGID位: 重点关注存在SUID/SGID位的可执行文件,分析其潜在的权限提升风险。 SSH服务安全配置: 重点讲解SSH服务器的安全加固,如禁用root登录、使用密钥认证、更改默认端口等。 防火墙(iptables, firewalld)配置: 审查防火墙规则,确保只允许必要的端口和服务。 PAM(Pluggable Authentication Modules)安全: 探讨PAM模块的配置。 内核参数(sysctl)调优: 介绍与网络安全相关的内核参数。 操作系统漏洞扫描工具: Nessus, OpenVAS等漏洞扫描器: 讲解如何使用这些工具对操作系统进行全面的漏洞扫描,识别未打补丁的已知漏洞。 特权提升(Privilege Escalation)技术: 介绍常见的本地特权提升技术,例如利用SUID程序漏洞、内核漏洞、不安全的配置文件、弱权限文件等。 系统加固措施: 基于扫描结果和安全原则,提供详细的操作系统安全加固建议,涵盖防火墙配置、服务最小化、访问控制、日志审计等多个方面。 第四部分:高级安全测试与未来展望 第八章:API安全测试 随着微服务架构的普及,API已成为现代应用程序的核心组成部分。本章将聚焦于API安全测试,确保API的稳定性和安全性。 API概述与安全挑战: 介绍RESTful API、GraphQL等常见的API类型,以及API面临的主要安全风险,如身份验证绕过、授权问题、注入攻击、数据泄露等。 API安全测试方法: 身份验证和授权测试: 重点测试API的认证机制(如API Key, OAuth, JWT)是否健壮,以及不同用户角色的授权是否得到正确执行。 输入验证与参数处理: 针对API的请求参数进行深入测试,检查是否存在注入漏洞、越界访问等。 速率限制(Rate Limiting)与拒绝服务(DoS)测试: 评估API的抗DDoS能力。 敏感数据暴露: 检查API响应是否包含不必要的敏感信息。 API网关(API Gateway)安全: 探讨API网关的安全配置和策略。 API测试工具: 介绍Postman, Insomnia, Burp Suite等工具在API测试中的应用,以及专门的API安全扫描工具。 OWASP API Security Top 10: 结合OWASP发布的API安全十大风险,进行有针对性的测试。 第九章:云原生与DevOps环境下的安全测试 本章将探讨在云原生和DevOps的快速迭代环境中,如何有效地进行安全测试。 DevOps与安全(DevSecOps): 安全左移(Shift-Left Security): 强调将安全测试提前到开发周期的早期阶段,例如在代码提交、构建、部署等环节集成安全检查。 CI/CD流水线中的安全自动化: 介绍如何在CI/CD流水线中集成SAST、DAST、SCA等自动化安全测试工具,实现安全检查的自动化。 安全即代码(Security as Code): 探讨如何将安全策略和配置以代码形式管理,提高安全部署的可重复性和可追溯性。 云原生环境下的安全测试: 容器安全(Container Security): 镜像安全扫描: 介绍如何扫描Docker镜像中的已知漏洞和不安全配置。 容器运行时安全: 探讨容器隔离性、网络策略、运行时监控等。 Kubernetes安全: 介绍Kubernetes的安全模型、RBAC(Role-Based Access Control)、网络策略、Pod安全策略(Pod Security Policies)等。 云服务安全(AWS, Azure, GCP): 讨论云平台上的身份和访问管理(IAM)、安全组、存储安全、Serverless安全等。 基础设施即代码(IaC)安全测试: 探讨Terraform, CloudFormation等IaC工具的安全配置审查。 第十章:安全测试的未来趋势与最佳实践 本章将展望安全测试的未来发展方向,并总结本书中的关键最佳实践。 人工智能(AI)与机器学习(ML)在安全测试中的应用: 探讨AI/ML如何用于自动化漏洞发现、智能威胁检测、行为分析等。 模糊测试(Fuzzing)技术的进步: 介绍生成式模糊测试、变异模糊测试等,以及它们在发现未知漏洞方面的潜力。 零信任架构(Zero Trust Architecture)下的安全测试: 探讨在零信任模型下,如何设计和执行安全测试。 安全测试的持续改进与度量: 讨论如何通过数据分析和指标跟踪,不断优化安全测试流程和效果。 建立高效的安全测试团队: 强调团队沟通、知识共享、技能培训以及与开发、运维团队的紧密协作。 持续学习与专业发展: 鼓励读者持续关注最新的安全威胁、技术和工具,保持技能的更新。 结语 在信息安全日益严峻的今天,《安全测试指南(第4版)》为您提供了一把开启安全之门的钥匙。我们希望本书能够帮助您构建起坚固的防御体系,在复杂的网络环境中游刃有余。安全之路,道阻且长,但有本书的陪伴,您将不再孤单。 附录(可选,示例) 常用安全工具速查表 安全测试报告模板 术语表 ---