【安全开发】软件安全开发讲义及文档

目录
第1章 软件安全概述 1
1.1 软件 1
1.1.1 软件定义 1
1.1.2 软件分类 1
1.2 软件安全 3
1.2.1 软件安全概述 3
1.2.2 软件安全范畴 4
1.2.3 软件安全问题 5
1.3 本书的结构与内容 11
第2章 软件安全开发模型 13
2.1软件开发模型 13
2.1.1瀑布型软件开发模型 13
2.1.2渐增型软件开发模型 14
2.1.3变换型软件开发模型 15
2.2常用软件开发方法 15
2.3安全开发模型 17
2.4微软安全开发生命周期模型 18
2.4.1安全生命周期模型(SDL) 18
2.4.2 SDL优化模型 19
2.4.3 SDL安全人员角色 20
2.4.4 SDL模型安全活动 21
2.4.5培训阶段 23
2.4.6需求阶段 24
2.4.7设计阶段 25
2.4.8实施阶段 26
2.4.9验证阶段 26
2.4.10发布和响应阶段 27
2.4.11可选的安全活动 28
2.5 McGraw软件安全开发模型 29
2.6 NIST安全开发生命周期模型 33
2.6.1开始阶段 34
2.6.2获取与开发阶段 35
2.6.3执行阶段 37
2.6.4操作和维护阶段 37
2.6.5部署阶段 38
第3章 安全漏洞管理 40
3.1 概述 40
3.1.1 漏洞分类 40
3.1.2 漏洞等级 42
3.1.3 漏洞管理流程 44
3.1.4 漏洞管理机制 45
3.2 安全内容自动化协议(SCAP) 47
3.2.1 SCAP及其元素 48
3.2.2 可扩展配置检查列表描述格式XCCDF 50
3.2.3 开放漏洞评估描述语言OVAL 51
3.2.4 通用漏洞和披露列表CVE 52
3.2.5 通用平台枚举CPE 52
3.2.6 通用配置枚举CCE 53
3.2.7 通用漏洞评分系统CVSS 54
3.3 典型软件安全漏洞 54
3.3.1 缓冲区溢出漏洞 55
3.3.2 整数溢出漏洞 58
3.3.3 格式化字符串漏洞 59
3.3.4 指针覆盖漏洞 62
3.3.5 SQL注入漏洞 62
3.3.6 ByPass漏洞 64
3.3.7 信息泄露漏洞 65
3.3.8 越权漏洞 65
3.4 OWASP Top 10 66
3.4.1 注入攻击 66
3.4.2 失效的身份认证和会话管理 68
3.4.3 跨站脚本 – XSS 70
3.4.4 不安全的直接对象引用 72
3.4.5 安全配置错误 74
3.4.6 敏感数据暴露 76
3.4.7 功能级别访问控制缺失 77
3.4.8 跨站请求伪造(CSRF) 78
3.4.9 使用已知易受攻击组件 80
3.4.10 未验证的重定向和转发 81
第4章 安全功能设计 83
4.1 安全审计 84
4.1.1 安全审计自动响应 85
4.1.2 安全审计数据产生 85
4.1.3 安全审计分析 87
4.1.4 安全审计查阅 88
4.1.5 安全审计事件选择 89
4.1.6 安全审计事件存储 90
4.2 安全通信 91
4.2.1 原发抗抵赖 92
4.2.2 接收抗抵赖 93
4.3 密码支持 95
4.3.1 密钥管理 96
4.3.2 密码运算 99
4.4 用户数据保护 100
4.4.1访问控制 103
4.4.2数据流控制 105
4.4.3数据鉴别 109
4.4.4系统内部传送 110
4.4.5残余信息保护 112
4.4.6回退 113
4.4.7存储数据的完整性 114
4.5标识和鉴别(身份认证) 115
4.5.1用户鉴别 116
4.5.2用户标识 119
4.5.3鉴别失败 120
4.5.4用户属性定义 121
4.5.5秘密的规范 121
4.5.6主体-用户绑定 122
4.6安全管理 123
4.6.1功能的管理 123
4.6.2安全属性的管理 124
4.6.3数据的管理 126
4.6.4安全管理角色 127
4.7隐私保护 128
4.7.1匿名 129
4.7.2假名 129
4.7.3不可关联性 131
4.7.4不可观察性 132
4.8安全功能的保护 133
4.8.1底层抽象机测试 136
4.8.2失效保护 137
4.8.3安全功能数据的可用性 137
4.8.4安全功能数据的保密性 138
4.8.5安全功能数据的完整性 139
4.8.6内部数据传送 140
4.8.7物理保护 141
4.8.8可信恢复 143
4.8.9重放检测 146
4.8.10引用仲裁 147
4.8.11域分离 148
4.8.12状态同步协议 149
4.8.13时间戳 150
4.8.14对外数据一致性 151
4.8.15内部数据复制一致性 152
4.8.16安全功能自检 152
4.9资源利用 153
4.9.1容错 154
4.9.2服务优先级 155
4.9.3资源分配 156
4.10系统/子系统的访问 157
4.10.1可选属性范围限定 158
4.10.2多重并发会话限定 159
4.10.3会话锁定 160
4.10.4访问旗标 162
4.10.5访问历史 162
4.10.6会话建立 163
4.11 可信路径/信道 164
4.11.1安全功能之间的可信信道 165
4.11.2 可信路径 165
第5章 常见安全问题 167
5.1概述 167
5.2常见编程安全问题分类 167
5.3常见编程安全问题 169
5.3.1整数赋值错误问题 169
5.3.2整型提升导致的内存溢出错误 169
5.3.3临时变量溢出 170
5.3.4整数截断错误问题 170
5.3.5整数溢出问题 171
5.3.6带符号与无符号整型比较问题 171
5.3.7 size_t导致的死循环 172
5.3.8误用short引起缓冲区溢出 173
5.3.9表达式中对同一变量多次写入问题 174
5.3.10空字符结尾错误问题 174
5.3.11无界字符串复制问题 175
5.3.12定长字符串越界问题 176
5.3.13字符串截断问题 178
5.3.14与函数无关的字符串错误问题 179
5.3.15修改字符串常量错误问题 180
5.3.16字符串比较错误 180
5.3.17数组越界问题 181
5.3.18数组定义和值初始化括号形式混淆错误 182
5.3.19未正确区分标量和数组问题 183
5.3.20二维数组的内存泄露 184
5.3.21释放指针指向的对象引起内存泄漏 184
5.3.22数据指针被修改问题 186
5.3.23函数指针被修改问题 186
5.3.24删除void*指针错误 188
5.3.25printf函数输出问题 189
5.3.26格式化函数sprintf引起缓冲区溢出 189
5.3.27指针变量的传值和传址混淆问题 190
5.3.28验证方法参数问题 191
5.3.29函数退出时内存未释放问题 192
5.3.30 continue和return混淆问题 192
5.3.31非void返回类型函数问题 193
5.3.32误用sizeof操作符取字符串长度 195
5.3.33基类未定义虚析构函数引发错误 195
5.3.34线程未join引起的内存泄露 197
5.3.35 notify线程唤醒问题 198
5.3.36多线程中Socket终止问题 199
5.3.37程序异常退出时未关闭已打开文件 201
5.3.38目录打开后未关闭 202
5.3.39写文件没有调用fflush 202
5.3.40临时文件未删除问题 203
5.3.41敏感信息硬编码问题 204
5.3.42引用未初始化的内存错误问题 206
5.3.43检查和处理内存分配错误问题 206
5.3.44执行零长度的分配错误问题 207
5.3.45引用已释放内存的错误问题 208
5.3.46双重释放内存错误问题 209
5.3.47不匹配的内存管理函数问题 209
5.3.48匿名对象引起的内存泄漏 210
5.3.49 JVM内存泄漏问题 211
5.3.50覆盖equals方法而没有覆盖hashCode方法问题 212
5.3.51 finally程序段非正常退出问题 214
5.3.52非泛型的数据类型问题 215
5.3.53类名称比较问题 215
5.3.54等同的对象得不到相等的结果问题 216
5.3.55在嵌套类中暴露外部类的私有字段问题 217
5.3.56静态方法隐藏问题 218
5.3.57构造函数中抛出异常引发错误 219
5.3.58构造器调用可覆盖方法问题 220
5.3.59字符乱码问题 222
5.3.60功能级别访问控制缺失问题 222
5.3.61表单重复提交问题 225
5.3.62不安全的直接对象引用问题 227
5.3.63信息的不安全存储问题 228
5.3.64 SQL注入攻击 229
5.3.65失效的身份认证和会话管理问题 231
5.3.66跨站脚本(XSS) 232
第6章 安全编码实践 234
6.1输入验证和数据合法性校验 234
6.1.1输入数据有效性校验 234
6.1.2避免SQL注入 235
6.1.3避免XML注入 235
6.1.4避免跨站点脚本(XSS) 235
6.2声明和初始化 236
6.2.1避免类初始化相互依赖 236
6.3表达式 237
6.3.1勿忽略方法返回值 237
6.3.2勿引用空指针 237
6.3.3比较数组内容 238
6.4数值类型和操作 238
6.4.1防止整数溢出 238
6.4.2避免除法和取模运算分母为零 239
6.5类和方法操作 240
6.5.1数据成员声明为私有且提供可访问的包装方法 240
6.5.2敏感类不允许复制 240
6.5.3比较类的正确做法 241
6.5.4不要硬编码敏感信息 241
6.5.5验证方法参数 242
6.5.6勿使用过时或低效的方法 242
6.5.7数组引用问题 242
6.5.8勿产生内存泄露 243
6.6异常处理 244
6.6.1不要忽略捕获的异常 244
6.6.2不允许暴露异常的敏感信息 245
6.6.3不允许抛出RuntimeException、Exception和Throwable 246
6.6.4不要捕获NullPointerException或其他父类异常 246
6.7多线程编程 247
6.7.1 确保被并发调用函数的可重入性 247
6.7.2函数线程安全 249
6.7.3确保共享变量的可见性 250
6.7.4确保共享变量的操作是原子的 251
6.7.5 Thread.run()和Thread.stop() 252
6.7.6确保执行阻塞操作的线程可以终止 253
6.7.7不在一个有限的线程池执行相互依存的任务 254
6.8输入输出 254
6.8.1程序终止前删除临时文件 254
6.8.2检测和处理文件相关错误 255
6.8.3及时释放资源 256
6.9序列化 256
6.9.1不要序列化未加密的敏感数据 257
6.9.2在序列化过程中避免内存和资源泄漏 257
6.9.3反序列化要在程序最小权限的安全环境中 258
第7章 软件安全测试 259
7.1软件安全测试方法 259
7.2软件安全测试过程 260
7.3软件安全测试组织 261
7.4软件安全测试举例 262
7.4.1系统测试概要 263
7.4.2系统测试结果 264
7.4.3系统安全建议 273
参考文献 275
附录A 测试工具 276
1 源代码分析器——Source Code Analysis(FortifySCA) 277
2 字节码扫描器——FindBugs 278
3 数据库脆弱性扫描器——Database Scanner 279
4 网络漏洞扫描器——NTOSpider 280
5 网络漏洞扫描器——Metasploit 281
6 Web应用漏洞扫描器——AppScan 286
7 Web应用漏洞扫描器——JSky 289
8 Web应用漏洞扫描器——WVS 291
9 Web服务扫描器——SOATest 293
10动态分析工具——CLR Profiler 294
11设计验证工具——SDMetrics 295

下载地址:https://t.zsxq.com/jur7aUr

发表评论

电子邮件地址不会被公开。 必填项已用*标注