前言
关于安全技术人才
国内外对网络安全技术人才的需求量很大,精通缓冲区溢出攻击的安全专家可以在大型软件公司轻易地获得高薪的安全咨询职位。
信息安全技术是一个对技术性要求极高的领域,除了扎实的计算机理论基础外,更重要的是优秀的动手实践能力。在我看来,不懂二进制数据就无从谈起安全技术。
国内近年来对网络安全的重视程度正在逐渐增加,许多高校相继成立了“信息安全学院”或者设立“网络安全专业”。科班出身的学生往往具有扎实的理论基础,他们通晓密码学知识、知道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平台软件缓冲区溢出漏洞的发现、检测、分析和利用等方面的知识。
为了保证这些技术能够被读者轻松理解并掌握,本书在叙述中尽量避免枯燥乏味的大段理论阐述和代码粘贴。概念只有在实践中运用后才能真正被掌握,这是我多年来求学生涯的深刻体会。书中所有概念和方法都会在紧随其后的调试实验中被再次解释,实验和案例是本书的精髓所在。从为了阐述概念而精心自制的漏洞程序调试实验到现实中已经造成很大影响的著名漏洞分析,每一个调试实验都有着不同的技术侧重点,每一个漏洞利用都有自己的独到之处。
我将带领您一步一步地完成调试的每一步,并在这个过程中逐步解释漏洞分析思路。不管您是网络安全从业人员、黑客技术发烧友、网络安全专业的研究生或本科生,如果您能够完成这些分析实验,相信您的软件调试技术、对操作系统底层的理解等计算机能力一定会得到一次质的飞跃,并能够对安全技术有一个比较深入的认识。
关于本书源代码及相关文档
本书中调试实验所涉及的所有源代码和PE文件都可从看雪论坛相关版面下载http://zeroday.pediy.com。
这些代码都经过了仔细调试,如在使用中发现问题,请查看实验指导中对实验环境的要求。个别攻击实验的代码可能会被部分杀毒软件鉴定为存在风险的文件,请您调试前详细阅读实验说明。
关于对读者的要求
虽然溢出技术经常涉及汇编语言,但本书并不要求读者一定具备汇编语言的开发能力。所用到的指令和寄存器在相关的章节都有额外介绍,只要您有C语言基础就能消化本书的绝大部分内容。
我并不推荐在阅读本书之前先去系统的学习汇编知识和逆向知识,枯燥的寻址方式和指令介绍很容易让人失去学习的兴趣。本书将带您迅速跨过漏洞分析与利用技术的进入门槛。即使您并不懂汇编与二进制也能完成书中的调试实验,并获得一定的乐趣。当然,在您达到一定水平想进一步提高时,补习逆向知识和汇编语言将是绝对必要的。
本书适合的读者群体包括:
·安全技术工作者 本书比较全面、系统地收录了Windows平台下缓冲区溢出攻击所涉及的各种方法,将会是一本不错的技术字典。
·信息安全理论研究者 本书中披露的许多漏洞利用、检测方法在学术上具有一定的前沿性,在一定程度上反映了目前国内外安全技术所关注的焦点问题。
·QA工程师、软件测试人员 本书第4篇中集中介绍了产品安全性测试方面的知识,这些方法可以指导QA人员审计软件中的安全漏洞,增强软件的安全性,提高软件质量。
·软件开发人员 知道漏洞利用原理将有利于编写出安全的代码。
·高校信息安全专业的学生 本书将在一定程度上弥补高校教育与信息安全公司人才需求脱节的现象。用一套过硬的调试技术和逆向技术来武装自己可以让您在未来的求职道路上利于不败之地。精通exploit的人才可以轻松征服任何一家杀毒软件公司或安全资讯公司的求职门槛,获得高薪工作。
·本科二年级以上计算机系学生 通过调试实验,你们将更加深入地了解计算机体系架构和操作系统。这些知识一样将成为您未来求职时过硬的敲门砖。
·所有黑客技术爱好者 如果您厌倦了网络嗅探、端口扫描之类的扫盲读物,您将在本书中学到实施有效攻击所必备的知识和技巧。
关于反馈与提问
读者在阅读本书时如遇到任何问题,可以到看雪论坛相关版面参与讨论http://zeroday.pediy.com。
致谢
感谢电子工业出版社对本书的大力支持,尤其是毕宁编辑为本书出版所做的大量工作。
感谢看雪对本书的大力推荐和支持以及看雪论坛为本书提供的交流平台。
非常感谢在本书第一版问世后,向我提供勘误信息的众多热心读者,本书质量的提高离不开你们热心的帮助。
感谢赛门铁克中国响应中心的病毒分析员Beannie Cai为本书第26章友情撰稿。
最后感谢我的母校西安交通大学,是那里踏实求是的校风与校训激励着我不断进步。