关于安全技术人才.
国内外对网络安全技术人才的需求量很大,精通缓冲区溢出攻击的安全专家可以在大型软件公司轻易地获得高薪的安全咨询职位。
信息安全技术是一个对技术性要求极高的领域,除了扎实的计算机理论基础外,更重要的是优秀的动手实践能力。在我看来,不懂二进制数据就无从谈起安全技术。
国内近年来对网络安全的重视程度正在逐渐增加,许多高校相继成立了“信息安全学院”或者设立“网络安全专业”。科班出身的学生往往具有扎实的理论基础,他们通晓密码学知识、知道PKI体系架构,但要谈到如何真刀实枪地分析病毒样本、如何拿掉PE上复杂的保护壳、如何在二进制文件中定位漏洞、如何对软件实施有效的攻击测试……能够做到的人并不多。
虽然每年有大量的网络安全技术人才从高校涌入人力市场,真正能够满足用人单位需求的却寥寥无几。捧着书本去做应急响应和风险评估是滥竽充数的作法,社会需要的是能够为客户切实解决安全风险的技术精英,而不是满腹教条的阔论者。
我所认识的很多资深安全专家都并非科班出身,他们有的学医、有的学文、有的根本没有学历和文凭,但他们却技术精湛,充满自信。
这个行业属于有兴趣、够执著的人,属于为了梦想能够不懈努力的意志坚定者。
关于“Impossible”与“I’m possible”
从拼写上看,“Impossible”与“I’m possible”仅仅相差一个用于缩写的撇号(apostrophe)。学完本书之后,您会发现将“不可能(Impossible)”变为“可能(I’m possible)”的“关键(key point)”往往就是那么简单的几个字节,本书将要讨论的就是在什么位置画上这一撇!
从语法上看,“Impossible”是一个单词,属于数据的范畴;“I’m possible”是一个句子,含有动词(算符),可以看成是代码的范畴。学完本书之后,您会明白现代攻击技术的精髓就是混淆数据和代码的界限,让系统错误地把数据当作代码去执行。
从意义上看,To be the apostrophe which changed “Impossible” into “I’m possible” 代表着人类挑战自我的精神,代表着对理想执著的追求,代表着对事业全情的投入,代表着敢于直面惨淡人生的豪情……而这一切正好是黑客精神的完美诠释——还记得在电影《Sword Fish(剑鱼行动)》中,Stan在那台酷毙的计算机前坚定地说:“Nothing is impossible”,然后开始在使用Vernam加密算法和512位密钥加密的网络上,挑战蠕虫的经典镜头吗?
于是我在以前所发表过的所有文章和代码中都加入了这个句子,甚至用它作为自己的签名档。
尽管我的英语老师和不少外国朋友提醒我,说这个句子带有强烈的“Chinglish”味道,甚至会引起Native Speaker的误解,然而我最终还是决定把它写进书里。
虽然我不是莎士比亚那样的文豪,可以创造语言,发明修辞,用文字撞击人们的心灵,但这句“Chinglish”的确能把我所要表达的含义精确地传递给中国人,这已足够。
关于本书
通常情况下,利用缓冲区溢出漏洞需要深入了解计算机系统,精通汇编语言乃至二进制的机器代码,这足以使大多数技术爱好者望而却步。
随着时间的推移,缓冲区溢出攻击在漏洞的挖掘、分析、调试、利用等环节上已经形成了一套完整的体系。伴随着调试技术和逆向工程的发展,Windows平台下涌现出的众多功能强大的debug工具和反汇编分析软件逐渐让二进制世界和操作系统变得不再神秘,这有力地推动了Windows平台下缓冲区溢出的研究。除此以外,近年来甚至出现了基于架构(Frame Work)的漏洞利用程序开发平台,让这项技术的进入门槛大大降低,使得原本高不可攀的黑客技术变得不再遥不可及。
遗憾的是,与国外飞速发展的高级黑客技术相比,目前国内还没有系统介绍Windows平台下缓冲区溢出漏洞利用技术的专业书籍,而且相关的中文文献资料也非常匮乏。
本书将系统全面地介绍Windows平台软件缓冲区溢出漏洞的发现、检测、分析和利用等方面的知识。
为了保证这些技术能够被读者轻松理解并掌握,本书在叙述中尽量避免枯燥乏味的大段理论阐述和代码粘贴。概念只有在实践中运用后才能真正被掌握,这是我多年来求学生涯的深刻体会。书中所有概念和方法都会在紧随其后的调试实验中被再次解释,实验和案例是本书的精髓所在。从为了阐述概念而精心自制的漏洞程序调试实验到现实中已经造成很大影响的著名漏洞分析,每一个调试实验都有着不同的技术侧重点,每一个漏洞利用都有自己的独到之处。..
.我将带领您一步一步地完成调试的每一步,并在这个过程中逐步解释漏洞分析思路。不管您是网络安全从业人员、黑客技术发烧友、网络安全专业的研究生或本科生,如果您能够完成这些分析实验,相信您的软件调试技术、对操作系统底层的理解等计算机能力一定会得到一次质的飞跃,并能够对安全技术有一个比较深入的认识。
本书内容导读
本书分为4篇,共17章。
第1篇 基础知识
第1章 漏洞概述
简介漏洞研究中的一些基础概念和原理
第2章 二进制文件概述
不管是漏洞挖掘,漏洞分析还是漏洞利用,我们所面对的都是二进制、机器码、内存地址。第2章将简单介绍Windows平台下可执行文件的结构和内存方面的一些基础知识。PE文件和虚拟内存的细节枯燥乏味,长篇累牍地介绍很容易让人失去学习的兴趣和激情。但在进行静态反汇编和动态调试的过程中,如果没有PE和虚拟内存方面的基础知识,您甚至无法把反汇编的内容和正在执行的指令对应起来。根据漏洞分析的特点,这章给出了调试漏洞所必须的二进制基础知识。
第3章 必备工具
第3章介绍了一批漏洞分析中经常使用的软件工具。包括调试工具、反汇编工具、二进制编辑工具等。您会在后面的调试实验中反复见到这些工具的身影。在这章的最后一节,我设计了一个非常简单的破解小实验,用于实践工具的应用,消除您对二进制的恐惧感,希望能够给您带来一些乐趣。
第2篇 漏洞利用
第4章 栈溢出利用
基于栈的溢出是最基础的漏洞利用方法。第4章首先用大量的示意图,深入浅出地讲述了操作系统中函数调用、系统栈操作等概念和原理;随后通过三个调试实验逐步讲解如何通过栈溢出,一步一步地劫持进程并植入可执行的机器代码。即使您没有任何汇编语言基础,从未进行过二进制级别的调试,在本章详细的实验指导下也能轻松完成实验,体会到exploit的乐趣。
第5章 开发shellcode的艺术
第5章紧接第4章的讨论,比较系统地介绍了溢出发生后,如何布置缓冲区、如何定位shellcode、如何编写和调试shellcode等实际的问题。第5章的最后两小节还给出了一些编写shellcode的高级技术,供有一定汇编基础的朋友参考。
第6章 堆溢出利用
在很长一段时间内,Windows下的堆溢出被认为是不可利用的,然而事实并非如此。第6章将用精辟的论述点破堆溢出利用的原理,让您轻松领会堆溢出的精髓。此外,这章的一系列调试实验将加深您对概念和原理的理解。用通俗易懂的方式论述复杂的技术是本书始终坚持的原则。
第7章 Windows异常处理机制深入浅出
对异常处理的利用是Windows平台下缓冲区溢出漏洞利用的一大特点。第7章除了介绍如何在溢出发生时利用S.E.H外,还对Windows异常处理机制做了较深入的剖析,供有一定基础的读者参考。
第8章 高级内存攻击技术
集中介绍了一些曾发表于Black Hat上的著名论文中所提出的高级利用技术。对于安全专家,了解这些技巧和手法不至于在分析漏洞时错把可以利用的漏洞误判为低风险类型;对于黑客技术爱好者,这些知识很可能成为激发技术灵感的火花。
第9章 揭秘Windows安全机制
微软在Windows XP SP2和Windows 2003之后,向操作系统中加入了许多安全机制。本章将集中讨论这些安全机制对漏洞利用的影响。
第10章 用MetaSploit开发Exploit
MetaSploit是软件工程中的Frame Work(架构)在安全技术中的完美实现,它把模块化、继承性、封装等面向对象的特点在漏洞利用程序的开发中发挥得淋漓尽致。使用这个架构开发Exploit要比直接使用C语言写出的Exploit简单得多。第10章将集中介绍如何使用这个架构进行Exploit开发,这也将是第一次在中文书籍中集中介绍MetaSploit通用漏洞测试平台。
第11章 其他漏洞利用技术
格式化串漏洞在Windows平台上非常罕见,所以我把这种漏洞利用单独放在本章介绍。除此以外,由于脚本注入漏洞与缓冲区溢出漏洞的攻防在技术上差异较大,故也被安排在这章。鉴于基于Web的漏洞利用种目繁杂,且自成体系,本书目前只做了简单的介绍。如有机会,我将单独著书述之。
第3篇 漏洞分析
第12章 漏洞分析技术概述
第12章纵览了漏洞分析与调试的思路,并介绍了一些辅助漏洞调试分析的高级逆向工具。
第13章 MS06-040分析:系统入侵与蠕虫
通过对真实案例的分析,彻底揭秘攻击者入侵操作系统的全过程。在您获得操作系统控制权限的那一刻,相信伴随着强烈的成就感,您也将切身体会0day的真正危害和安全补丁的重要性。
第14章 MS06-055分析:揭秘“网马”
通过网页“挂马”是近年来攻击者惯用的手法。本章通过分析微软IE浏览器中真实的缓冲区溢出漏洞,告诉您为什么不能随便点击来历不明的URL链接。
第15章 MS07-060分析:Word文档中的阴谋
稍懂计算机知识的人都不会随便点击可执行文件,但是谁会想到打开Word文档也会导致shellcode的执行呢?如果Office中存在漏洞,那么打开Word文档就也有可能导致shellcode被执行。
第4篇 漏洞挖掘与软件安全性测试
第16章 漏洞挖掘技术浅谈
不论从工程上讲还是从学术上讲,漏洞挖掘都是一个相当前沿的领域。本章将介绍一些目前比较流行的漏洞挖掘方法,并着重介绍Fuzz测试的方法。相信本章的内容对于QA工程师和软件测试人员也会有用。
第17章 安全的软件生命周期
要做到尽可能地避免软件中的安全漏洞,仅仅靠安全测试和漏洞挖掘是远远不够的,那需要在软件生命周期的各个环节中加入安全因素。
本书源代码及相关文档
本书中调试实验所涉及的所有源代码和PE文件都被收录在附带光盘中。
这些代码都经过了仔细调试,如在使用中发现问题,请查看实验指导中对实验环境的要求。个别攻击实验的代码可能会被部分杀毒软件鉴定为存在风险的文件,请您调试前详细阅读实验说明。
此外,“看雪论坛”相关版面可以找到更多本书中所涉及的资源:http://zeroday.pediy.com
对读者的要求
虽然溢出技术经常涉及汇编语言,但本书并不要求读者一定具备汇编语言的开发能力。所用到的指令和寄存器在相关的章节都有额外介绍,只要您有C语言基础就能消化本书的绝大部分内容。
我并不推荐在阅读本书之前先去系统的学习汇编知识和逆向知识,枯燥的寻址方式和指令介绍很容易让人失去学习的兴趣。本书将带您迅速跨过漏洞分析与利用技术的进入门槛。即使您并不懂汇编与二进制也能完成书中的调试实验,并获得一定的乐趣。当然,在您达到一定水平想进一步提高时,补习逆向知识和汇编语言将是绝对必要的。
本书适合的读者群体包括:
安全技术工作者 本书比较全面、系统地收录了Windows平台下缓冲区溢出攻击所涉及的各种方法,将会是一本不错的技术字典。
信息安全理论研究者 本书中纰漏的许多漏洞利用、检测方法在学术上具有一定的前沿性,在一定程度上反映了目前国内外安全技术所关注的焦点问题。
QA工程师、软件测试人员 本书第4篇中集中介绍了产品安全性测试方面的知识,这些方法可以指导QA人员审计软件中的安全漏洞,增强软件的安全性,提高软件质量。
软件开发人员 知道漏洞利用原理将有利于编写出安全的代码。
高校信息安全专业的学生 本书将在一定程度上弥补高校教育与信息安全公司人才需求脱节的现象。用一套过硬的调试技术和逆向技术来武装自己可以让您在未来的求职道路上利于不败之地。精通exploit的人才可以轻松征服任何一家杀毒软件公司或安全资讯公司的求职门槛,获得高薪工作。
本科二年级以上计算机系学生 通过调试实验,你们将更加深入地了解计算机体系架构和操作系统。这些知识一样将成为您未来求职时过硬的敲门砖。
所有黑客技术爱好者 如果您厌倦了网络嗅探、端口扫描之类的扫盲读物,您将在本书中学到实施有效攻击所必备的知识和技巧。
反馈与提问
读者在阅读本书时如遇到任何问题,可以到看雪论坛相关版面提出或发送E-mail给我。
致谢
感谢电子工业出版社对本书的大力支持,尤其是毕宁与韩明编辑为本书出版所做的大量工作。
感谢看雪对本书的大力推荐和支持以及看雪论坛为本书提供的交流平台。
感谢Dafydd Stuttard和Matthew Conover在我编写shellcode技术和堆溢出技术的相关章节时提供的热情帮助。你们不但拥有精湛的技术,难能可贵的共享精神也是我学习的榜样。
感谢金山毒霸反病毒引擎组给我提供的实习机会,尤其感谢Bani Cai、大灰、涂老师和Zmworm,是你们带我跨过了逆向技术的门槛。
感谢赛门铁克产品安全部的同事,尤其是我的经理Cassio Goldschmid。宽松的技术氛围和一流的技术培训为我的成长提供了强有力的支持,一起去参加Black Hat对我来说胜过任何节日。
感谢“下一代互联网和网络安全国家重点实验室”,尤其感谢我的导师管晓宏教授,是您为我提供了开放的研究环境和丰富的研究资源。
感谢114实验室的兄弟姐妹,和你们在一起的日子我非常开心。
感谢我的爸爸、妈妈,谢谢你们的理解与支持。
感谢司徒雪岚,我会永远记得著书期间那段让我欢喜让我忧的日子。
最后感谢我的母校西安交通大学,是那里踏实求是的校风与校训激励着我不断进步。...