《漏洞战争:软件漏洞分析精要(修订版)》系统地讲解软件漏洞分析与利用所需的各类工具、理论技术和实战方法,主要涉及Windows和Android系统平台。全书根据不同的软件漏洞类型划分,比如堆栈溢出、沙盒逃逸、类型混淆、UAF、内核漏洞等,同时又针对当前流行的移动安全,加入Android平台上的漏洞分析与利用。以精心挑选的经典漏洞为例,以分享漏洞的分析技巧和工具为主,对这些漏洞的成因、利用及修复方法进行详细讲解,旨在“授之以渔”。
《漏洞战争:软件漏洞分析精要(修订版)》最大的特点是以各种类型的经典漏洞作为实战讲解,摒弃空头理论,几乎是“一本用调试器写出来的书”。
《漏洞战争:软件漏洞分析精要(修订版)》适合计算机相关专业的本科及研究生,信息安全爱好者,软件安全及移动安全相关的安全从业人员,软件开发与测试人员、黑客等阅读。
以真实案例为实践工具,分析各类漏洞成因。畅销十年的口碑经典!
林桠泉(网络ID:riusksk、泉哥、林大夫),毕业于福建中医药大学中西医骨伤专业,腾讯前高级工程师。
微软最具价值安全研究员,GeekPwn国际安全极客大赛获奖者,“微软杯”ExploitMe安全调试技术个人挑战赛获奖者,共获得 Microsoft、Apple、Google、Adobe等各大厂商80多个CVE漏洞致谢。
10余年网络安全从业经历,主要聚焦软件安全、系统安全、Web安全、恶意软件对抗等领域。
在漏洞的汇编代码,指出漏洞形成的原因,即给出“结论式分析”,却并不解释如何定位到此段代码,看完之后,仍不知如何快速定位,缺乏可借鉴的思路。带着这些问题,相信读者会在本书中找到想要的答案。
本书的写作始于2012年5月,最初是网友“爱无言”向我提议合写一本关于软件漏洞案例分析的著作——因为当时我在博客上每周都会分享一两篇软件漏洞分析的实际案例,而当时国内还没有专门针对软件漏洞案例的专著(《0Day安全:软件漏洞分析技术》主要偏向堆栈溢出及内核方面的漏洞分析,实际案例较少,且“爱无言”也是该书作者之一)——于是,我们一拍即合,写书的念头就此产生。后来,我又拉了两位朋友加入,共同列出了大纲。然而种种原因,最后只剩下我独自完成本书的创作,中途也曾多次想放弃。直到某一天,编辑皎子找我聊了一些出书的想法,就这样,一本原打算沉埋箱底的“残卷”再次被“激活”,而一本原为“合著”的书就成了“专著”。好在“激活”之后的写书经历还算顺利,从开始动笔到出版上市,前后历时4年。图书质量和出版后的效果也比较符合预期,埋藏心底多年的“结”总算可以打开了。
相信一些读者看到本书目录后会有一些疑问,我也相信其中一些疑问也是当时我在定位本书方向时曾考虑过的,所以有必要在此谈一谈。
Q:本书与《0day 安全:软件漏洞分析技术》有何区别?
A:《0day安全:软件漏洞分析技术》一书主要阐述Windows平台下堆栈溢出和内核提权的漏洞分析技术,同时涉及部分格式化字符串漏洞,从基础讲起,最后是实例分析。本书则完全以真实的漏洞为实例,并根据不同的漏洞类型来分享漏洞分析的不同技巧,可以说是“用调试器写出来的一本书”,而且综合考虑了当前热门的移动安全技术,特意加入Android平台上的漏洞分析章节,从Java层、Native层和内核层等方向分享不同的调试分析方法。从难度而言,本书比《0day安全:软件漏洞分析技术》一书更难,读者朋友可以将本书当成进阶版,搭配学习。
Q:本书列举的许多漏洞实例网上早有分析文章,为何还写这本书?
A:著书的宗旨在于“授人以鱼,不如授人以渔”。如果读者经常看网上的漏洞分析文章,就会发现一个常见现象:它们大多是“结论性分析”,而非“思路性分析”。换句话说,就是贴出存在漏洞的汇编代码,然后直接给出漏洞成因的结论,至于如何定位到漏洞代码,并没有给出分析思路。正因为如此,即使你看懂了Vupen漏洞军火商写的分析文章,也不代表你看完后就能独立分析出来,甚至在调试之后,你还会发现Vupen会在一些文章中留“坑”,故意省略或写错某些关键内容,如果自己没有实际调试一遍是很难发现这些问题的。
相信有一定软件漏洞分析经验的朋友会注意到,软件漏洞分析的大部分时间花费在寻找和定位漏洞代码上,而非分析存在漏洞的代码。对于有一定编程经验和漏洞基础的读者,如果直接给出一段漏洞代码,他们可能很容易就能看出来;但如果是像Adobe和Windows这样复杂的软件或系统,分析人员要在千千万万的代码行中找出漏洞代码是有一定难度的。因此,本书的重点是讲授如何快速地定位漏洞代码,针对不同漏洞类型采取不同的分析技巧,以帮助大家快速地分析出漏洞成因,制定检测、防御与修复方案。书中的漏洞实例分析技巧是可以长期运用和延伸的,这才是本书的核心价值。
Q:如何借助本书提升自身的软件漏洞分析能力?
A:本书主要面向有一定软件漏洞分析基础的读者。如果读者缺乏这方面的基础,但有一定的C语言和汇编语言的基础,则建议提前阅读《0day安全:软件漏洞分析技术》一书。软件漏洞分析是实践性较强的技术工作,需要许多实际动手的调试经验,因此建议大家在阅读本书的同时,自己手动调试,以加深理解。这就像骑自行车一样,在熟练之后,哪怕十年未碰车,也依然能上手。本书在分析漏洞时,也尽量以思路性的描述为主,侧重讲解分析漏洞时的思考方式和常用技巧,包括工具和方法论,因此大家在阅读时,应该掌握书中介绍的思考方式、工具运用及分析技巧,毕竟某个漏洞案例本身是会过时的,但技巧性的东西总是可以借鉴和扩展的。
记得大一上第一节历史课时,老师说过这样一句话,如果在未来的某一天,你在和朋友闲聊时,能够运用到历史课上学到的知识,哪怕只是用到一句话作为谈资,那这节历史课就算没白学。同样地,我也希望未来大家在分析软件漏洞时,本书能够提供一些帮助,哪怕是一个分析技巧,一个工具使用,我也觉得这4年的付出相当值了。
近年来,各种APT攻击事件频发,一些知名企业,甚至国家级单位都曾遭受到漏洞攻击。每年都有一款产品的漏洞被频繁用于网络攻击,比如,2012年的Office漏洞(还记得经典的CVE-2012-0158吗),2013年的Java漏洞,2014年的Internet Explorer漏洞,2015年的Adobe Flash漏洞。PC端上的软件漏洞则一直在逐年增加,虽然厂商不断推出各种安全机制,但漏洞利用技术自身的发展也从未间断,Exploiters依然生存得很好。同时,互联网早已步入移动化时代,伴随着PC软件漏洞攻击事件的频发,移动端的漏洞攻击也在逐年增长。因此,笔者结合PC端(Windows)与移动端(Android)平台上的漏洞案例,将自身的实战经验整理成本书。
求学之路
经常有人问我:“一个医学生为什么会转行做安全?”通常我都会这么回答:“因为小说看多了。”
大一时,由于喜欢看黑客小说,比如,《黑客传说》《地狱黑客》《指间的黑客》,我就去图书馆找一些黑客书籍来自学,每天中午都不休息,几乎天天泡在图书馆看书,甚至“翘课”去看计算机专业的书。
一直到大四我才终于买了计算机,在此之前都只能去网吧、学校机房或者借用舍友的计算机。
当年,我就用诺基亚3100手机看完了《Windows程序设计》《Windows核心编程》和《Windows环境下32位汇编语言程序设计》;再后来就网购图书——这比在网吧看电子书更实惠。
大学期间,我还经常给《黑客防线》杂志投稿,一方面可以提升个人技术水平,另一方面还可以用稿费作为生活补贴。后来我也是用稿费再加上哥哥的支持,买了人生中第一台属于自己的计算机,本书就有一半内容是在这台计算机上完成的。
在求学这条道路上,我一直是一个人默默地前行着,就连一块生活了几年的舍友也不知道我在学习安全方面的知识,我买的一堆计算机专业的图书一直被藏在宿舍衣柜的最里面。在此过程中,自己走过很多弯路,甚至差点放弃,但很庆幸最后还是坚持下来了。直至今日,我依然在安全这条道路上前行着……
面试经历
在圈内朋友的建议下,我在大五(医学五年制)上学期开始寻找信息安全相关的工作,最终顺利拿到安恒和腾讯的offer。当初投简历给安恒时,安恒的副总裁看完我的简历后直接发了offer,我有点受宠若惊,也特别感谢安恒的信任,但最终还是选择了腾讯。面试腾讯的经历,我觉得是个有趣的过程,值得与大家分享。
那年我还在厦门市第二医院骨伤科实习,门诊部刚好不是特别忙,我给一位腰椎患者做完针灸后,就接到来自腾讯安全中心的面试电话。趁主任不在,我偷偷躲到门诊部后面的楼梯口进行电话面试,整个面试过程还算比较顺利,第二天腾讯安全中心就来电说希望我到深圳总部面试。
到了深圳总部后,腾讯安全中心的主管面试了我,虽然聊了一个半小时,但没有问太多问题,聊完后我就被直接带到HR那里面试。HR面试时,我们的开场并非常规的话题,而是腰椎间盘突出!这也算是一次别开生面的面试经历吧。
回到厦门后,我向带教老师说明了转行情况,之后有上手术台的机会,我都会主动让给其他同班同学,让他们有更多上台练手的机会,而我自己自然有更多的时间去钻研安全技术。
加入腾讯
腾讯是我的第一家雇主,也是目前我唯一工作过的公司,从我毕业一直工作到现在。我见证了腾讯安全应急响应中心(TSRC)的成立与发展,并帮助完善了各种流程和标准。作为早期主要的漏洞审核者,我也从广大白帽子身上学到很多东西,包括各种漏洞挖掘与利用技术,涉及各个安全领域,如Web安全、驱动安全、应用软件安全、移动安全等。正是TSRC给了我更多学习的机会,使我在安全技术上能够更加全面地发展。除此之外,我在公司也从事一些安全研究工作,研发出Android与iOS应用安全审计系统,现已投入公司日常运营中。
至今,我依然觉得能够将工作与兴趣结合在一起,是一件既幸福又幸运的事,而选择腾讯依然是我当年的明智之举。
著书感言
本书是我写的第一本书,也可能是我写的最后一本技术书。只有亲历著书过程,才知道写书的不易。特别是类似本书这种针对漏洞实例进行调试分析的书,写起来特别费时,也更需要有持之以恒的毅力。如果说单纯写书花了1年时间,那么我用来调试的时间大约是3年,因此也可以说这是“一本用调试器写出来的书”。
“开头容易,收尾难”是个人著书的真实感受,很多人一时兴起写了开头,最后很难坚持下去,应该有不少潜在的佳作就此中途夭折了。
本书结构
本书共12章,可以分为三大部分。
基础篇(第1章):主要介绍一些软件漏洞相关的基本概念,以及常用工具及漏洞分析方法,最后向读者推荐一些相关的学习站点和书籍,方便读者进一步学习和交流。
实战篇(第2~11章):这是本书最主要的部分,根据不同的漏洞类型挑选不同的经典案例,用不同的漏洞分析技巧,向读者介绍比较高效的分析方法,剖析各种常见的软件漏洞类型、原理、利用和修复的实战技术。同时,紧跟当前热门的移动互联网安全问题,增加了Android平台的漏洞分析,以保证内容与时俱进。
展望篇(第12章):对未来的软件漏洞发展趋势作出预判,相信未来的主要战场会更集中在移动终端、云计算平台、物联网三大方向上,并简要介绍这些方向的漏洞案例。
致谢
感谢父母的养育之恩,是他们在背后默默地支持我前行。
感谢兄长在生活和工作上的帮助与支持。
感谢我的女朋友,正是她的督促和支持才让我能够准时完稿,书中部分截图是由她后期制作的,以呈现更好的印刷效果。
感谢姑母长期以来对我生活上的关心与照顾。
感谢我的东家腾讯公司,它营造的良好氛围,令我的技术水平和职场发展都更上了一层楼。同时也感谢在工作中一直给予我帮助和鼓励的同事和领导,由于人数较多,在此不一一列举。
感谢博文视点的编辑皎子、郑柳洁及她们的团队,正是她们的努力才使得本书最终能够与大家见面。
感谢各位圈内的朋友,他们包括但不限于(排名不分先后):wushi、爱无言、仙果、wingdbg、instruder、kanxue、lake2、harite、h4ckmp、dragonltx、非虫、monster、gmxp、古河、冰雪风谷、KiDebug、KK……
由于作者水平有限,书中难免有错漏之处,欢迎各位业界同仁斧正!