目 錄
第1章 行為隱匿 1
1.1 洋蔥路由器(Tor) 1
1.2 使用Tor研究惡意軟件 4
1.3 Tor缺陷 7
1.3.1 速度 7
1.3.2 不可信賴的Tor操作員 7
1.3.3 Tor阻止列錶 8
1.4 代理服務器和協議 8
1.4.1 超文本傳輸協議(HTTP) 8
1.4.2 SOCKS4 9
1.4.3 SOCKS5 9
1.5 基於Web的匿名代理 14
1.6 保持匿名的替代方法 15
1.6.1 蜂窩Internet連接 15
1.6.2 虛擬專用網 16
1.7 唯一且匿名 18
第2章 蜜罐 19
2.1 nepenthes蜜罐 20
2.1.1 利用nepenthes收集惡意軟件
樣本 20
2.1.2 使用IRC日誌進行實時攻擊
監視 23
2.1.3 使用基於Python的 HTTP接收nepenthes提交的文件 25
2.2 使用dionaea蜜罐 27
2.2.1 使用dionaea收集惡意軟件
樣本 27
2.2.2 使用基於Python的HTTP接收
dionaea提交的文件 30
2.2.3 實時事件通告以及使用XMPP
共享二進製文件 31
2.2.4 分析重放dionea記錄
的攻擊 32
2.2.5 使用p0f工具被動識彆遠程
主機操作係統 33
2.2.6 使用SQLite 和gnuplot繪製
dionaea記錄的攻擊
模式圖 35
第3章 惡意軟件分類 39
3.1 使用ClamAV分類 39
3.1.1 檢查現有ClamAV
特徵碼 40
3.1.2 創建自定義ClamAV特徵碼
數據庫 42
3.2 使用YARA分類 46
3.2.1 將ClamAV特徵碼轉換到
YARA格式特徵碼 46
3.2.2 使用YARA和PEiD識彆加殼
文件 47
3.2.3 使用YARA檢測惡意軟件
的能力 49
3.3 工具集成 53
3.3.1 使用Python識彆文件類型及
哈希算法 54
3.3.2 編寫Python多殺毒掃描
軟件 56
3.3.3 Python中檢測惡意PE
文件 60
3.3.4 使用ssdeep查找相似惡意
軟件 64
3.3.5 使用ssdeep檢測自修改
代碼 66
3.3.6 使用IDA和BinDiff檢測自修改代碼 68
第4章 沙箱和多殺毒掃描軟件 73
4.1 公用殺毒掃描軟件 73
4.1.1 使用Virus Total掃描
文件 74
4.1.2 使用Jotti掃描文件 76
4.1.3 使用NoVirusThanks掃描
文件 77
4.1.4 啓用數據庫的Python多殺毒
上傳程序 78
4.2 多殺毒掃描軟件的比較 82
4.3 公用沙箱分析 82
4.3.1 使用ThreatExpert分析惡意
軟件 82
4.3.2 使用CWSandbox分析惡意
軟件 84
4.3.3 使用Anubis分析惡意
軟件 85
4.3.4 編寫Joebox AutoIt腳本 86
4.3.5 使用Joebox應對路徑依賴型
惡意軟件 88
4.3.6 使用Joebox應對進程依賴型
動態鏈接庫 89
4.3.7 使用Joebox設置主動型HTTP
代理 91
4.3.8 使用沙箱結果掃描項目 92
第5章 域名與IP地址 99
5.1 研究可疑域名 99
5.1.1 利用WHOIS研究域 100
5.1.2 解析DNS主機名 104
5.2 研究IP地址 107
5.3 使用被動DNS和其他工具進行
研究 109
5.3.1 使用BFK查詢被動
DNS 110
5.3.2 使用robtex檢查DNS
記錄 111
5.3.3 使用DomainTools執行反嚮IP
搜索 112
5.3.4 使用DIG啓動區域
傳送 113
5.3.5 使用dnsmap暴力攻擊
子域 114
5.3.6 通過Shadowserver將IP地址
映射到ASN 115
5.3.7 使用RBL檢查IP信譽 117
5.4 fast flux域名 118
5.4.1 使用被動DNS和TTL檢測
fast flux網絡 119
5.4.2 跟蹤fast flux域名 121
5.5 IP地址地理映射 123
第6章 文檔、shellcode和URL 127
6.1 分析JavaScript 127
6.1.1 使用SpiderMonkey分析
JavaScript 127
6.1.2 使用Jsunpack自動解碼
JavaScript 130
6.1.3 優化Jsunpack-n的解碼速度
和完整性 133
6.1.4 通過模擬瀏覽器DOM元素
觸發漏洞利用 134
6.2 分析PDF文檔 138
6.2.1 使用pdf.py從PDF文件中
提取JavaScript 138
6.2.2 僞造PDF軟件版本觸發漏洞
利用 142
6.2.3 利用Didier Stevens的PDF
工具集 145
6.2.4 確定利用PDF文件中的哪些
漏洞 148
6.2.5 使用DiStorm反匯編
shellcode 154
6.2.6 使用Iibemu模擬
shellcode 159
6.3 分析惡意Office文檔 161
6.3.1 使用OfficeMalScanner分析
Microsoft Office文件 161
6.3.2 使用DisView和MalHost-Setup
調試Office shellcode 167
6.4 分析網絡流量 170
6.4.1 使用Jsunpack從報文捕獲文件
中提取HTTP文件 171
6.4.2 使用Jsunpack繪製URL
關係圖 173
第7章 惡意軟件實驗室 177
7.1 網絡互聯 179
7.1.1 實驗室中TCP/IP路由
連接 180
7.1.2 捕獲、分析網絡流量 182
7.1.3 使用INetSim模擬
Internet 185
7.1.4 使用Burp套件操作
HTTP/HTTPS 188
7.2 物理目標機 191
7.2.1 使用Joe Stewart開發的
Truman 191
7.2.2 使用Deep Freeze保護物理
係統 192
7.2.3 使用FOG剋隆和映像
磁盤 194
7.2.4 使用MySQL數據庫自動調度
FOG任務 197
第8章 自動化操作 201
8.1 惡意軟件分析周期 201
8.2 使用Python實現自動化
操作 203
8.2.1 使用VirtualBox執行自動化
惡意軟件分析 203
8.2.2 分析VirtualBox磁盤以及
內存映像 208
8.2.3 使用VMware執行自動化
惡意軟件分析 210
8.3 添加分析模塊 213
8.3.1 在Python中使用tshark捕獲
報文 214
8.3.2 在Python中使用INetSim收集
網絡日誌 216
8.3.3 使用Volatility分析內存
轉儲 217
8.3.4 組閤所有的沙箱塊 219
8.4 雜項係統 229
8.4.1 使用ZeroWine和QEMU執行
自動化分析 229
8.4.2 使用Sandboxie和Buster執行
自動化分析 233
第9章 動態分析 237
9.1 變化檢測 237
9.1.1 使用Process Monitor
記錄API調用 239
9.1.2 使用Regshot進行變化
檢測 240
9.1.3 接收文件係統變化通知 242
9.1.4 接收注冊錶變化通知 245
9.1.5 句柄錶的差異比較 246
9.1.6 使用HandleDiff研究代碼
注入 250
9.1.7 觀察Bankpatch.C禁用
Windows文件保護
的活動 252
9.2 API監視/鈎子 253
9.2.1 使用Microsoft Detours構建
API監視器 254
9.2.2 使用API監視器追蹤子
進程 260
9.2.3 捕獲進程、綫程和映像加載
事件 263
9.3 數據保護 267
9.3.1 阻止進程終止 268
9.3.2 阻止惡意軟件刪除文件 270
9.3.3 阻止加載驅動程序 272
9.3.4 使用數據保護模塊 273
9.3.5 使用ReactOS創建定製命令
shell 276
第10章 惡意軟件取證 283
10.1 The Sleuth Kit(TSK) 283
10.1.1 使用TSK發現備用
數據流 283
10.1.2 使用TSK檢測隱藏文件
和目錄 286
10.1.3 使用Microsoft脫機API
查找隱藏注冊錶數據 293
10.2 取證/事件響應混閤 298
10.2.1 繞開Poison Ivy鎖定
的文件 298
10.2.2 繞開Conficker文件係統
的ACL限製 302
10.2.3 使用GMER掃描
rootkit 306
10.2.4 通過檢查IE的DOM
檢測HTML注入 309
10.3 注冊錶分析 318
10.3.1 使用RegRipper插件對注冊
錶取證 319
10.3.2 檢測惡意安裝的PKI
證書 325
10.3.3 檢查泄露數據到注冊錶
的惡意軟件 328
第11章 調試惡意軟件 335
11.1 使用調試器 335
11.1.1 打開和附加到進程 336
11.1.2 為shellcode分析配置JIT
調試器 337
11.1.3 熟悉調試器的圖形用戶
界麵 339
11.1.4 檢查進程內存和資源 344
11.1.5 控製程序執行 347
11.1.6 設置和捕獲斷點 348
11.1.7 使用有條件的日誌記錄
斷點 351
11.2 Immunity Debugger的Python
API接口 352
11.2.1 使用Python腳本和
PyCommand調試 353
11.2.2 在二進製文件中檢測
shellcode 356
11.2.3 調查Silentbanker木馬的
API鈎子 360
11.3 WinAppDbg Python調試器 363
11.3.1 使用WinAppDbg工具操作
進程內存 364
11.3.2 使用WinAppDbg工具設計
一個Python API監視器 366
第12章 反混淆 373
12.1 解碼常見算法 373
12.1.1 Python中的逆嚮XOR
算法 373
12.1.2 使用yaratize檢測XOR
編碼的數據 378
12.1.3 使用特殊字母解碼
base64 379
12.2 解密 382
12.2.1 從捕獲的數據包中隔離
加密數據 382
12.2.2 使用SnD反嚮工具、
FindCrypt和Kanal
搜索加密機製 384
12.2.3 使用zynamics BinDiff移植
Open SSL的符號 386
12.2.4 在Python中使用PyCrypto
解密數據 387
12.3 惡意軟件脫殼 389
12.3.1 查找加殼惡意軟件
的OEP 390
12.3.2 使用LordPE轉儲進程
內存 392
12.3.3 使用ImpREC重建
導入錶 394
12.4 與脫殼有關的資源 400
12.5 調試器腳本 401
12.5.1 破解域名生成算法 402
12.5.2 使用x86emu和Python解碼
字符串 406
第13章 處理DLL 411
13.1 枚舉DLL的導齣函數 411
13.1.1 CFF Explorer 412
13.1.2 Pefile 412
13.1.3 IDA Pro 413
13.1.4 常見和不常見
的導齣名 414
13.2 使用rundll32.exe執行DLL 415
13.3 繞過宿主進程的限製 416
13.4 使用rundll32ex遠程調用
DLL導齣函數 418
13.4.1 創建新工具的原因 418
13.4.2 使用rundll32ex 420
13.5 使用LOADDLL.EXE調試
DLL 421
13.5.1 將DLL加載到調試
器中 421
13.5.2 找到DLL的入口點 422
13.6 捕獲DLL入口點處的斷點 422
13.7 執行作為Windows服務
的DLL 423
13.7.1 服務DLL的入口點 424
13.7.2 服務初始化 424
13.7.3 安裝服務DLL 425
13.7.4 傳遞參數給服務 425
13.8 將DLL轉換成獨立的可執行
文件 428
第14章 內核調試 431
14.1 遠程內核調試 431
14.2 本地內核調試 431
14.3 軟件需求 432
14.3.1 使用LiveKd進行本地
調試 432
14.3.2 啓用內核調試啓動開關 433
14.3.3 調試VMware工作站客戶機
(在Windows係統中) 436
14.3.4 調試Parallels客戶機
(在MAC OS X上) 438
14.3.5 WinDbg命令和控製
簡介 439
14.3.6 探索進程和進程
上下文 445
14.3.7 探索內核內存 451
14.3.8 在驅動程序加載時捕捉
斷點 456
14.3.9 脫殼驅動程序 463
14.3.10 轉儲和重建驅動
程序 469
14.3.11 使用WinDbg腳本檢測
rootkit 474
14.3.12 使用IDA Pro進行內核
調試 479
第15章 使用Volatility進行內存
取證 483
15.1 內存獲取 483
15.1.1 使用MoonSols Windows
內存工具箱轉儲內存 483
15.1.2 使用F-Response獲取遠程、
隻讀內存 486
15.1.3 訪問虛擬機的內存
文件 487
15.2 準備安裝Volatility 488
15.2.1 Volatility概覽 488
15.2.2 在內存轉儲中研究
進程 491
15.2.3 使用psscan檢測DKOM
攻擊 496
15.2.4 研究csrss.exe的備用進程
列錶 499
15.2.5 識彆進程上下文
的技巧 501
第16章 內存取證:代碼注入與
提取 507
16.1 深入研究DLL 507
16.1.1 搜尋已加載的可疑
DLL 508
16.1.2 使用ldr_modules檢測
未鏈接的DLL 510
16.2 代碼注入和VAD 514
16.2.1 研究VAD 514
16.2.2 轉換頁麵保護 517
16.2.3 在進程內存中搜索
證據 520
16.2.4 使用malfind和YARA
識彆注入代碼 522
16.3 重建二進製文件 527
16.3.1 從內存中重建可執行
文件的映像 529
16.3.2 使用impscan掃描導入
函數 530
16.3.3 轉儲可疑的內核模塊 533
第17章 內存取證:rootkit 537
17.1 檢測IAT鈎子 537
17.2 檢測EAT鈎子 539
17.3 檢測內聯API鈎子 540
17.4 檢測IDT鈎子 543
17.5 檢測驅動程序的IRP鈎子 544
17.6 檢測SSDT鈎子 547
17.6.1 SSDT的角色 548
17.6.2 鈎子和鈎子檢測 548
17.7 使用ssdt_ex自動研究 551
17.8 根據附加的內核綫程搜索
rootkit 552
17.8.1 使用綫程在內核中
隱藏 553
17.8.2 在內存轉儲中檢測分
離綫程 554
17.9 識彆係統範圍的通知
例程 555
17.9.1 找齣檢查的位置 555
17.9.2 使用notifyroutines
插件 556
17.10 使用svscan定位惡意的服務
進程 557
17.10.1 惡意軟件如何濫用
服務 558
17.10.2 SCM的服務記錄
結構 558
17.10.3 枚舉進程內存中
的服務 560
17.10.4 Blazgel木馬的例子 560
17.10.5 使用Volatility的svcscan
插件 561
17.11 使用mutantscan掃描互斥體
對象 564
第18章 內存取證:網絡和注冊錶 567
18.1 探索套接字和連接對象 567
18.1.1 套接字和連接證據 567
18.1.2 套接字和連接對象 569
18.2 分析Zeus留下的網絡
證據 570
18.3 檢測企圖隱藏TCP/IP
的活動 572
18.3.1 掃描套接字和連接
對象 572
18.3.2 其他項目 574
18.4 檢測原始套接字和混雜模式
的網絡接口 574
18.4.1 混雜模式的套接字 574
18.4.2 檢測混雜模式 575
18.5 注冊錶分析 575
18.5.1 使用內存注冊錶工具分析
注冊錶證據 576
18.5.2 通過最後寫入時間戳排序
注冊錶項 580
18.5.3 使用Volatility和Reg-
Ripper 582
· · · · · · (
收起)