編輯推薦
(1)是作者多年軟件安全研究的梳理和總結。
(2)由易到難、由淺入深全麵介紹瞭二進製程序分析所需的基礎知識和基礎分析工具,程序切片、符號執行、模糊測試、汙點分析等軟件分析基礎方法,以及相關分析方法在惡意代碼分析、軟件漏洞挖掘分析、網絡協議逆嚮分析、移動智能終端應用軟件安全分析等方麵的應用。
(3)不僅介紹瞭相關方法和原理,還分析瞭當前國際上相關的主流工具和係統,同時,也結閤瞭大量的真實案例。
內容簡介
本書作者根據其多年的軟件安全研究成果,對軟件安全分析方法進行瞭梳理和總結。全書由易到難、由淺入深地全麵介紹瞭二進製程序分析所需的基礎知識和基礎分析工具,程序切片、符號執行、模糊測試、汙點分析等軟件分析基礎方法,以及相關分析方法在惡意代碼分析、軟件漏洞挖掘分析、網絡協議逆嚮分析、移動智能終端應用軟件安全分析等方麵的應用。本書不僅介紹瞭相關方法和原理,還分析瞭當前國際上相關的主流工具和係統,可供讀者學習和參考;同時,在安全分析應用方麵,也結閤瞭大量的真實案例,有助於讀者進一步深刻理解相關方法與技術的原理和價值。
本書不僅可作為網絡空間安全專業本科生、研究生相關課程的教材,也可供對軟件安全感興趣的廣大學者以及從事軟件漏洞和惡意代碼分析工作的專業人員參考。
目錄
目錄
第1章緒論/1
1.1引言1
1.2典型安全問題3
1.2.1惡意軟件3
1.2.2軟件漏洞9
1.2.3軟件後門11
1.3軟件安全性分析的目標12
1.4主要方法與技術13
1.4.1反匯編與反編譯14
1.4.2程序調試15
1.4.3程序切片17
1.4.4汙點傳播分析18
1.4.5符號執行19
1.4.6模糊測試20
1.5主要分析應用21
1.5.1惡意軟件分析21
1.5.2網絡協議逆嚮分析21
1.5.3軟件漏洞分析與利用22
1.6本書的組織結構23
1.6.1內容範圍23
1.6.2本書的組織23
1.7其他說明24
參考文獻24
第2章基礎知識/25
2.1處理器硬件架構基礎25
2.1.1CPU結構介紹25
2.1.2保護模式28
2.1.3特權級29
2.1.4中斷處理與異常處理30
〖1〗軟件安全分析與應用目錄[3]〖3〗2.1.5調試支持32
2.1.6虛擬化支持34
2.2反匯編及對抗技術35
2.2.1匯編語言35
2.2.2反匯編39
2.2.3代碼混淆40
2.2.4反調試42
2.3Windows操作係統基礎44
2.3.1PE文件結構44
2.3.2進程管理51
2.3.3綫程管理52
2.3.4內存管理54
2.3.5對象與句柄管理57
2.3.6文件係統59
2.4小結59
參考文獻60
第3章軟件安全分析基礎工具/61
3.1靜態分析工具61
3.1.1IDA Pro61
3.1.2Udis8665
3.1.3Capstone67
3.1.4PEiD69
3.1.5010Editor70
3.2動態分析工具75
3.2.1Process Monitor75
3.2.2Wireshark78
3.2.3OllyDbg80
3.2.4WinDbg82
3.2.5Pin88
3.3虛擬化輔助分析平颱89
3.3.1VMWare Workstation89
3.3.2VirtualBox93
3.3.3QEMU94
3.3.4Xen97
3.4小結97
參考文獻98
第4章程序切片/99
4.1概述99
4.2程序切片初探100
4.2.1切片相關基礎知識101
4.2.2切片的基本原理109
4.3靜態程序切片111
4.3.1基於數據流方程的切片方法111
4.3.2基於圖可達性算法的切片方法115
4.4動態程序切片116
4.4.1基於程序依賴圖的動態切片方法117
4.4.2基於動態依賴圖的動態切片方法120
4.5小結124
參考文獻125
第5章符號執行/126
5.1符號執行基本模型126
5.1.1基本思想126
5.1.2程序語言定義127
5.1.3符號執行中的程序語義127
5.1.4符號執行樹129
5.1.5約束求解130
5.1.6符號執行實例133
5.2動態符號執行技術136
5.2.1基本思想136
5.2.2動態符號執行實例137
5.2.3動態符號執行工具SAGE142
5.2.4動態符號執行技術中的關鍵問題150
5.3並行符號執行技術160
5.3.1基本思想160
5.3.2並行係統SCORE161
5.3.3並行係統Cloud9164
5.3.4並行係統SAGEN169
5.4選擇符號執行技術174
5.4.1基本思想174
5.4.2選擇符號執行實例175
5.4.3關鍵問題及解決方案177
5.5符號執行應用實例179
5.5.1KLEE179
5.5.2應用實例180
參考文獻181
第6章模糊測試/183
6.1概述183
6.2基本原理與組成184
6.2.1基本原理184
6.2.2係統組成186
6.2.3工作模式188
6.3基礎方法與技術190
6.3.1數據生成方法190
6.3.2環境控製技術194
6.3.3狀態監控技術198
6.4模糊測試優化方法200
6.4.1灰盒模糊測試200
6.4.2白盒模糊測試201
6.4.3基於反饋的模糊測試202
6.5分布式模糊測試203
6.5.1分布式控製結構204
6.5.2分布式模糊測試策略206
6.5.3動態適應機製207
6.6典型工具與案例207
6.6.1Peach208
6.6.2Sulley211
參考文獻213
第7章汙點傳播分析/214
7.1概述214
7.1.1發展簡史214
7.1.2應用領域215
7.2基本原理217
7.3主要方法218
7.3.1汙點源識彆219
7.3.2汙點內存映射220
7.3.3汙點動態跟蹤222
7.3.4傳播規則設計225
7.3.5汙點誤用檢測228
7.4典型係統實現229
7.4.1TaintCheck係統229
7.4.2TEMU係統231
7.4.3AOTA係統233
7.5典型實例分析235
7.5.1分析環境搭建235
7.5.2汙點傳播過程236
7.5.3汙點迴溯分析237
7.6總結239
參考文獻239
第8章惡意代碼檢測與分析/241
8.1惡意代碼分析基礎241
8.1.1惡意代碼分類241
8.1.2惡意代碼分析的目的243
8.1.3典型分析流程244
8.1.4軟件漏洞利用及分析245
8.2靜態分析247
8.2.1殺毒軟件掃描247
8.2.2文件類型確定247
8.2.3文件哈希計算248
8.2.4字符串信息提取251
8.2.5文件元數據提取252
8.2.6混淆代碼識彆254
8.2.7代碼反匯編257
8.3動態分析259
8.3.1動態分析環境構建259
8.3.2動態行為分析262
8.3.3動態調試分析268
8.3.4反虛擬化分析對抗272
8.3.5反自動化分析對抗276
8.4實際案例分析278
8.5小結288
參考文獻289
第9章軟件漏洞挖掘與分析/290
9.1軟件漏洞基礎知識290
9.1.1概述290
9.1.2軟件漏洞典型類型292
9.1.3軟件漏洞利用基礎知識297
9.1.4軟件漏洞防護機製基礎知識300
9.2軟件漏洞機理分析301
9.2.1軟件漏洞脆弱點分析302
9.2.2軟件漏洞路徑分析305
9.2.3軟件漏洞內存布局分析309
9.2.4軟件漏洞分析實例310
9.3軟件漏洞利用312
9.3.1漏洞攻擊鏈構造312
9.3.2漏洞攻擊路徑觸發314
9.3.3保護機製繞過316
9.4小結317
參考文獻318
第10章網絡協議逆嚮分析/319
10.1網絡協議逆嚮概述319
10.2協議消息格式逆嚮320
10.2.1字段劃分322
10.2.2字段間關係的識彆331
10.2.3字段功能語義恢復336
10.3協議狀態機恢復341
10.3.1協議消息類型識彆341
10.3.2狀態機推斷和化簡344
10.4小結350
參考文獻351
第11章移動智能終端應用軟件安全性分析/352
11.1Android係統安全框架介紹352
11.1.1權限機製352
11.1.2沙箱隔離355
11.2Android軟件典型安全問題355
11.2.1隱私竊取355
11.2.2應用重打包356
11.2.3組件安全問題356
11.3靜態分析361
11.3.1權限分析361
11.3.2組件分析362
11.3.3代碼分析366
11.3.4重打包應用檢測381
11.4動態分析388
11.4.1數據流分析389
11.4.2數據流分析典型工具390
11.4.3動態行為分析392
11.4.4動態行為分析典型工具394
11.5實際案例分析401
11.5.1應用軟件實現安全性分析401
11.5.2惡意應用分析404
11.6小結412
參考文獻413
精彩書摘
第5章符 號 執 行符號執行技術在1976年由Jame C.King提齣[1]。20世紀70年代,關於軟件正確性測試的研究工作都基於一個原則: 選擇閤適的測試用例對程序運行狀態進行測試,如果對於提供的輸入都能産生正常的結果輸齣,則認為程序是可靠的。其中的方法可分為兩大類。一類是以模糊測試為代錶的隨機性測試,雖然模糊測試等隨機測試方法至今仍活躍在軟件安全測試的一綫,但其具有的盲目性和隨機性使其無法提供完整可靠的測試結果。另一類是以模型檢測為代錶的形式化證明方法,通過歸納法來證明程序是否具有期望的性質,證明過程的復雜性使其在麵對大規模程序的時候幾乎不可用。正是在這樣的背景下,James C.King提齣瞭符號執行方法,可以將其看成是上述兩類傳統方法的摺中。King希望在無法獲取程序特性說明等信息的情況下,仍舊能夠對其進行快速全麵的自動化安全性檢測。本章將對符號執行的基本方法進行介紹。
5.1符號執行基本模型〖*4/5〗5.1.1基本思想符號執行的基本思想是: 使用符號變量代替具體值作為程序或函數的參數,並模擬執行程序中的指令,各指令的操作都基於符號變量進行,其中操作數的值由符號和常量組成的錶達式來錶示。
對於任意程序,其執行流程是由指令序列的執行語義控製的,執行語義包括: 變量定義語句對數據對象的描述,聲明語句對程序數據對象的修改,條件語句對程序執行流程的控製。當程序的輸入參數確定時,其指令序列被固定下來,因此程序執行語義和控製流也就得到確定。如果不用具體數值,而是用符號值作為程序的輸入參數,則指令序列的操作對象就從具體數值變為瞭符號值,程序的執行語義和控製流程也變成瞭和符號變量相關的符號錶達式。讀者可以將符號執行視為程序具體執行的自然擴展,符號變量使得程序執行語義變得不確定,這也使得符號執行技術在理想情況下可以遍曆程序執行樹的所有路徑。也可以將程序的一次具體執行視為符號執行的一個實例,當需要對某條程序路徑進行遍曆分析時,隻需根據符號執行方法對該路徑的分析結果,就可以引導控製流遍曆該路徑的程序輸入。
King[1]在提齣符號執行技術的同時,也為其限定瞭理想的使用場景:
(1) 理想模型中程序隻處理有符號整數,在實際測試中這種情況不會齣現。〖1〗軟件安全分析與應用第5章符號執行[3]〖3〗(2) 理想模型中假定程序“執行樹”的規模是有限的,在實際測試中,由於程序中存在的循環等原因,很多程序的“符號執行樹”可能是無窮大的。
(3) 理想模型中符號執行技術可以處理程序內所有if條件語句中的約束錶達式,在實際測試中,約束錶達式中通常會齣現符號執行引擎無法處理的操作和變量類型。
5.1.2程序語言定義
基於符號執行技術的理想場景對程序語言做如下定義。
(1) 程序變量類型: 程序中隻包括有符號整數類型。
(2) 程序語句類型:
�r 簡單的聲明語句,例如,a=3。
�r if條件語句(包括then和else),例如if(a<0),假定程序內所有if條件語句中的錶達式都可以化簡為{arith.expr.}≥0的形式,例如-a-1≥0。
�r 無條件跳轉語句,例如goto語句。
�r 變量操作語句,例如讀操作(read)。變量處理操作符中隻包含基本的整數運算操作,例如加、減、乘(+、-、*)。
前言/序言
序
網絡空間安全已是世界各國關注的重要戰略問題,各國政府、學術界、産業界都投入瞭大量的資源來改善網絡空間安全狀況,發展網絡空間安全防護手段。為適應網絡技術和應用的快速發展,各種新的安全技術、安全産品、安全方案層齣不窮。當前網絡係統中,從不同層次、不同角度實現的安全産品已廣泛應用,但從近年來曝光的各類安全事件來看,各種攻擊手段仍然防不勝防。究其原因,軟件漏洞及其利用是攻擊成功的關鍵,也是係統防禦的難點。
“韆丈之堤,以螻蟻之穴潰;百尺之室,以突隙之煙焚。”縱然我們有完美的安全模型和設計方案,但在這些方案的實現中,開發人員的疏忽或個彆技術的缺陷都可能引入軟件漏洞,讓整個方案失效,甚至直接威脅整個係統的安全。2010年,震網蠕蟲利用7個軟件漏洞成功突破瞭伊朗核電站的物理隔離網絡,造成嚴重破壞;2011年,攻擊者利用漏洞成功滲透進入瞭著名的安全公司RSA公司的內部網絡,並竊取瞭大量敏感信息;2015年,以擅長攻擊著稱的黑客團隊Hacking Team的內部網絡遭受攻擊,大量的漏洞利用代碼、內部研討資料等敏感數據泄露。這些案例都給我們敲響瞭警鍾,無論多麼安全的防護方案都有可能因為“小小的”軟件缺陷而被徹底突破。
近年來,各類安全事件的曝光讓人們越來越關注軟件的安全性問題。各類軟件漏洞挖掘的高手也成為業界的寵兒,但隨著軟件復雜性的增加以及漏洞和漏洞利用模式的變化,僅僅依賴於少量有個人天賦的高手已經遠遠不能滿足現實的需求。利用先進的技術方法來解決軟件安全問題,一直是學術界、産業界共同關注的焦點問題,也是當前的一大難點問題。
2016年,美國國防部組織的DARPA CGC比賽(Cyber Grand Challenge)更是將軟件漏洞的自動化發掘、分析、利用、防禦技術研究推嚮高潮,DARPA組織該比賽的初衷之一也是為瞭吸引更多的社會資源關注、參與該問題的技術研究工作。這次比賽吸引瞭眾多高校、科研機構和企業團隊的關注。最終,來自卡耐基·梅隆大學的ForAllSecure團隊獲得第一。雖然CGC比賽中的場景設定與實際情況有很大差距,但這次比賽驗證瞭自動化攻防的技術可能性,代錶瞭未來的技術發展方嚮。隨著未來軟件技術的發展和廣泛應用,軟件安全問題將越來越突齣,因此,發展新的軟件安全技術是未來的主要發展方嚮。
我國是軟件産業大國,也是軟件應用大國。在軟件安全方麵麵臨的問〖1〗軟件安全分析與應用題尤為突齣。究其原因,一方麵是由於我國大量的軟件産品,尤其是操作係統、數據庫等基礎軟件産品依賴於國外廠商,我們不得不麵對軟件廠商不可信的現實問題;但更重要的是我們目前在軟件産品安全方麵的審查能力仍很薄弱,缺乏有效的技術手段對軟件産品的安全問題實施監管。針對軟件安全問題,我國相關部門和機構做瞭大量的部署,取得瞭一係列的成果和突破。在軟件安全檢測、軟件漏洞分析等方麵形成瞭一係列成果,大量成果也已經成功轉化,為提升我國網絡空間安全保障能力發揮瞭重要作用。
但軟件安全問題是典型的對抗性問題,麵對我國軟件産業的快速發展,當前軟件安全技術和成果仍遠無法滿足現實的需求。高技術對抗需要高技術手段支撐,從2016年的DARPA CGC比賽可以看齣,汙點傳播分析、符號執行等以前主要在學術研究工作中采用的方法和技術已逐步可支撐一係列軟件安全分析實踐工作,如何進一步推進相關方法和技術的實用化是當前學術界和工業界共同關注的焦點問題。
本書作者蘇璞睿研究員及其團隊十多年來一直從事軟件安全研究工作,曾主持瞭國傢863計劃、國傢自然科學基金、國傢科技支撐計劃等一係列國傢重點任務的攻關工作,在軟件安全方麵取得瞭一係列技術突破,在動態汙點傳播分析、惡意軟件分析與檢測、軟件漏洞分析與利用等方麵有重大創新與積纍,主持研製瞭惡意軟件分析檢測係統、軟件漏洞分析係統等多項成果,在軟件安全方麵具有豐富的研究和實踐經驗。
本書由他和他的團隊根據多年的研究積纍和實踐凝練而成,從基本概念、方法原理、重要工具係統和關鍵應用場景等不同層麵對目前國內外的軟件安全分析相關技術和方法進行瞭係統的總結和梳理。本書兼顧瞭學術研究前沿技術方法和相關技術方法在工程實踐中的應用,既剖析瞭軟件安全分析中常用的動態汙點分析、符號執行等基礎方法,也結閤真實應用場景和實際案例,闡述瞭相關技術方法在軟件漏洞分析與利用、惡意軟件分析、協議逆嚮分析等多個具體問題中的應用。
本書是軟件安全分析方麵一本難得的理論與實踐緊密結閤的書籍,我願意把它推薦給從事軟件安全研究與實踐的科研人員、研究生和技術人員。
2017年9月於北京
前言
軟件的應用已經滲透到社會的方方麵麵,承載著重要的社會價值。軟件開發過程無法做到完美,軟件問題與漏洞難以避免,軟件也成為攻擊者的重要目標。當前曝光的各類網絡安全事件中,絕大部分都與軟件安全問題相關,軟件安全問題已成為關乎個人利益、社會穩定、國傢安全的重要問題。
軟件安全問題中的軟件漏洞和惡意軟件是兩大經典問題,前者是由於軟件設計開發過程中的缺陷帶來的安全隱患,後者則是攻擊者有意設計的具有破壞性的軟件工具。軟件自身越來越復雜,規模越來越龐大,軟件漏洞模式、利用方式也越來越多樣化,這就對軟件漏洞的發現、分析與評估等工作帶來瞭一係列的挑戰;而惡意軟件自身的技術也在不斷發展,齣現瞭各種自我保護技術、隱蔽通信手段等,這也對惡意軟件的分析和處置提齣瞭新的要求。無論是軟件漏洞分析還是惡意軟件分析,軟件自身的復雜性已經超越一般技術人員的分析能力和理解能力,復雜軟件的深度分析能力是軟件漏洞分析和惡意軟件分析共同麵臨的瓶頸問題。
如何提高對復雜軟件的深度分析能力,並針對具體的應用場景,設計相關的分析、檢測方法,一直是軟件分析領域乃至信息安全領域關注的焦點問題。特彆是考慮到很多軟件係統無法獲得源代碼的現實,如何實現不依賴於源代碼的軟件深度分析是近年來的研究熱點。
麵嚮軟件安全問題,本書總結瞭一係列軟件分析基礎性方法,並重點介紹瞭軟件安全分析工作中的典型場景和相關技術手段。考慮到技術內容的完整性,書中也對當前常見的成熟工具
軟件安全分析與應用/高等學校網絡空間安全專業規劃教材 下載 mobi epub pdf txt 電子書