注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術(shù)計算機/網(wǎng)絡(luò)信息安全軟件剖析:代碼攻防之道

軟件剖析:代碼攻防之道

軟件剖析:代碼攻防之道

定 價:¥39.90

作 者: (美)Greg Hoglund,(美)Gary McGraw編著;鄧勁生翻譯
出版社: 清華大學出版社
叢編項:
標 簽: 軟件項目管理

ISBN: 9787302104452 出版時間: 2005-01-01 包裝: 平裝
開本: 26cm 頁數(shù): 360 字數(shù):  

內(nèi)容簡介

  本書詳細解釋了惡意的軟件攻擊者所采用的技術(shù),描述了各種攻擊模式,并且展示了如何發(fā)現(xiàn)新的薄弱環(huán)節(jié)。作者討論了實現(xiàn)bug和架構(gòu)缺陷的區(qū)別、逆向工程工具、服務(wù)器/客戶機軟件的脆弱性、惡意輸入攻擊、緩沖區(qū)溢出等內(nèi)容,并且介紹了一個簡單的WindowsXP內(nèi)核rootkit。本書要求讀者具備全面的系統(tǒng)硬件、操作系統(tǒng)軟件結(jié)構(gòu)、網(wǎng)絡(luò)協(xié)議和編程(特別是C/C++和Java)知識。本書是面向有意成為軟件安全專家的指南,適用于對編程有一定經(jīng)驗的軟件設(shè)計師和軟件測試師。軟件是如何可被碼解的?攻擊者是如何有目地地破解軟件的?為什么防火墻、指令檢測系統(tǒng)以及反病毒軟件不能將黑客們拒之門外?什么工具可以用來破解軟件?本書為您提供了詳細的答案。書中提供了大量黑客們破解軟件的示例,包括實際攻擊、攻擊模式、攻擊工具以及相關(guān)破解技術(shù),并全面闡述了逆向工程、典型的對服務(wù)器軟件的攻擊、對客戶端軟件的攻擊、制造惡意輸入的技術(shù),以及緩沖區(qū)溢出的技術(shù)細節(jié)等內(nèi)容。在深入閱讀本書后,您就可洞悉軟件世界的激烈斗爭,成為安全領(lǐng)域的專愛。

作者簡介

  GregHoglund博士十幾年來一直是軟件安全領(lǐng)域的領(lǐng)軍人物。他創(chuàng)建并記錄了第一個基于WindowsNT的rootkit,可以通過站點www.rootkit.com找到相關(guān)內(nèi)容。

圖書目錄

第1章  軟件—— 問題的根源 1
1.1  軟件簡史 1
1.1.1  軟件和信息戰(zhàn) 4
1.1.2  數(shù)字諜報手段 4
1.2  不良軟件很普遍 7
1.2.1  NASA(美國國家航空和宇宙航行局)的火星登陸器 7
1.2.2  丹佛機場行李管理系統(tǒng) 7
1.2.3  魚鷹MV-22 8
1.2.4  美國軍事系統(tǒng)自傷 8
1.2.5  Microsoft和“愛”bug 9
1.3  問題三組合 10
1.3.1  復(fù)雜性 10
1.3.2  代碼行數(shù)越多,bug就越多 11
1.3.3  可擴展性 12
1.3.4  連通性 15
1.3.5  結(jié)論 16
1.4  軟件的未來 16
1.4.1  短期未來:2003-2004 16
1.4.2  中期未來:2005-2007 18
1.4.3  長期未來:2008-2010 20
1.4.4  十條思路 21
1.5  什么是軟件安全 21
1.6  小結(jié) 22
第2章  攻擊模式 24
2.1  分類 24
2.1.1  bug 25
2.1.2  缺陷 25
2.1.3  脆弱點 25
2.1.4  設(shè)計中的脆弱點 26
2.2  開放系統(tǒng) 27
2.2.1  風險 29
2.2.2  潛在損失 29
2.2.3  暴露度與力度 30
2.2.4  實際風險 30
2.3  一次攻擊歷程 31
2.3.1  攻擊者的觀點 31
2.3.2  為什么不能信任用戶 32
2.3.3  “開鎖” 32
2.3.4  一個簡單的示例 34
2.4  攻擊模式:災(zāi)難性的藍圖 36
2.4.1  破解、攻擊和攻擊者 36
2.4.2  攻擊模式 36
2.4.3  代碼注入 37
2.4.4  活動區(qū) 37
2.4.5  輸出事件 37
2.4.6  反饋事件 37
2.5  攻擊示例:對Microsoft C++編譯器的攻擊 37
2.5.1  攻擊的技術(shù)細節(jié) 39
2.5.2  對Microsoft棧保護的概述 39
2.5.3  繞過Microsoft的安全特性 40
2.5.4  解決方案 42
2.5.5  攻擊回顧 42
2.6  應(yīng)用攻擊模式 43
2.6.1  網(wǎng)絡(luò)掃描 43
2.6.2  操作系統(tǒng)辨識 43
2.6.3  端口掃描 44
2.6.4  路徑追蹤和區(qū)文件傳輸 44
2.6.5  目標組件 44
2.6.6  選擇攻擊模式 45
2.6.7  環(huán)境缺陷的影響 45
2.6.8  間接使用攻擊 45
2.6.9  種植后門 45
2.7  攻擊模式工具箱 46
2.8  小結(jié) 46
第3章  逆向工程和程序理解 47
3.1  進入邏輯的“房屋” 47
3.1.1  逆向工程 48
3.1.2  為什么需要逆向工程 50
3.2  逆向工程是非法的嗎 50
3.3  逆向工程的概念及其使用的工具 51
3.3.1  調(diào)試程序 52
3.3.2  缺陷注入工具 52
3.3.3  反匯編工具 52
3.3.4  反編譯器 52
3.4  逆向工程的方法 53
3.4.1  白箱分析 53
3.4.2  黑箱分析 53
3.4.3  灰箱分析 54
3.4.4  使用灰箱技術(shù)在Microsoft的SQL Server 7中尋找脆弱點 55
3.5  逆向方法 56
3.5.1  輸入追蹤 56
3.5.2  軟件版本的差異 57
3.5.3  代碼覆蓋 58
3.5.4  內(nèi)核訪問 59
3.5.5  共享緩沖區(qū)中的數(shù)據(jù)泄漏 59
3.5.6  對訪問請求的審計 60
3.5.7  使用自己的API資源 60
3.6  編寫IDA插件 61
3.7  對軟件進行反編譯和反匯編 73
3.8  實練反編譯:逆向helpctr.exe 74
3.8.1  bug報告 75
3.8.2  調(diào)試記錄 75
3.9  自動、成批地審計脆弱點 78
3.10  編寫屬于自己的破解工具 87
3.10.1  x86工具 87
3.10.2  基本的x86調(diào)試程序 88
3.10.3  斷點 89
3.10.4  存儲器的讀寫 92
3.10.5  調(diào)試多線程程序 93
3.10.6  枚舉線程或進程 95
3.10.7  單步執(zhí)行 96
3.10.8  修補 97
3.10.9  故障注入 97
3.10.10  進程快照 98
3.10.11  反匯編機器代碼 102
3.11  編寫基本的代碼覆蓋工具 104
3.12  小結(jié) 109
第4章  攻擊服務(wù)器軟件 110
4.1  可信任輸入問題 111
4.2  權(quán)限提升問題 112
4.2.1  進程權(quán)限之間的信任 112
4.2.2  如果不以管理員的身份運行,一切就會崩潰 113
4.2.3  從不被信任的資源中讀取數(shù)據(jù)的進程權(quán)限提升 113
4.2.4  使用提升權(quán)限的進程 114
4.3  尋找注入點 114
4.4  輸入路徑的追蹤 116
4.4.1  使用基于Solaris SPARC二進制的GDB和IDA-Pro 116
4.4.2  設(shè)置斷點和表達式 116
4.4.3  利用IDA映射運行時存儲器地址 117
4.4.4  將GDB附加到一個正在運行的進程 117
4.4.5  基于Solaris使用Truss以模擬目標軟件 118
4.5  通過配置破解受信任的軟件 120
4.5.1  審計直接可執(zhí)行文件 121
4.5.2  了解當前工作目錄 121
4.5.3  如果Web服務(wù)器不執(zhí)行cgi程序該怎么辦 121
4.5.4  什么是不可執(zhí)行的文件 122
4.5.5  策略的使用 123
4.6  特殊的技術(shù)和對服務(wù)器軟件的攻擊 123
4.6.1  技術(shù):注入命令解釋程序 124
4.6.2  技術(shù):管道、端口和權(quán)限 134
4.6.3  技術(shù):攻擊文件系統(tǒng) 136
4.6.4  技術(shù):操作環(huán)境變量 140
4.6.5  技術(shù):利用無關(guān)變量 140
4.6.6  技術(shù):利用不良會話認證 142
4.6.7  技術(shù):蠻力會話ID 143
4.6.8  技術(shù):驗證的多重路徑 147
4.6.9  技術(shù):不能檢驗錯誤代碼 147
4.7  小結(jié) 147
第5章  攻擊客戶端軟件 148
5.1  作為攻擊目標的客戶端程序 148
5.1.1  服務(wù)器控制客戶端 149
5.1.2  軟件蜜罐 149
5.2  混合信號 150
5.2.1  古老(但卻相關(guān))的歷史 150
5.2.2  基本的混合數(shù)據(jù)使用 152
5.2.3  針對打印機的有趣的混合信號 153
5.2.4  Linux中的混合終端字符注入 153
5.2.5  反射問題 155
5.3  跨站點腳本 155
5.4  客戶端腳本和惡意代碼 160
5.4.1  檢查較脆弱的本地調(diào)用 160
5.4.2    Web瀏覽器和ActiveX 166
5.4.3  E-mail注入 167
5.5  基于內(nèi)容的攻擊 170
5.6  逆向攻擊:利用客戶端緩沖區(qū)溢出 170
5.7  小結(jié) 171
第6章  構(gòu)造惡意輸入 172
6.1  防御者的困惑 173
6.1.1  過濾器 174
6.1.2  通信系統(tǒng) 174
6.2  入侵檢測 175
6.2.1  基于簽名和基于異常的IDS 175
6.2.2  疲于應(yīng)付的IDS 176
6.2.3  在IDS上交替編碼的效應(yīng) 176
6.3  分割分析 178
6.3.1  Windows的APISPY 178
6.3.2  紅點 179
6.4  追蹤代碼 179
6.4.1  從脆弱區(qū)回溯 180
6.4.2  死端和逃避 181
6.4.3  運行時追蹤 181
6.4.4  速度中斷 183
6.4.5  追蹤緩沖區(qū) 184
6.4.6  跳步 185
6.4.7  內(nèi)存頁斷點 185
6.4.8  boron標記符 185
6.5  反向分析程序代碼 186
6.5.1  字符轉(zhuǎn)換 186
6.5.2  字節(jié)操作 187
6.5.3  指針操作 187
6.5.4  空終止符 188
6.6  示例:通過“正門”逆向I-Planet Server 6.0 189
6.7  錯誤的分類 193
6.8  產(chǎn)生“等效”請求 193
6.8.1  映射API層 194
6.8.2  虛字符 195
6.8.3  等效元字符 196
6.8.4  轉(zhuǎn)義元字符 197
6.8.5  字符轉(zhuǎn)換 198
6.8.6  組合攻擊 200
6.9  檢測中毒 201
6.10  小結(jié) 202
第7章  緩沖區(qū)溢出 203
7.1  緩沖區(qū)溢出 203
7.1.1  棧的摧毀(為了有趣和有益) 204
7.1.2  遭到破壞的狀態(tài) 204
7.2  病毒注入:再次利用輸入 205
7.2.1  病毒注入的結(jié)束和攻擊代碼的開始 206
7.2.2  在目標中選擇合適的代碼地址 206
7.2.3  高地址區(qū)和低地址區(qū) 207
7.2.4  big endian和little endian表示方式 208
7.2.5  使用寄存器 208
7.2.6  使用內(nèi)存中現(xiàn)有的代碼或是數(shù)據(jù)塊 209
7.3  緩沖區(qū)溢出與嵌入式系統(tǒng) 210
7.4  數(shù)據(jù)庫緩沖區(qū)溢出 211
7.4.1  存儲過程 212
7.4.2  命令行應(yīng)用程序 212
7.4.3  數(shù)據(jù)庫的客戶端程序 212
7.5  緩沖區(qū)溢出和Java 212
7.5.1  同時使用Java和C/C++ 213
7.5.2  存儲過程和動態(tài)鏈接庫 214
7.6  基于內(nèi)容的緩沖區(qū)溢出 214
7.7  緩沖區(qū)溢出的截獲審計和過濾器 216
7.8  環(huán)境變量引起的溢出 217
7.9  多重操作問題 218
7.10  發(fā)現(xiàn)潛在的緩沖區(qū)溢出 218
7.10.1  異常處理掩蓋錯誤 218
7.10.2  使用反匯編 219
7.11  棧溢出 219
7.11.1  固定大小的緩沖區(qū) 220
7.11.2  不能自動添加空字符作為結(jié)束的函數(shù) 221
7.11.3  off-by-one空字符結(jié)束的函數(shù) 222
7.11.4  改寫異常處理程序結(jié)構(gòu) 225
7.12  內(nèi)存管理中的計算錯誤 226
7.12.1  負數(shù)“等于”很大的正數(shù) 226
7.12.2  有符號數(shù)和無符號數(shù)的不匹配 228
7.12.3  有符號數(shù)和內(nèi)存管理 231
7.13  格式化字符串的脆弱點 233
7.13.1  從內(nèi)存中的任何一個地方輸出數(shù)據(jù) 235
7.13.2  在代碼中檢測問題 238
7.14  堆溢出 239
7.15  緩沖區(qū)溢出和C++ 242
7.16  攻擊代碼 243
7.16.1  定向 244
7.16.2  攻擊代碼的大小 245
7.16.3  使用硬編碼的函數(shù)調(diào)用 245
7.16.4  使用動態(tài)指令跳轉(zhuǎn)表 245
7.16.5  定位數(shù)據(jù)段 247
7.16.6  異或(XOR)保護 247
7.16.7  校驗和與散列加載 247
7.17  基于RISC體系結(jié)構(gòu)的攻擊代碼 248
7.17.1  分支延遲或者延遲槽 248
7.17.2  基于MIPS的攻擊代碼結(jié)構(gòu) 249
7.17.3  MIPS指令 249
7.17.4  定向 249
7.17.5  在MIPS操作碼中避免空字節(jié) 250
7.17.6  MIPS中的系統(tǒng)調(diào)用 251
7.17.7  SPARC 攻擊代碼結(jié)構(gòu) 251
7.17.8  SPARC 寄存器窗口 251
7.17.9  SPARC上的棧調(diào)用 252
7.17.10  嵌套在SPARC中的函數(shù)調(diào)用 254
7.17.11  PA-RISC攻擊代碼的結(jié)構(gòu) 254
7.17.12  PA-RISC上的棧調(diào)用 256
7.17.13  在HPUX PA-RISC上的棧溢出 258
7.17.14  PA-RISC的內(nèi)部空間分支 258
7.17.15  內(nèi)部空間跳躍 259
7.17.16  定向 260
7.17.17  HPUX的自解密攻擊代碼 261
7.17.18  AIX/PowerPC的攻擊代碼結(jié)構(gòu) 263
7.17.19  定位 263
7.17.20  給PowerPC命令解釋程序代碼披上盔甲 264
7.17.21  刪除空字符 265
7.18  多平臺的攻擊代碼 265
7.19  保護函數(shù)的Prolog-Epilog代碼 267
7.19.1  擊潰棧保護 267
7.19.2  擊潰非可執(zhí)行棧 269
7.20  小結(jié) 271
第8章  rootkit 272
8.1  破壞性的程序 272
8.1.1  什么是rootkit 272
8.1.2  什么是內(nèi)核rootkit 273
8.1.3  內(nèi)核rootkit及其受信任的計算基礎(chǔ) 273
8.2  簡單的Windows XP內(nèi)核rootkit 273
8.2.1  編寫rootkit 273
8.2.2  checked 編譯環(huán)境 273
8.2.3  rootkit中的文件 274
8.2.4  建立環(huán)境 274
8.2.5  內(nèi)核驅(qū)動程序 274
8.2.6  驅(qū)動程序的基本結(jié)構(gòu) 274
8.2.7  使用驅(qū)動程序 275
8.2.8  允許卸載驅(qū)動程序 276
8.2.9  注冊驅(qū)動程序 278
8.2.10  使用SystemLoadAndCallImage 280
8.3  鉤子調(diào)用 282
8.3.1  隱藏進程 283
8.3.2  系統(tǒng)調(diào)用的鉤子 283
8.3.3  基本鉤子調(diào)用的結(jié)構(gòu) 283
8.3.4  刪除進程記錄 284
8.3.5  另一種進程注入的方法 287
8.4  特洛伊可執(zhí)行程序的重定向 287
8.4.1  重定向和Tripwire問題 287
8.4.2  重定向驅(qū)動程序 288
8.5  隱藏文件和目錄 292
8.6  修補二進制代碼 294
8.6.1  窺探補丁 295
8.6.2  修補NT內(nèi)核以刪除所有的安全保護 296
8.7  硬件病毒 306
8.7.1  讀寫硬件存儲空間 307
8.7.2  示例:讀/寫鍵盤硬件 308
8.7.3  允許從EEPROM讀或?qū)?313
8.7.4  CIH 313
8.7.5  EEPROM和定時 316
8.7.6  以太網(wǎng)的EEPROM 316
8.7.7  串行EEPROM和并行EEPROM 319
8.7.8  燒毀硬件 319
8.7.9  制造商 319
8.7.10  通過通用閃存接口檢測芯片 320
8.7.11  示例:檢測Flash RAM 芯片 320
8.7.12  利用ID模式或JEDEC ID檢測芯片 321
8.8  低級磁盤訪問 322
8.8.1  讀或?qū)懼饕龑?dǎo)記錄 323
8.8.2  感染CD-ROM 323
8.9  給驅(qū)動程序添加網(wǎng)絡(luò)支持 323
8.9.1  使用NDIS庫 323
8.9.2  使接口處于混雜模式 325
8.9.3  尋找正確的網(wǎng)卡 326
8.9.4  為了安全而使用boron標記 331
8.9.5  添加交互式命令解釋程序 331
8.10  中斷 331
8.10.1  Intel的中斷請求(IRQ)結(jié)構(gòu) 331
8.10.2  鉤住中斷描述符表(IDT) 332
8.10.3  神秘的程序中斷控制器(PIC) 333
8.11  擊鍵記錄 334
8.11.1  Linux下的擊鍵記錄 334
8.11.2  Windows NT/2000/XP下的擊鍵記錄 335
8.11.3  鍵盤控制器芯片 335
8.12  高級rootkit專題 335
8.12.1  使用rootkit作為調(diào)試器 336
8.12.2  禁用Windows系統(tǒng)的文件保護功能 336
8.12.3  直接寫物理存儲器 336
8.12.4  內(nèi)核緩沖區(qū)溢出 336
8.12.5  感染內(nèi)核鏡像 336
8.12.6  改變程序執(zhí)行方向 336
8.12.7  檢測rootkit 337
8.13  小結(jié) 337
附錄A  攻擊模式 338

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號