书籍详情

缓冲区溢出攻击:检测、剖析与预防

缓冲区溢出攻击:检测、剖析与预防

作者:(美)福斯特 等著,蔡勉 译

出版社:清华大学出版社

出版时间:2006-12-01

ISBN:9787302139423

定价:¥49.00

购买这本书可以去
内容简介
  对于缓冲区溢出,有三件事令我印象深刻:第一次成功地在Linux的imapd上利用一个缓冲区溢出;第一次在本地的Linux中独立发现和利用了缓冲区溢出;第一次通过编写缓冲区溢出成功进入别人的主机。在读过Aleph1的关于缓冲区溢出的重要论文“Buffer overflows for fun and profit”后,大多数人想到的主要是由此带来的好处。因为精通编写缓冲区溢出程序的人在该行业任何一家大公司中做咨询师的年薪都可以达到9~12万美元。但另一方面,许多人对获得这种技能有一个很大的误区,认为学会这种技能,就可以一劳永逸了。确实,在IT领域许多诀窍是可以学会的,一旦了解了这些诀窍,也就拥有这些诀窍了。但是编写缓冲区溢出程序却并不如此,从书本中或者速成班中可以学会基础知识,但是编程的环境总是在变化。一方面,黑客在不停地寻找新的方法来更好的利用漏洞,寻找发现新的漏洞方法;另一方面,微软公司每天都在给它的代码增加保护,如果3个月不写缓冲区溢出代码,原有的技巧也就过时了。编写缓冲区溢出中最难的就是要地根据不断变化的环境给出新对策。用于编写溢出程序的工具也在不断变化着,以前编写溢出程序只需要一份Softice或GDB的拷贝,就可以由某个人单独完成。但是今天,即使是一个简单的缓冲区溢出,Immunity公司也会有相当大的投入。例如,需要有专门的调试器来查询、脚本化正在运行的程序;专门的编译器来创建和调整克服弱点所需求的shellcode;购买或产生用于专门解决各种不同问题的反向工程工具;用Python语言编写的完整的mySQL和SSL库。一个相对复杂的漏洞利用需要整个工作小组协调完成。每种复杂的漏洞利用都会有相应的文章介绍,这些漏洞利用来自于整个团队在不同漏洞利用过程中所得到的经验。最好的缓冲区溢出程序决不会是蠕虫。攻击者定制的漏洞利用会使被攻击者身陷其中。如果一个顶级黑客要攻击某个人,则会完全掌握目标主机的工作环境,目的只有一个,产生一个只使用一次的缓冲区溢出。编写缓冲区溢出程序有几个阶段。本书作者James Foster介绍了一些基础的知识和技巧,对初学者进行基础的训练,确定专攻的方向,然后就可以独自编写缓冲区溢出程序。虽然本书不能使读者站到技术的最前沿,但是能够确信自己掌握了基础知识,能够做出正确的决定。也许读者可能投身于此项工作,致力于编写代码、提高技能。对于选择这一行的读者,请记住下面的座右铭:● 永远不要害怕。微软的销售人员在不停地告诫人们发现微软的新软件的缓冲区溢出漏洞和编写相应的漏洞利用程序是件非常困难的事情。激励自己继续做下去的对策就是想像一旦漏洞利用成功,自己将会如何处理这个漏洞。编写漏洞利用程序需要掌握很多单调枯燥的技术,例如,HP-UX所用的少见的扇形内存访问方式;Irix带有的笨拙的高速缓冲存储器。虽然编写缓冲区溢出程序需要数千条的汇编语句,学起来并不是一件容易的事情,但只要自己觉得能做到,那就一定能做到。● 不要太把自己当回事。无论自己多么优秀,在遥远的地方可能还有一些十五岁的年轻人每天花20小时来争取做得更好。不要把编写缓冲区溢出程序当成一场竞争,否则你不久就会崩溃。● 找一些伙伴。编写缓冲区溢出程序不是独自能不断进步的一个技能,需要别人的帮助,找出自己在哪方面还比较薄弱。● 不管目标是什么,要把这本书当作工作表,而不是一本小说。要一边读一边在电脑上操作。一本缓冲区溢出的书不能造就出一个高明的黑客。在逐章学习的过程中,会发现在漏洞利用不起作用时,自己会去不断地尝试,会废寝忘食,会不惜花金钱来更准确地掌握所学到的知识。● 我的观点是:漏洞利用是事实的复杂陈述,如果你赞同这个观点,将使编写缓冲区溢出程序变得更加美妙。希望有一天能像欣赏艺术品一样欣赏你的代码。—Dave AitelImmunity公司创始人兼CEO
作者简介
  本书提供作译者介绍James C.Foster是CSC的全球安全解决方案开发部门的副主任,在加入CSC前,Foster是Foundstone公司的开发和研究部门的负责人,他全面负责公司的产品、咨询以及研发方面的指导。在加入Foundstone前,Foster是Guardent公司的高级顾问和资深研究员,同时兼任Information Security杂志的编辑。...
目录
第Ⅰ部分  扩展缓冲区溢出
第1章  缓冲区溢出的基本概念    3
1.1  简介    4
1.2  软件安全危机    4
1.3  缓冲区溢出的增加    8
1.4  exploits与缓冲区溢出    9
1.5  定义    11
1.5.1  硬件    11
1.5.2  软件    11
1.5.3  安全    15
1.6  小结    16
1.7  快速解决方案    16
1.8  网站链接    17
1.9  邮件清单    17
1.10  常见问题    18
第2章  理解shellcode    19
2.1  简介    20
2.2  shellcode概述    20
2.3  空字节问题    27
2.4  实现系统调用    28
2.5  远程shellcode    30
2.5.1  端口绑定shellcode    30
2.5.2  套接字描述符重用shellcode    32
2.6  本地shellcode    33
2.6.1  execve shellcode    33
2.6.2  setuid shellcode    35
2.6.3  chroot shellcode    36
2.7  小结    41
2.8  快速解决方案    41
2.9  网站链接    42
2.10  邮件清单    42
2.11  常见问题    43
第3章  编写shellcode    45
3.1  简介    46
3.2  shellcode示例    46
3.2.1  Write系统调用    49
3.2.2  execve shellcode    52
3.2.3  端口绑定shellcode    60
3.2.4  反向连接shellcode    70
3.2.5  套接口重用shellcode    73
3.2.6  重用文件描述符    75
3.2.7  shellcode编码    81
3.3  重用程序变量    86
3.3.1  公开的源程序    87
3.3.2  关闭的源程序    88
3.4  操作系统间的shellcode    90
3.5  理解已有的shellcode    91
3.6  小结    95
3.7  快速解决方案    95
3.8  网站链接    96
3.9  邮件清单    97
3.10  常见问题    97
第4章  Win32汇编语言    99
4.1  简介    100
4.2  应用程序的内存布置    100
4.2.1  应用程序结构    102
4.2.2  内存分配—— 堆栈    103
4.2.3  内存分配—— 堆    103
4.3  Windows汇编    104
4.3.1  寄存器    104
4.3.2  Hello World    107
4.4  小结    109
4.5  快速解决方法    109
4.6  网站链接    110
4.7  常见问题    110
案例分析1.1  FreeBSD NN Exploit代码    114
案例分析1.2  xlockmore用户提供的格式化字符串    118
案例分析1.3  使用Winsock的Frontpage的拒绝服务    122
案例分析1.4  FreeBSD上的cURL缓冲区溢出    133
第Ⅱ部分  缓冲区溢出解析
第5章  堆栈溢出    139
5.1  简介    140
5.2  Intel x86结构和机器语言基础    141
5.2.1  寄存器    141
5.2.2  堆栈和程序调用    142
5.2.3  调用规则和堆栈结构    148
5.2.4  进程内存布局    156
5.3  堆栈溢出和它们的利用    157
5.3.1  简单的溢出    158
5.3.2  创建一个可利用的溢出的实例程序    162
5.3.3  执行exploit    164
5.4  什么是Off-by-One 溢出?    174
5.5  寻找堆栈溢出的挑战    183
5.5.1  词汇分析    184
5.5.2  语义分析器    186
5.5.3  应用程序保护    187
5.5.4  OpenBSD 2.8 ftpd的off-by-one错误    187
5.5.5  Apache htpasswd缓冲区溢出    188
5.6  小结    189
5.7  快速解决方案    191
5.8  网站链接    192
5.9  邮件清单    192
5.10  常见问题    192
第6章  堆腐烂    195
6.1  简介    196
6.2  简单堆腐烂    196
6.2.1  使用堆——malloc()、calloc()和realloc()    197
6.2.2  简单的堆和BSS溢出    198
6.2.3  腐烂C++中的函数指针    200
6.3  高级堆腐烂—Doug Lea malloc    203
6.3.1  Doug Lea malloc概述    203
6.3.2  内存组织——边界标志、箱(Bins)和场域(Arenas)    204
6.3.3  free()算法    208
6.3.4  伪数据块    209
6.3.5  易受攻击程序示例    211
6.3.6  利用frontlink()    213
6.3.7  堆上的Off-by-One和Off-by-Five    214
6.4  高级堆腐烂—— System V malloc    215
6.5  应用程序防御    225
6.6  小结    227
6.7  快速解决方案    228
6.7.1  简单堆腐烂    228
6.7.2  高级堆腐烂—— Doug Lea malloc    228
6.7.3  高级堆腐烂——System V malloc    228
6.7.4  应用程序防御    228
6.8  网站链接    229
6.9  常见问题    230
第7章  可移植的网络编程    231
7.1  简介    232
7.2  什么是格式化字符串    232
7.2.1  带有不定数量参数的C函数    232
7.2.2  省略和va_args    233
7.2.3  格式化输出的函数    235
7.3  使用格式化字符串    237
7.3.1  printf()例子    237
7.3.2  格式化符号和printf()参数    238
7.3.3  格式标识符的类型    239
7.4  误用格式化字符串    240
7.4.1  对坏的格式化字符串进行操作    242
7.4.2  拒绝服务    243
7.4.3  读取存储器    244
7.4.4  存储器写入    246
7.5  利用格式化字符串缺陷的挑战    251
7.5.1  寻找格式化字符串缺陷    251
7.5.2  覆盖什么    253
7.5.3  操作系统的差别    259
7.5.4  利用不同系统的困难    261
7.6  应用程序防御    261
7.7  小结    263
7.8  快速解决方案    264
7.9  网站链接    265
7.10  常见问题    265
第8章  Windows缓冲区溢出    267
8.1  简介    268
8.1.1  背景    268
8.1.2  基本的堆栈溢出    268
8.1.3  编写Windows shellcode    274
8.1.4  克服特殊的字符(例如空字节)    280
8.1.5  客户端服务器应用程序    285
8.1.6  使用/误用结构化异常处理器    295
8.2  小结    300
8.3  问题快速解决方案    301
8.4  网站链接    302
8.5  常见问题    302
案例分析2.1  Linux中的cURL缓冲区溢出    306
案例分析2.2  异常客户端密钥远程缓冲区溢出漏洞    311
案例分析2.3  X11R6 4.2 XLOCALEDIR溢出    322
案例分析2.4  微软MDAC拒绝服务漏洞    327
案例分析2.5  本地UUX缓冲区在HPUX上溢出    339
第Ⅲ部分  查找缓冲区溢出
第9章  从源代码中找出缓冲区溢出    345
9.1  简介    346
9.2  源代码分析    346
9.3  免费开放源代码工具    348
9.3.1  Application Defence Snapshot    348
9.3.2  RATS    350
9.3.3  Flawfinder    353
9.3.4  ITS4    359
9.4  Application Defense—— 企业开发版    359
9.5  Secure Software公司    363
9.5.1  结构和部署    364
9.5.2  缺陷知识库    364
9.5.3  使用CodeAssure    365
9.5.4  补救措施    371
9.6  Ounce Labs公司    371
9.6.1  Prexis的自动化分析科学    372
9.6.2  Prexis结构    372
9.6.3  Prexis的运用    373
9.6.4  Prexis的缺陷评估    374
9.7  Fortify Software公司    378
9.7.1  Fortify源代码分析工具    379
9.7.2  使用源代码分析引擎    379
9.7.3  核查工作台    381
9.7.4  软件安全管理软件    384
9.8  小结    386
9.9  快速解决方案    386
9.10  网站链接    387
9.11  常见问题    388
案例分析3.1  InlineEgg I    390
案例分析3.2  InlineEgg II    392
案例分析3.3  Seti@Home Exploit 代码    395
案例分析3.4  微软公司CodeBlue Exploit代码    402
附录A  完整的数据换算表    407
附录B  有用的系统调用函数    408
猜您喜欢

读书导航