譯者序
獻給“孫悟空”
前言
第一部分基礎知識
第1章 清空思想
1.1不速之客
1.2提煉一個更確切的定義
1.2.1攻擊循環
1.2.2rootkit在攻擊循環中的角色
1.2.3單級釋放器與多級釋放器
1.2.4其他部署方法
1.2.5確切的學術性定義
1.2.6不要混淆設計目標與實現
1.2.7rootkit技術--力量倍增器
1.2.8金·費爾比式比喻:破壞與毀壞
1.2.9為何使用隱身技術?rootkit不能被發現嗎
1.3rootkit不等於惡意軟件
1.3.1感染源
1.3.2廣告軟件和間諜軟件
1.3.3僵屍網絡的興起
1.3.4引入:愚人飛客病毒
1.3.5惡意軟件與rootkit
1.4誰在開發和使用rootkit
1.4.1市場營銷
1.4.2數字版權管理
1.4.3不是rootkit,而是種功能
1.4.4法律實施
1.4.5商業間諜
1.4.6政治間諜
1.4.7網絡犯罪
1.4.8誰開發瞭頗具藝術感的rootkit
1.4.9rootkit的道德性
1.5懾魄驚魂:戰場傷員分類
1.6總結
第2章 反取證綜述
2.1事件響應
2.1.1入侵檢測係統(和入侵防禦係統)
2.1.2異常行為
2.1.3發生故障
2.2計算機取證
2.2.1rootkit不是隱身的嗎?為什麼還要進行反取證
2.2.2假定最糟糕案例的場景
2.2.3取證技術分類:第一種方法
2.2.4取證技術分類:第二種方法
2.2.5在綫取證
2.2.6當關機不再是種選擇
2.2.7關於拔掉電源插頭的爭論
2.2.8崩潰轉儲或者不進行崩潰轉儲
2.2.9事後檢查分析
2.2.10非本地數據
2.3AF策略
2.3.1數據銷毀
2.3.2數據隱藏
2.3.3數據轉換
2.3.4數據僞造
2.3.5數據源消除
2.4AF技術的總體建議
2.4.1使用定製工具
2.4.2低且慢與焦土策略
2.4.3避免特定實例攻擊
2.4.4使用分層防禦
2.5不明身份者具有優勢
2.5.1攻擊者能夠專注於攻擊
2.5.2防禦者麵臨製度性挑戰
2.5.3安全是一種過程(而且還是一種令人討厭的過程)
2.5.4持續增加的復雜度
2.6總結
第3章 硬件概述
3.1物理內存
3.2IA-32內存模型
3.2.1平麵內存模型
3.2.2分段內存模型
3.2.3操作模式
3.3實模式
3.3.1案例研究:MS-DOS
3.3.2這不是浪費時間嗎?為什麼學習實模式
3.3.3實模式執行環境
3.3.4實模式中斷
3.3.5分段和程序控製
3.3.6案例研究:轉儲IVT
3.3.7案例研究:用TSR記錄擊鍵
3.3.8案例研究:隱藏TSR
3.3.9案例研究:為TREE.COM命令打補丁
3.3.10小結
3.4保護模式
3.4.1保護模式執行環境
3.4.2保護模式分段
3.4.3保護模式分頁
3.4.4地址擴展分頁
3.4.5進一步研究頁錶
3.4.6進一步研究控製寄存器
3.5實現內存保護
3.5.1通過分段實現保護
3.5.2界限檢查
3.5.3類型檢查
3.5.4特權檢查
3.5.5受限指令檢查
3.5.6門描述符
3.5.7保護模式中斷錶
3.5.8分頁保護
3.5.9總結
第4章 係統概述
4.1Windows係統下的物理內存
4.1.1失落的大陸(內存)
4.1.2Windows如何使用物理地址擴展
4.1.3頁、頁幀、頁幀號
4.2Windows下的分段和分頁
4.2.1分段
4.2.2分頁
4.2.3綫性地址到物理地址的轉換
4.2.4一個更快的方法
4.2.5關於EPROCESS和KPROCESS的討論
4.3用戶空間和內核空間
4.3.14GB調優(4GT)
4.3.2各得其所
4.3.3跨越籬笆
4.3.4用戶空間剖析
4.3.5內核空間動態分配
4.3.6地址窗口化擴展
4.3.7PAE、4GT和AWE的對比
4.4用戶模式和內核模式
4.4.1執行方式與執行位置
4.4.2內核模式組件
4.4.3用戶模式組件
4.5其他內存保護特徵
4.5.1數據執行保護
4.5.2地址空間布局隨機化
4.5.3GS 編譯選項
4.5.4SAFESEH鏈接器選項
4.6本機API
4.6.1中斷嚮量錶的發展
4.6.2進一步研究中斷描述錶
4.6.3通過中斷進行係統調用
4.6.4SYSENTER指令
4.6.5係統服務調度錶
4.6.6枚舉本機API
4.6.7Nt*( )係統調用與Zw*( )係統調用
4.6.8係統調用的生命周期
4.6.9其他內核模式例程
4.6.10內核模式API文檔
4.7引導過程
4.7.1BIOS固件啓動
4.7.2EFI固件啓動
4.7.3Windows啓動管理器
4.7.4Windows啓動加載器
4.7.5初始化執行體
4.7.6會話管理器
4.7.7wininit.exe
4.7.8winlogon.exe
4.7.9啓動過程概括
4.8設計決策
4.8.1藏在人群中:類型0
4.8.2主動隱藏:類型1和類型2
4.8.3跳齣邊界:類型3
4.8.4前景展望
第5章 行業工具
5.1開發工具
5.1.1診斷工具
5.1.2磁盤映像工具
5.1.3更快速救災:虛擬機
5.1.4工具綜述
5.2調試器
5.2.1配置CDB.exe
5.2.2符號文件
5.2.3Windows符號
5.2.4激活CDB.exe
5.2.5控製CDB.exe
5.2.6有用的調試器命令
5.2.7檢查符號命令(x)
5.2.8列舉已加載的模塊(lm和!lmi)
5.2.9顯示類型命令(dt)
5.2.10反匯編命令(u)
5.2.11顯示命令(d*)
5.2.12寄存器命令(r)
5.3KD.exe內核調試器
5.3.1使用內核調試器的不同方法
5.3.2物理宿主機-目標機配置
5.3.3準備硬件
5.3.4準備軟件
5.3.5啓動內核調試會話
5.3.6控製目標機
5.3.7虛擬宿主機-目標機配置
5.3.8 有用的內核模式調試器命令
5.3.9列舉已加載模塊命令
5.3.10!process擴展命令
5.3.11寄存器命令(r)
5.3.12使用崩潰轉儲
5.3.13方法1:PS2鍵盤技巧
5.3.14方法2:KD.exe命令
5.3.15方法3:NotMyFault.exe
5.3.16崩潰轉儲分析
第6章 內核空間中的玄機
6.1KMD模闆
6.1.1內核模式驅動程序:全局概覽
6.1.2WDK框架
6.1.3真正最小的KMD
6.1.4處理IRP
6.1.5與用戶模式代碼通信
6.1.6從用戶模式發送命令
6.2加載內核模式驅動程序
6.3服務控製管理器
6.3.1在命令行使用sc.exe
6.3.2編程使用SCM
6.3.3注冊錶蹤跡
6.4使用導齣驅動程序
6.5綜閤利用內核中的漏洞
6.6Windows內核模式安全
6.6.1內核模式代碼簽名
6.6.2KMCS的應對措施
6.6.3內核補丁保護
6.6.4KPP的應對措施
6.7同步
6.7.1中斷請求級
6.7.2延遲過程調用
6.7.3實現
6.8總結
第二部分事 後 分 析
第7章 阻止磁盤分析
7.1事後調查:概述
7.2取證副本
7.3捲分析
7.3.1Windows下的存儲捲
7.3.2手工分析捲
7.3.3應對措施:破壞分區錶
7.3.4Windows下的原始磁盤訪問
7.3.5原始磁盤訪問:突破常規
7.4文件係統分析
7.4.1恢復刪除的文件
7.4.2恢復刪除的文件:應對措施
7.4.3枚舉可選數據流
7.4.4枚舉可選數據流: 應對措施
7.4.5恢復文件係統對象
7.4.6恢復文件係統對象:應對措施
7.4.7帶外隱藏
7.4.8帶內隱藏
7.4.9引入:FragFS
7.4.10應用層隱藏
7.4.11獲取元數據
7.4.12獲取元數據:應對措施
7.4.13改變時間戳
7.4.14改變校驗和
7.4.15識彆已知文件
7.4.16交叉時間差異與交叉視圖差異
7.4.17識彆已知文件:應對措施
7.5文件簽名分析
7.6總結
第8章 阻止可執行文件分析
8.1 靜態分析
8.1.1掃描相關人工痕跡
8.1.2驗證數字簽名
8.1.3轉儲字符串數據
8.1.4檢查文件頭
8.1.5反匯編和反編譯
8.2破壞靜態分析
8.2.1數據轉換:加殼
8.2.2加殼:加密程序
8.2.3密鑰管理
8.2.4加殼:壓縮程序
8.2.5加殼:變形代碼
8.2.6定製工具的需求
8.2.7關於加殼的爭論
8.2.8數據僞造
8.2.9虛旗攻擊
8.2.10數據源清除:多級加載器
8.2.11深度防禦
8.3運行時分析
8.3.1運行環境
8.3.2手工與自動運行時分析
8.3.3手工分析:基本概要
8.3.4手工分析:跟蹤
8.3.5手工分析:內存轉儲
8.3.6手工分析:捕捉網絡活動
8.3.7自動化分析
8.3.8運行時復閤分析
8.4破壞運行時分析
8.4.1跟蹤的應對措施
8.4.2API跟蹤:規避迂迴補丁
8.4.3API跟蹤:多級加載器
8.4.4指令級跟蹤:攻擊調試器
8.4.5斷點
8.4.6檢測用戶模式調試器
8.4.7檢測內核模式調試器
8.4.8檢測用戶模式調試器或者內核模式調試器
8.4.9通過代碼校驗和檢測調試器
8.4.10關於反調試器技術的爭論
8.4.11指令級跟蹤:混淆
8.4.12混淆應用數據
8.4.13混淆應用代碼
8.4.14阻止自動化
8.4.15應對運行時復閤分析
8.5總結
第三部分在 綫 取 證
第9章 阻止在綫取證
9.1在綫取證:基本過程
9.2用戶模式加載器
9.2.1UML破壞現有的API
9.2.2關於加載器API模塊的爭論
9.2.3縱覽Windows PE文件格式
9.2.4相對虛擬地址
9.2.5PE文件頭
9.2.6導入數據節(.idata)
9.2.7基址重定位節(.reloc)
9.2.8實現獨立的UML
9.3最小化加載器蹤跡
9.3.1數據節育:獻給The Grugq的頌歌
9.3.2下一步:通過漏洞利用程序加載
9.4關於獨立PE加載器的爭論
第10章 用C語言創建shellcode
10.1用戶模式shellcode
10.1.1Visual Studio工程設置
10.1.2使用相對地址
10.1.3尋找kernel32.dll:通往TEB和PEB的旅程
10.1.4擴展地址錶
10.1.5解析kernel32.dll導齣錶
10.1.6提取shellcode
10.1.7危險空間
10.1.8構建自動化
10.2內核模式shellcode
10.2.1工程設置:$(NTMAKEENV)makefile.new
10.2.2工程設置:SOURCES
10.2.3地址解析
10.2.4加載內核模式shellcode
10.3特殊武器和策略
10.4展望
第11章 更改調用錶
11.1在用戶空間掛鈎:IAT
11.1.1DLL基礎
11.1.2訪問導齣例程
11.1.3注入DLL
11.1.4走查磁盤上PE文件的IAT
11.1.5掛鈎IAT
11.2內核空間的調用錶
11.3掛鈎IDT
11.3.1處理多處理器:方案#1
11.3.2裸例程
11.3.3關於掛鈎IDT的問題
11.4掛鈎處理器MSR
11.5掛鈎SSDT
11.5.1禁用WP位:技巧#1
11.5.2禁用WP位:技巧#2
11.5.3掛鈎SSDT項
11.5.4SSDT示例:跟蹤係統調用
11.5.5SSDT示例:隱藏進程
11.5.6SSDT示例:隱藏網絡連接
11.6掛鈎IRP處理程序
11.7掛鈎GDT:安裝調用門
11.8掛鈎的應對措施
11.8.1檢查內核模式掛鈎
11.8.2檢查IA32_SYSENTER_EIP
11.8.3檢查 INT 0x2E
11.8.4檢查 SSDT
11.8.5檢查IRP處理程序
11.8.6檢查用戶模式鈎子
11.8.7解析PEB:
第1部分
11.8.8解析PEB:
第2部分
11.9反應對措施
11.9.1假設最壞的案例
11.9.2最壞案例應對措施#1
11.9.3最壞案例應對措施#2
第12章 更改代碼
12.1跟蹤調用
12.1.1迂迴實現
12.1.2獲取NtSetValueKey()的地址
12.1.3初始化補丁元數據結構
12.1.4對照已知簽名核實原始機器碼
12.1.5保存原始序言和尾聲代碼
12.1.6更新補丁元數據結構
12.1.7鎖定訪問並禁用寫保護
12.1.8注入迂迴
12.1.9序言迂迴
12.1.10尾聲迂迴
12.1.11事後總結
12.2破壞組策略
12.2.1迂迴實現
12.2.2初始化補丁元數據結構
12.2.3尾聲迂迴
12.2.4將注冊錶值映射到組策略
12.3繞過內核模式API記錄器
12.3.1故障安全規避
12.3.2更上一層樓
12.4指令補丁應對措施
第13章 更改內核對象
13.1隱形的代價
13.1.1問題#1:陡峭的學習麯綫
13.1.2問題#2:並發性
13.1.3問題#3:可移植性和指針運算
13.1.4特有技術:DKOM
13.1.5對象
13.2再訪EPROCESS對象
13.2.1獲取EPROCESS指針
13.2.2EPROCESS相關域
13.2.3UniqueProcessId
13.2.4ActiveProcessLinks
13.2.5Token
13.2.6ImageFileName
13.3DRIVER_SECTION對象
13.4令牌對象
13.4.1Windows授權
13.4.2定位令牌對象
13.4.3令牌對象中的相關域
13.5隱藏進程
13.6隱藏驅動程序
13.7操縱訪問令牌
13.8使用No-FU
13.9內核模式迴調
13.10應對措施
13.10.1交叉視圖檢測
13.10.2高級枚舉:CreateToolhelp32Snapshot()
13.10.3高級枚舉:PID暴力
13.10.4低級枚舉:進程
13.10.5低級枚舉:綫程
13.10.6相關軟件
13.10.7域校驗和
13.11反應對措施
13.11.1最好的防護:餓死對手
13.11.2評論:超越雙環模型
13.11.3最後一道防綫
第14章 隱秘通道
14.1普通惡意軟件通道
14.1.1互聯網中繼聊天
14.1.2對等通信
14.1.3HTTP
14.2最壞案例場景:截獲所有數據內容
14.2.1協議隧道
14.2.2DNS
14.2.3ICMP
14.2.4外圍設備問題
14.3Windows TCPIP棧
14.3.1Windows Sockets 2
14.3.2原始套接字
14.3.3Winsock內核API
14.3.4NDIS
14.3.5不同任務使用不同的工具
14.4DNS隧道
14.4.1DNS查詢
14.4.2DNS應答
14.5DNS隧道:用戶模式
14.6DNS隧道:WSK實現
14.6.1初始化應用程序的上下文
14.6.2創建內核模式套接字
14.6.3確定本地傳輸地址
14.6.4綁定套接字與傳輸地址
14.6.5設置遠程地址(C2客戶端)
14.6.6發送DNS查詢
14.6.7接收DNS應答
14.7NDIS協議驅動程序
14.7.1創建並運行NDISProt6.0示例
14.7.2客戶端代碼概要
14.7.3驅動程序代碼概要
14.7.4Protocol*()例程
14.7.5缺失的特徵
14.8被動的隱秘通道
第15章 轉到帶外
15.1 附加處理器模式
15.1.1係統管理模式
15.1.2流氓管理程序
15.1.3白帽成員對策
15.1.4流氓管理程序與SMM rootkit
15.2固件
15.2.1主闆BIOS
15.2.2ACPI組件
15.2.3擴展ROM
15.2.4UEFI固件
15.3遠程管理設施
15.4不太明顯的備用方案
15.4.1闆載閃存
15.4.2電路級伎倆
15.5總結
第四部分結 束 語
第16章 rootkit之道
16.1核心策略
16.1.1尊重你的對手
16.1.2五指穿心掌
16.1.3忍耐強行奪取的欲望
16.1.4研究你的目標
16.2識彆隱藏之門
16.2.1對付專有係統
16.2.2監視內核
16.2.3重要特點:硬件是新軟件
16.2.4充分利用現有研究
16.3建築領域的訓誡
16.3.1首先加載,深度加載
16.3.2為自主性而奮鬥
16.3.3Butler Lampson:策略與機製分離
16.4設計rootkit
16.4.1隱身與開發努力
16.4.2使用定製工具
16.4.3穩定性很重要:緻力於最佳實踐
16.4.4逐步提高
16.4.5容錯移轉:自我修復的rootkit
16.5處理感染
· · · · · · (
收起)