Exploiting Software:How to Break Code

副标题:无

作   者:(美)Greg Hoglund,(美)Gary McGraw编著;邓劲生翻译

分类号:

ISBN:9787302104452

微信扫一扫,移动浏览光盘

简介

  本书深入探讨了现实世界中的软件破解问题,解释了它们是如何以及为什么被破解的,介绍了相关的攻击模式,以及它们是如何被发现的。本书还展示了如何发现新软件的脆弱点以及如何利用这个脆弱点去攻破机器。    第1章介绍了软件是计算机系统安全问题的根本原因。引入了“问题三组合”——复杂性、可扩展性以及连通性——并描述了为什么软件安全问题是不断成长的。还介绍了软件的一些特征以及它们在软件攻击中的含义。    第2章介绍了实现bug和体系结构缺陷之间的区别,讨论了开放式系统的安全问题,并解释了为什么冒险管理是最明智的办法。介绍了现实世界中的两个攻击案例:一个比较简单,另一个在技术上比较复杂。本章的核心是讨论攻击模式,给出了攻击模式是如何适应不同网络安全特征的,并在本书的其他部分也介绍了攻击模式。    第3章的主题是逆向工程。攻击者反汇编、反编译以及解构程序来理解程序是如何工作的,以及如何阻止程序这样工作。在这一章里还介绍了常用的灰箱分析技术,包括利用安全补丁作为攻击地图的思想等。介绍了交互式反汇编程序(interactive disassembler,ida),它是黑客用于理解程序行为的工具。我们还仔细介绍了实用的黑客工具是如何被开发及使用的。   第4~7章讨论了攻击模式在实际中的使用案例。    第4章和第5章介绍了双端的客户机-服务器模型。第4章从hacking exposed一书[mccluye等著,1999]中遗留下的部分开始谈起,介绍了可信任的输入、权限提升、代码注入、路径追踪、破解可信任以及其他专用于服务端软件的攻击技术。第5章介绍了如何利用混合信号、跨网站脚本以及移动代码来攻击客户端软件。同时本章还介绍了逆向攻击的问题。这两章都讨论了攻击模式和实际的攻击案例。    第6章介绍了有关恶意代码输入的问题。该问题已超出了我们所讨论的分割分析、代码追踪以及反向分析程序代码的问题。解决该问题需要有较好的编码技术。再次说明,不管是现实世界中的攻击案例还是攻击模式,本书都做了比较全面的介绍。    正如需要受到鞭笞的坏小子一样,致命性的缓冲区溢出是第7章的主题。本章高度关注在其他一些技术资料里已谈到的缓冲区攻击技术。讨论了嵌入式系统中的缓冲区溢出、数据库中的缓冲区溢出、java环境下的缓冲区溢出以及基于内容的缓冲区溢出。本章讨论了如何发现潜在的各种类型的缓冲区溢出,包括栈溢出、运算错误、格式字符串的脆弱点、堆溢出, c++虚函数表,以及多阶段跳跃。详细介绍了一些特定操作平台上的攻击代码结构,例如x86、mips、sparc和pa-risc平台。同时,还介绍了一些攻破脆弱的安全系统的高级攻击代码结构技术,例如active armor和跳跃技术。本章还给出了大量的攻击模式。    第8章介绍了软件攻击中的顶尖技术——rootkit。利用该技术,攻击者可以完全控制整个系统。第8章的主要部分就是介绍基于windows xp的一个实际rootkit。主要包括钩子调用技术、可执行重定向技术、隐藏进程及文件技术、网络支持技术和二进制代码的补丁技术。同时,本章还详细讨论了部分硬件技术,包括利用eeprom隐藏rootkit的技术。当然除本章介绍的之外还有很多其他rootkit技术。    读者对象    本书适用于网络管理员、安全顾问、信息人士、开发人员以及希望编写安全代码的程序员。

目录

第1章 软件——问题的根源

1.1 软件简史

1.1.1 软件和信息战

1.1.2 数字谍报手段

1.2 不良软件很普遍

1.2.1 nasa(美国国家航空和宇宙航行局)的火星登陆器

1.2.2 丹佛机场行李管理系统

1.2.3 鱼鹰mv-22

1.2.4 美国军事系统自伤

1.2.5 microsoft和“爱”bug

1.3 问题三组合

1.3.1 复杂性

1.3.2 代码行数越多,bug就越多

1.3.3 可扩展性

1.3.4 连通性

1.3.5 结论

1.4 软件的未来

1.4.1 短期未来:2003—2004

1.4.2 中期未来:2005—2007

1.4.3 长期未来:2008—2010

.1.4.4 十条思路

1.5 什么是软件安全

1.6 小结

第2章 攻击模式

2.1 分类

2.1.1 bug

2.1.2 缺陷

2.1.3 脆弱点

2.1.4 设汁中的脆弱点

2.2 开放系统

2.2.1 风险

2.2.2 潜在损失

2.2.3 暴露度与力度

2.2.4 实际风险

2.3 一次攻击历程

2.3.1 攻击者的观点

2.3.2 为什么不能信任用户

2.3.3 “开锁”

2.3.4 一个简单的示例

2.4 攻击模式:灾难性的蓝图

2.4.1 破解、攻击和攻击者

2.4.2 攻击模式

2.4.3 代码注入

2.4.4 活动区

2.4.5 输出事件

2.4.6 反馈事件

2.5 攻击示例:对microsoft c++编译器的攻击

2.5.1 攻击的技术细节

2.5.2 对microsoft栈保护的概述

2.5.3 绕过microsoft的安全特性

2.5.4 解决方案

2.5.5 攻击回顾

2.6 应用攻击模式

2.6.1 网络扫描

2.6.2 操作系统辨识

2.6.3 端口扫描

2.6.4 路径追踪和区文件传输

2.6.5 目标组件

2.6.6 选择攻击模式

2.6.7 环境缺陷的影响

2.6.8 间接使用攻击

2.6.9 种植后门

2.7 攻击模式工具箱

2.8 小结

第3章 逆向工程和程序理解

3.1 进入逻辑的“房屋”

3.1.1 逆向工程

3.1.2 为什么需要逆向工程

3.2 逆向工程是非法的吗

3.3 逆向工程的概念及其使用的工具

3.3.1 调试程序

3.3.2 缺陷注入工具

3.3.3 反汇编工具

3.3.4 反编译器

3.4 逆向工程的方法

3.4.1 白箱分析

3.4.2 黑箱分析

3.4.3 灰箱分析

3.4.4 使用灰箱技术在microsoft的sql server 7中寻找脆弱点

3.5 逆向方法

3.5.1 输入追踪

3.5.2 软件版本的差异

3.5.3 代码覆盖

3.5.4 内核访问

3.5.5 共享缓冲区中的数据泄漏

3.5.6 对访问请求的审计

3.5.7 使用自己的api资源

3.6 编写ida插件

3.7 对软件进行反编译和反汇编

3.8 实练反编译:逆向helpctr.exe

3.8.1 bug报告

3.8.2 调试记录

3.9 自动、成批地审计脆弱点

3.10 编写属于自己的破解工具

3.10.1 x86工具

3.10.2 基本的x86调试程序

3.10.3 断点

3.10.4 存储器的读写

3.10.5 调试多线程程序

3.10.6 枚举线程或进程

3.10.7 单步执行

3.10.8 修补

3.10.9 故障注入

3.10.10 进程快照

3.10.11 反汇编机器代码

3.11 编写基本的代码覆盖工具

3.12 小结

第4章 攻击服务器软件

4.1 可信任输入问题

4.2 权限提升问题

4.2.1 进程权限之间的信任

4.2.2 如果不以管理员的身份运行,一切就会崩溃

4.2.3 从不被信任的资源中读取数据的进程权限提升

4.2.4 使用提升权限的进程

4.3 寻找注入点

4.4 输入路径的追踪

4.4.1 使用基于solaris sparc二进制的gdb和ida-pro

4.4.2 设置断点和表达式

4.4.3 利用ida映射运行时存储器地址

4.4.4 将gdb附加到一个正在运行的进程

4.4.5 基于solaris使用truss以模拟目标软件

4.5 通过配置破解受信任的软件

4.5.1 审计直接可执行文件

4.5.2 了解当前工作目录

4.5.3 如果web服务器不执行cgi程序该怎么办

4.5.4 什么是不可执行的文件

4.5.5 策略的使用

4.6 特殊的技术和对服务器软件的攻击

4.6.1 技术:注入命令解释程序

4.6.2 技术:管道、端口和权限

4.6.3 技术:攻击文件系统

4.6.4 技术:操作环境变量

4.6.5 技术:利用无关变量

4.6.6 技术:利用不良会话认证

4.6.7 技术:蛮力会话id

4.6.8 技术:验证的多重路径

4.6.9 技术:不能检验错误代码

4.7 小结

第5章 攻击客户端软件

5.1 作为攻击目标的客户端程序

5.1.1 服务器控制客户端

5.1.2 软件蜜罐

5.2 混合信号

5.2.1 古老(但却相关)的历史

5.2.2 基本的混合数据使用

5.2.3 针对打印机的有趣的混合信号

5.2.4 linux中的混合终端字符注入

5.2.5 反射问题

5.3 跨站点脚本

5.4 客户端脚本和恶意代码

5.4.1 检查较脆弱的本地调用

5.4.2 web浏览器和activex

5.4.3 e-mail注入

5.5 基于内容的攻击

5.6 逆向攻击:利用客户端缓冲区溢出

5.7 小结

第6章 构造恶意输入

6.1 防御者的困惑

6.1.1 过滤器

6.1.2 通信系统

6.2 入侵检测

6.2.1 基于签名和基于异常的ids

6.2.2 疲于应付的ids

6.2.3 在ids上交替编码的效应

6.3 分割分析

6.3.1 windows的apispy

6.3.2 红点

6.4 追踪代码

6.4.1 从脆弱区回溯

6.4.2 死端和逃避

6.4.3 运行时追踪

6.4.4 速度中断

6.4.5 追踪缓冲区

6.4.6 跳步

6.4.7 内存页断点

6.4.8 boron标记符

6.5 反向分析程序代码

6.5.1 字符转换

6.5.2 字节操作

6.5.3 指针操作

6.5.4 空终止符

6.6 示例:通过“正门”逆向i-planet server 6.o

6.7 错误的分类

6.8 产生“等效”请求

6.8.1 映射api层

6.8.2 虚字符

6.8.3 等效元字符

6.8.4 转义元字符

6.8.5 字符转换

6.8.6 组合攻击

6.9 检测中毒

6.10 小结

第7章 缓冲区溢出

7.1 缓冲区溢出

7.1.1 栈的摧毁(为了有趣和有益)

7.1.2 遭到破坏的状态

7.2 病毒注入:再次利用输入

7.2.1 病毒注入的结束和攻击代码的开始

7.2.2 在目标中选择合适的代码地址

7.2.3 高地址区和低地址区

7.2.4 big endian和little endian表示方式

7.2.5 使用寄存器

7.2.6 使用内存中现有的代码或是数据块

7.3 缓冲区溢出与嵌入式系统

7.4 数据库缓冲区溢出

7.4.1 存储过程

7.4.2 命令行应用程序

7.4.3 数据库的客户端程序

7.5 缓冲区溢出和java

7.5.1 同时使用java和c/c++

7.5.2 存储过程和动态链接库

7.6 基于内容的缓冲区溢出

7.7 缓冲区溢出的截获审计和过滤器

7.8 环境变量引起的溢出

7.9 多重操作问题

7.10 发现潜在的缓冲区溢出

7.10.1 异常处理掩盖错误

7.10.2 使用反汇编

7.11 栈溢出

7.11.1 固定大小的缓冲区

7.11.2 不能自动添加空字符作为结束的函数

7.11.3 off-by-one空字符结束的函数

7.11.4 改写异常处理程序结构

7.12 内存管理中的计算错误

7.12.1 负数“等于”很大的正数

7.12.2 有符号数和无符号数的不匹配

7.12.3 有符号数和内存管理

7.13 格式化字符串的脆弱点

7.13.1 从内存中的任何一个地方输出数据

7.13.2 在代码中检测问题

7.14 堆溢出

7.15 缓冲区溢出和c++

7.16 攻击代码

7.16.1 定向

7.16.2 攻击代码的大小

7.16.3 使用硬编码的函数调用

7.16.4 使用动态指令跳转表

7.16.5 定位数据段

7.16.6 异或(xor)保护

7.16.7 校验和与散列加载

7.17 基于risc体系结构的攻击代码

7.17.1 分支延迟或者延迟槽

7.17.2 基于mips的攻击代码结构

7.17.3 mips指令

7.17.4 定向

7.17.5 在mips操作码中避免空字节

7.17.6 mips中的系统调用

7.17.7 sparc攻击代码结构

7.17.8 sparc寄存器窗口

7.17.9 sparc上的栈调用

7.17.10 嵌套在sparc中的函数调用

7.17.11 pa-risc攻击代码的结构

7.17.12 pa-risc上的栈调用

7.17.13 在hpux pa-risc上的栈溢出

7.17.14 pa-risc的内部空间分支

7.17.15 内部空间跳跃

7.17.16 定向

7.17.17 hpux的自解密攻击代码

7.17.18 aix/powerpc的攻击代码结构

7.17.19 定位

7.17.20 给powerpc命令解释程序代码披上盔甲

7.17.21 删除空字符

7.18 多平台的攻击代码

7.19 保护函数的prolog—epilog代码

7.19.1 击溃栈保护

7.19.2 击溃非可执行栈

7.20 小结

第8章 rootklt

8.1 破坏性的程序

8.1.1 什么是rootkit

8.1.2 什么是内核rootkit

8.1.3 内核rootkit及其受信任的计算基础

8.2 简单的windows xp内核rootkit

8.2.1 编写rootkit

8.2.2 checked编译环境

8.2.3 rootkit中的文件

8.2.4 建立环境

8.2.5 内核驱动程序

8.2.6 驱动程序的基本结构

8.2.7 使用驱动程序

8.2.8 允许卸载驱动程序

8.2.9 注册驱动程序

8.2.10 使用systemloadandcalllmage

8.3 钩子调用

8.3.1 隐藏进程

8.3.2 系统调用的钩子

8.3.3 基本钩子调用的结构

8.3.4 删除进程记录

8.3.5 另一种进程注入的方法

8.4 特洛伊可执行程序的重定向

8.4.1 重定向和tripwire问题

8.4.9 重定向驱动程

8.5 隐藏文件和目录

8.6 修补二进制代码

8.6.1 窥探补丁

8.6.2 修补nt内核以删除所有的安全保护

8.7 硬件病毒

8.7.1 读写硬件存储空间

8.7.2 示例:读/写键盘硬件

8.7.3 允许从eeprom读或写

8.7.4 cih

8.7.5 eeprom和定时

8.7.6 以太网的eeprom

8.7.7 串行eeprom和并行eeprom

8.7.8 烧毁硬件

8.7.9 制造商

8.7.10 通过通用闪存接口检测芯片

8.7.11示例:检测flash ram芯片

8.7.12 利用id模式或jedec id检测芯片

8.8 低级磁盘访问

8.8.1 读或写主引导记录

8.8.2 感染cd-rom

8.9 给驱动程序添加网络支持

8.9.1 使用ndis库

8.9.2 使接口处于混杂模式

8.9.3 寻找正确的网卡

8.9.4 为了安全而使用boron标记

8.9.5 添加交互式命令解释程序

8.10 中断

8.10.1 intel的中断请求(irq)结构

8.10.2 钩住中断描述符表(idt)

8.10.3 神秘的程序中断控制器(pic)

8.11 击键记录

8.11.1 linux下的击键记录

8.11.2 windows nt/2000/xp下的击键记录

8.11.3 键盘控制器芯片

8.12 高级rootkit专题

8.12.1使用rootkit作为调试器

8.12.2 禁用windows系统的文件保护功能

8.12.3 直接写物理存储器

8.12.4 内核缓冲区溢出

8.12.5 感染内核镜像

8.12.6 改变程序执行方向

8.12.7 检测rootkit

8.13 小结

附录a 攻击模式

已确认勘误

次印刷

页码 勘误内容 提交人 修订印次

Exploiting Software:How to Break Code
    • 名称
    • 类型
    • 大小

    光盘服务联系方式: 020-38250260    客服QQ:4006604884

    意见反馈

    14:15

    关闭

    云图客服:

    尊敬的用户,您好!您有任何提议或者建议都可以在此提出来,我们会谦虚地接受任何意见。

    或者您是想咨询:

    用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问

    Video Player
    ×
    Audio Player
    ×
    pdf Player
    ×
    Current View

    看过该图书的还喜欢

    some pictures

    解忧杂货店

    东野圭吾 (作者), 李盈春 (译者)

    loading icon