第 一篇 軟件漏洞與攻擊利用
第 1章 軟件安全概述 3
1.1 軟件安全的定義及內(nèi)涵 3
1.1.1 軟件安全的定義 3
1.1.2 用信息安全的屬性來理解軟件安全 4
1.2 軟件安全問題 4
1.2.1 引起軟件安全問題的原因 4
1.2.2 軟件安全問題帶來的影響 6
1.2.3 軟件安全面臨的挑戰(zhàn) 7
1.3 軟件安全發(fā)展歷程 8
1.3.1 黑客起源 8
1.3.2 萬維網(wǎng)興起 8
1.3.3 軟件安全開發(fā)生命周期的提出 9
1.3.4 在云中擴展安全開發(fā) 9
1.4 軟件安全學科的主要內(nèi)容 10
1.4.1 軟件安全與系統(tǒng)安全、網(wǎng)絡安全之間的關系 10
1.4.2 軟件安全的主流技術 11
1.5 確保軟件安全的工程化方法 12
1.6 小結(jié) 13
參考文獻 14
第 2章 主流的軟件漏洞類型及典型攻擊方法 15
2.1 空間錯誤類內(nèi)存漏洞及攻擊方法 15
2.1.1 堆緩沖區(qū)溢出漏洞 15
2.1.2 棧緩沖區(qū)溢出 17
2.1.3 格式化字符串漏洞攻擊 18
2.2 時間錯誤類內(nèi)存漏洞及攻擊方法 19
2.2.1 Double-Free漏洞攻擊 19
2.2.2 Use-After-Free攻擊 20
2.3 條件競爭漏洞及攻擊方法 21
2.3.1 TOCTOU攻擊 21
2.3.2 Double-Fetch攻擊 22
2.4 代碼注入型攻擊 24
2.5 代碼重用型攻擊 25
2.5.1 Return-to-libc(Ret2libc)攻擊 25
2.5.2 ROP攻擊 28
2.5.3 JOP攻擊 31
2.6 控制流劫持攻擊 32
2.7 數(shù)據(jù)流劫持攻擊 32
2.8 內(nèi)存泄露攻擊 33
2.9 小結(jié) 34
參考文獻 34
第3章 漏洞利用技術 36
3.1 漏洞利用技術簡介 36
3.1.1 Exploit、Payload與Shellcode 36
3.1.2 漏洞的可利用性 37
3.1.3 漏洞利用的影響 38
3.2 人工漏洞利用 39
3.2.1 概述 39
3.2.2 觸發(fā)漏洞路徑 39
3.2.3 構(gòu)造利用鏈 41
3.2.4 繞過安全機制 43
3.2.5 實例:CVE-2018-5767棧溢出漏洞 44
3.2.6 實例:CVE-2011-0065 UAF漏洞 45
3.3 自動化漏洞利用 47
3.3.1 基于二進制補丁比較的自動化漏洞利用 47
3.3.2 面向控制流的自動化漏洞利用 47
3.3.3 面向數(shù)據(jù)流的自動化漏洞利用 48
3.4 小結(jié) 49
參考文獻 49
第二篇 軟件脆弱性分析與軟件漏洞挖掘
第4章 軟件安全形式化驗證 53
4.1 軟件安全形式化驗證技術介紹 53
4.1.1 什么是形式化驗證 53
4.1.2 定理證明方法簡介 54
4.1.3 模型檢驗方法簡介 54
4.2 軟件安全形式化驗證面臨的挑戰(zhàn) 55
4.2.1 定理證明方法面臨的挑戰(zhàn) 55
4.2.2 模型檢驗方法的算法挑戰(zhàn) 55
4.2.3 模型檢驗的建模挑戰(zhàn) 56
4.3 軟件安全形式化驗證的主流技術 57
4.3.1 Kripke結(jié)構(gòu) 57
4.3.2 定理證明工具簡介 59
4.3.3 模型檢驗的關鍵技術 60
4.3.4 模型檢驗的主流驗證工具 63
4.4 典型應用 67
4.4.1 問題描述與建模 67
4.4.2 使用NuSMV工具解決農(nóng)夫過河問題 68
4.4.3 使用SPIN工具解決農(nóng)夫過河問題 70
4.5 未來的發(fā)展趨勢 72
4.5.1 未來的發(fā)展方向 72
4.5.2 新時代的挑戰(zhàn) 72
4.6 小結(jié) 73
參考文獻 73
第5章 符號執(zhí)行技術 74
5.1 符號執(zhí)行的定義 74
5.2 靜態(tài)符號執(zhí)行 75
5.2.1 靜態(tài)符號執(zhí)行的原理 75
5.2.2 靜態(tài)符號執(zhí)行的局限性 76
5.3 動態(tài)符號執(zhí)行 76
5.3.1 混合測試 77
5.3.2 執(zhí)行生成測試 79
5.3.3 選擇性符號執(zhí)行 80
5.4 典型應用 80
5.4.1 結(jié)合模糊測試進行漏洞檢測 80
5.4.2 代碼覆蓋率測試 81
5.4.3 反混淆 82
5.5 未來發(fā)展趨勢 82
5.6 小結(jié) 84
參考文獻 84
第6章 污點分析技術 85
6.1 污點分析技術的定義 85
6.2 靜態(tài)污點分析技術 86
6.2.1 靜態(tài)數(shù)據(jù)流分析的圖的可達性查詢算法 86
6.2.2 典型靜態(tài)污點分析系統(tǒng)及應用 88
6.3 動態(tài)污點分析技術 89
6.3.1 動態(tài)污點分析技術的關鍵問題 90
6.3.2 應用層動態(tài)污點分析技術 93
6.3.3 典型應用層動態(tài)污點分析系統(tǒng) 97
6.3.4 虛擬機層全系統(tǒng)動態(tài)污點分析技術 102
6.3.5 典型全系統(tǒng)動態(tài)污點分析系統(tǒng)及應用 102
6.4 典型應用 104
6.4.1 自動化網(wǎng)絡協(xié)議格式逆向分析技術 104
6.4.2 程序惡意行為檢測 105
6.4.3 智能手機上的敏感信息跟蹤與分析 106
6.4.4 漏洞檢測 106
6.5 未來發(fā)展趨勢 107
6.6 小結(jié) 108
參考文獻 108
第7章 軟件漏洞挖掘 110
7.1 基于規(guī)則的軟件漏洞挖掘 110
7.1.1 基本概念 110
7.1.2 數(shù)據(jù)流分析 111
7.1.3 基于符號執(zhí)行的漏洞挖掘 121
7.2 克隆漏洞挖掘 125
7.2.1 基本概念 125
7.2.2 克隆漏洞挖掘的流程 130
7.2.3 挑戰(zhàn)與未來發(fā)展趨勢 134
7.3 智能漏洞挖掘 136
7.3.1 基本概念 136
7.3.2 智能漏洞挖掘流程 137
7.3.3 數(shù)據(jù)表征 138
7.3.4 模型學習 140
7.3.5 未來發(fā)展趨勢 143
7.4 基于模糊測試的漏洞挖掘 144
7.4.1 基本概念 144
7.4.2 基于變異的模糊測試 144
7.4.3 基于生成的模糊測試 144
7.4.4 未來發(fā)展趨勢 145
7.5 典型應用 145
7.5.1 VulDeePecker概述 145
7.5.2 VulDeePecker總體架構(gòu) 146
7.6 未來發(fā)展趨勢 147
7.7 小結(jié) 147
參考文獻 148
第三篇 軟件防護技術
第8章 代碼安全與代碼完整性保護 151
8.1 代碼安全面臨的主要挑戰(zhàn) 151
8.2 代碼的安全編程 152
8.2.1 系統(tǒng)安全架構(gòu)設計 152
8.2.2 輸入數(shù)據(jù)可信性驗證 152
8.2.3 緩沖區(qū)溢出防范 153
8.2.4 程序錯誤與異常處理 154
8.3 代碼完整性保護 155
8.3.1 軟件水印技術 155
8.3.2 代碼混淆技術 155
8.3.3 代碼隱藏 159
8.3.4 數(shù)據(jù)執(zhí)行保護 159
8.4 典型應用 159
8.4.1 安全編碼標準 159
8.4.2 代碼保護工具 160
8.5 未來發(fā)展趨勢 161
8.6 小結(jié) 161
參考文獻 161
第9章 控制流完整性保護 163
9.1 控制流劫持 163
9.1.1 程序的控制流轉(zhuǎn)移 163
9.1.2 控制流劫持攻擊 164
9.2 控制流完整性保護 165
9.2.1 控制流完整性的定義 165
9.2.2 控制流完整性保護過程 166
9.3 控制流完整性保護方案介紹 167
9.3.1 粗粒度的CFI保護 168
9.3.2 細粒度的CFI保護 175
9.3.3 硬件輔助的CFI保護 179
9.4 典型應用 185
9.5 未來發(fā)展趨勢 186
9.6 小結(jié) 186
參考文獻 187
第 10章 數(shù)據(jù)流與數(shù)據(jù)流完整性保護 188
10.1 數(shù)據(jù)流定義 188
10.2 數(shù)據(jù)流分析方法及分類 188
10.2.1 程序控制流圖 188
10.2.2 程序數(shù)據(jù)流圖 189
10.2.3 數(shù)據(jù)流分析方法 190
10.3 典型數(shù)據(jù)流分析方法 193
10.3.1 定義可達分析 194
10.3.2 存活變量分析 196
10.3.3 典型數(shù)據(jù)流分析方法總結(jié) 199
10.4 數(shù)據(jù)流分析方法的典型應用場景 200
10.4.1 漏洞挖掘 200
10.4.2 軟件測試 202
10.4.3 代碼表示 203
10.5 數(shù)據(jù)流完整性保護 204
10.5.1 數(shù)據(jù)流完整性概念 204
10.5.2 數(shù)據(jù)流完整性保護實例 204
10.5.3 數(shù)據(jù)完整性保護的發(fā)展與挑戰(zhàn) 206
10.6 典型應用 209
10.6.1 面向操作系統(tǒng)內(nèi)核的數(shù)據(jù)流完整性保護 209
10.6.2 面向?qū)崟r系統(tǒng)的數(shù)據(jù)流完整性保護 210
10.7 未來發(fā)展趨勢 210
10.8 小結(jié) 211
參考文獻 211
第 11章 軟件隨機化保護技術 213
11.1 ASLR介紹 213
11.1.1 回顧:虛擬地址空間布局 213
11.1.2 ASLR 215
11.1.3 PIC和PIE技術 218
11.1.4 實例:Windows操作系統(tǒng)上的ASLR機制 219
11.2 ASLR的分類和實例 223
11.2.1 時間維度 223
11.2.2 粒度維度 226
11.2.3 方法維度 228
11.3 拓展:ASLR其他相關研究 231
11.3.1 內(nèi)核ASLR 231
11.3.2 Retouching 232
11.4 指令集隨機化相關研究 233
11.4.1 指令集直接加解密 233
11.4.2 ASIST 234
11.4.3 Polyglot 236
11.5 典型應用 238
11.6 未來發(fā)展趨勢 239
11.7 小結(jié) 239
參考文獻 240