软件是如何被破解的?攻击者是如何有目的地破解软件的?当安全领域的专家意识到计算机系统的安全事实上就是软件行为的安全时,软件安全得到了推动性的发展。本书描述如何破解代码。其目的是提供安全专家们需要直接面对的实际中的技术问题。本书也直接与软件安全和网络安全相关。相信那些抱怨缺乏软件安全技能的人们,包括开发团队和黑客们,会对此书有极大的兴趣,因为本书是至今以来最好的图书之一!
网站首页 软件下载 游戏下载 翻译软件 电子书下载 电影下载 电视剧下载 教程攻略
书名 | 软件剖析--代码攻防之道 |
分类 | 教育考试-考试-计算机类 |
作者 | (美)霍格兰德//(美)米哥罗 |
出版社 | 清华大学出版社 |
下载 | ![]() |
简介 | 编辑推荐 软件是如何被破解的?攻击者是如何有目的地破解软件的?当安全领域的专家意识到计算机系统的安全事实上就是软件行为的安全时,软件安全得到了推动性的发展。本书描述如何破解代码。其目的是提供安全专家们需要直接面对的实际中的技术问题。本书也直接与软件安全和网络安全相关。相信那些抱怨缺乏软件安全技能的人们,包括开发团队和黑客们,会对此书有极大的兴趣,因为本书是至今以来最好的图书之一! 内容推荐 本书深入探讨了现实世界中的软件破解问题,解释了它们是如何以及为什么被破解的,介绍了相关的攻击模式,以及它们是如何被发现的。本书还展示了如何发现新软件的脆弱点以及如何利用这个脆弱点去攻破机器。 第1章介绍了软件是计算机系统安全问题的根本原因。引入了“问题三组合”——复杂性、可扩展性以及连通性——并描述了为什么软件安全问题是不断成长的。还介绍了软件的一些特征以及它们在软件攻击中的含义。 第2章介绍了实现bug和体系结构缺陷之间的区别,讨论了开放式系统的安全问题,并解释了为什么冒险管理是最明智的办法。介绍了现实世界中的两个攻击案例:一个比较简单,另一个在技术上比较复杂。本章的核心是讨论攻击模式,给出了攻击模式是如何适应不同网络安全特征的,并在本书的其他部分也介绍了攻击模式。 第3章的主题是逆向工程。攻击者反汇编、反编译以及解构程序来理解程序是如何工作的,以及如何阻止程序这样工作。在这一章里还介绍了常用的灰箱分析技术,包括利用安全补丁作为攻击地图的思想等。介绍了交互式反汇编程序(Interactive Disassembler,IDA),它是黑客用于理解程序行为的工具。我们还仔细介绍了实用的黑客工具是如何被开发及使用的。 第4~7章讨论了攻击模式在实际中的使用案例。 第4章和第5章介绍了双端的客户机.服务器模型。第4章从HackingExposed一书[McClu’Ye等著,1999】中遗留下的部分开始谈起,介绍了可信任的输入、权限提升、代码注入、路径追踪、破解可信任以及其他专用于服务端软件的攻击技术。第5章介绍了如何利用混合信号、跨网站脚本以及移动代码来攻击客户端软件。同时本章还介绍了逆向攻击的问题。这两章都讨论了攻击模式和实际的攻击案例。 第6章介绍了有关恶意代码输入的问题。该问题已超出了我们所讨论的分割分析、代码追踪以及反向分析程序代码的问题。解决该问题需要有较好的编码技术。再次说明,不管是现实世界中的攻击案例还是攻击模式,本书都做了比较全面的介绍。 正如需要受到鞭笞的坏小子一样,致命性的缓冲区溢出是第7章的主题。本章高度关注在其他一些技术资料里已谈到的缓冲区攻击技术。讨论了嵌入式系统中的缓冲区溢出、数据库中的缓冲区溢出、Java环境下的缓冲区溢出以及基于内容的缓冲区溢出。本章讨论了如何发现潜在的各种类型的缓冲区溢出,包括栈溢出、运算错误、格式字符串的脆弱点、堆溢出,C++虚函数表,以及多阶段跳跃。详细介绍了一些特定操作平台上的攻击代码结构,例如x86、MIPS、SPARC和PA-RISC平台。同时,还介绍了一些攻破脆弱的安全系统的高级攻击代码结构技术,例如active armor和跳跃技术。本章还给出了大量的攻击模式。 第8章介绍了软件攻击中的顶尖技术——rootkit。利用该技术,攻击者可以完全控制整个系统。第8章的主要部分就是介绍基于Windows XP的一个实际rootkit。主要包括钩子调用技术、可执行重定向技术、隐藏进程及文件技术、网络支持技术和二进制代码的补丁技术。同时,本章还详细讨论了部分硬件技术,包括利用EEPROM隐藏rootkit的技术。当然除本章介绍的之外还有很多其他rootkit技术。 正如您所看到的,本书包括了从恶意输入到rootkit的软件攻击的各种技术,利用攻击模式、示例代码以及攻击示例,清晰地展示了那些恶意黑客们每天都会使用的攻击软件的技术。 目录 第1章 软件——问题根源/1 第2章 攻击模式/24 第3章 逆向工程和程序理解/47 第4章 攻击服务器软件/110 第5章 攻击客户端软件/148 第6章 构造恶意输入/172 第7章 缓冲区溢出/203 第8章 rootkit/272 附录A 攻击模式/338 序言 在2003年7月,我接到斯坦福大学计算机系David:Dill教授的电话。他告诉我,由Diebold Election Systems公司开发的电子投票系统的的源代码已经泄漏到了Internet上,为了保证系统的安全性,有必要对系统作安全缺陷的检查。由于投票系统的开发商对于自身的代码一直是比较严谨的,因此这样的检查机会不是很多。但是在对系统作安全检查之后,结果却令我们大吃一惊:安全缺陷和代码缺陷是如此之多,以至于在攻击者面对如此之多,而又各不相同的系统缺陷时,在决定先使用哪种方案时大伤脑筋,从而导致攻击工作停滞不前(这种停滞并不是所推荐的安全策略)。在系统中,大块的复杂代码没有注释。只有一个静态密钥硬连接到加密的投票计算器的代码战术,使用不安全的伪随机数生成器和未加密的校验。而对CVS日志的检查也暴露了随意的源代码管理进程。整个系统中还存在其他严重的系统缺陷。 难道Diebold的投票机器在众多投票机器中是惟一的质量控制不好的例子吗?我认为并非如此。许多生产厂家,例如Diebold,都面临着需要以比竞争对手更快的速度把产品投放市场的巨大压力,而拥有最好的、功能最可靠系统的厂家最终会取胜。这样的激励模式只会照顾那些最快进入市场,产品功能最多的生产厂家,而不是那些产品最安全的厂家。让系统做到安全是很困难的,最终结果也不都是切实可行的。Diebold是不幸的,因为他们的代码会被公众检查并且证明是完全失败的。而大多数的厂家则相对比较安全,因为他们的代码仅在严格限制的非公开的情况下才会接受独立的调查分析。只有在代码出现问题后,这些厂家才会对安全性的问题稍加重视。Diebold的投票系统代码并不是我所遇到的第一个充满了安全缺陷的高复杂度代码,那为什么生产安全软件是如此之难呢? 答案很简单:因为安全软件很复杂。任何有编程经验的人都知道,在编写代码的时候面临着无数的选择方案。一个重要的选择是使用哪种编程语言。您是想为了获得系统性能的优化提高而使用灵活的指针运算呢,还是想为了避免缓冲区溢出而使用类型安全的语言以至减少系统的一些功能呢?每一项任务,在算法、参数以及数据结构的选择上都有无数的方案可选用。对每一块代码,都要决定如何命名变量,如何进行注释,甚至如何安排环绕着代码的空白区域。每一名程序员都不一样,因此每一名程序员都有可能做出不同的选择。大型的软件项目都是由团队开发的,而团队中的每一名程序员都必须能够理解并修改其他伙伴所编写的代码。管理自身所写的代码已经是一件很困难的事情了,更不用说去管理由他人编写的代码。对于一个有着成百上千行代码的程序,避免系统安全的脆弱性是一项极具挑战性的工作。而对于有着几百万行代码的程序,例如现代操作系统,则是不可能的任务。 然而,必须要创建大型的系统,因此我们不能仅仅是放弃或者安慰自己:保证系统的安全性是不可能的。McGraw和Hoglund先生做了大量优秀的工作,解释了软件为什么会被破解,展示了软件是如何被破解的,以及告诫读者如何避免写出容易被破解的代码。您可能想知道,向人们展示如何破解代码——正如本书所做的——是不是一个好主意?事实上,安全领域的专家也必须深思熟虑,在提示攻击和保持沉默之间作出权衡。本书采用这样一个观点:最大限度地降低软件中的脆弱点的编程方法就是理解脆弱点是如何产生的,以及攻击者是如何攻破它们的。为此目的,本书是任何想编写网络代码或者操作系统代码的人都必须阅读的。 在软件安全领域,《软件剖析——代码攻防之道》是我所见过的最好的一本书。Gary McGraw和Greg Hoglund先生长期致力于这一领域的研究。Gary McGraw的第一本书。Java Security,是在Java运行环境下对安全问题的基础性探索,以及针对在可信任浏览器内运行不可信任移动代码的新概念的安全问题的探索。Garyr McGraw的另一本书Building Secure—Software,则是一本经典的著作,展示了一些可用来避免本书中描述的脆弱点的方法。Hoglund先生在。rootkit领域和攻防对抗的实践开发中有着丰富的经验。 读完此书后,您并不会惊讶于为什么有如此多的系统已被入侵,而有太多的系统还没有被入侵。对电子投票系统做的分析,展示了我们所面临的软件脆弱点问题。而众多系统还没有被入侵的事实,仅表明攻击者对他们现在的“果实”还比较满意。当下一次我走到投票点投票,面对基于Windows的电子投票系统时,我心里会有一点安全感。当所投的票无缘消失时,或许是因为投票技术不安全而不是软件缺陷造成的。 |
随便看 |
|
霍普软件下载网电子书栏目提供海量电子书在线免费阅读及下载。