第1章 介绍 1
1.1 定义问题 2
1.2 为什么恶意代码如此普遍 3
1.2.1 混合的数据和可执行指令:令人惊恐的组合 4
1.2.2 恶意的用户 7
1.2.3 日益增加的同构计算环境 8
1.2.4 空前的连通性 8
1.2.5 不断扩大的缺乏专业技能的用户群 9
1.2.6 这个世界并不是个友善和平的地方 9
1.3 恶意代码的类型 10
1.4 恶意代码的历史 12
1.5 为什么写这本书 15
1.6 有哪些期望 16
1.7 参考文献 18
第2章 病毒 19
2.1 计算机病毒的早期历史 21
2.2 感染机制和目标 24
2.2.1 感染可执行文件 24
2.2.2 感染引导区 28
2.2.3 感染文档文件 31
2.2.4 病毒感染的其他目标 35
2.3 病毒的传播机制 37
2.3.1 移动存储 38
2.3.2 电子邮件及其下载 39
2.3.3 共享目录 39
2.4 防御病毒 39
2.4.1 反病毒软件 40
2.4.2 配置强化 45
2.4.3 用户培训 48
2.5.1 隐匿 49
2.5 Malware的自我保护技术 49
2.5.2 多态和变异 50
2.5.3 惰化反病毒软件 50
2.5.4 挫败Malware的自我保护技术 51
2.6 结论 52
2.7 总结 52
2.8 参考文献 53
第3章 蠕虫 55
3.1 为什么使用蠕虫 57
3.1.1 接管大量的系统 57
3.1.2 使追踪变得更困难 57
3.1.3 扩大危害范围 58
3.2 蠕虫简史 59
3.3 蠕虫的组成 61
3.3.1 蠕虫的“弹头” 62
3.3.2 传播引擎 63
3.3.3 目标选择算法 64
3.3.4 扫描引擎 66
3.3.5 有效载荷 66
3.3.6 组合各部分:Nimda案例研究 67
3.4 蠕虫传播的障碍 69
3.4.1 目标环境的多样性 69
3.4.2 受害系统崩溃将限制蠕虫传播 71
3.4.3 过量的传播可能阻塞网络 71
3.4.4 不要自己踩到自己 71
3.4.5 不要被别人踩到 72
3.5 即将到来的超级蠕虫 72
3.5.1 多平台蠕虫 73
3.5.2 多探测蠕虫 73
3.5.4 快速传播蠕虫 74
3.5.3 Zero-Day探测蠕虫 74
3.5.5 多态蠕虫 76
3.5.6 变形蠕虫 76
3.5.7 真正恶毒的蠕虫 77
3.6 大的并非总是好的:非超级蠕虫 78
3.7 防御蠕虫 79
3.7.1 Ethical蠕虫 80
3.7.2 反病毒软件:一个很好的办法,但需要和其他防御手段配合使用 82
3.7.3 配置销售商补丁并加固公共访问系统 82
3.7.4 阻断任意的输出连接 83
3.7.5 建立事故响应机制 83
3.7.6 不要摆弄蠕虫,甚至Ethical;除非 84
3.8 结论 85
3.9 总结 86
3.10 参考文献 87
第4章 恶意移动代码 89
4.1 浏览器脚本 91
4.1.1 资源枯竭 92
4.1.2 浏览器劫持 93
4.1.3 利用浏览器的漏洞窃取Cookie值 96
4.1.4 跨网站脚本攻击 100
4.2 ActiveX控件 109
4.2.1 使用ActiveX控件 110
4.2.2 恶意ActiveX控件 112
4.2.3 利用非恶意ActiveX控件 115
4.2.4 防御ActiveX的威胁:Internet Explorer设置 118
4.3 Java Applets 120
4.3.1 使用Java Applets 121
4.3.2 Java Applet安全模型 123
4.3.3 恶意Java Applets 125
4.4 E-mail客户程序中的移动代码 127
4.4.1 通过电子邮件提升访问权限 128
4.4.2 防止提高E-mail访问权限 129
4.4.3 Web Bugs与个人隐私 130
4.4.4 防御Web Bugs 131
4.5 分布式应用软件和移动代码 132
4.6 防御恶意移动代码的其他方法 134
4.6.1 反病毒软件 135
4.6.2 行为监视软件 136
4.6.3 反间谍软件工具 137
4.7 结论 140
4.8 总结 140
4.9 参考文献 142
第5章 后门 144
5.1 不同类型的后门通路 145
5.2 安装后门 146
5.3 自动启动后门 147
5.3.1 设置Windows后门启动 147
5.3.2 防御:检测Windows后门启动技术 152
5.3.3 启动UNIX后门 154
5.3.4 防御:检测UNIX后门启动技术 158
5.4 通用的网络连接工具:NetCat 158
5.4.1 NetCat处理标准输入和标准输出 159
5.4.2 NetCat后门命令行解释器监听程序 161
5.4.3 简单NetCat后门命令行解释器监听程序的局限性 163
5.4.4 利用NetCat后门客户机程序“强制”命令行解释器 164
5.4.5 Netcat+Crypto=Cryptcat 165
5.4.6 其他后门命令行解释器监听程序 165
5.4.7 防御后门命令行解释器监听程序 166
5.5 GUI越过网络大量使用虚拟网络计算 172
5.5.1 关注VNC 174
5.5.2 VNC网络特征和服务器模式 175
5.5.3 用VNC“强制”GUI 176
5.5.4 远程安装Windows VNC 177
5.5.5 远程GUI防御 179
5.6 无端口后门 179
5.6.1 ICMP后门 179
5.6.2 非混合型探测后门 180
5.6.3 混合型探测后门 183
5.6.4 防御无端口的后门 186
5.7 结论 189
5.8 总结 190
5.9 参考文献 191
第6章 特洛伊木马 192
6.1.1 与Windows扩展名放在一起 193
6.1 名字中有什么 193
6.1.2 模仿其他文件名 196
6.1.3 路径中的“.”威胁 200
6.1.4 特洛伊命名游戏的防御 202
6.2 包装明星 204
6.2.1 包装工具的特点 205
6.2.2 防御包装工具 206
6.3 特洛伊软件发行站点 206
6.3.1 特洛伊软件发行的老式路线 207
6.3.2 流行新趋势:追随Web站点 207
6.3.3 Tcpdump和Libpcap特洛伊木马后门 208
6.3.4 针对特洛伊软件发行的防御 211
6.4 给代码“下毒” 212
6.4.1 代码的复杂性使得攻击更容易 213
6.4.2 测试?什么测试 214
6.4.3 软件开发的全球化趋势 216
6.4.4 预防给代码“下毒” 217
6.5 “指定”一个浏览器:Setiri 218
6.5.1 Setiri组件 218
6.5.2 Setiri通信 219
6.5.3 防御Setiri 221
6.6 将数据隐藏在可执行文件中:隐藏和多态 223
6.6.1 Hydan和可执行文件信息隐藏 224
6.6.2 Hydan在起作用 225
6.6.3 防御Hydan 228
6.7 结论 228
6.8 总结 229
6.9 参考文献 230
第7章 用户模式RootKit 231
7.1 UNIX用户模式RootKit 233
7.1.1 LRK家族 235
7.1.2 Universal RootKit(URK) 244
7.1.3 使用RunEFS和Defiler'sToolkit控制文件系统 247
7.1.4 ext2文件系统概述 248
7.1.5 UNIXRootKit的防御 254
7.2 Windows用户模式RootKit 261
7.2.1 使用FakeGINA控制Windows登录 263
7.2.2 运行中的WFP 266
7.2.3 DLL注入、API挂钩和AFX WindowsRootKit 273
7.2.4 防御Windows系统中的用户模式RootKit 280
7.3 结论 284
7.4 总结 284
7.5 参考文献 286
第8章 内核模式RootKit 287
8.1 内核是什么 287
8.2 内核控制的影响 290
8.3 Linux内核 293
8.3.1 Linux内核探险 294
8.3.2 控制Linux内核的方法 301
8.3.3 防御Linux内核 318
8.3.4 检测Linux中的内核模式RootKit 322
8.3.5 应对Linux中的内核模式RootKit 324
8.4 Windows内核 324
8.4.1 Windows内核之旅 325
8.4.2 控制Windows内核的方法 337
8.4.3 内核模式Windows?或许某一天……很快 344
8.4.4 保卫Windows内核 345
8.5 结论 347
8.6 总结 348
8.7 参考文献 350
第9章 进一步深入 353
9.1 设置舞台:Malware的不同层次 354
9.2 更深层次:BIOS的可能性和Malware微代码 356
9.2.1 BIOS Malware的可能性 357
9.2.2 微代码Malware 366
9.3 组合Malware 379
9.3.1 Lion:Linux中蠕虫/RootKit组合 380
9.3.2 Bugbear:Windows中蠕虫/病毒/后门的组合 383
9.3.3 并不是全部 387
9.3.4 防御Malware组合体 388
9.4 结论 388
9.5 总结 388
9.6 参考文献 391
第1 0章 情节 392
10.1 情节1:白璧微瑕 393
10.2 情节2:内核偷盗者的入侵 399
10.3 情节3:沉默的蠕虫 408
10.4 结论 417
10.5 总结 417
第11章 恶意代码分析 420
11.1 建立一个恶意代码分析实验室 420
11.1.1 警告:使用没有工作目的的系统并远离Internet 421
11.1.2 全面的实验室体系结构 421
11.1.3 虚拟化任何事物 423
11.2 恶意代码分析过程 426
11.2.1 恶意代码分析和合法软件 427
11.2.2 准备和确认 428
11.2.3 安装实例并做好分析准备 432
11.2.4 静态分析 434
11.2.5 动态分析 448
11.2.6 用Burneye阻止恶意代码分析 463
11.3 结论 466
11.4 总结 467
11.5 参考文献 469
第12章 结论 470
12.1 跟上技术发展的有用站点 470
12.1.1 Packet Storm Security 471
12.1.2 Security Focus 471
12.1.3 Global Information Assurance Certification 472
12.1.4 Phrack Electronic Magazine 472
12.1.5 The Honeynet Project 473
12.1.6 Mega Security 474
12.1.7 Infosec Writers 474
12.1.8 Counterhack 474
12.2 临别思考 475
12.2.1 临别思考:悲观主义版 475
12.2.2 临别思考:乐观主义版 477