本書系統(tǒng)地講解軟件漏洞分析與利用所需的各類工具、理論技術(shù)和實(shí)戰(zhàn)方法,主要涉及Windows和Android系統(tǒng)平臺。全書內(nèi)容根據(jù)不同的軟件漏洞類型劃分,如堆棧溢出、沙盒逃逸、類型混淆、UAF、內(nèi)核漏洞等,同時針對流行的移動安全,加入Android平臺的漏洞分析與利用。本書以精心挑選的經(jīng)典漏洞為例,以分享漏洞的分析技巧和工具為主,對漏洞的成因及利用和修復(fù)方法進(jìn)行詳細(xì)講解,旨在“授人以漁”。本書最大的特點(diǎn)是以經(jīng)典漏洞作為實(shí)戰(zhàn)案例來講解,摒棄空頭理論,幾乎是“一本用調(diào)試器寫出來的書”。本書適合計算機(jī)相關(guān)專業(yè)的本科生、研究生,信息安全愛好者,軟件安全、移動安全相關(guān)從業(yè)人員,軟件開發(fā)與測試人員及黑客等閱讀。
林椏泉(網(wǎng)絡(luò)ID:riusksk、泉哥、林大夫),畢業(yè)于福建中醫(yī)藥大學(xué)中西醫(yī)骨傷專業(yè),騰訊前高級工程師。微軟最具價值安全研究員,GeekPwn國際安全極客大賽獲獎?wù)撸拔④洷盓xploitMe安全調(diào)試技術(shù)個人挑戰(zhàn)賽獲獎?wù),共獲得 Microsoft、Apple、Google、Adobe等各大廠商80多個CVE漏洞致謝。10余年網(wǎng)絡(luò)安全從業(yè)經(jīng)歷,主要聚焦軟件安全、系統(tǒng)安全、Web安全、惡意軟件對抗等領(lǐng)域。
第1章 基礎(chǔ)知識 1
1.1 漏洞的相關(guān)概念 1
1.1.1 什么是漏洞 1
1.1.2 漏洞的價值 1
1.1.3 0Day漏洞 2
1.1.4 PoC與Exploit 2
1.2 為什么要分析漏洞 2
1.3 常用分析工具 3
1.3.1 IDA——匯編利器 3
1.3.2 OllyDbg——破解與逆向常用調(diào)試器 4
1.3.3 Immunity Debugger——漏洞分析專用調(diào)試器 4
1.3.4 WinDbg——微軟正宗調(diào)試器 5
1.3.5 x64dbg——Windows 64位調(diào)試器 6
1.3.6 Ghidra——反匯編器 7
1.3.7 GDB——Linux調(diào)試器 8
1.3.8 JEB——Android反編譯器 9
1.3.9 其他工具 10
1.4 常見的漏洞分析方法 10
1.4.1 靜態(tài)分析 10
1.4.2 動態(tài)調(diào)試 11
1.4.3 源碼分析 11
1.4.4 補(bǔ)丁比較 12
1.4.5 污點(diǎn)追蹤 12
1.5 學(xué)習(xí)資源 13
1.5.1 站點(diǎn)分享 13
1.5.2 書籍推薦 14
1.6 本章總結(jié) 15
第2章 棧溢出漏洞分析 16
2.1 棧溢出簡史 16
2.2 棧溢出原理 17
2.3 CVE-2010-2883 Adobe Reader TTF字體SING表?xiàng)R绯雎┒?18
2.3.1 LuckyCat攻擊事件 18
2.3.2 漏洞描述 19
2.3.3 分析環(huán)境 19
2.3.4 基于字符串定位的漏洞分析方法 20
2.3.5 樣本Exploit技術(shù)分析 21
2.3.6 樣本Shellcode惡意行為分析 27
2.3.7 漏洞修復(fù) 30
2.4 CVE-2010-3333 Microsoft RTF棧溢出漏洞 31
2.4.1 林來瘋攻擊事件 31
2.4.2 漏洞描述 32
2.4.3 分析環(huán)境 32
2.4.4 RTF文件格式 33
2.4.5 基于;厮莸穆┒捶治龇椒 34
2.4.6 漏洞利用原理分析 42
2.4.7 Office 2003與Office 2007 Exploit通用性研究 43
2.4.8 漏洞修復(fù) 46
2.5 CVE-2011-0104 Microsoft Excel TOOLBARDEF Record棧溢出漏洞 52
2.5.1 漏洞描述 52
2.5.2 分析環(huán)境 52
2.5.3 基于污點(diǎn)追蹤思路的漏洞分析方法 53
2.5.4 漏洞修復(fù) 59
2.6 阿里旺旺ActiveX控件imageMan.dll棧溢出漏洞 60
2.6.1 漏洞描述 60
2.6.2 分析環(huán)境 61
2.6.3 針對ActiveX控件的漏洞分析方法 61
2.6.4 漏洞利用原理分析 64
2.7 CVE-2012-0158 Microsoft Office MSCOMCTL.ocx棧溢出漏洞 65
2.7.1 Lotus Blossom 行動 65
2.7.2 漏洞描述 66
2.7.3 分析環(huán)境 66
2.7.4 基于OffVis工具的Office漏洞分析方法 66
2.7.5 漏洞修復(fù) 72
2.8 本章總結(jié) 73
第3章 堆溢出漏洞分析 74
3.1 堆溢出簡史 74
3.2 堆溢出原理 75
3.3 堆調(diào)試技巧 80
3.3.1 堆尾檢查 81
3.3.2 頁堆 82
3.4 CVE-2010-2553 Microsoft Cinepak Codec CVDecompress函數(shù)堆溢出漏洞 86
3.4.1 漏洞描述 86
3.4.2 分析環(huán)境 86
3.4.3 基于HeapPage的堆漏洞分析方法 86
3.4.4 漏洞修復(fù) 101
3.5 CVE-2012-0003 Microsoft Windows Media Player winmm.dll MIDI文件堆溢出漏洞 104
3.5.1 關(guān)于“蜘蛛”漏洞攻擊包(Zhi-Zhu Exploit Pack) 104
3.5.2 漏洞描述 105
3.5.3 分析環(huán)境 105
3.5.4 MIDI文件格式 105
3.5.5 基于導(dǎo)圖推算的漏洞分析方法 107
3.5.6 漏洞利用原理分析 120
3.5.7 補(bǔ)丁比較 127
3.6 CVE-2013-0077 Microsoft DirectShow quartz.dll m2p文件堆溢出漏洞 127
3.6.1 漏洞描述 127
3.6.2 基于HTC的漏洞分析方法 127
3.6.3 漏洞修復(fù) 131
3.7 CVE-2012-1876 Internet Explorer MSHTML.dll CalculateMinMax堆溢出漏洞 132
3.7.1 在Pwn2Own黑客大賽上用于攻破IE9的漏洞 132
3.7.2 分析環(huán)境 132
3.7.3 基于HPA的漏洞分析方法 132
3.7.4 通過信息泄露實(shí)現(xiàn)漏洞利用 146
3.7.5 漏洞修復(fù) 155
3.8 本章總結(jié) 157
第4章 整數(shù)溢出漏洞分析 158
4.1 整數(shù)溢出簡史 158
4.2 整數(shù)溢出原理 158
4.2.1 基于棧的整數(shù)溢出 159
4.2.2 基于堆的整數(shù)溢出 160
4.3 CVE-2011-0027 Microsoft Data Access Components整數(shù)溢出漏洞 161
4.3.1 在Pwn2Own黑客大賽上用于攻破IE8的漏洞 161
4.3.2 基于堆分配記錄的漏洞分析方法 162
4.3.3 補(bǔ)丁比較 170
4.4 CVE-2012-0774 Adobe Reader TrueType字體整數(shù)溢出漏洞 172
4.4.1 漏洞描述 172
4.4.2 PDF文件格式與常用分析工具 172
4.4.3 基于條件記錄斷點(diǎn)的漏洞分析方法 176
4.4.4 補(bǔ)丁分析 190
4.5 CVE-2013-0750 Firefox字符串替換整數(shù)溢出漏洞 191
4.5.1 漏洞描述 191
4.5.2 基于源碼調(diào)試的漏洞分析方法 191
4.5.3 源碼比對 201
4.6 CVE-2013-2551 Internet Explorer VML COALineDashStyleArray整數(shù)溢出漏洞 202
4.6.1 在Pwn2Own黑客大賽上攻破IE10的漏洞 202
4.6.2 基于類函數(shù)定位的漏洞分析方法 202
4.6.3 利用信息泄露實(shí)現(xiàn)漏洞利用 217
4.7 本章總結(jié) 220
第5章 格式化字符串漏洞分析 221
5.1 格式化字符串漏洞簡史 221
5.2 格式化字符串漏洞的原理 221
5.3 CVE-2012-0809 Sudo sudo_debug函數(shù)格式化字符串漏洞 228
5.3.1 漏洞描述 228
5.3.2 通過源碼比對分析漏洞 228
5.4 CVE-2012-3569 VMware OVF Tool格式化字符串漏洞 229
5.4.1 漏洞描述 229
5.4.2 基于輸出消息的漏洞定位方法 229
5.4.3 漏洞利用原理分析 233
5.5 本章總結(jié) 236
第6章 雙重釋放漏洞分析 237
6.1 雙重釋放漏洞簡史 237
6.2 雙重釋放漏洞的原理 237
6.3 CVE-2010-3974 Windows傳真封面編輯器fxscover.exe雙重釋放漏洞 240
6.3.1 漏洞描述 240
6.3.2 通過;厮莺投褷顟B(tài)判定漏洞類型 240
6.3.3 通過補(bǔ)丁比較確定漏洞成因及修復(fù)方法 243
6.4 CVE-2014-0502 Adobe Flash Player 雙重釋放漏洞 245
6.4.1 GreedyWonk行動 245
6.4.2 靜態(tài)分析攻擊樣本 245
6.4.3 Shellcode自動化模擬執(zhí)行 254
6.4.4 基于ROP指令地址的反向追蹤 256
6.5 本章總結(jié) 264
第7章 釋放重引用漏洞分析 265
7.1 釋放重引用(Use After Free,UAF)漏洞簡史 265
7.2 UAF漏洞的原理 265
7.3 CVE-2011-0065 Firefox mChannel UAF漏洞 268
7.3.1 漏洞描述 268
7.3.2 通過動態(tài)調(diào)試快速定位漏洞源碼 268
7.3.3 漏洞利用原理分析 276
7.3.4 源碼比對 277
7.4 CVE-2013-1347 Microsoft IE CGenericElement UAF漏洞 278
7.4.1 “水坑”攻擊事件 278
7.4.2 通過HPA快速定位漏洞對象 278
7.4.3 逆向分析IE引擎對JavaScript代碼的解析 281
7.4.4 追本溯源:探尋漏洞的根因 312
7.4.5 漏洞利用原理分析 315
7.5 CVE-2013-3346 Adobe Reader ToolButton UAF漏洞 317
7.5.1 “Epic Turla”網(wǎng)絡(luò)間諜攻擊行動 317
7.5.2 使用peepdf分析PDF惡意樣本 317
7.5.3 漏洞利用原理分析 326
7.6 CVE-2015-0313 Adobe Flash Player Workers ByteArray UAF漏洞 328
7.6.1 漏洞描述 328
7.6.2 分析ActionScript虛擬機(jī)源碼輔助漏洞調(diào)試 328
7.6.3 Flash JIT調(diào)試插件與符號文件 341
7.6.4 漏洞利用原理分析 342
7.6.5 漏洞修復(fù) 348
7.7 本章總結(jié) 348
第8章 數(shù)組越界訪問漏洞分析 349
8.1 數(shù)組越界與溢出的關(guān)系 349
8.2 數(shù)組越界訪問漏洞原理 349
8.3 CVE-2011-2110 Adobe Flash Player數(shù)組越界訪問漏洞 351
8.3.1 漏洞描述 351
8.3.2 解決安裝舊版Flash Player的限制問題 351
8.3.3 通過Perl腳本輔助分析樣本 352
8.3.4 搭建服務(wù)器重現(xiàn)漏洞場景 358
8.3.5 通過修改樣本代碼定位漏洞 360
8.3.6 通過構(gòu)造信息泄露利用漏洞 363
8.3.7 通過搜索指令序列分析補(bǔ)丁 367
8.4 CVE-2014-0160 OpenSSL TLS數(shù)組越界訪問漏洞(“心臟滴血”) 369
8.4.1 漏洞描述 369
8.4.2 基于源碼對比與跟蹤的漏洞分析方法 370
8.4.3 利用漏洞盜取網(wǎng)站賬號 376
8.5 本章總結(jié) 380
第9章 內(nèi)核漏洞分析 381
9.1 Windows內(nèi)核漏洞漫談 381
9.2 Windows內(nèi)核調(diào)試環(huán)境搭建 382
9.3 常見內(nèi)核漏洞原理與利用 384
9.3.1 漏洞成因分析 384
9.3.2 漏洞利用原理分析 391
9.4 360安全衛(wèi)士bregdrv.sys本地提權(quán)漏洞分析 399
9.4.1 漏洞描述 399
9.4.2 基于導(dǎo)出函數(shù)和I/O控制碼的追蹤分析 400
9.5 CVE-2011-2005 Windows Afd.sys本地提權(quán)漏洞 409
9.5.1 漏洞描述 409
9.5.2 從利用代碼到漏洞函數(shù)的定位分析 409
9.5.3 補(bǔ)丁比較 412
9.6 CVE-2013-3660 Windows win32k.sys EPATHOB指針未初始化漏洞 412
9.6.1 漏洞描述 412
9.6.2 通過IDA定義結(jié)構(gòu)體輔助分析 413
9.6.3 漏洞利用原理分析 417
9.7 CVE-2014-1767 Windows AFD.sys雙重釋放漏洞(Pwn2Own 2014) 423
9.7.1 Pwnie Awards 2014“最佳提權(quán)漏洞獎”得主 423
9.7.2 基于IOCTL處理函數(shù)自動追蹤記錄的分析方法 423
9.7.3 漏洞利用原理分析 440
9.7.4 補(bǔ)丁分析 446
9.8 本章總結(jié) 448
第10章 Android平臺漏洞分析 449
10.1 Android平臺漏洞簡史 449
10.2 Android平臺漏洞分類 452
10.3 常見的漏洞分析方法 453
10.3.1 APK靜態(tài)分析 453
10.3.2 smali動態(tài)調(diào)試 454
10.3.3 so庫動態(tài)調(diào)試 460
10.3.4 補(bǔ)丁源碼比對 460
10.3.5 系統(tǒng)Java源碼調(diào)試 463
10.3.6 系統(tǒng)C/C++源碼調(diào)試 471
10.3.7 Android內(nèi)核源碼調(diào)試 473
10.4 智能插座漏洞分析 476
10.4.1 漏洞描述 476
10.4.2 靜態(tài)逆向分析 477
10.4.3 利用漏洞控制網(wǎng)絡(luò)上的任意插座 481
10.4.4 總結(jié) 486
10.5 CVE-2013-4787 Android系統(tǒng)簽名漏洞 487
10.5.1 漏洞描述 487
10.5.2 Android簽名機(jī)制 487
10.5.3 漏洞重現(xiàn) 493
10.5.4 漏洞原理分析 498
10.5.5 漏洞修復(fù) 500
10.6 CVE-2010-1119 Android WebKit UAF漏洞 500
10.6.1 漏洞描述 500
10.6.2 漏洞利用原理分析 501
10.6.3 通過補(bǔ)丁源碼分析漏洞成因 508
10.7 CVE-2014-3153 Android內(nèi)核Futex提權(quán)漏洞(Towelroot) 512
10.7.1 Android設(shè)備Root神器—Towelroot 512
10.7.2 通過內(nèi)核源碼調(diào)試分析漏洞 512
10.7.3 漏洞利用原理分析 532
10.7.4 漏洞修復(fù) 538
10.8 本章總結(jié) 538
第11章 其他類型的漏洞分析 539
11.1 引言 539
11.2 CVE-2013-2423 JAVA Applet reflection類型混淆代碼執(zhí)行漏洞 539
11.2.1 漏洞描述 539
11.2.2 類型混淆漏洞 539
11.2.3 Java安全機(jī)制 540
11.2.4 漏洞分析與利用原理 542
11.2.5 漏洞修復(fù) 546
11.2.6 2013年漏洞之王—Java 547
11.3 CVE-2014-0257 Microsoft Internet Explorer 11 dfsvc組件沙盒逃逸漏洞 548
11.3.1 漏洞描述 548
11.3.2 IE沙盒保護(hù)原理 548
11.3.3 IE沙盒攻擊面分析 553
11.3.4 CVE-2014-0257漏洞分析與利用原理 554
11.4 CVE-2014-9150 Adobe Acrobat Reader MoveFileEx IPC Hook競爭條件(沙盒逃逸)漏洞 556
11.4.1 Therac-25醫(yī)療事故 556
11.4.2 競爭條件漏洞原理 557
11.4.3 CVE-2014-9150漏洞描述 558
11.4.4 Adobe沙盒簡介 558
11.4.5 利用漏洞實(shí)現(xiàn)沙盒逃逸 559
11.5 本章總結(jié) 562