第一部分 软件安全基础知识 3
第1章 软件安全概述 3
1.1 信息与信息安全 3
1.1.1 信息的定义 3
1.1.2 信息的属性 3
1.1.3 信息安全 4
1.2 什么是软件安全 5
1.3 软件安全威胁及其来源 5
1.3.1 软件缺陷与漏洞 5
1.3.2 恶意软件 6
1.3.3 软件破解 8
1.4 如何加强软件安全防护? 8
本章小结 12
习题 12
第2章 软件安全基础 13
2.1 计算机磁盘的管理 13
2.1.1 硬盘结构简介 13
2.1.2 主引导扇区(Boot Sector)结构简介 15
2.1.3 文件系统 16
2.2 80X86处理器的工作模式 20
2.2.1 实模式 21
2.2.2 保护模式 21
2.2.3 虚拟8086模式 21
2.3 Windows内存结构与管理 22
2.3.1 DOS内存布局 22
2.3.2 Windows的内存布局 22
2.3.3 虚拟地址转译 24
2.3.4 内存分配与管理函数 25
2.4 计算机的引导过程 28
2.4.1 认识计算机启动过程 28
2.4.2 主引导记录的工作原理 29
2.5 PE文件格式 34
2.5.1 什么是PE文件格式 34
2.5.2 PE文件格式与Win32病毒的关系 34
2.5.3 PE文件格式分析 35
本章小结 47
习题 47
第二部分 软件漏洞利用与防护 51
第3章 软件缺陷与漏洞机理概述 51
3.1 安全事件与软件漏洞 51
3.1.1 典型安全事件 51
3.1.2 软件漏洞 52
3.2 漏洞分类及其标准 53
3.2.1 漏洞分类 53
3.2.2 CVE标准 54
3.2.3 CNVD 54
3.2.4 CNNVD 54
3.3 软件漏洞利用对系统的威胁 54
3.3.1 非法获取访问权限 55
3.3.2 权限提升 55
3.3.3 拒绝服务 55
3.3.4 恶意软件植入 55
3.3.5 数据丢失或泄漏 56
3.4 软件漏洞产生的原因 56
3.4.1 技术因素 56
3.4.2 非技术因素 58
3.5 软件漏洞利用方式 60
3.5.1 本地攻击模式 60
3.5.2 远程主动攻击模式 60
3.5.3 远程被动攻击模式 61
3.6 典型的软件漏洞 61
3.6.1 缓冲区溢出 61
3.6.2 注入类漏洞 62
3.6.3 权限类漏洞 63
本章小结 64
习题 64
第4章 典型软件漏洞机理分析 65
4.1 缓冲区溢出漏洞 65
4.1.1 缓冲区与内存分布 66
4.1.2 栈溢出 67
4.1.3 堆溢出 73
4.1.4 格式化串漏洞 80
4.2 Web应用程序漏洞 82
4.2.1 Web应用安全概述 82
4.2.2 SQL注入漏洞 83
4.2.3 跨站脚本(XSS) 87
4.2.4 跨站请求伪造(CSRF) 90
4.2.5 其他Web漏洞 91
本章小结 93
习题 93
第5章 软件漏洞的利用和发现 95
5.1 漏洞利用与Exploit 95
5.1.1 漏洞利用简介 95
5.1.2 Exploit结构 96
5.1.3 漏洞利用的具体技术 96
5.2 Shellcode开发 97
5.2.1 Shellcode的编写语言 98
5.2.2 地址重定位技术 98
5.2.3 API函数自搜索技术 98
5.2.4 Shellcode编码问题 102
5.2.5 Shellcode典型功能 102
5.2.6 改进Shellcode技术——Ret2Lib和ROP 103
5.3 软件漏洞利用平台及框架 106
5.3.1 Metasploit Framework 106
5.3.2 Immunity CANVAS 107
5.4 软件漏洞挖掘技术及工具 107
5.4.1 基于源代码的静态分析 108
5.4.2 静态分析工具 109
5.4.3 动态分析 110
5.4.4 Fuzzing测试 111
5.4.5 面向二进制程序的逆向分析 112
5.4.6 基于补丁比对的逆向分析 113
本章小结 113
习题 113
第6章 Windows系统安全机制及漏洞防护技术 116
6.1 数据执行保护——DEP 116
6.1.1 DEP保护机制 116
6.1.2 对抗DEP 117
6.2 栈溢出检查——GS 120
6.2.1 /GS保护机制的原理的实现 120
6.2.2 GS的不足 122
6.3 地址空间分布随机化——ASLR 124
6.3.1 ASLR保护机制的原理和实现 124
6.3.2 ASLR的缺陷和绕过方法 126
6.4 SafeSEH 127
6.4.1 SafeSEH的原理和实现 127
6.4.2 SafeSEH的安全性分析 128
6.5 EMET 129
本章小结 129
习题 130
第7章 构建安全的软件 131
7.1 系统的安全需求 131
7.2 主动的安全开发过程 132
7.2.1 安全教育阶段 133
7.2.2 设计阶段 133
7.2.3 开发阶段 136
7.2.4 测试阶段 136
7.2.5 发行和维护阶段 137
7.3 重要的安全法则 137
7.3.1 软件安全策略 137
7.3.2 安全设计法则 138
7.4 安全的编码技术 140
7.4.1 安全编码 140
7.4.2 安全性测试 142
7.5 适当的访问控制 145
7.5.1 访问控制 145
7.5.2 访问控制策略 146
7.5.3 访问控制的实现 147
7.5.4 授权 147
7.5.5 审计 148
本章小结 148
习题 148
第三部分 恶意代码机理及防护 153
第8章 恶意代码及其分类 153
8.1 恶意代码定义 153
8.2 恶意代码分类 153
8.2.1 计算机病毒 153
8.2.2 网络蠕虫 154
8.2.3 特洛伊木马 155
8.2.4 后门 156
8.2.5 Rootkit 156
8.2.6 流氓软件 157
8.2.7 僵尸程序 157
8.2.8 Exploit 158
8.2.9 其他 158
本章小结 159
习题 159
第9章 恶意代码机理分析 160
9.1 计算机病毒 160
9.1.1 什么是计算机病毒 160
9.1.2 计算机病毒的特点与分类 161
9.1.3 计算机病毒的结构 163
9.1.4 计算机病毒的网络传播方式 166
9.2 计算机病毒机理分析 167
9.2.1 Windows PE病毒 167
9.2.2 脚本病毒 179
9.2.3 宏病毒 184
9.2.4 ELF类病毒 191
9.3 网络蠕虫 196
9.3.1 软件漏洞与网络蠕虫 196
9.3.2 网络蠕虫的结构 199
9.3.3 网络蠕虫攻击的关键技术 201
9.3.4 网络蠕虫的检测与防治 203
9.4 木马 205
9.4.1 什么是木马? 205
9.4.2 木马的通信方式与溯源 206
9.4.3 木马的主要功能剖析 210
9.4.4 木马实例——灰鸽子 215
9.4.5 木马与后门的异同 220
9.5 Rootkit 220
9.5.1 什么是Rootkit? 220
9.5.2 Rootkit核心技术分析 221
9.5.3 Rootkit检测原理及工具 236
9.6 手机恶意软件 237
9.6.1 手机恶意软件概述 237
9.6.2 手机操作系统简介 238
9.6.3 手机恶意软件的种类 240
9.6.4 手机恶意软件主要功能技术机理 243
9.6.5 手机恶意软件的防御 247
本章小结 247
习题 247
第10章 病毒检测技术及检测对抗技术 249
10.1 病毒检测技术 249
10.1.1 特征值检测技术 249
10.1.2 校验和检测技术 250
10.1.3 虚拟机检测技术 252
10.1.4 启发式扫描技术 254
10.1.5 主动防御技术 258
10.1.6 云查杀技术 260
10.2 恶意软件的自我保护 262
10.2.1 病毒检测技术对抗 262
10.2.2 反病毒软件对抗 267
10.2.3 人工分析对抗 268
本章小结 272
习题 273
第11章 恶意软件样本捕获与分析 275
11.1 恶意软件样本捕获方法 275
11.1.1 蜜罐 275
11.1.2 用户上报 275
11.1.3 云查杀平台上传 276
11.1.4 诱饵邮箱 276
11.1.5 样本交流 276
11.2 恶意软件载体 276
11.3 恶意软件样本分析 277
11.3.1 虚拟机环境准备 278
11.3.2 系统监控 278
11.3.3 文件类型侦测 283
11.3.4 PE文件格式分析 283
11.3.5 静态反汇编 284
11.3.6 动态调试 285
11.3.7 文本及16进制数据分析 286
11.4 恶意软件分析报告 287
本章小结 290
习题 290
第四部分 软件自我保护 295
第12章 软件知识产权保护技术 295
12.1 软件知识产权保护的必要性 295
12.2 用户合法性验证机制 295
12.2.1 序列号验证 295
12.2.2 KeyFile验证 297
12.2.3 网络验证 298
12.2.4 光盘验证技术 298
12.2.5 加密锁验证 298
12.3 软件知识产权保护方式 299
12.3.1 功能限制 299
12.3.2 时间限制 300
12.3.3 警告窗口 301
12.4 软件知识产权保护建议 302
本章小结 303
习题 304
第13章 软件自我保护技术 305
13.1 静态分析对抗技术 305
13.1.1 花指令 305
13.1.2 自修改代码技术实现 308
13.1.3 加密与多态变形技术 308
13.1.4 虚拟机保护技术 309
13.2 动态分析对抗技术 310
13.2.1 检测自身是否处于调试状态 310
13.2.2 检测调试器软件是否存在 312
13.2.3 发现调试器后的处理 313
13.3 软件的自校验技术 314
13.3.1 磁盘文件校验 314
13.3.2 内存映像校验 314
本章小结 315
习题 315
参考文献 316