书籍详情

软件开发安全之道概念、设计与实施

软件开发安全之道概念、设计与实施

作者:[美]洛伦·科恩费尔德(Loren Kohnfelder)

出版社:人民邮电出版社

出版时间:2024-01-01

ISBN:9787115617736

定价:¥99.80

购买这本书可以去
内容简介
  本书共有13章,分为三大部分,即概念、设计和实施。具体内容包括:第一部分(第1~5章)为全书提供了概念基础,涉及信息安全和隐私基础概述、威胁建模、对可识别威胁进行防御性缓解的通用战略、安全设计模式,以及使用标准的加密库来缓解常见的风险。第二部分(第6~7章)分别从设计者和审查员的角度讨论了如何使软件设计变得安全的指导,以及可以应用哪些技术来实现安全性。第三部分(第8~13章)涵盖了实施阶段的安全性,在有了一个安全的设计后,这一部分将会解释如何在不引入额外漏洞的情况下进行软件开发。
作者简介
  [美]洛伦·科恩费尔德(Loren Kohnfelder) 从事编程行业已经超过 50 年时间,在麻省理工学院攻读硕士研究生期间发表的论文“关于一项实用的公钥加密系统(Towards a Practical Public-Key Cryptosystem)” (1978)描述了数字证书以及公共密钥体系结构(PKI) 的基础。他的软件从业经历包括各式各样的编程类工作,如编写各种打孔卡、磁盘控制器驱动、 链接加载器(linking loader)、电子游戏,以及半导体研究实验室的设备控制软件。在微软供职期间, 他回归了安全工作, 加盟了微软的 IE 浏览器团队,之后又加入了.NET 平台安全团队,参与了全行业主动安全进程方法的设计。近期他加盟了谷歌公司,曾担任安全团队的软件工程师,此后又参与组建了隐私团队,对大型商业系统进行了百次以上的安全设计审查。
目录
第 1 部分 概念
第 1 章 基础 3
1.1 理解安全 3
1.2 信任 4
1.2.1 信任感 5
1.2.2 比特位不是肉眼可见的 6
1.2.3 能力与不足 6
1.2.4 信任是一个频谱 7
1.2.5 信任决策 7
1.3 经典原则 9
1.3.1 信息安全的 CIA 10
1.3.2 黄金标准 12
1.3.3 隐私 17
第 2 章 威胁 20
2.1 对抗性视角 21
2.2 四个问题 22
2.3 威胁建模 22
2.3.1 从一个模型入手 23
2.3.2 判断资产 24
2.3.3 判断攻击面 26
2.3.4 判断信任边界 26
2.3.5 判断威胁 28
2.3.6 缓解威胁 33
2.4 隐私方面的考量因素 34
2.5 无处不在的威胁建模 34




第 3 章 缓解 36
3.1 解决威胁 36
3.2 结构性的缓解战略 37
3.2.1 把攻击面减到最小 37
3.2.2 缩窄漏洞窗口 38
3.2.3 把暴露的数据减到最少 39
3.3 访问策略与访问控制 40
3.4 接口 41
3.5 通信 42
3.6 存储 42
第 4 章 模式 44
4.1 设计属性 45
4.1.1 极简设计 45
4.1.2 透明设计 46
4.2 暴露最少信息 47
4.2.1 最小权限 47
4.2.2 最少信息 48
4.2.3 默认防御 49
4.2.4 放行列表与阻塞列表 49
4.2.5 避免可预测性 51
4.2.6 失效安全 52
4.3 强力执行 52
4.3.1 完全仲裁原则 52
4.3.2 最少共同机制 54




4.4 冗余 55
4.4.1 深度防御 55
4.4.2 权限分离 56
4.5 信任与责任 57
4.5.1 不盲目信任 58
4.5.2 接受安全责任 58
4.6 反模式 60
4.6.1 代理混淆问题 60
4.6.2 意图与恶意 61
4.6.3 可信的代理 62
4.6.4 信任回流 62
4.6.5 第三方 Hook 63
4.6.6 组件不可修补 63
第 5 章 密码学 64
5.1 加密工具 64
5.2 随机数 65
5.2.1 伪随机数 65
5.2.2 加密安全的伪随机数 66
5.3 消息认证代码 66
5.3.1 使用 MAC 来防止篡改 67
5.3.2 重放攻击 68
5.3.3 安全 MAC 通信 68
5.4 对称加密 69
5.4.1 一次性填充 69
5.4.2 高级加密标准 70
5.4.3 使用对称加密 70
5.5 非对称加密 71
5.6 RSA 密码系统 71
5.7 数字签名 72
5.8 数字证书 74
5.9 密钥交换 74
5.10 使用加密 76


第 2 部分 设计
第 6 章 安全的设计 81
6.1 在设计中集成安全性 82
6.1.1 明确设计中的假定规则 82
6.1.2 定义范围 83
6.1.3 设置安全要求 84
6.1.4 威胁建模 85
6.2 建立缓解措施 87
6.2.1 设计接口 87
6.2.2 设计数据处理 88
6.3 将隐私融入设计 88
6.4 规划整个软件生命周期 89
6.5 权衡取舍 89
6.6 设计的简洁性 90
第 7 章 安全设计审查 92
7.1 SDR 流程 92
7.1.1 为什么要执行 SDR? 92
7.1.2 什么时候执行 SDR? 93
7.1.3 文档是必不可少的 93
7.2 SDR 流程 93
7.2.1 研究 94
7.2.2 询问 94
7.3.3 识别 95
7.3.4 合作 95
7.3.5 撰写 96
7.3.6 跟进 97
7.3 评估设计安全性 97
7.3.1 以四个问题为指导 97
7.3.2 我们在做什么? 98
7.3.3 会出什么问题? 98
7.3.4 我们要怎么做? 99
7.3.5 我们做的好吗? 99




7.3.6 在哪里挖掘 100
7.3.7 隐私审查 100
7.3.8 审查更新 100
7.4 处理分歧 101
7.4.1 巧妙地沟通 101
7.4.2 案例研究:困难的审查 102
7.4.3 上报分歧 103
7.5 练习 104

第 3 部分 实施
第 8 章 安全地编程 107
8.1 挑战 108
8.1.1 恶意影响 108
8.1.2 漏洞是 bug 109
8.1.3 漏洞链 110
8.1.4 Bug 和熵 112
8.1.5 警觉 112
8.2 研究: GotoFail 113
8.2.1 单行漏洞 113
8.2.2 当心 Footgun 114
8.2.3 GotoFail 的教训 115
8.3 编码漏洞 116
8.3.1 原子性 116
8.3.2 时序攻击 117
8.3.3 序列化 118
8.4 非常嫌疑犯 118
第 9 章 低级编码缺陷 120
9.1 算数漏洞 121
9.1.1 定宽整数漏洞 121
9.1.2 浮点精度漏洞 123
9.1.3 示例:浮点下溢 124
9.1.4 示例:整数溢出 126
9.1.5 安全算数 128


9.2 内存访问漏洞 129
9.2.1 内存管理 129
9.2.2 缓冲区溢出 130
9.2.3 示例:内存分配漏洞 130
9.2.4 案例研究: Heartbleed
漏洞 133
第 10 章 不受信任的输入 138
10.1 输入验证 138
10.1.1 确定有效性 140
10.1.2 验证标准 140
10.1.3 拒绝无效输入 141
10.1.4 纠正无效输入 142
10.2 字符串漏洞 142
10.2.1 长度问题 143
10.2.2 Unicode 问题 143
10.2.3 编码和字形 143
10.2.4 大小写转换 144
10.3 注入攻击漏洞 144
10.3.1 SQL 注入攻击 145
10.3.2 路径遍历 147
10.3.3 正则表达式 149
10.3.4 XML 的危险 149
10.4 缓解注入攻击 150
第 11 章 WEB 安全 152
11.1 建立在框架之上 153
11.2 Web 安全模型 153
11.2.1 HTTP 协议 154
11.2.2 数字证书和 HTTPS 156
11.2.3 同源策略 158
11.2.4 Web Cookies 159
11.3 常见的 Web 漏洞 160
11.3.1 跨站脚本攻击 161
11.3.2 跨站请求伪造攻击 163
11.4 更多的漏洞和缓解措施 165




第 12 章 安全测试 167
12.1 什么是安全测试? 167
12.1.1 整数溢出 167
12.1.2 内存管理问题 167
12.1.3 不可靠输入 168
12.1.4 网页安全 168
12.1.5 异常处理缺陷 168
12.2 对 GotoFail 漏洞执行安全测试 168
12.2.1 功能测试 170
12.2.2 包含漏洞的功能测试 170
12.2.3 安全测试用例 170
12.2.4 安全测试的限制 171
12.3 编写安全测试用例 171
12.3.1 测试输入验证 172
12.3.2 测试 XSS 漏洞 173
12.4 模糊测试 174
12.5 安全回归测试 175
12.6 可用性测试 177
12.6.1 资源消耗 177
12.6.2 阈值测试 178
12.6.3 分布式拒绝服务攻击 179
12.7 安全测试的最佳实践 179
12.7.1 测试驱动的开发( Test-
driven development) 179
12.7.2 利用集成测试 179
12.7.3 追赶安全测试的进度 180


第 13 章 安全部署最佳实践 181
13.1 代码质量 181
13.1.1 代码清洁 181
13.1.2 异常和错误处理 182
13.1.3 记录安全性 183
13.1.4 安全代码审查 183
13.2 依赖关系 184
13.2.1 选择安全的组件 184
13.2.2 保护接口 185
13.2.3 不要做重复的工作 186
13.2.4 对抗传统安全 186
13.3 漏洞分类 187
13.3.1 DREAD 评估 187
13.3.2 创建利用漏洞的有效
攻击 189
13.3.3 作出分类决策 190
13.4 维护一个安全的开发环境 190
13.4.1 开发和生产相分离 190
13.4.2 保护开发工具 191
13.4.3 发布产品 191
后记 193
附录 A 设计文档示例 203
附录 B 词汇表 215
附录 C 练习 227
附录 D 备忘单 231
猜您喜欢

读书导航