软件剖析 代码攻防之道PDF电子书下载
- 电子书积分:12 积分如何计算积分?
- 作 者:(美)Greg Hoglund,(美)Gary McGraw编著;邓劲生翻译
- 出 版 社:北京:清华大学出版社
- 出版年份:2005
- ISBN:730210445X
- 页数:339 页
目录 1
第1章 软件——问题的根源 1
1.1 软件简史 1
1.1.1 软件和信息战 4
1.1.2 数字谍报手段 4
1.2 不良软件很普遍 7
1.2.1 NASA(美国国家航空和宇宙航行局)的火星登陆器 7
1.2.2 丹佛机场行李管理系统 7
1.2.4 美国军事系统自伤 8
1.2.3 鱼鹰MV-22 8
1.2.5 Microsoft和“爱”bug 9
1.3 问题三组合 10
1.3.1 复杂性 10
1.3.2 代码行数越多,bug就越多 11
1.3.3 可扩展性 12
1.3.4 连通性 15
1.3.5 结论 16
1.4 软件的未来 16
1.4.1 短期未来:2003—2004 16
1.4.2 中期未来:2005—2007 18
1.4.3 长期未来:2008—2010 20
1.4.4 十条思路 21
1.5 什么是软件安全 21
1.6 小结 22
第2章 攻击模式 24
2.1 分类 24
2.1.1 bug 25
2.1.2 缺陷 25
2.1.3 脆弱点 25
2.1.4 设计中的脆弱点 26
2.2 开放系统 27
2.2.1 风险 29
2.2.2 潜在损失 29
2.2.3 暴露度与力度 30
2.2.4 实际风险 30
2.3 一次攻击历程 31
2.3.1 攻击者的观点 31
2.3.2 为什么不能信任用户 32
2.3.3 “开锁” 32
2.3.4 一个简单的示例 34
2.4.2 攻击模式 36
2.4.1 破解、攻击和攻击者 36
2.4 攻击模式:灾难性的蓝图 36
2.4.3 代码注入 37
2.4.4 活动区 37
2.4.5 输出事件 37
2.4.6 反馈事件 37
2.5 攻击示例:对Microsoft C++编译器的攻击 37
2.5.1 攻击的技术细节 39
2.5.2 对Microsoft栈保护的概述 39
2.5.3 绕过Microsoft的安全特性 40
2.5.4 解决方案 42
2.5.5 攻击回顾 42
2.6 应用攻击模式 43
2.6.1 网络扫描 43
2.6.2 操作系统辨识 43
2.6.3 端口扫描 44
2.6.4 路径追踪和区文件传输 44
2.6.5 目标组件 44
2.6.8 间接使用攻击 45
2.6.9 种植后门 45
2.6.6 选择攻击模式 45
2.6.7 环境缺陷的影响 45
2.7 攻击模式工具箱 46
2.8 小结 46
第3章 逆向工程和程序理解 47
3.1 进入逻辑的“房屋” 47
3.1.1 逆向工程 48
3.1.2 为什么需要逆向工程 50
3.2 逆向工程是非法的吗 50
3.3 逆向工程的概念及其使用的工具 51
3.3.3 反汇编工具 52
3.3.4 反编译器 52
3.3.1 调试程序 52
3.3.2 缺陷注入工具 52
3.4 逆向工程的方法 53
3.4.1 白箱分析 53
3.4.2 黑箱分析 53
3.4.3 灰箱分析 54
3.4.4 使用灰箱技术在Microsoft的SQL Server 7中寻找脆弱点 55
3.5 逆向方法 56
3.5.1 输入追踪 56
3.5.2 软件版本的差异 57
3.5.3 代码覆盖 58
3.5.4 内核访问 59
3.5.5 共享缓冲区中的数据泄漏 59
3.5.6 对访问请求的审计 60
3.5.7 使用自己的API资源 60
3.6 编写IDA插件 61
3.7 对软件进行反编译和反汇编 73
3.8 实练反编译:逆向helpctr.exe 74
3.8.2 调试记录 75
3.8.1 bug报告 75
3.9 自动、成批地审计脆弱点 78
3.10 编写属于自己的破解工具 87
3.10.1 x86工具 87
3.10.2 基本的x86调试程序 88
3.10.3 断点 89
3.10.4 存储器的读写 92
3.10.5 调试多线程程序 93
3.10.6 枚举线程或进程 95
3.10.7 单步执行 96
3.10.9 故障注入 97
3.10.8 修补 97
3.10.10 进程快照 98
3.10.11 反汇编机器代码 102
3.11 编写基本的代码覆盖工具 104
3.12 小结 109
第4章 攻击服务器软件 110
4.1 可信任输入问题 111
4.2 权限提升问题 112
4.2.1 进程权限之间的信任 112
4.2.3 从不被信任的资源中读取数据的进程权限提升 113
4.2.2 如果不以管理员的身份运行,一切就会崩溃 113
4.2.4 使用提升权限的进程 114
4.3 寻找注入点 114
4.4 输入路径的追踪 116
4.4.1 使用基于Solaris SPARC二进制的GDB和IDA-Pro 116
4.4.2 设置断点和表达式 116
4.4.3 利用IDA映射运行时存储器地址 117
4.4.4 将GDB附加到一个正在运行的进程 117
4.4.5 基于Solaris使用Truss以模拟目标软件 118
4.5 通过配置破解受信任的软件 120
4.5.2 了解当前工作目录 121
4.5.3 如果Web服务器不执行cgi程序该怎么办 121
4.5.1 审计直接可执行文件 121
4.5.4 什么是不可执行的文件 122
4.5.5 策略的使用 123
4.6 特殊的技术和对服务器软件的攻击 123
4.6.1 技术:注入命令解释程序 124
4.6.2 技术:管道、端口和权限 134
4.6.3 技术:攻击文件系统 136
4.6.4 技术:操作环境变量 140
4.6.5 技术:利用无关变量 140
4.6.6 技术:利用不良会话认证 142
4.6.7 技术:蛮力会话ID 143
4.6.8 技术:验证的多重路径 147
4.6.9 技术:不能检验错误代码 147
4.7 小结 147
第5章 攻击客户端软件 148
5.1 作为攻击目标的客户端程序 148
5.1.1 服务器控制客户端 149
5.1.2 软件蜜罐 149
5.2 混合信号 150
5.2.1 古老(但却相关)的历史 150
5.2.2 基本的混合数据使用 152
5.2.3 针对打印机的有趣的混合信号 153
5.2.4 Linux中的混合终端字符注入 153
5.2.5 反射问题 155
5.3 跨站点脚本 155
5.4 客户端脚本和恶意代码 160
5.4.1 检查较脆弱的本地调用 160
5.4.2 Web浏览器和ActiveX 166
5.4.3 E-mail注入 167
5.5 基于内容的攻击 170
5.6 逆向攻击:利用客户端缓冲区溢出 170
5.7 小结 171
第6章 构造恶意输入 172
6.1 防御者的困惑 173
6.1.1 过滤器 174
6.1.2 通信系统 174
6.2 入侵检测 175
6.2.1 基于签名和基于异常的IDS 175
6.2.2 疲于应付的IDS 176
6.2.3 在IDS上交替编码的效应 176
6.3 分割分析 178
6.3.1 Windows的APISPY 178
6.4 追踪代码 179
6.3.2 红点 179
6.4.1 从脆弱区回溯 180
6.4.2 死端和逃避 181
6.4.3 运行时追踪 181
6.4.4 速度中断 183
6.4.5 追踪缓冲区 184
6.4.6 跳步 185
6.4.7 内存页断点 185
6.4.8 boron标记符 185
6.5.1 字符转换 186
6.5 反向分析程序代码 186
6.5.2 字节操作 187
6.5.3 指针操作 187
6.5.4 空终止符 188
6.6 示例:通过“正门”逆向I-Planet Server 6.0 189
6.7 错误的分类 193
6.8 产生“等效”请求 193
6.8.1 映射API层 194
6.8.2 虚字符 195
6.8.3 等效元字符 196
6.8.4 转义元字符 197
6.8.5 字符转换 198
6.8.6 组合攻击 200
6.9 检测中毒 201
6.10 小结 202
第7章 缓冲区溢出 203
7.1 缓冲区溢出 203
7.1.1 栈的摧毁(为了有趣和有益) 204
7.1.2 遭到破坏的状态 204
7.2 病毒注入:再次利用输入 205
7.2.1 病毒注入的结束和攻击代码的开始 206
7.2.2 在目标中选择合适的代码地址 206
7.2.3 高地址区和低地址区 207
7.2.4 big endian和little endian表示方式 208
7.2.5 使用寄存器 208
7.2.6 使用内存中现有的代码或是数据块 209
7.3 缓冲区溢出与嵌入式系统 210
7.4 数据库缓冲区溢出 211
7.4.3 数据库的客户端程序 212
7.5 缓冲区溢出和Java 212
7.4.1 存储过程 212
7.4.2 命令行应用程序 212
7.5.1 同时使用Java和C/C++ 213
7.5.2 存储过程和动态链接库 214
7.6 基于内容的缓冲区溢出 214
7.7 缓冲区溢出的截获审计和过滤器 216
7.8 环境变量引起的溢出 217
7.9 多重操作问题 218
7.10 发现潜在的缓冲区溢出 218
7.10.1 异常处理掩盖错误 218
7.11 栈溢出 219
7.10.2 使用反汇编 219
7.11.1 固定大小的缓冲区 220
7.11.2 不能自动添加空字符作为结束的函数 221
7.11.3 off-by-one空字符结束的函数 222
7.11.4 改写异常处理程序结构 225
7.12 内存管理中的计算错误 226
7.12.1 负数“等于”很大的正数 226
7.12.2 有符号数和无符号数的不匹配 228
7.12.3 有符号数和内存管理 231
7.1 3 格式化字符串的脆弱点 233
7.13.1 从内存中的任何一个地方输出数据 235
7.13.2 在代码中检测问题 238
7.14 堆溢出 239
7.15 缓冲区溢出和C++ 242
7.16 攻击代码 243
7.16.1 定向 244
7.16.2 攻击代码的大小 245
7.16.3 使用硬编码的函数调用 245
7.16.4 使用动态指令跳转表 245
7.16.6 异或(XOR)保护 247
7.16.7 校验和与散列加载 247
7.16.5 定位数据段 247
7.17 基于RISC体系结构的攻击代码 248
7.17.1 分支延迟或者延迟槽 248
7.17.2 基于MIPS的攻击代码结构 249
7.17.3 MIPS指令 249
7.17.4 定向 249
7.17.5 在MIPS操作码中避免空字节 250
7.17.6 MIPS中的系统调用 251
7.17.7 SPARC攻击代码结构 251
7.17.8 SPARC寄存器窗口 251
7.17.9 SPARC上的栈调用 252
7.17.11 PA-RISC攻击代码的结构 254
7.17.10 嵌套在SPARC中的函数调用 254
7.17.12 PA-RISC上的栈调用 256
7.17.13 在HPUX PA-RISC 上的栈溢出 258
7.17.14 PA-RISC的内部空间分支 258
7.17.15 内部空间跳跃 259
7.17.16 定向 260
7.17.17 HPUX的自解密攻击代码 261
7.17.18 AIX/PowerPC的攻击代码结构 263
7.17.19 定位 263
7.17.20 给PowerPC命令解释程序代码披上盔甲 264
7.18 多平台的攻击代码 265
7.17.21 删除空字符 265
7.19 保护函数的Prolog—Epilog代码 267
7.19.1 击溃栈保护 267
7.19.2 击溃非可执行栈 269
7.20 小结 271
第8章 rootkit 272
8.1 破坏性的程序 272
8.1.1 什么是rootkit 272
8.2.2 checked编译环境 273
8.2.1 编写rootkit 273
8.1.3 内核rootkit及其受信任的计算基础 273
8.2 简单的Windows XP内核rootkit 273
8.1.2 什么是内核rootkit 273
8.2.3 rootkit中的文件 274
8.2.4 建立环境 274
8.2.5 内核驱动程序 274
8.2.6 驱动程序的基本结构 274
8.2.7 使用驱动程序 275
8.2.8 允许卸载驱动程序 276
8.2.9 注册驱动程序 278
8.2.10 使用SystemLoadAndCallImage 280
8.3 钩子调用 282
8.3.1 隐藏进程 283
8.3.2 系统调用的钩子 283
8.3.3 基本钩子调用的结构 283
8.3.4 删除进程记录 284
8.3.5 另一种进程注入的方法 287
8.4 特洛伊可执行程序的重定向 287
8.4.1 重定向和Tripwire问题 287
8.4.2 重定向驱动程序 288
8.5 隐藏文件和目录 292
8.6 修补二进制代码 294
8.6.1 窥探补丁 295
8.6.2 修补NT内核以删除所有的安全保护 296
8.7 硬件病毒 306
8.7.1 读写硬件存储空间 307
8.7.2 示例:读/写键盘硬件 308
8.7.3 允许从EEPROM读或写 313
8.7.4 CIH 313
8.7.5 EEPROM和定时 316
8.7.6 以太网的EEPROM 316
8.7.9 制造商 319
8.7.7 串行EEPROM和并行EEPROM 319
8.7.8 烧毁硬件 319
8.7.10 通过通用闪存接口检测芯片 320
8.7.11 示例:检测Flash RAM芯片 320
8.7.12 利用ID模式或JEDECID检测芯片 321
8.8 低级磁盘访问 322
8.8.1 读或写主引导记录 323
8.8.2 感染CD-ROM 323
8.9 给驱动程序添加网络支持 323
8.9.1 使用NDIS库 323
8.9.2 使接口处于混杂模式 325
8.9.3 寻找正确的网卡 326
8.9.4 为了安全而使用boron标记 331
8.9.5 添加交互式命令解释程序 331
8.10 中断 331
8.10.1 Intel的中断请求(IRQ)结构 331
8.10.2 钩住中断描述符表(IDT) 332
8.10.3 神秘的程序中断控制器(PIC) 333
8.11 击键记录 334
8.11.1 Linux下的击键记录 334
8.12 高级rootkit专题 335
8.11.3 键盘控制器芯片 335
8.11.2 Windows NT/2000/XP下的击键记录 335
8.12.1 使用rootkit作为调试器 336
8.12.2 禁用Windows系统的文件保护功能 336
8.12.3 直接写物理存储器 336
8.12.4 内核缓冲区溢出 336
8.12.5 感染内核镜像 336
8.12.6 改变程序执行方向 336
8.12.7 检测rootkit 337
8.13 小结 337
附录A 攻击模式 338
- 《英汉翻译理论的多维阐释及应用剖析》常瑞娟著 2019
- 《区块链DAPP开发入门、代码实现、场景应用》李万胜著 2019
- 《当代翻译美学的理论诠释与应用解读》宁建庚著 2019
- 《社会文化系统中的翻译》姜秋霞,杨正军 2019
- 《2020考研英语大趋势 历年真题完形+翻译+新题型精讲精练》商志 2019
- 《潜文本的阐释与翻译》刘早著 2019
- 《财经新闻翻译实践教程》胡婉,黄剑,王旭泉主编 2019
- 《文化转向视角下的英汉翻译问题再审视》王燕著 2020
- 《科技语篇翻译教程》雷晓峰,李静主编 2020
- 《民族民俗文化旅游翻译研究》杨山青,朱必俊著 2019
- 《SQL与关系数据库理论》(美)戴特(C.J.Date) 2019
- 《魔法销售台词》(美)埃尔默·惠勒著 2019
- 《看漫画学钢琴 技巧 3》高宁译;(日)川崎美雪 2019
- 《优势谈判 15周年经典版》(美)罗杰·道森 2018
- 《社会学与人类生活 社会问题解析 第11版》(美)James M. Henslin(詹姆斯·M. 汉斯林) 2019
- 《海明威书信集:1917-1961 下》(美)海明威(Ernest Hemingway)著;潘小松译 2019
- 《迁徙 默温自选诗集 上》(美)W.S.默温著;伽禾译 2020
- 《上帝的孤独者 下 托马斯·沃尔夫短篇小说集》(美)托马斯·沃尔夫著;刘积源译 2017
- 《巴黎永远没个完》(美)海明威著 2017
- 《剑桥国际英语写作教程 段落写作》(美)吉尔·辛格尔顿(Jill Shingleton)编著 2019
- 《大学计算机实验指导及习题解答》曹成志,宋长龙 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 七年级 上 配人教版》周志英总主编 2019
- 《大学生心理健康与人生发展》王琳责任编辑;(中国)肖宇 2019
- 《大学英语四级考试全真试题 标准模拟 四级》汪开虎主编 2012
- 《大学英语教学的跨文化交际视角研究与创新发展》许丽云,刘枫,尚利明著 2020
- 《北京生态环境保护》《北京环境保护丛书》编委会编著 2018
- 《复旦大学新闻学院教授学术丛书 新闻实务随想录》刘海贵 2019
- 《大学英语综合教程 1》王佃春,骆敏主编 2015
- 《大学物理简明教程 下 第2版》施卫主编 2020
- 《指向核心素养 北京十一学校名师教学设计 英语 九年级 上 配人教版》周志英总主编 2019