内容简介
第1章 软件安全概论
1.1都是软件惹的祸
1.2对安全问题的处理
1.2.1 Bugtraq
1.2.2 CERT公告
1.2.3 RISKS文摘
1.3影响软件安全的技术趋势
1.4非功能性需求
1.4.1什么是安全
1.4.2难道只是可靠性
1.5.“渗透-修补”是个坏方法
1.6艺术和工程
1.7安全目标
1.7.1预防
1.7.2跟踪与审计
1.7.3监控
1.7.4隐私和保密
1.7.5多级安全
1.7.6匿名
1.7.7认证
1.7.8完整性
1.8常见软件安全缺陷
1.9软件项目目标
1.10结论
第2章 软件安全风险管理
2.1软件安全风险管理概述
2.2安全人员的任务
2.3软件生命周期中的软件安全人员
2.3.1获取需求
2.3.2风险评估
2.3.3安全设计
2.3.4实现
2.3.5安全测试
2.4现实的权衡
2.5让人们去思考安全性
2.6软件风险管理实践
2.6.1当开发走向歧途
2.6.2当安全分析走向歧途
2.7通用准则
2.8结论
第3章 技术的选择
3.1语言的选择
3.2分布式对象平台的选择
3.2.1 COBRA
3.2.2 DCOM
3.2.3 EJB和RMI
3.3操作系统的选择
3.4认证技术
3.4.1基于主机的认证
3.4.2物理令牌
3.4.3生物认证
3.4.4密码认证
3.4.5深度防御与认证
3.5结论
第4章 开放源代码和封闭源代码
4.1通过隐藏实现安全
4.1.1逆向工程
4.1.2代码混淆
4.1.3紧包软件的安全
4.1.4通过隐藏实现安全并非万能
4.2开源软件
4.3.“多眼球现象”是真的吗
4.3.1漏洞检测是困难的
4.3.2其他的忧虑
4.4关于发布加密算法
4.5另外两个关于开源的谬论
4.5.1微软谬论
4.5.2 Java谬论
4.6例子:GNU Mailman的安全
4.7证据:特洛伊木马
4.8开放源码还是不开放源码
4.9另一个来自于缓冲区溢出的安全教训
4.10忠告
4.11结论
第5章 软件安全的指导原则
5.1确保最薄弱环节的安全
5.2深度防御
5.3失效安全
5.4最小特权
5.5分割
5.6尽可能简单
5.7提升隐私权
5.8记住隐藏信息很困难
5.9不要轻信
5.10使用社会资源
5.11结论
第6章 软件审计
6.1架构的安全性分析
6.1.1攻击树
6.1.2报告分析结果
6.2实现安全性分析
6.2.1审计源代码
6.2.2源码级的安全审计工具
6.2.3在分析中使用RATS
6.2.4安全扫描软件的有效性
6.3结论
第7章 缓冲区溢出
7.1什么是缓冲区溢出
7.2为什么缓冲溢出是安全问题
7.3缓冲区溢出的防御
7.4主要的陷阱
7.5内部缓冲区溢出
7.6更多的输入溢出
7.7其他风险
7.8帮助工具
7.9堆破坏和栈破坏
7.10堆溢出
7.11栈溢出
7.11.1破译堆栈
7.11.2陷入无限循环……并更糟
7.12代码攻击
7.12.1 UNIX漏洞利用
7.12.2关于Windows
7.13结论
第8章 访问控制
8.1 UNIX访问控制模型
8.1.1 UNIX权限工作原理
8.1.2修改文件属性
8.1.3修改文件的所有权
8.1.4 umask命令
8.1.5编程接口
8.1.6 Setuid编程
8.2 Windows NT的访问控制
8.3分割
8.4细粒度权限
8.5结论
第9章 竞争条件
9.1什么是竞争条件
9.2检查时间与使用时间
9.2.1攻破passwd
9.2.2避免TOCTOU问题
9.3安全的文件访问
9.4临时文件
9.5文件锁定
9.6其他竞争条件
9.7结论
第10章 随机性和确定性
10.1伪随机数发生器
10.1.1伪随机数发生器实例
10.1.2 Blum-Blum-Shub PRNG
10.1.3 Tiny PRNG
10.1.4对PRNG的攻击
10.1.5在网络赌博游戏中作弊
10.1.6 PRNG的统计测试
10.2熵的收集和估计
10.2.1硬件解决方案
10.2.2软件解决方案
10.2.3糟糕的熵收集示例
10.3处理熵
10.4实用的随机数据来源
10.4.1 Tiny
10.4.2 Windows的随机数据
10.4.3 Linux的随机数
10.4.4 Java中的随机数
10.5结论
第11章 密码学的应用
11.1一般性建议
11.1.1开发者并不是密码专家
11.1.2数据完整性
11.1.3密码出口的有关法律
11.2常用密码库
11.2.1 Cryptlib
11.2.2 OpenSSL
11.2.3 Crypto+++
11.2.4 BSAFE
11.2.5 Cryptix
11.3利用密码学编程
11.3.1加密
11.3.2散列算法
11.3.3公共密钥加密
11.3.4多线程
11.3.5 cookie加密
11.4加密散列更多的应用
11.5 SSL和TLS
11.6 Stunnel
11.7一次一密
11.8结论
第12章 信任管理和输入验证
12.1关于信任
12.2不恰当信任的例子
12.2.1信任是传递的
12.2.2预防恶意的调用者
12.2.3安全地调用其他程序
12.2.4源自Web的问题
12.2.5客户端安全
12.2.6 Perl问题
12.2.7格式字符串攻击
12.3自动检测输入问题
12.4结论
第13章 口令认证
13.1口令存储
13.2向口令数据库中添加用户
13.3口令认证的方式
13.4口令选择
13.4.1更多的建议
13.4.2掷骰子
13.4.3口令短语
13.4.4应用程序选择的口令
13.5一次性口令
13.6结论
第14章 数据库安全
14.1基础知识
14.2访问控制
14.3在访问控制中使用视图
14.4字段保护
14.5针对统计攻击的安全防卫
14.6结论
第15章 客户端安全
15.1版权保护方案
15.1.1许可证文件
15.1.2防范偶然性盗版
15.1.3其他的许可证特性
15.1.4其他的版权保护方案
15.1.5对不可信客户端的身份认证
15.2防篡改
15.2.1反调试措施
15.2.2校验和
15.2.3应对滥用
15.2.4诱饵
15.3代码混淆
15.3.1基本的代码混淆技术
15.3.2加密部分程序
15.4结论
第16章 穿越防火墙
16.1基本策略
16.2客户端代理
16.3服务器代理
16.4 SOCKS
16.5对等网络
16.6结论
附录A密码学基础
参考文献