第一部分 攻擊者的策略
第1章 引言:自然的游戲 1
1.1 自我復制結構的早期模型 1
1.1.1 約翰·馮·諾伊曼:自我復制自動機理論 2
1.1.2 Fredkin:重建結構 3
1.1.3 Conway:生命游戲 4
1.1.4 磁芯大戰(zhàn):程序對戰(zhàn) 6
1.2 計算機病毒的起源 10
1.3 自動復制代碼:計算機病毒的原理和定義 11
參考文獻
第2章 惡意代碼分析的魅力
2.1 計算機病毒研究的通用模式 16
2.2 反病毒防護技術的發(fā)展
2.3 惡意程序的相關術語
2.3.1 病毒 17
2.3.2 蠕蟲 17
2.3.3 邏輯炸彈 18
2.3.4 特洛伊木馬 19
2.3.5 細菌 20
2.3.6 漏洞利用 20
2.3.7 下載器 20
2.3.8 撥號器 20
2.3.9 投放器 20
2.3.10 注入程序 21
2.3.11 auto-rooter 21
2.3.12 工具包(病毒生成器) 21
2.3.13 垃圾郵件發(fā)送程序 21
2.3.14 洪泛攻擊 22
2.3.15 擊鍵記錄器 22
2.3.16 rootkit 22
2.4 其他類別 23
2.4.1 玩笑程序 23
2.4.2 惡作?。哼B鎖電子郵件 23
2.4.3 其他有害程序:廣告軟件和間諜軟件 24
2.5 計算機惡意軟件的命名規(guī)則 24
2.5.1 <family_name> 25
2.5.2 <malware_type> 25
2.5.3 <platform> 25
2.5.4 < group_name > 26
2.5.5 <infectuve_length > 26
2.5.6 < variant > 26
2.5.7 < devolution> 26
2.5.8 <modifiers> 26
2.5.9 <locale_specifier> 26
2.5.10#<packer> 26
2.5.11 @m或@mm 26
2.5.12 !<vendor-secific_comment> 26
2.6 公認的平臺名稱清單 27
參考文獻 29
第3章 惡意代碼環(huán)境 31
3.1 計算機體系結構依賴性 32
3.2 CPU依賴性 33
3.3 操作系統(tǒng)依賴性 34
3.4 操作系統(tǒng)版本依賴性 34
3.5 文件系統(tǒng)依賴性 35
3.5.1 簇病毒 35
3.5.2 NTFS流病毒 36
3.5.3 NTFS壓縮病毒 37
3.5.4 ISO鏡像文件感染 37
3.6 文件格式依賴性 37
3.6.1 DOS上的COM病毒 37
3.6.2 DOS上的EXE病毒 37
3.6.3 16位Windows和OS/2上的NE病毒 38
3.6.4 OS/2上的LX病毒 38
3.6.5 32位Windows上的PE病毒 38
3.6.6 UNIX上的ELF病毒 41
3.6.7 設備驅動程序病毒 41
3.6.8 目標代碼和庫文件病毒 42
3.7 解釋環(huán)境依賴性 42
3.7.1 微軟產品中的宏病毒 42
3.7.2 IBM系統(tǒng)中的REXX病毒 50
3.7.3 DEC/VMS上的DCL病毒 51
3.7.4 UNIX上的shell腳本(csh.cksh和bash) 51
3.7.5 Windows系統(tǒng)中的VBScript病毒 52
3.7.6 批處理病毒 52
3.7.7 mIRC. PIRCH腳本中的即時消息病毒 53
3.7.8 SuperLogo病毒 53
3.7.9 JScript病毒 55
3.7.10 Perl病毒 55
3.7.11 用嵌入HTML郵件的JellyScript編寫的WebTV蠕蟲 55
3.7.12 Python病毒 56
3.7.13 VIM病毒 56
3.7.14 EMACS病毒 56
3.7.15 TCL病毒 56
3.7.16 PHP病毒 56
3.7.17 MapInfo病毒 57
3.7.18 SAP上的ABAP病毒 57
3.7.19 Windows幫助文件病毒——當你按下F1…… 57
3.7.20 AdobePDF中的JScript威脅 58
3.7.21 AppleScript的依賴性 58
3.7.22 ANSI的依存關系 58
3.7.23 MacromediaFlash動作腳本(Action-Script)威脅 59
3.7.24 HyperTalk腳本威脅 59
3.7.25 AutoLisp腳本病毒 60
3.7.26 注冊表依賴性 60
3.7.27 PIF和LNK的依賴性 61
3.7.28 LotusWord專業(yè)版中的宏病毒 61
3.7.29 AmiPro的文檔病毒 61
3.7.30 Corel腳本病毒 61
3.7.31 Lotus1-2-3宏的依賴性 62
3.7.32 Windows安裝腳本的依賴性 62
3.7.33 AUTORUN.INF和WindowsINIFile依存性 62
3.7.34 HTML依賴性 63
3.8 系統(tǒng)漏洞依賴性 63
3.9 日期和時間依賴性 63
3.10 JIT依賴性:Microsoft.NET病毒 64
3.11 檔案文件格式依賴性 65
3.12 基于擴展名的文件格式依賴性 65
3.13 網絡協(xié)議依賴性 66
3.14 源代碼依賴關系 66
3.15 在Mac和Palm平臺上的資源依賴性 68
3.16 宿主大小依賴性 68
3.17 調試器依賴性 69
3.18 編譯器和連接器依賴性 70
3.19 設備翻譯層依賴性 71
3.20 嵌入式對象插入依賴性 73
3.21 自包含環(huán)境的依賴性 73
3.22 復合病毒 74
3.23 結論 75
參考文獻 76
第4章 感染策略的分類 79
4.1 引導區(qū)病毒 79
4.1.1 主引導記錄感染技術 80
4.1.2 DOS引導記錄感染技術 82
4.1.3 隨Windows95發(fā)作的引導區(qū)病毒 83
4.1.4 在網絡環(huán)境下對引導映像的可能攻擊 84
4.2 文件感染技術 84
4.2.1 重寫病毒 84
4.2.2 隨機重寫病毒 85
4.2.3 追加病毒 85
4.2.4 前置病毒 86
4.2.5 典型的寄生病毒 87
4.2.6 蛀穴病毒 88
4.2.7 分割型蛀穴病毒 88
4.2.8 壓縮型病毒 89
4.2.9 變形蟲感染技術 90
4.2.10 嵌入式解密程序技術 90
4.2.11 嵌入式解密程序和病毒體技術 91
4.2.12 迷惑性欺騙跳轉技術 92
4.2.13 入口點隱蔽病毒 92
4.2.14 未來可能的感染技術:代碼建造器 99
4.3 深入分析Win32病毒 99
4.3.1 Win32API及其支持平臺 100
4.3.2 32位Windows感染技術 102
4.3.3 Win32和Win64病毒:是針對Microsoft Windows設計的嗎 116
4.4 結論 118
參考文獻 118
第5章 內存駐留技術 120
5.1 直接感染型病毒 120
5.2 內存駐留病毒 120
5.2.1 中斷處理和鉤掛 121
5.2.2 鉤掛INT13h中斷例程(引導區(qū)病毒) 123
5.2.3 鉤掛INT 21h中斷例程(文件型病毒) 124
5.2.4 DOS環(huán)境常用的內存加載技術 127
5.2.5 隱藏型病毒 129
5.2.6 磁盤高速緩存和系統(tǒng)緩存感染 135
5.3 臨時內存駐留病毒 136
5.4 交換型病毒 137
5.5 進程病毒(用戶模式) 137
5.6 內核模式中的病毒(Windows9x/Me) 137
5.7 內核模式中的病毒 (WindowsNT/2000/XP) 138
5.8 通過網絡傳播的內存注入病毒 139
參考文獻 140
第6章 基本的自保護策略 141
6.1 隧道病毒 141
6.1.1 通過掃描內存查找原中斷處理例程 141
6.1.2 跟蹤調試接口 141
6.1.3 基于代碼仿真的隧道技術 142
6.1.4 使用I/O端口直接訪問磁盤 142
6.1.5 使用未公開的函數 142
6.2 裝甲病毒 142
6.2.1 反反匯編 143
6.2.2 數據加密 143
6.2.3 使用代碼迷惑對抗分析 144
6.2.4 基于操作碼混合的代碼迷惑 145
6.2.5 使用校驗和 146
6.2.6 基于壓縮的隱蔽代碼 146
6.2.7 反跟蹤 147
6.2.8 抗啟發(fā)式檢測技術 152
6.2.9 抗仿真技術 158
6.2.10 抗替罪羊病毒 161
6.3 攻擊性的反制病毒 162
參考文獻 163
第7章 高級代碼演化技術和病毒生成工具 165
7.1 引言 165
7.2 代碼演化 165
7.3 加密病毒 166
7.4 寡形病毒 169
7.5 多態(tài)病毒 171
7.5.1 1260病毒 171
7.5.2 DarkAvenger病毒中的突變引擎(MtE) 172
7.5.3 32位多態(tài)病毒 174
7.6 變形病毒 177
7.6.1 什么是變形病毒 177
7.6.2 簡單的變形病毒 178
7.6.3 更加復雜的變形病毒和置換技術 179
7.6.4 置換其他程序:病毒機的終極版 181
7.6.5 高級變形病毒:Zmist 182
7.6.6 {W32,Linux}/Simile:跨平臺的變形引擎 185
7.7 病毒機 190
7.7.1 VCS 190
7.7.2 GenVir 190
7.7.3 VCL 190
7.7.4 PS-MPC 191
7.7.5 NGVCK 191
7.7.6 其他病毒機和變異工具 192
7.7.7 如何測試病毒機 193
參考文獻 193
第8章 基于病毒載荷的分類方法 195
8.1 沒有載荷 195
8.2 偶然破壞型載荷 196
8.3 非破壞型載荷 196
8.4 低破壞型載荷 197
8.5 強破壞型載荷 198
8.5.1 數據重寫型病毒 198
8.5.2 數據欺騙 199
8.5.3 加密數據的病毒:好壞難辨 200
8.5.4 破壞硬件 201
8.6 DoS攻擊 201
8.7 竊取數據:用病毒牟利 203
8.7.1 網絡釣魚攻擊 203
8.7.2 后門 204
8.8 結論 205
參考文獻 205
第9章 計算機蠕蟲的策略 207
9.1 引言 .. 207
9.2 計算機蠕蟲的通用結構 208
9.2.1 目標定位 208
9.2.2 感染傳播 208
9.2.3 遠程控制和更新接口 208
9.2.4 生命周期管理 209
9.2.5 蠕蟲載荷 209
9.2.6 自跟蹤 210
9.3 目標定位 210
9.3.1 收集電子郵件地址 210
9.3.2 網絡共享枚舉攻擊 214
9.3.3 網絡掃描和目標指紋分析 215
9.4 感染傳播 218
9.4.1 攻擊安裝了后門的系統(tǒng) 218
9.4.2 點對點網絡攻擊 219
9.4.3 即時消息攻擊 220
9.4.4 電子郵件蠕蟲攻擊和欺騙技術 220
9.4.5 插入電子郵件附件 220
9.4.6 SMTP代理攻擊 221
9.4.7 SMTP攻擊 221
9.4.8 使用MX查詢進行SMTP傳播 223
9.4.9 NNTP攻擊 223
9.5 常見的蠕蟲代碼傳送和執(zhí)行技術 224
9.5.1 基于可執(zhí)行代碼的攻擊 224
9.5.2 連接到Web站點或者Web代理 224
9.5.3 基于HTML的郵件 225
9.5.4 基于遠程登錄的攻擊 225
9.5.5 代碼注入攻擊 225
9.5.6 基于shellcode的攻擊 226
9.6 計算機蠕蟲的更新策略 228
9.6.1 在Web和新聞組上的認證更新 229
9.6.2 基于后門的更新 232
9.7 用信令進行遠程控制 232
9.8 有意無意的交互 234
9.8.1 合作 234
9.8.2 競爭 236
9.8.3 未來:簡單蠕蟲通信協(xié)議 237
9.9 無線移動蠕蟲 237
參考文獻 239
第10章 漏洞利用漏洞和緩沖區(qū)溢出攻擊 241
10.1 引言 241
10.1.1 混合攻擊的定義 241
10.1.2 威脅 241
10.2 背景 242
10.3 漏洞的類型 243
10.3.1 緩沖區(qū)溢出 243
10.3.2 第一代緩沖區(qū)溢出攻擊 243
10.3.3 第二代攻擊 245
10.3.4 第三代攻擊 250
10.4 攻擊實例 261
10.4.1 1988年的Morris蠕蟲(利用堆棧溢出執(zhí)行shellcode) 261
10.4.2 1998年的Linux/ADM(“抄襲”Morris蠕蟲) 263
10.4.3 2001年爆發(fā)的CodeRed(代碼注入攻擊) 263
10.4.4 2002年的Linux/Slapper蠕蟲(堆溢出實例) 266
10.4.5 2003年1月的W32/Slammer蠕蟲(Mini蠕蟲) 270
10.4.6 2003年8月Blaster蠕蟲(Win32上基于shellcode的攻擊) 272
10.4.7 計算機病毒中緩沖區(qū)溢出的一般用法 274
10.4.8 W32/Badtrans.B@mm描述 274
10.4.9 W32/Nimda.A@mm所用的漏洞攻擊方法 274
10.4.10 W32/Bolzano描述 275
10.4.11 VBS/Bubbleboy描述 276
10.4.12 W32/Blebla描述 277
10.5 小結 277
參考文獻 278
第二部分 防御者的策略
第11章 病毒防御技術 281
11.1 第一代掃描器 282
11.1.1 字符串掃描 282
11.1.2 通配符 284
11.1.3 不匹配字節(jié)數 285
11.1.4 通用檢測法 285
11.1.5 散列 285
11.1.6 書簽 286
11.1.7 首尾掃描 287
11.1.8 入口點和固定點掃描 287
11.1.9 超快磁盤訪問 288
11.2 第二代掃描器 288
11.2.1 智能掃描 288
11.2.2 骨架掃描法 289
11.2.3 近似精確識別法 289
11.2.4 精確識別法 290
11.3 算法掃描方法 291
11.3.1 過濾法 292
11.3.2 靜態(tài)解密程序檢測法 293
11.3.3 X光檢測法 294
11.4 代碼仿真 298
11.4.1 用代碼仿真來檢測加密和多態(tài)病毒 301
11.4.2 動態(tài)解密程序檢測法 303
11.5 變形病毒檢測實例 304
11.5.1 幾何檢測法 305
11.5.2 反匯編技術 305
11.5.3 采用仿真器進行跟蹤 306
11.6 32位Windows病毒的啟發(fā)式分析 308
11.6.1 代碼從最后一節(jié)開始執(zhí)行 309
11.6.2 節(jié)頭部可疑的屬性 309
11.6.3 PE可選頭部有效尺寸的值不正確 309
11.6.4 節(jié)之間的“間隙” 309
11.6.5 可疑的代碼重定向 309
11.6.6 可疑的代碼節(jié)名稱 310
11.6.7 可能的頭部感染 310
11.6.8 來自KERNEL32.DLL的基于序號的可疑導入表項 310
11.6.9 導入地址表被修改 310
11.6.10 多個PE頭部 310
11.6.11 多個Windows程序頭部和可疑的KERNEL32.DLL導入表項 310
11.6.12 可疑的重定位信息 310
11.6.13 內核查詢 311
11.6.14 內核的完整性 311
11.6.15 把節(jié)裝入到VMM的地址空間 311
11.6.16 可選頭部的SizeOfCode域取值不正確 311
11.6.17 含有多個可疑標志的例子 311
11.7 基于神經網絡的啟發(fā)式分析 312
11.8 常規(guī)及通用清除法 314
11.8.1 標準清除法 314
11.8.2 通用解密程序 315
11.8.3 通用清除程序如何工作 316
11.8.4 清除程序如何確定一個文件是否染毒 316
11.8.5 宿主文件原來的結尾在哪里 316
11.8.6 能用這種方法清除的病毒有多少類 316
11.8.7 通用修復法中的啟發(fā)性標記實例 317
11.8.8 通用清除過程實例 318
11.9 接種 319
11.10 訪問控制系統(tǒng) 319
11.11 完整性檢查 320
11.11.1 虛警 321
11.11.2 干凈的初始狀態(tài) 321
11.11.3 速度 322
11.11.4 特殊對象 322
11.11.5 必須有對象發(fā)生改變 322
11.11.6 可能的解決方案 322
11.12 行為阻斷 323
11.13 沙箱法 324
11.14 結論 325
參考文獻 325
第12章 內存掃描與殺毒 328