關(guān)于我們
書單推薦
新書推薦
|
惡意代碼分析實(shí)戰(zhàn)
《惡意代碼分析實(shí)戰(zhàn)》是一本內(nèi)容全面的惡意代碼分析技術(shù)指南,其內(nèi)容兼顧理論,重在實(shí)踐,從不同方面為讀者講解惡意代碼分析的實(shí)用技術(shù)方法。
《惡意代碼分析實(shí)戰(zhàn)》分為21章,覆蓋惡意代碼行為、惡意代碼靜態(tài)分析方法、惡意代碼動(dòng)態(tài)分析方法、惡意代碼對(duì)抗與反對(duì)抗方法等,并包含了shellcode分析,C++惡意代碼分析,以及64位惡意代碼分析方法的介紹。本書多個(gè)章節(jié)后面都配有實(shí)驗(yàn)并配有實(shí)驗(yàn)的詳細(xì)講解與分析。通過每章的介紹及章后的實(shí)驗(yàn),本書一步一個(gè)臺(tái)階地幫助初學(xué)者從零開始建立起惡意代碼分析的基本技能。 《惡意代碼分析實(shí)戰(zhàn)》獲得業(yè)界的一致好評(píng),IDA Pro的作者Ilfak Guilfanov這樣評(píng)價(jià)本書:“一本惡意代碼分析的實(shí)踐入門指南,我把這本書推薦給所有希望解剖Windows惡意代碼的讀者”。 《惡意代碼分析實(shí)戰(zhàn)》的讀者群主要是網(wǎng)絡(luò)與系統(tǒng)安全領(lǐng)域的技術(shù)愛好者與學(xué)生及惡意代碼分析研究方面的安全從業(yè)人員。
不管你是否有惡意代碼分析的背景和經(jīng)驗(yàn),《惡意代碼分析實(shí)戰(zhàn)》極其豐富的內(nèi)容都將使你獲益匪淺。 《惡意代碼分析實(shí)戰(zhàn)》教你如何、以及何時(shí)使用惡意代碼分析技術(shù),深入掌握惡意代碼分析工具的核心功能,從而達(dá)到準(zhǔn)確診斷、及時(shí)突破、快速響應(yīng)的效果。 《惡意代碼分析實(shí)戰(zhàn)》一經(jīng)問世,便贏來(lái)業(yè)內(nèi)好評(píng)如潮,被業(yè)內(nèi)人士一致推薦為入門、晉級(jí)的權(quán)威讀本。 權(quán)威,詳盡,經(jīng)典——每一位認(rèn)真學(xué)習(xí)過《惡意代碼分析實(shí)戰(zhàn)》的讀者,必將在惡意代碼分析的專業(yè)技能上獲得巨大的提升。
第0章 惡意代碼分析技術(shù)入門 1
0.1 惡意代碼分析目標(biāo) 1 0.2 惡意代碼分析技術(shù) 2 0.2.1 靜態(tài)分析基礎(chǔ)技術(shù) 2 0.2.2 動(dòng)態(tài)分析基礎(chǔ)技術(shù) 2 0.2.3 靜態(tài)分析高級(jí)技術(shù) 2 0.2.4 動(dòng)態(tài)分析高級(jí)技術(shù) 2 0.3 惡意代碼類型 3 第0章 惡意代碼分析技術(shù)入門 1 0.1 惡意代碼分析目標(biāo) 1 0.2 惡意代碼分析技術(shù) 2 0.2.1 靜態(tài)分析基礎(chǔ)技術(shù) 2 0.2.2 動(dòng)態(tài)分析基礎(chǔ)技術(shù) 2 0.2.3 靜態(tài)分析高級(jí)技術(shù) 2 0.2.4 動(dòng)態(tài)分析高級(jí)技術(shù) 2 0.3 惡意代碼類型 3 0.4 惡意代碼分析通用規(guī)則 4 第 1篇 靜態(tài)分析 第1章 靜態(tài)分析基礎(chǔ)技術(shù) 6 1.1 反病毒引擎掃描:實(shí)用的第一步 6 1.2 哈希值:惡意代碼的指紋 7 1.3 查找字符串 7 1.4 加殼與混淆惡意代碼 9 1.4.1 文件加殼 10 1.4.2 使用PEID檢測(cè)加殼 10 1.5 PE文件格式 11 1.6 鏈接庫(kù)與函數(shù) 12 1.6.1 靜態(tài)鏈接、運(yùn)行時(shí)鏈接與動(dòng)態(tài)鏈接 12 1.6.2 使用DEPENDENCY WALKER工具探索動(dòng)態(tài)鏈接函數(shù) 13 1.6.3 導(dǎo)入函數(shù) 14 1.6.4 導(dǎo)出函數(shù) 15 1.7 靜態(tài)分析技術(shù)實(shí)踐 15 1.7.1 POTENTIALKEYLOGGER.EXE:一個(gè)未加殼的可執(zhí)行文件 15 1.7.2 PACKEDPROGRAM.EXE:窮途末路 18 1.8 PE文件頭與分節(jié) 18 1.8.1 使用PEVIEW來(lái)分析PE文件 19 1.8.2 使用RESOURCE HACKER工具來(lái)查看資源節(jié) 22 1.8.3 使用其他的PE文件工具 23 1.8.4 PE文件頭概述 23 1.9 小結(jié) 24 1.10 實(shí)驗(yàn) 24 第2章 在虛擬機(jī)中分析惡意代碼 27 2.1 虛擬機(jī)的結(jié)構(gòu) 27 2.2 創(chuàng)建惡意代碼分析機(jī) 28 2.2.1 配置VMWARE 29 2.2.2 斷開網(wǎng)絡(luò) 30 2.2.3 創(chuàng)建主機(jī)模式網(wǎng)絡(luò) 30 2.2.4 使用多個(gè)虛擬機(jī) 30 2.3 使用惡意代碼分析機(jī) 31 2.3.1 讓惡意代碼連接互聯(lián)網(wǎng) 31 2.3.2 連接和斷開外圍設(shè)備 32 2.3.3 拍攝快照 32 2.3.4 從虛擬機(jī)傳輸文件 33 2.4 使用VMWARE進(jìn)行惡意代碼分析的風(fēng)險(xiǎn) 34 2.5 記錄/重放:重復(fù)計(jì)算機(jī)運(yùn)行軌跡 34 2.6 小結(jié) 35 第3章 動(dòng)態(tài)分析基礎(chǔ)技術(shù) 36 3.1 沙箱:簡(jiǎn)便但粗糙的方法 36 3.1.1 使用惡意代碼沙箱 36 3.1.2 沙箱的缺點(diǎn) 37 3.2 運(yùn)行惡意代碼 38 3.3 進(jìn)程監(jiān)視器 39 3.3.1 進(jìn)程監(jiān)視器的顯示 40 3.3.2 進(jìn)程監(jiān)視器中的過濾 41 3.4 使用進(jìn)程瀏覽器(PROCESS EXPLORER)來(lái)查看進(jìn)程 43 3.4.1 進(jìn)程瀏覽器的顯示 43 3.4.2 使用驗(yàn)證選項(xiàng) 44 3.4.3 比較字符串 45 3.4.4 使用依賴遍歷器(DEPENDENCY WALKER) 45 3.4.5 分析惡意文檔 46 3.5 使用REGSHOT來(lái)比較注冊(cè)表快照 46 3.6 模擬網(wǎng)絡(luò) 47 3.6.1 使用APATEDNS 47 3.6.2 使用NETCAT進(jìn)行監(jiān)視 48 3.7 使用WIRESHARK進(jìn)行數(shù)據(jù)包監(jiān)聽 49 3.8 使用INETSIM 51 3.9 基礎(chǔ)動(dòng)態(tài)分析工具實(shí)踐 52 3.10 小結(jié) 55 3.11 實(shí)驗(yàn) 56 第 2篇 靜態(tài)分析高級(jí)技術(shù)篇 第4章 X86反匯編速成班 60 4.1 抽象層次 60 4.2 逆向工程 62 4.3 X86體系結(jié)構(gòu) 62 4.3.1 內(nèi)存 63 4.3.2 指令 64 4.3.3 操作碼和字節(jié)序 64 4.3.4 操作數(shù) 65 4.3.5 寄存器 65 4.3.6 簡(jiǎn)單指令 67 4.3.7 棧 70 4.3.8 條件指令 73 4.3.9 分支指令 73 4.3.10 重復(fù)指令 74 4.3.11 C語(yǔ)言主函數(shù)和偏移 76 4.3.12 更多信息:INTEL X86 ARCHITECTURE MANUAL 77 4.4 小結(jié) 78 第5章 IDA PRO 79 5.1 加載一個(gè)可執(zhí)行文件 79 5.2 IDA PRO接口 81 5.2.1 反匯編窗口模式 81 5.2.2 對(duì)分析有用的窗口 83 5.2.3 返回到默認(rèn)視圖 83 5.2.4 導(dǎo)航IDA PRO 83 5.2.5 搜索 85 5.3 使用交叉引用 86 5.3.1 代碼交叉引用 87 5.3.2 數(shù)據(jù)交叉引用 88 5.4 分析函數(shù) 88 5.5 使用圖形選項(xiàng) 89 5.6 增強(qiáng)反匯編 91 5.6.1 重命名位置 91 5.6.2 注釋 92 5.6.3 格式化操作數(shù) 92 5.6.4 使用命名的常量 93 5.6.5 重新定義代碼和數(shù)據(jù) 94 5.7 用插件擴(kuò)展IDA 95 5.7.1 使用IDC腳本 96 5.7.2 使用IDAPYTHON 97 5.7.3 使用商業(yè)插件 97 5.8 小結(jié) 98 5.9 實(shí)驗(yàn) 98 第6章 識(shí)別匯編中的C代碼結(jié)構(gòu) 100 6.1 全局與局部變量 101 6.2 反匯編算術(shù)操作 102 6.3 識(shí)別IF語(yǔ)句 104 6.3.1 用IDA PRO圖形化分析函數(shù) 105 6.3.2 識(shí)別嵌套的IF語(yǔ)句 106 6.4 識(shí)別循環(huán) 107 6.4.1 找到FOR循環(huán) 107 6.4.2 找到WHILE循環(huán) 109 6.5 理解函數(shù)調(diào)用約定 110 6.5.1 CDECL 110 6.5.2 STDCALL 111 6.5.3 FASTCALL 111 6.5.4 壓棧與移動(dòng) 111 6.6 分析SWITCH語(yǔ)句 112 6.6.1 IF樣式 112 6.6.2 跳轉(zhuǎn)表 114 6.7 反匯編數(shù)組 118 6.8 識(shí)別結(jié)構(gòu)體 119 6.9 分析鏈表遍歷 121 6.10 小結(jié) 123 6.11 實(shí)驗(yàn) 123 第7章 分析惡意WINDOWS程序 126 7.1 WINDOWS API 126 7.1.1 類型和匈牙利表達(dá)法 126 7.1.2 句柄 127 7.1.3 文件系統(tǒng)函數(shù) 127 7.1.4 特殊文件 128 7.2 WINDOWS注冊(cè)表 129 7.2.1 注冊(cè)表根鍵 130 7.2.2 REGEDIT 131 7.2.3 自啟動(dòng)程序 131 7.2.4 常用注冊(cè)表函數(shù) 131 7.2.5 練習(xí)分析注冊(cè)表操作代碼 132 7.2.6 使用.REG文件的注冊(cè)表腳本 133 7.3 網(wǎng)絡(luò)API 133 7.3.1 伯克利兼容套接字 134 7.3.2 網(wǎng)絡(luò)的服務(wù)器和客戶端 134 7.3.3 WININET API 135 7.4 跟蹤惡意代碼的運(yùn)行 136 7.4.1 DLL 136 7.4.2 進(jìn)程 137 7.4.3 線程 139 7.4.4 使用互斥量的進(jìn)程間協(xié)作 142 7.4.5 服務(wù) 143 7.4.6 組件對(duì)象模型 145 7.4.7 異常:當(dāng)事情出錯(cuò)時(shí) 147 7.5 內(nèi)核與用戶模式 148 7.6 原生API 149 7.7 小結(jié) 151 7.8 實(shí)驗(yàn) 151 第 3篇 動(dòng)態(tài)分析高級(jí)技術(shù)篇 第8章 動(dòng)態(tài)調(diào)試 154 8.1 源代碼級(jí)與匯編級(jí)的調(diào)試器 154 8.2 內(nèi)核模式與用戶模式調(diào)試 155 8.3 使用調(diào)試器 155 8.3.1 單步調(diào)試 155 8.3.2 單步跳過(STEPPING-OVER)和單步跳入(STEPPING-INTO) 156 8.3.3 用斷點(diǎn)暫停執(zhí)行 157 8.4 異常 161 8.4.1 首次和二次異常處理 162 8.4.2 常見異常 162 8.5 使用調(diào)試器修改可執(zhí)行文件 163 8.6 修改可執(zhí)行程序的實(shí)踐 163 8.7 小結(jié) 164 第9章 OLLYDBG 165 9.1 加載惡意代碼 165 9.1.1 打開一個(gè)可執(zhí)行文件 165 9.1.2 附加調(diào)試器到一個(gè)運(yùn)行程序 166 9.2 OLLYDBG的接口 167 9.3 內(nèi)存映射 168 9.3.1 基地址重定位 169 9.4 查看線程和堆棧 170 9.5 執(zhí)行代碼 171 9.6 斷點(diǎn) 172 9.6.1 軟件斷點(diǎn) 173 9.6.2 條件斷點(diǎn) 174 9.6.3 硬件斷點(diǎn) 175 9.6.4 內(nèi)存斷點(diǎn) 175 9.7 加載DLL 176 9.8 跟蹤 177 9.8.1 標(biāo)準(zhǔn)回溯跟蹤 177 9.8.2 堆棧調(diào)用跟蹤 178 9.8.3 運(yùn)行跟蹤 178 9.8.4 跟蹤POISON IVY 178 9.9 異常處理 179 9.10 修補(bǔ) 180 9.11 分析SHELLCODE 181 9.12 協(xié)助功能 182 9.13 插件 182 9.13.1 OLLYDUMP 183 9.13.2 調(diào)試器隱藏插件 183 9.13.3 命令行 184 9.13.4 書簽 185 9.14 腳本調(diào)試 185 9.15 小結(jié) 186 9.16 實(shí)驗(yàn) 187 第10章 使用WINDBG調(diào)試內(nèi)核 189 10.1 驅(qū)動(dòng)與內(nèi)核代碼 189 10.2 安裝內(nèi)核調(diào)試 191 10.3 使用WINDBG 193 10.3.1 從內(nèi)存中讀取 194 10.3.2 使用算術(shù)操作符 194 10.3.3 設(shè)置斷點(diǎn) 194 10.3.4 列舉模塊 195 10.4 微軟符號(hào)表 195 10.4.1 搜索符號(hào) 195 10.4.2 查看結(jié)構(gòu)信息 196 10.4.3 配置WINDOWS符號(hào)表 198 10.5 內(nèi)核調(diào)試實(shí)踐 198 10.5.1 用戶空間的代碼 198 10.5.2 內(nèi)核模式的代碼 200 10.5.3 查找驅(qū)動(dòng)對(duì)象 203 10.6 ROOTKIT 204 10.6.1 ROOTKIT分析實(shí)踐 205 10.6.2 中斷 208 10.7 加載驅(qū)動(dòng) 209 10.8 WINDOWS VISTA、WINDOWS 7 和X64版本的內(nèi)核問題 209 10.9 小結(jié) 210 10.10 實(shí)驗(yàn) 210 第 4篇 惡意代碼功能篇 第11章 惡意代碼行為 214 11.1 下載器和啟動(dòng)器 214 11.2 后門(BACKDOOR) 214 11.2.1 反向SHELL 215 11.2.2 遠(yuǎn)程控制工具 216 11.2.3 僵尸網(wǎng)絡(luò) 216 11.2.4 遠(yuǎn)程控制工具與僵尸網(wǎng)絡(luò)的比較 217 11.3 登錄憑證竊密器 217 11.3.1 GINA攔截 217 11.3.2 口令哈希轉(zhuǎn)儲(chǔ) 218 11.3.3 擊鍵記錄 221 11.4 存活機(jī)制 223 11.4.1 WINDOWS注冊(cè)表 223 11.4.2 特洛伊木馬化(TROJANIZED)系統(tǒng)二進(jìn)制文件 225 11.4.3 DLL加載順序劫持 227 11.5 提權(quán) 228 11.5.1 使用SEDEBUGPRIVILEGE 228 11.6 隱藏它的蹤跡——用戶態(tài)的ROOTKIT 229 11.6.1 IAT HOOK 230 11.6.2 INLINE HOOK 231 11.7 小結(jié) 232 11.8 實(shí)驗(yàn) 232 第12章 隱蔽的惡意代碼啟動(dòng) 234 12.1 啟動(dòng)器(LAUNCHER) 234 12.2 進(jìn)程注入 234 12.2.1 DLL注入 235 12.2.2 直接注入 237 12.3 進(jìn)程替換 238 12.4 鉤子(HOOK)注入 240 12.4.1 本地和遠(yuǎn)程鉤子(HOOK) 240 12.4.2 使用鉤子的擊鍵記錄器 241 12.4.3 使用SETWINDOWSHOOKEX 241 12.4.4 目標(biāo)線程 241 12.5 DETOURS 242 12.6 APC注入 243 12.6.1 用戶模式下APC注入 244 12.6.2 內(nèi)核模式的APC注入 245 12.7 小結(jié) 246 12.8 實(shí)驗(yàn) 246 第13章 數(shù)據(jù)加密 248 13.1 分析加密算法的目的 248 13.2 簡(jiǎn)單的加密算法 248 13.2.1 凱撒密碼 249 13.2.2 XOR 249 13.2.3 其他一些簡(jiǎn)單的加密策略 254 13.2.4 BASE64 255 13.3 常見的加密算法 258 13.3.1 識(shí)別字符串和導(dǎo)入 259 13.3.2 查找加密常量 259 13.3.3 查找高熵值內(nèi)容 261 13.4 自定義加密 262 13.4.1 識(shí)別自定義加密 263 13.4.2 攻擊者使用自定義加密的優(yōu)勢(shì) 265 13.5 解密 265 13.5.1 自解密 265 13.5.2 手動(dòng)執(zhí)行解密函數(shù) 266 13.5.3 使用通用的解密規(guī)范 267 13.6 小結(jié) 270 13.7 實(shí)驗(yàn) 271 第14章 惡意代碼的網(wǎng)絡(luò)特征 273 14.1 網(wǎng)絡(luò)應(yīng)對(duì)措施 273 14.1.1 在原始環(huán)境中觀察惡意代碼 273 14.1.2 惡意行為的痕跡 274 14.1.3 OPSEC=操作安全性 275 14.2 安全地調(diào)查在線攻擊者 275 14.2.1 間接性策略 275 14.2.2 獲取IP地址和域名信息 276 14.3 基于內(nèi)容的網(wǎng)絡(luò)應(yīng)對(duì)措施 278 14.3.1 使用SNORT進(jìn)行入侵檢測(cè) 278 14.3.2 深入觀察 279 14.4 結(jié)合動(dòng)態(tài)和靜態(tài)分析技術(shù) 282 14.4.1 過度分析的危險(xiǎn) 283 14.4.2 在眾目睽睽下隱藏 283 14.4.3 理解周邊代碼 286 14.4.4 尋找網(wǎng)絡(luò)操作代碼 287 14.4.5 了解網(wǎng)絡(luò)內(nèi)容的來(lái)源 288 14.4.6 硬編碼數(shù)據(jù) VS. 臨時(shí)數(shù)據(jù) 289 14.4.7 確定和利用編碼步驟 289 14.4.8 創(chuàng)建特征 291 14.4.9 分析解析例程 292 14.4.10 針對(duì)多個(gè)元素 294 14.5 了解攻擊者的意圖 295 14.6 小結(jié) 296 14.7 實(shí)驗(yàn) 296 第 5篇 逆向工程 第15章 對(duì)抗反匯編 300 15.1 何謂對(duì)抗反匯編技術(shù) 300 15.2 挫敗反匯編算法 301 15.2.1 線性反匯編 302 15.2.2 面向代碼流的反匯編 303 15.3 對(duì)抗反匯編技術(shù) 306 15.3.1 相同目標(biāo)的跳轉(zhuǎn)指令 306 15.3.2 固定條件的跳轉(zhuǎn)指令 307 15.3.3 無(wú)效的反匯編指令 308 15.3.4 用IDA PRO對(duì)指令進(jìn)行NOP替換 311 15.4 混淆控制流圖 312 15.4.1 函數(shù)指針問題 312 15.4.2 在IDA PRO中添加代碼的交叉引用 313 15.4.3 濫用返回指針 313 15.4.4 濫用結(jié)構(gòu)化異常處理 315 15.5 挫敗棧幀分析 317 15.6 小結(jié) 320 15.7 實(shí)驗(yàn) 320 第16章 反調(diào)試技術(shù) 322 16.1 探測(cè)WINDOWS調(diào)試器 322 16.1.1 使用WINDOWS API 322 16.1.2 手動(dòng)檢測(cè)數(shù)據(jù)結(jié)構(gòu) 324 16.1.3 系統(tǒng)痕跡檢測(cè) 326 16.2 識(shí)別調(diào)試器的行為 327 16.2.1 INT掃描 327 16.2.2 執(zhí)行代碼校驗(yàn)和檢查 328 16.2.3 時(shí)鐘檢測(cè) 328 16.3 干擾調(diào)試器的功能 330 16.3.1 使用TLS回調(diào) 330 16.3.2 使用異常 332 16.3.3 插入中斷 333 16.4 調(diào)試器漏洞 334 16.4.1 PE頭漏洞 334 16.4.2 OUTPUTDEBUGSTRING漏洞 336 16.5 小結(jié) 336 16.6 實(shí)驗(yàn) 336 第17章 反虛擬機(jī)技術(shù) 338 17.1 VMWARE 痕跡 338 17.1.1 繞過VMWARE痕跡的探測(cè) 340 17.1.2 探測(cè)內(nèi)存痕跡 342 17.2 查找漏洞指令 342 17.2.1 使用RED PILL反虛擬機(jī)技術(shù) 343 17.2.2 使用NO PILL技術(shù) 344 17.2.3 查詢I/O通信端口 344 17.2.4 使用STR指令 345 17.2.5 反虛擬機(jī)的X86指令 346 17.2.6 在IDA PRO中高亮顯示反虛擬機(jī)代碼 347 17.2.7 使用SCOOPYNG 347 17.3 調(diào)整設(shè)置 348 17.4 虛擬機(jī)逃逸 349 17.5 小結(jié) 349 17.6 實(shí)驗(yàn) 349 第18章 加殼與脫殼 352 18.1 剖析加殼 352 18.1.1 脫殼存根 353 18.1.2 加載可執(zhí)行文件 353 18.1.3 解析導(dǎo)入函數(shù)表 353 18.1.4 尾部跳轉(zhuǎn) 354 18.1.5 圖示脫殼過程 354 18.2 識(shí)別加殼程序 355 18.2.1 加殼程序的標(biāo)識(shí) 355 18.2.2 熵計(jì)算 356 18.3 脫殼選項(xiàng) 356 18.4 自動(dòng)脫殼 356 18.5 手動(dòng)脫殼 357 18.5.1 使用導(dǎo)入重構(gòu)器重構(gòu)導(dǎo)入表 358 18.5.2 查找OEP 359 18.5.3 手動(dòng)修復(fù)導(dǎo)入表 363 18.6 常見殼的技巧與竅門 364 18.6.1 UPX 364 18.6.2 PECOMPACT 365 18.6.3 ASPACK 365 18.6.4 PETITE 365 18.6.5 WINUPACK 366 18.6.6 THEMIDA 367 18.7 不完全脫殼情況下的分析 368 18.8 加殼DLL 368 18.9 小結(jié) 369 18.10 實(shí)驗(yàn) 369 第 6篇 高級(jí)專題 第19章 SHELLCODE分析 372 19.1 加載SHELLCODE進(jìn)行分析 372 19.2 位置無(wú)關(guān)代碼 373 19.3 識(shí)別執(zhí)行位置 373 19.3.1 使用CALL/POP指令 374 19.3.2 使用FNSTENV指令 376 19.4 手動(dòng)符號(hào)解析 377 19.4.1 在內(nèi)存中找到KERNEL32.DLL 378 19.4.2 解析PE文件導(dǎo)出數(shù)據(jù) 380 19.4.3 使用散列過的導(dǎo)出符號(hào)名 382 19.5 一個(gè)完整的HELLO WORLD例子 383 19.6 SHELLCODE編碼 385 19.7 空指令雪橇 387 19.8 找到SHELLCODE 387 19.9 小結(jié) 388 19.10 實(shí)驗(yàn) 389 第20章 C++代碼分析 391 20.1 面向?qū)ο蟮木幊陶Z(yǔ)言 391 20.1.1 THIS指針 392 20.1.2 重載與修飾 394 20.1.3 繼承(INHERITANCE)和函數(shù)重寫(OVERRIDING) 395 20.2 虛函數(shù)和非虛函數(shù) 396 20.2.1 虛函數(shù)表的使用 398 20.2.2 識(shí)別虛函數(shù)表 399 20.3 創(chuàng)建和銷毀對(duì)象 400 20.4 小結(jié) 401 20.5 實(shí)驗(yàn) 401 第21章 64位惡意代碼 403 21.1 為什么需要64位惡意代碼 403 21.2 X64架構(gòu)上的差別 404 21.2.1 X64調(diào)用約定和棧使用上的差別 406 21.2.2 64位異常處理 408 21.3 在WINDOWS 64位上的WINDOWS 32位 408 21.4 惡意代碼功能上的64位提示 409 21.5 小結(jié) 410 21.6 實(shí)驗(yàn) 410 附錄A 常見WINDOWS函數(shù)列表 412 附錄B 流行的惡意代碼分析工具列表 424 附錄C 實(shí)驗(yàn)作業(yè)參考解答 435 附錄D 致青春,基礎(chǔ)軟件開發(fā)的中國(guó)故事 691 附錄E SYSER操作入門 695
電話鈴聲急促響起,網(wǎng)絡(luò)管理員告訴你說公司網(wǎng)站被黑了,網(wǎng)站上的客戶敏感信息被盜了。于是你立馬開始調(diào)查分析,首先檢查了日志記錄,來(lái)確定事件涉及的主機(jī)。你用殺毒軟件對(duì)這些主機(jī)進(jìn)行了掃描,檢查是否感染了惡意代碼。你的運(yùn)氣還算不錯(cuò),殺毒軟件檢測(cè)到一個(gè)木馬程序,名為TROJ.snapAK。你刪除這個(gè)文件,并清理了現(xiàn)場(chǎng),同時(shí)你還部署了一個(gè)入侵檢測(cè)系統(tǒng),來(lái)確認(rèn)沒有其他主機(jī)被感染。最后你修補(bǔ)了一個(gè)你認(rèn)為是被攻擊者利用來(lái)入侵主機(jī)的安全漏洞,來(lái)確保這種攻擊事件不會(huì)再次發(fā)生。
不幸的是,幾天之后網(wǎng)絡(luò)管理員再次打電話過來(lái),告訴你說敏感信息又被竊取了。這看起來(lái)似乎是相同的攻擊,但你卻不知道該做什么。很顯然,你部署的入侵檢測(cè)系統(tǒng)特征庫(kù)失效了。因?yàn)楦嗟闹鳈C(jī)被感染了,而你的殺毒軟件并沒有提供足夠的保護(hù)來(lái)隔離攻擊威脅。現(xiàn)在,公司高層管理人員要求你解釋發(fā)生了什么,而你可以告訴他們的只是一個(gè)名為TROJ.snapAK的惡意代碼。你沒有針對(duì)最重要問題的答案,這讓他們認(rèn)為你是一位不稱職的安全工程師。 你該如何確定TROJ.snapAK惡意代碼在做什么,從而可以讓你消除這個(gè)威脅?你如何才能寫出一個(gè)更有效的網(wǎng)絡(luò)檢測(cè)特征?你怎樣才能找出其他感染了這個(gè)惡意代碼的主機(jī)呢?你該如何確保你刪除了整個(gè)惡意代碼程序包,而不只是其中的一部分呢?你該如何回答管理層關(guān)于這個(gè)惡意代碼干了些什么的問題呢? 如果你所有能做的,只是告訴你的老板,說你需要聘請(qǐng)昂貴的外部咨詢顧問,因?yàn)槟悴荒鼙Wo(hù)自己的網(wǎng)絡(luò),這真的不是確保工作飯碗的好辦法。 幸運(yùn)的是,你有著足夠的智慧,馬上啃起了這本《惡意代碼分析實(shí)戰(zhàn)》,從這本書中你將學(xué)到的技能,可以教你如何來(lái)回答這些困難的問題,并為你展示保護(hù)網(wǎng)絡(luò)免受惡意代碼侵害的方法。 什么是惡意代碼分析 惡意代碼,也稱為惡意軟件,在大多數(shù)計(jì)算機(jī)入侵事件中都扮演了重要角色。任何以某種方式來(lái)對(duì)用戶、計(jì)算機(jī)或網(wǎng)絡(luò)造成破壞的軟件,都可以被認(rèn)為是惡意代碼,包括計(jì)算機(jī)病毒、木馬、蠕蟲、內(nèi)核套件、勒索軟件、間諜軟件,等等。盡管各種不同的惡意代碼類型會(huì)做一些完全不同的事情(你將會(huì)在本書中看到),作為惡意代碼分析師,我們擁有一組核心的工具和技術(shù),用來(lái)解剖分析各式各樣的惡意代碼。 惡意代碼分析是一種解剖惡意代碼的藝術(shù),了解惡意代碼是如何工作的、如何識(shí)別它,以及如何戰(zhàn)勝或消除它。你并不是需要成為一名超級(jí)黑客,才能進(jìn)行惡意代碼分析。 網(wǎng)絡(luò)上每天有著數(shù)以百萬(wàn)計(jì),甚至更多的惡意代碼,惡意代碼分析成為了任何一位從事計(jì)算機(jī)安全事件響應(yīng)安全工程師的必需技能。此外,由于惡意代碼分析專業(yè)人才的短缺,熟練的惡意代碼分析師正處于強(qiáng)烈的人才需求之中。 這么說吧,這不是一本關(guān)于如何找到惡意代碼的書籍。我們的重點(diǎn)是在如何分析已經(jīng)找到的惡意代碼。我們專注于Windows操作系統(tǒng)上發(fā)現(xiàn)的惡意代碼——因?yàn)榈侥壳盀橹,Windows操作系統(tǒng)還是最為常用的操作系統(tǒng)。但你所學(xué)到的技能可以為你在任何操作系統(tǒng)上分析惡意代碼提供支持。我們還將專注在可執(zhí)行文件上,因?yàn)樗鼈兪亲畛R姷模彩悄闼龅降淖铍y以分析的一些文件。與此同時(shí),我們選擇不討論如惡意JavaScript腳本、Java程序等其他類型的惡意代碼,相反的是,我們選擇對(duì)方法進(jìn)行深入討論,用于分析更加高級(jí)的威脅,比如后門、隱蔽性惡意代碼和內(nèi)核套件。 先決條件 不管你是否有惡意代碼分析的背景或經(jīng)驗(yàn),你都會(huì)從本書中受益。 第1~3章將討論基礎(chǔ)的惡意代碼分析技術(shù),即使你沒有安全或編程經(jīng)驗(yàn),也可以用這些技術(shù)來(lái)進(jìn)行惡意代碼分析。第4~14章則覆蓋中等級(jí)別的內(nèi)容,可以讓你武裝上一些用來(lái)分析大多數(shù)惡意程序的主流工具與技能。這些章節(jié)都需要一些關(guān)于編程語(yǔ)言的基本知識(shí)。第15~19章,則提供最先進(jìn)的技術(shù)材料,即使對(duì)資深的惡意代碼分析師來(lái)說都是有用的,因?yàn)檫@部分內(nèi)容涵蓋了惡意代碼分析的一些戰(zhàn)術(shù)和技巧,在分析最為復(fù)雜的惡意代碼樣本時(shí)都用得上,比如那些應(yīng)用了對(duì)抗反匯編、反調(diào)試技術(shù)或加殼技術(shù)的惡意代碼。 本書將教你如何以及何時(shí)使用各種惡意代碼分析技術(shù)。了解何時(shí)應(yīng)該使用特定的技術(shù)與掌握技術(shù)本身一樣重要,因?yàn)樵谀硞(gè)特定狀況下使用了錯(cuò)誤的技術(shù),可能會(huì)是在令人沮喪地浪費(fèi)時(shí)間。我們不會(huì)涵蓋每一個(gè)工具,因?yàn)楣ぞ邥?huì)隨時(shí)改變,而它的核心功能才是最重要的。此外,我們將在整本書中使用切合實(shí)際的惡意代碼樣本(你可以從http://www.practicalmalwareanalysis.com/或http://www.nostarch. com/malware.htm下載),來(lái)為你揭示在分析真實(shí)世界中惡意代碼時(shí)會(huì)遇到的各種狀況。 實(shí)踐動(dòng)手學(xué)習(xí) 我們有著逆向工程和惡意代碼分析專業(yè)課程的豐富教學(xué)經(jīng)驗(yàn),這些經(jīng)驗(yàn)已經(jīng)告訴我們,學(xué)生只有通過使用所學(xué)習(xí)的技能進(jìn)行動(dòng)手實(shí)踐練習(xí)時(shí),才能真正掌握和學(xué)到這些技能。我們也發(fā)現(xiàn)了實(shí)驗(yàn)作業(yè)的質(zhì)量與講授的課程內(nèi)容同等重要,如果沒有一個(gè)實(shí)驗(yàn)作業(yè)部分,要學(xué)會(huì)如何分析惡意代碼是幾乎不可能的。 從始至終,本書中絕大多數(shù)章節(jié)最后都會(huì)給出一些實(shí)驗(yàn)作業(yè),讓你來(lái)練習(xí)這一章中所講授的技術(shù)。這些實(shí)驗(yàn)作業(yè)為你提供了真實(shí)惡意代碼樣本的挑戰(zhàn),旨在展示你將在真實(shí)世界中遭遇到惡意代碼中最為普遍的類型和行為。這些實(shí)驗(yàn)作業(yè)旨在加強(qiáng)每章中所介紹的基本概念,而不會(huì)用一些無(wú)關(guān)信息來(lái)讓你無(wú)所適從。每個(gè)實(shí)驗(yàn)都包括一個(gè)或多個(gè)惡意文件(可以從http://www.practicalmalware analysis.com/,或者h(yuǎn)ttp://www.nostarch.com/malware.htm下載),以及一些特意設(shè)計(jì)來(lái)引導(dǎo)你完成實(shí)驗(yàn)的問題,此外也給出了對(duì)這些問題的簡(jiǎn)短答案,以及對(duì)惡意代碼樣本的詳細(xì)分析過程。 這些實(shí)驗(yàn)都模擬了真實(shí)的惡意代碼分析場(chǎng)景。比如,它們都以通用化的文件名字進(jìn)行命名,而不會(huì)提供任何能夠洞察到惡意代碼功能的信息。對(duì)于真正環(huán)境中的惡意代碼,你也同樣在開始分析時(shí)不會(huì)有任何信息,而你需要用你所學(xué)到的技能,來(lái)收集線索,并找出惡意代碼在做些什么。 每個(gè)實(shí)驗(yàn)所需的時(shí)間將取決于你的經(jīng)驗(yàn)。你可以嘗試自己來(lái)完成實(shí)驗(yàn),或者沿著詳細(xì)分析過程,來(lái)了解如何在實(shí)踐中使用各種技術(shù)。 大多數(shù)章節(jié)都包含了三個(gè)實(shí)驗(yàn)作業(yè)。第一個(gè)實(shí)驗(yàn)通常是最簡(jiǎn)單的,絕大多數(shù)讀者都應(yīng)該能夠完成它。第二個(gè)實(shí)驗(yàn)是中等難度的,大多數(shù)讀者會(huì)需要解答中的一些援助來(lái)完成。而第三個(gè)實(shí)驗(yàn)是最困難的,如果沒有從參考答案取得提示,只有最勤奮和技術(shù)大拿的讀者們才能夠完成它們。 本書內(nèi)容預(yù)覽 《惡意代碼分析實(shí)戰(zhàn)》以使用簡(jiǎn)單的方法,從相對(duì)而言不那么復(fù)雜的惡意代碼中獲取信息開始,然后逐步提升難度,講解可以用來(lái)對(duì)抗最為先進(jìn)惡意程序的復(fù)雜技術(shù)。以下是本書每章的內(nèi)容預(yù)覽: 第0章,“惡意代碼分析技術(shù)入門”,建立起惡意代碼分析的整體過程和基礎(chǔ)方法學(xué)。 第1章,“靜態(tài)分析基礎(chǔ)技術(shù)”,傳授無(wú)須執(zhí)行就能從可執(zhí)行文件獲取信息的方法。 第2章,“在虛擬機(jī)中分析惡意代碼”,帶你一起設(shè)置虛擬機(jī),用作運(yùn)行惡意代碼的安全環(huán)境。 第3章,“動(dòng)態(tài)分析基礎(chǔ)技術(shù)”,介紹一些通過執(zhí)行惡意程序進(jìn)行分析、易于使用但非常高效的技術(shù)方法。 第4章,“x86反匯編速成班”,是對(duì)x86匯編語(yǔ)言的一個(gè)簡(jiǎn)要介紹,這章為使用IDA Pro進(jìn)行惡意代碼深入分析提供了基礎(chǔ)。 第5章,“IDA Pro”,為你顯示如何使用IDA Pro,一個(gè)最為重要的惡意代碼分析工具。我們將在全書的其余章節(jié)使用IDA Pro工具。 第6章,“識(shí)別匯編中的C代碼結(jié)構(gòu)”,提供了一些C語(yǔ)言代碼的匯編語(yǔ)句案例,并教你如何理解匯編代碼的高層功能結(jié)構(gòu)。 第7章,“分析惡意Windows程序”,覆蓋范圍廣泛的Windows程序特定概念,而這些是理解惡意Windows程序所必需的。 第8章,“動(dòng)態(tài)調(diào)試”,解釋調(diào)試的基本知識(shí),以及惡意代碼分析師該如何使用調(diào)試器。 第9章,“OllyDbg”,為你展示如何使用OllyDbg,惡意代碼分析師中最流行的一款調(diào)試器。 第10章,“使用WinDbg調(diào)試內(nèi)核”,包括了如何使用WinDbg來(lái)分析內(nèi)核模式惡意代碼和內(nèi)核套件。 第11章,“惡意代碼行為”,介紹了常見的惡意代碼功能,并告訴你在分析惡意代碼時(shí)該如何識(shí)別惡意功能。 第12章,“隱蔽的惡意代碼啟動(dòng)”,討論如何分析一類將自己的執(zhí)行隱藏至另一進(jìn)程中的特殊惡意代碼。 第13章,“數(shù)據(jù)加密”,演示了惡意代碼如何加密數(shù)據(jù),使其更難在網(wǎng)絡(luò)流量或受害主機(jī)上被發(fā)現(xiàn)。 第14章,“惡意代碼的網(wǎng)絡(luò)特征”,教你如何通過惡意代碼分析來(lái)創(chuàng)建網(wǎng)絡(luò)檢測(cè)特征,并演示這類特征要優(yōu)于單獨(dú)從捕獲網(wǎng)絡(luò)流量中提取的特征。 第15章,“對(duì)抗反匯編”,解釋一些惡意代碼編寫者如何設(shè)計(jì)自己的惡意代碼,使得它們難以被反匯編,并說明如何識(shí)別和擊敗這些技術(shù)。 第16章,“反調(diào)試技術(shù)”,描述惡意代碼編寫者可以讓他們的代碼難以被調(diào)試的伎倆,以及克服這些障礙的方法。 第17章,“反虛擬機(jī)技術(shù)”,演示惡意代碼所使用的反虛擬機(jī)技術(shù),這些技術(shù)會(huì)讓分析師在虛擬機(jī)中難以分析這些惡意代碼,并介紹繞過這些技術(shù)的方法。 第18章,“加殼與脫殼”,告訴讀者惡意代碼是如何使用加殼來(lái)隱藏自己真正目的的,然后提供一步一步的脫殼的技術(shù)方法。 第19章,“shellcode分析”,解釋了shellcode是什么,并展示分析惡意shellcode的一些技巧和竅門。 第20章,“C++代碼分析”,為你指明C++代碼在編譯之后存在什么樣的差異,并教授你如何對(duì)由C++編寫的惡意代碼進(jìn)行分析。 第21章,“64位惡意代碼”,討論惡意代碼編寫者為何使用64位惡意代碼,以及你所需要了解的x86與x64之間的區(qū)別。 附錄A,“常見Windows函數(shù)列表”,簡(jiǎn)要介紹了惡意代碼中普遍使用的Windows函數(shù)。 附錄B,“流行的惡意代碼分析工具列表”,列出了對(duì)于惡意代碼分析師們來(lái)說最有用的工具。 附錄C,“實(shí)驗(yàn)作業(yè)參考解答”,對(duì)全書每個(gè)章節(jié)的實(shí)驗(yàn)給出了參考解答。 附錄D,“致青春,基礎(chǔ)軟件開發(fā)的中國(guó)故事”,講述中國(guó)程序員開發(fā)Windows內(nèi)核調(diào)試器Syser的幕后故事。 附錄E,“Syser操作入門”,提供Syser內(nèi)核調(diào)試器的入門指南。 我們整本書的目標(biāo)就是為你武裝能夠擊敗各種類型惡意代碼的分析技術(shù)。正如你看到的,我們涵蓋了大量的技術(shù)材料,以及能夠加強(qiáng)這些技術(shù)材料的實(shí)驗(yàn)作業(yè)。當(dāng)你讀完本書時(shí),應(yīng)該學(xué)到了用來(lái)分析任何惡意代碼的技能,包括快速分析常規(guī)惡意代碼樣本的基礎(chǔ)技術(shù),以及解剖那些甚至是“來(lái)自外星”的神秘惡意代碼樣本所需的高超技術(shù)。 那么,讓我們開始吧!
你還可能感興趣
我要評(píng)論
|