内容简介 软件是如何被破解的?攻击者是如何有目的地破解软件的?为什么防火墙、指令检测系统以及反病毒软件不能将黑客们拒之门外?什么工具可以用来破解软件?本书为您提供了详细的答案。书中提供了大量黑客们破解软件的示例,包括实际攻击、攻击模式、攻击工具以及相关破解技术,并全面阐述了逆向工程,典型的对服务器软件的攻击,对客户端软件的攻击,制造恶意输入的技术,以及缓冲区溢出的技术细节等内容。在深入阅读本书后,您就可洞悉软件世界中的激烈斗争,成为安全领域的专家。
前 言 当安全领域的专家意识到计算机系统的安全事实上就是软件行为的安全时,软件安全得到了推动性的发展。2001年出版的Building Secure Software一书(作者是Viega和McGraw),明确地指出了许多其他书籍都曾提到的软件安全问题是一个较为严重的问题。自此,安全领域的专家、软件开发者以及企业领导者都达成共识并急需更多相关的知识。 Building Secure Software一书主要是针对从开发者到管理者的软件专家,主要目的是帮助人们开发出更加安全的软件。Exploiting Software也适合于同类读者,但实际上主要针对那些有兴趣发现软件缺陷的安全领域的专家。那些抱怨缺乏软件安全技能的人们,包括开发团队和黑客们,应该对本书产生足够的兴趣。 本书描述如何破解代码。其目的是提供安全专家们需要直接面对的实际中的技术问题。本书也直接与软件安全和网络安全相关。当安全专家越来越关注软件安全问题的时候,他们也需要了解软件系统是如何被破解的。 在本书中所讨论的问题的解决方案,都能在Building Secure Software一书中找到。 我们相信,对软件安全问题和应用安全问题的实际探讨十分有价值。简单且大众化的由“暴发户”们所兜售的应用安全问题的解决方法(例如固定黑箱测试工具),仅仅是抓住了问题的表面。而本书是直切问题的实质。我们必须清楚自身所处的困境,而本书恰恰描述了这一点。 本书主要内容 本书深入探讨了现实世界中的软件破解问题,解释了它们是如何以及为什么被破解的,介绍了相关的攻击模式,以及它们是如何被发现的。本书还展示了如何发现新软件的脆弱点以及如何利用这个脆弱点去攻破机器。 第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技术。 正如您所看到的,本书包括了从恶意输入到rootkit的软件攻击的各种技术,利用攻击模式、示例代码以及攻击示例,清晰地展示了那些恶意黑客们每天都会使用的攻击软件的技术。 读者对象 本书适用于网络管理员、安全顾问、信息人士、开发人员以及希望编写安全代码的程序员。 ● 假如您管理着一个到处都有软件运行的网络,就应该阅读本书,以了解系统中可能存在的弱点,并知道如何让它们显现出来。 ● 假如您是一名安全顾问,就应该阅读本书,这样才能有效地定位、理解并度量客户系统中的安全漏洞。 ● 假如您是信息战场上的一名进攻者,就应该阅读本书,知道如何利用软件入侵敌人的系统。 ● 假如您是软件开发人员,就应该阅读本书,以了解知道黑客们会如何攻击您的系统。今天,所有的开发人员都必须在头脑里有安全的概念。本书给所有的开发人员提供了在软件安全问题上的现实理解。 ● 而假如您是希望编写安全代码的程序员,您也会喜欢本书。 本书的主要读者群是编写安全代码的程序员,但对所有的计算机专家都大有裨益。 在此有必要强调,本书中讨论的技术对于黑客群体来说早已不是新鲜的内容了,其中的一些技术甚至可以和一座座大山比年龄了。我们的真实目的是提供一些启发性的信息,以及提升软件安全领域中论文的层次。 一些安全专家担心会有更多的人利用本书中所介绍的技术去攻击系统。也许吧!但黑客有比“好孩子”更好的通信联系方式和信息共享方式。安全专家们需要理解并消化本书中的知识,这样他们就知道了如何处理软件中的安全问题,就能合适地给本书定位了。我们是应该勇敢地抓住公牛的角,还是应该把我们的脑袋埋在沙子里呢? 也许本书会使您震惊,但是,不管怎么说,本书会使您受益匪浅!