书海网短评:
适读人群:本书适合计算机相关专业的本科及研究生,信息安全爱好者,软件安全及移动安全相关的安全从业人员,软件开发与测试人员、黑客等阅读。《漏洞战争:软件漏洞分析精要》是这些年来难得一见的系统、全面深入分析漏洞攻防心要与
《漏洞战争:软件漏洞分析精要》是这些年来难得一见的系统、全面深入分析漏洞攻防心要与战术的书籍。《漏洞战争:软件漏洞分析精要》结合经典的漏洞案例,从攻防思路、分析方法与实战等方面对漏洞攻防做了详细的阐述。既照顾了全局的视野,又不失细节上的周到,对于有志于安全事业并想在安全技术分析上有所提升的读者,这是一本可信赖的必备书籍。正如wushi老师所说:“……对照《漏洞战争:软件漏洞分析精要》动手调试这些经典漏洞,我相信只要认真做一遍,功力会大增。”
还犹豫什么呢,好书,一本就够!
《漏洞战争:软件漏洞分析精要》系统地讲解软件漏洞分析与利用所需的各类工具、理论技术和实战方法,主要涉及Windows和Android系统平台。《漏洞战争:软件漏洞分析精要》根据不同的软件漏洞类型划分,比如堆栈溢出、沙盒逃逸、类型混淆、UAF、内核漏洞等,同时又针对当前流行的移动安全,加入Android平台上的漏洞分析与利用。以精心挑选的经典漏洞为例,以分享漏洞的分析技巧和工具为主,对这些漏洞的成因、利用及修复方法进行详细讲解,旨在“授之以渔”。《漏洞战争:软件漏洞分析精要》的特点是以各种类型的经典漏洞作为实战讲解,摒弃空头理论,几乎是“一本用调试器写出来的书”。
《漏洞战争:软件漏洞分析精要》适合计算机相关专业的本科及研究生,信息安全爱好者,软件安全及移动安全相关的安全从业人员,软件开发与测试人员、黑客等阅读。
林桠泉,网络ID:riusksk、泉哥、林大夫,腾讯高级工程师,毕业于福建中医药大学中西医骨伤专业,大学期间曾在著名杂志《黑客防线》发表技术文章30余篇,大五时获得“微软杯”ExploitMe安全调试技术个人挑战赛二等奖。毕业后就职于腾讯安全应急响应中心(TSRC),主要从事安全应急响应工作,研究方向主要聚焦在软件安全、移动安全、Web安全等。业余时间,偶而帮助友商解决安全问题,曾获得Microsoft、Adobe、Apple、Yahoo、百度、阿里等各大厂商的漏洞致谢。
《漏洞战争:软件漏洞分析精要》对近年来影响比较大的漏洞一一详细剖析,于细节处可以看出作者的功力,对于漏洞攻防领域是一本不可多得的原创好书。
读者可以对照着动手调试这些经典漏洞,我相信只要认真做一遍,功力会大增。
——腾讯科恩实验室总监wushi
过去的几年,我们见证了移动互联网的兴起,也见证了软件漏洞战场从PC端向移动端的迁移。《漏洞战争:软件漏洞分析精要》从这个视角出发,结合实例、深入浅出、涵盖全面,是学习软件漏洞的*佳之选。同时,《漏洞战争:软件漏洞分析精要》作者riusksk(泉哥)在腾讯安全应急响应中心负责软件漏洞的处理和研究,有着丰富的实战经验。强烈推荐!
——腾讯安全平台部总监lake2
安全漏洞的挖掘与分析是隐秘且难度较高的一门技术,系统性的学习资料更是少之又少。《漏洞战争:软件漏洞分析精要》以近年来报告出的经典漏洞为蓝本,分析并讲解了常见的各种系统及软件漏洞的成因及攻击方法,通过对这些精彩漏洞实例的全面讲解,相信读者对软件漏洞技术会有更加全面的认识。随着《漏洞战争:软件漏洞分析精要》内容的展开,读者一定会与我一样,被漏洞挖掘者的聪明与智慧折服。
——软件安全专家,《Android软件安全与逆向分析》及
《MacOSX软件安全与逆向分析》作者丰生强
对软件漏洞进行分析研究是提高软件安全技术水平的途径之一,他山之石可以攻玉,这《漏洞战争:软件漏洞分析精要》为我们提供了一个很好的开始,值得认真学习。移动平台的漏洞研究是当下的热点,《漏洞战争:软件漏洞分析精要》与时俱进地纳入了这一部分内容,不可不读!
——自由安全研究者,《挖0day》作者爱无言
这是自《0day安全:软件漏洞分析技术》以来,又一本关于二进制漏洞分析*全面的力作,《漏洞战争:软件漏洞分析精要》结合新的经典漏洞与新型分析方法,深度剖析不同类型的安全漏洞,结合不同的分析方法,做到授人以渔。相信能够帮助那些希望从事安全行业的人员,为其提供更好的帮助。
——阿里安全威胁情报中心安全专家instruder
随着互联网的蓬勃发展,安全漏洞也跟着逐年爆发。未知攻,焉知防!因此,如何快速分析漏洞成因是安全研究员必备的一项技能。《漏洞战争:软件漏洞分析精要》涵盖了各种各样的漏洞类型,覆盖了PC端和移动端,极具实战性和全面性,兼具实用性和时效性,干货满满,是安全研究员提高漏洞分析能力的利器。俱往矣,数漏洞分析,还看此书!
——阿里巴巴移动安全专家dragonltx
第1章基础知识1
1.1漏洞的相关概念1
1.1.1什么是漏洞1
1.1.2漏洞的价值1
1.1.30Day漏洞2
1.1.4PoC与Exploit2
1.2为什么要分析漏洞2
1.3常用分析工具3
1.3.1IDA―反汇编利器3
1.3.2OllyDBG―破解与逆向常用调试器4
1.3.3ImmunityDebugger―漏洞分析专用调试器4
1.3.4WinDbg―微软正宗调试器5
1.3.5GDB―Linux调试器6
1.3.6JEB―Android反编译器7
1.3.7其他8
1.4常见的漏洞分析方法8
1.4.1静态分析8
1.4.2动态调试9
1.4.3源码分析9
1.4.4补丁比较9
1.4.5污点追踪10
1.5学习资源11
1.5.1站点分享11
1.5.2书籍推荐12
1.6本章总结13
第2章栈溢出漏洞分析14
2.1栈溢出简史14
2.2栈溢出原理15
2.3CVE-2010-2883AdobeReaderTTF字体SING表栈溢出漏洞16
2.3.1LuckyCat攻击事件16
2.3.2漏洞描述18
2.3.3分析环境18
2.3.4基于字符串定位的漏洞分析方法19
2.3.5样本Exploit技术分析20
2.3.6样本shellcode恶意行为分析26
2.3.7漏洞修复29
2.4CVE-2010-3333MicrosoftRTF栈溢出漏洞30
2.4.1林来疯攻击事件30
2.4.2漏洞描述31
2.4.3分析环境31
2.4.4RTF文件格式32
2.4.5基于栈回溯的漏洞分析方法33
2.4.6漏洞利用41
2.4.7Office2003与Office2007Exploit通用性研究42
2.4.8漏洞修复45
2.5CVE-2011-0104MicrosoftExcelTOOLBARDEFRecord栈溢出漏洞51
2.5.1漏洞描述51
2.5.2分析环境52
2.5.3基于污点追踪思路的漏洞分析方法52
2.5.4漏洞修复59
2.6阿里旺旺ActiveX控件imageMan.dll栈溢出漏洞60
2.6.1漏洞描述60
2.6.2分析环境60
2.6.3针对ActiveX控件的漏洞分析方法60
2.6.4漏洞利用63
2.7CVE-2012-0158MicrosoftOfficeMSCOMCTL.ocx栈溢出漏洞65
2.7.1LotusBlossom行动65
2.7.2漏洞描述65
2.7.3分析环境65
2.7.4基于OffVis工具的Office漏洞分析方法66
2.7.5漏洞修复71
2.8总结72
第3章堆溢出漏洞分析73
3.1堆溢出简史73
3.2堆溢出原理74
3.3堆调试技巧79
3.3.1堆尾检查80
3.3.2页堆81
3.4CVE-2010-2553MicrosoftCinepakCodecCVDecompress函数堆溢出漏洞85
3.4.1漏洞描述85
3.4.2分析环境85
3.4.3基于HeapPage的堆漏洞分析方法85
3.4.4漏洞修复101
3.5CVE-2012-0003MicrosoftWindowsMediaPlayerwinmm.dllMIDI文件堆溢出漏洞104
3.5.1关于“蜘蛛”漏洞攻击包(Zhi-ZhuExploitPack)104
3.5.2漏洞描述105
3.5.3分析环境105
3.5.4MIDI文件格式105
3.5.5基于导图推算的漏洞分析方法107
3.5.6漏洞利用122
3.5.7补丁比较130
3.6CVE-2013-0077MicrosoftDirectShowquartz.dllm2p文件堆溢出漏洞130
3.6.1漏洞描述130
3.6.2基于HTC的漏洞分析方法131
3.6.3漏洞修复134
3.7CVE-2012-1876InternetExporterMSHTML.dllCalculateMinMax堆溢出漏洞135
3.7.1在Pwn2Own黑客大赛上用于攻破IE9的漏洞135
3.7.2分析环境135
3.7.3基于HPA的漏洞分析方法135
3.7.4通过信息泄露实现漏洞利用149
3.7.5漏洞修复161
3.8小结163
第4章整数溢出漏洞分析164
4.1整数溢出简史164
4.2整数溢出原理164
4.2.1基于栈的整数溢出165
4.2.2基于堆的整数溢出166
4.3CVE-2011-0027MicrosoftDataAccessComponents整数溢出漏洞167
4.3.1在Pwn2Own黑客大赛上用于攻破IE8的漏洞167
4.3.2基于堆分配记录的漏洞分析方法168
4.3.3补丁比较176
4.4CVE-2012-0774AdobeReaderTrueType字体整数溢出漏洞178
4.4.1漏洞描述178
4.4.2PDF文件格式与常用分析工具178
4.4.3基于条件记录断点的漏洞分析方法182
4.4.4补丁分析196
4.5CVE-2013-0750Firefox字符串替换整数溢出漏洞197
4.5.1漏洞描述197
4.5.2基于源码调试的漏洞分析方法197
4.5.3源码比对207
4.6CVE-2013-2551InternetExplorerVMLCOALineDashStyleArray整数溢出漏洞208
4.6.1在Pwn2Own黑客大赛上攻破IE10的漏洞208
4.6.2基于类函数定位的漏洞分析方法208
4.6.3利用信息泄露实现漏洞利用223
4.7总结226
第5章 格式化字符串漏洞分析227
5.1格式化字符串漏洞简史227
5.2格式化字符串漏洞的原理227
5.3CVE-2012-0809Sudosudo_debug函数格式化字符串漏洞234
5.3.1漏洞描述234
5.3.2通过源码比对分析漏洞234
5.4CVE-2012-3569VMwareOVFTool格式化字符串漏洞235
5.4.1漏洞描述235
5.4.2基于输出消息的漏洞定位方法235
5.5总结242
第6章双重释放漏洞分析243
6.1双重释放漏洞简史243
6.2双重释放漏洞的原理243
6.3CVE-2010-3974Windows传真封面编辑器fxscover.exe双重释放漏洞246
6.3.1漏洞描述246
6.3.2通过栈回溯和堆状态判定漏洞类型246
6.3.3通过补丁比较确定漏洞成因及修复方法249
6.4CVE-2014-0502AdobeFlashPlayer双重释放漏洞251
6.4.1GreedyWonk行动251
6.4.2静态分析攻击样本251
6.4.3shellcode动态分析263
6.4.4基于ROP指令地址的反向追踪265
6.5总结273
第7章释放重引用漏洞分析274
7.1释放重引用(UseAfterFree,UAF)漏洞简史274
7.2UAF漏洞时原理274
7.3CVE-2011-0065FirefoxmChannel UAF漏洞277
7.3.1漏洞描述277
7.3.2通过动态调试快速定位漏洞源码277
7.3.3漏洞利用285
7.3.4源码比对286
7.4CVE-2013-1347MicrosoftIECGenericElementUAF漏洞287
7.4.1“水坑”攻击事件287
7.4.2通过HPA快速定位漏洞对象287
7.4.3逆向分析IE引擎对JavaScript代码的解析290
7.4.4追本溯源:探寻漏洞的本质321
7.4.5漏洞利用324
7.5CVE-2013-3346AdobeReaderToolButton UAF漏洞326
7.5.1“EpicTurla”网络间谍攻击行动326
7.5.2使用peepdf分析PDF恶意样本326
7.5.3漏洞利用338
7.6CVE-2015-0313AdobeFlashPlayerWorkersByteArrayUAF漏洞340
7.6.1漏洞描述340
7.6.2分析ActiveScript虚拟机源码辅助漏洞调试340
7.6.3FlashJIT调试插件与符号文件353
7.6.4漏洞利用354
7.6.5漏洞修复360
7.7本章总结360
第8章数组越界访问漏洞分析361
8.1数组越界与溢出的关系361
8.2数组越界访问漏洞原理361
8.3CVE-2011-2110AdobeFlashPlayer数组越界访问漏洞363
8.3.1漏洞描述363
8.3.2解决安装旧版FlashPlayer的限制问题364
8.3.3通过Perl脚本辅助分析样本365
8.3.4搭建服务器重现漏洞场景371
8.3.5通过修改样本代码定位漏洞373
8.3.6通过构造信息泄露利用漏洞376
8.3.7通过搜索指令序列分析补丁380
8.4CVE-2014-0160OpenSSLTLS数组越界访问漏洞(“心脏出血”漏洞)382
8.4.1漏洞描述382
8.4.2基于源码对比与跟踪的漏洞分析方法383
8.4.3利用漏洞盗取网站账号389
8.5本章总结394
第9章内核漏洞分析395
9.1Windows内核漏洞漫谈395
9.2Windows内核调试环境搭建396
9.3常见内核漏洞原理与利用398
9.3.1漏洞成因分析398
9.3.2漏洞利用405
9.4360安全卫士bregdrv.sys本地提权漏洞分析414
9.4.1漏洞描述414
9.4.2基于导出函数和IO控制码的追踪分析414
9.5CVE-2011-2005WindowsAfd.sys本地提权漏洞423
9.5.1漏洞描述423
9.5.2从利用代码到漏洞函数的定位分析423
9.5.3补丁比较426
9.6CVE-2013-3660Windowswin32k.sysEPATHOB指针未初始化漏洞426
9.6.1漏洞描述426
9.6.2通过IDA定义结构体辅助分析427
9.6.3漏洞利用431
9.7CVE-2014-1767WindowsAFD.sys双重释放漏洞(Pwn2Own2014)437
9.7.1漏洞描述437
9.7.2基于IOCTL处理函数自动追踪记录的分析方法437
9.7.3漏洞利用454
9.7.4补丁分析460
9.8本章总结462
第10章Android平台漏洞分析463
10.1Android平台漏洞简史463
10.2Android平台漏洞分类466
10.3常见的漏洞分析方法467
10.3.1APK静态分析467
10.3.2smali动态调试468
10.3.3so库动态调试474
10.3.4补丁源码比对475
10.3.5系统Java源码调试477
10.3.6系统C/C++源码调试486
10.3.7Android内核源码调试488
10.4智能插座漏洞分析492
10.4.1漏洞描述492
10.4.2静态逆向分析492
10.4.3利用漏洞控制网络上的任意插座497
10.4.4总结502
10.5CVE-2013-4787Android系统签名漏洞502
10.5.1漏洞描述502
10.5.2Android签名机制503
10.5.3漏洞重现509
10.5.4漏洞原理分析514
10.5.5漏洞修复516
10.6CVE-2010-1119AndroidWebKitUAF漏洞516
10.6.1漏洞描述516
10.6.2漏洞利用517
10.6.3通过补丁源码分析漏洞成因524
10.7CVE-2014-3153Android内核Futex提权漏洞(Towelroot)528
10.7.1Android设备Root神器―Towelroot528
10.7.2通过内核源码调试分析漏洞528
10.7.3漏洞利用548
10.7.4漏洞修复554
10.8本章总结554
第11章其他类型的漏洞分析555
11.1本章引言555
11.2CVE-2013-2423JAVAAppletreflection类型混淆代码执行漏洞555
11.2.1漏洞描述555
11.2.2类型混淆漏洞555
11.2.3Java安全机制556
11.2.4漏洞分析与利用558
11.2.5漏洞修复562
11.2.62013年漏洞之王―Java563
11.3CVE-2014-0257MicrosoftInternetExplorer11dfsvc组件沙盒逃逸漏洞564
11.3.1漏洞描述564
11.3.2IE沙盒保护原理564
11.3.3IE沙盒攻击面分析569
11.3.4CVE-2014-0257漏洞分析与利用570
11.4CVE-2014-9150AdobeAcrobatReaderMoveFileExIPCHook竞争条件
(沙盒逃逸)漏洞572
11.4.1Therac-25医疗事故572
11.4.2竞争条件漏洞原理573
11.4.3CVE-2014-9150漏洞描述574
11.4.4Adobe沙盒简介574
11.4.5利用漏洞实现沙盒逃逸575
11.5本章总结578
第12章软件漏洞发展趋势579
12.1软件漏洞领域的新挑战579
12.2移动终端漏洞发展趋势579
12.3云计算平台漏洞发展趋势581
12.4物联网漏洞发展趋势583
12.5本章总结585
推荐序
独乐乐,与人乐乐,孰乐?
不断向底层钻研的技术深度,创造性的广度思维,契而不舍地执着追求是成为优秀的安全研究员所必备的基础素质,无疑riusksk全都具备。
单论技术本身,问世间,是否此山最高,没有人能说的清楚。但是我在书目中还看到了许多超出技术的其他元素:有精益求精、追求完美的极客精神;有循序渐进、耐心引导的导师身影;有架构明晰,逻辑严谨的整体设计感;最能打动我的,其实是那份炽热的分享精神,毫无保留地去帮助那些还在摸索中学习的朋友。
一代宗师除了不断修炼自己之外,还需要将自己的智慧发扬传承,我在书中看到了这样的影子。《0day安全:软件漏洞分析技术》作者,北京子衿晨风科技有限公司CEO
failwest
为什么写这《漏洞战争:软件漏洞分析精要》
不知道大家是否曾有过这样的经历:
●无法读懂网上很多软件漏洞分析文章,不理解里面的漏洞成因和漏洞利用技巧。
●即使读懂某篇软件漏洞分析文章,自己仍无法独立完成相同漏洞的分析。如果文章中所使用的测试环境与软件版本跟自己使用的不一样,则顿时更不知如何入手。
●很多软件漏洞分析文章贴出存在漏洞的汇编代码,指出导致漏洞的原因,即“结论式分析”,但如何定位到此段代码并无解释,看完之后,仍不知如何快速定位,缺乏可借鉴的思路。带着这些问题,相信读者会在《漏洞战争:软件漏洞分析精要》中找到想要的答案。
再来聊下《漏洞战争:软件漏洞分析精要》的一些写作经历,开始写作《漏洞战争:软件漏洞分析精要》始于2012年5月,最初是“爱无言”找到我,说大家合作写一本关于软件漏洞案例分析的书,因为那段时间我在博客上每周都会分享一两篇软件漏洞分析的实际案例,而当时国内还没有专门写软件漏洞案例的专著(几年前出版的《0Day安全:软件漏洞分析技术》主要偏向堆和栈溢出及内核方面的漏洞分析,实际案例较少,且“爱无言”也是作者之一)。
就这样,两人开始谋划,写书的念头就此产生。
后来,我又拉了两位朋友加入,然后几人列出大纲目录,但最后因为种种原因,只剩下我一人独自完成《漏洞战争:软件漏洞分析精要》创作,中途也多次想放弃,但庆幸的是,历时3年半,终于2015年12月完稿,共历时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年的InternetExplorer漏洞,2015年AdobeFlash漏洞。PC端上的软件漏洞一直在逐年增加,虽然厂商在不断地推出各种安全机制,但漏洞利用技术的发展从未间断,Exploiter们依然生存得很好。同时,互联网早已步入移动化时代,伴随着PC软件漏洞攻击事件的频发,移动端的漏洞攻击也在逐年增长。因此,笔者结合PC端(Windows)与移动端(Android)平台上的漏洞案例,历时近4年,将自身的实战经验整理成《漏洞战争:软件漏洞分析精要》。
求学之路
经常有人问我:“一个医学生为什么会转行做安全?”,通常我都会这么回答:“因为小说看多了”。
大一时,由于喜欢看黑客小说,比如《黑客传说》《地狱黑客》《指间的黑客》,就去图书馆找一些黑客书籍学习,每天中午都不休息,几乎天天都泡在图书馆看书,甚至翘课去看计算机书。
大四才买计算机,在此之前一直都只能去网吧、学校机房或者借用舍友的计算机。当年就用诺基亚3100手机看完了《Windows程序设计》、《Windows核心编程》和《Windows环境下32位汇编语言程序设计》。后来就网购实体书来看,这样比在网吧看电子书更实惠。
大学期间,经常给《黑客防线》杂志投稿,一方面可以提高个人技术,一方面可以用稿费作为生活补贴,后来就用稿费加上我哥的经济支持,买下了第一台属于自己的计算机,《漏洞战争:软件漏洞分析精要》就有一半内容是在那台计算机上完成的。
在求学这条道路上,我一直是一个人默默地前行着,就连一块生活了几年的舍友也不知道我在学习安全方面的知识,我买的一堆计算机书籍一直藏在宿舍衣柜最里面。在此过程中,自己走过很多弯路,甚至多次差点放弃,但很庆幸最后还是坚持下来了,并直至今日,依然在安全这条道路上前行着……
面试经历
在圈内朋友的建议下,我在大五(医学五年制)上学期开始找安全相关的工作,最终顺利拿到安恒和腾讯的offer。当初投简历给安恒时,安恒的副总裁看完简历后直接发了offer,我有点受宠若惊,也特别感谢安恒的信任,但最终还是选择了腾讯。面试腾讯的经历,我觉得是个有趣的过程,值得与大家分享。
那年我还在厦门市第二医院骨伤科实习,门诊部刚好不是特别忙,我在给一位腰椎患者做完针灸后,就接到来自腾讯安全中心的面试电话。然后趁主任不在,偷偷躲到门诊部后面的楼梯口进行电话面试,整个面试过程还算比较顺利,第2天腾讯安全中心就来电说希望我到深圳总部面试。
到了深圳总部后,腾讯安全中心的主管面试了我,虽然聊了一个半小时,但没有问我多少问题,聊完后直接被带去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……
由于作者水平有限,书中难免有误,欢迎各位业界同仁斧正!
2016年3月27日于深圳









