軟體剖析——代碼攻防之道

軟體剖析——代碼攻防之道

軟體是如何被破解的?攻擊者是如何有目的地破解軟體的?為什麼防火牆、指令檢測系統以及反病毒軟體不能將黑客們拒之門外?什麼工具可以用來破解軟體?本書為您提供了詳細的答案。書中提供了大量黑客們破解軟體的示例,包括實際攻擊、攻擊模式、攻擊工具以及相關破解技術,並全面闡述了逆向工程,典型的對伺服器軟體的攻擊,對客戶端軟體的攻擊,製造惡意輸入的技術,以及緩衝區溢出的技術細節等內容。在深入閱讀本書後,您就可洞悉軟體世界中的激烈鬥爭,成為安全領域的專家。

基本介紹

  • 書名:軟體剖析——代碼攻防之道
  • ISBN:9787302104452
  • 定價:39.9元
  • 出版時間:2005-4-8
目錄,附錄,

目錄

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

附錄

A攻擊模式 338

相關詞條

熱門詞條

聯絡我們