Linux 二進制分析 Linux二进制分析

瑞安·奧尼爾 (Ryan O'Neill)

買這商品的人也買了...

商品描述

二進制分析屬於信息安全業界逆向工程中的一種技術,通過利用可執行的機器代碼(二進制)來分析應用程序的控制結構和運行方式,有助於信息安全從業人員更好地分析各種漏洞、病毒以及惡意軟件,從而找到相應的解決方案。
《Linux二進制分析》是一本剖析Linux ELF工作機制的圖書,共分為9章,其內容涵蓋了Linux環境和相關工具、ELF二進制格式、Linux進程追蹤、ELF病毒技術、Linux二進制保護、Linux中的ELF二進制取證分析、進程內存取證分析、擴展核心文件快照技術、Linux/proc/kcore分析等。
《Linux二進制分析》適合具有一定的Linux操作知識,且瞭解C語言編程技巧的信息安全從業人員閱讀。

作者簡介

作者:[美]瑞安奧尼爾(Ryan O'Neill)譯者:棣琦
Ryan O'Neill(ELF大師)是一名計算機安全研究員兼軟件工程師,具有逆向工程、軟件開發、安全防禦和取證分析技術方面的背景。他是在計算機黑客亞文化的世界中成長起來的——那個由EFnet、BBS系統以及系統可執行棧上的遠程緩衝區溢出組成的世界。他在年輕時就接觸了系統安全、開發和病毒編寫等領域。他對計算機黑客的極大熱情如今已經演變成了對軟件開發和專業安全研究的熱愛。Ryan在DEFCON和RuxCon等很多計算機安全會議上發表過演講,還舉辦了一個為期兩天的ELF二進制黑客研討會。

他的職業生涯非常成功,曾就職於Pikewerks、Leviathan安全集團這樣的大公司,最近在Backtrace擔任軟件工程師。
Ryan還未出版過其他圖書,不過他在Phrack和VXHeaven這樣的在線期刊上發表的論文讓他聲名遠揚。還有許多其他的作品可以從他的網站(http://www.bitlackeys.org)上找到。

目錄大綱

第1章Linux環境和相關工具1 
1.1 Linux工具1 
1.1.1 GDB 2 
1.1.2 GNU binutils中的objdump 2 
1.1.3 GNU binutils中的objcopy 3 
1.1.4 strace 3 
1.1.5 ltrace 4 
1.1.6基本的ltrace命令4 
1.1.7 ftrace 4 
1.1.8 readelf 4 
1.1.9 ERESI——ELF反編譯系統接口5 
1.2有用的設備和文件6 
1.2.1 /proc//maps 6 
1.2.2 /proc/kcore 6 
1.2.3 /boot/System.map 6 
1.2.4 /proc/kallsyms 7 
1.2.5 /proc/iomem 7 
1.2.6 ECFS 7 
1.3鏈接器相關環境指針7 
1.3 .1 LD_PRELOAD環境變量8 
1.3.2 LD_SHOW_AUXV環境變量8 
1.3.3鏈接器腳本9 
1.4總結10 

第2章ELF二進制格式11 
2.1 ELF文件類型12 
2.2 ELF程序頭14 
2.2.1 PT_LOAD 14 
2.2.2 PT_DYNAMIC— —動態段的Phdr 15 
2.2.3 PT_NOTE 17 
2.2.4 PT_INTERP 17 
2.2.5 PT_PHDR 17 
2.3 ELF節頭18 
2.3.1 .text節20 
2.3.2 .rodata節20 
2.3.3 .plt節21 
2.3.4 .data節21 
2.3.5 .bss節21 
2.3.6 .got.plt節21 
2.3.7 .dynsym節21 
2.3.8 .dynstr節22 
2.3.9 .rel.*節22
2.3.10 .hash節22 
2.3.11 .symtab節22 
2.3.12 .strtab節23 
2.3.13 .shstrtab節23 
2.3.14 .ctors和.dtors節23 
2.4 ELF符號27 
2.4.1 st_name 28 
2.4.2 st_value 28 
2.4.3 st_size 28 
2.4.4 st_other 28 
2.4.5 st_shndx 29 
2.4.6 st_info 29 
2.5 ELF重定位34 
2.6 ELF動態鏈接43 
2.6.1輔助向量44 
2.6.2了解PLT/GOT 46 
2.6.3重溫動態段49 
2.7編碼一個ELF解析器52 
2.8總結55 

第3章Linux進程追踪57 
3.1 ptrace的重要性57 
3.2 ptrace請求58 
3.3進程寄存器狀態和標記60 
3.4基於ptrace的調試器示例61 
3.5 ptrace調試器67 
3.6高級函數追踪軟件75 
3.7 ptrace和取證分析75 
3.8進程鏡像重建77 
3.8.1重建進程到可執行文件的挑戰78
3.8.2重建可執行文件的挑戰78 
3.8.3添加節頭表79 
3.8.4重建過程算法79 
3.8.5在32位測試環境中使用Quenya重建進程81 
3.9使用ptrace進行代碼注入83 
3.10簡單的例子演示複雜的過程91 
3.11 code_inject工具演示92 
3.12 ptrace反調試技巧92 
3.13總結94 

第4章ELF病毒技術——Linux/UNIX病毒95 
4.1 ELF病毒技術96 
4.2設計ELF病毒面臨的挑戰97 
4.2.1寄生代碼必須是獨立的97 
4.2.2字符串存儲的複雜度99 
4.2.3尋找存放寄生代碼的合理空間100 
4.2.4將執行控制流傳給寄生代碼100 
4.3 ELF病毒寄生代碼感染方法101 
4.3.1 Silvio填充感染101 
4.3.2逆向text感染106 
4.3.3 data段感染108 
4.4 PT_NOTE到PT_LOAD轉換感染110 
4.5感染控制流112 
4.5.1直接PLT感染113 
4.5.2函數蹦床(function trampolines) 113 
4.5.3重寫.ctors/.dtors函數指針114
4.5.4 GOT感染或PLT/GOT重定向115 
4.5.5感染數據結構115 
4.5.6函數指針重寫115 
4.6進程內存病毒和rootkits——遠程代碼注入技術115 
4.6.1共享庫注入116 
4.6.2 text段代碼注入120 
4.6.3可執行文件注入120 
4.6.4重定位代碼注入——ET_REL注入120 
4.7 ELF反調試和封裝技術121 
4.7.1 PTRACE_TRACEME技術121 
4.7.2 SIGTRAP處理技術122 
4.7.3 / proc/self/status技術122 
4.7.4代碼混淆技術123 
4.7.5字符串表轉換技術124 
4.8 ELF病毒檢測和殺毒124 
4.9總結126 

第5章Linux二進制保護127 
5.1 ELF二進制加殼器127 
5.2存根機制和用戶層執行128 
5.3保護器存根的其他用途133 
5.4現存的ELF二進制保護器133 
5.4.1 DacryFile——Grugq於2001年發布134 
5.4.2 Burneye——Scut於2002年發布134 
5.4.3 Shiva— —Neil Mehta和Shawn Clowes於2003年發布135
5.4.4 May's Veil——Ryan O'Neill於2014年發布136 
5.5下載Maya保護的二進製文件142 
5.6二進制保護中的反調試142 
5.7防模擬技術143 
5.7.1通過系統調用檢測模擬144 
5.7.2檢測模擬的CPU不一致144 
5.7.3檢測特定指令之間的時延144 
5.8混淆方法145 
5.9保護控制流完整性145 
5.9.1基於ptrace的攻擊145 
5.9.2基於安全漏洞的攻擊146 
5.10其他資源147 
5.11總結147 

第6章Linux下的ELF二進制取證分析149 
6.1檢測入口點修改技術150 
6.2檢測其他形式的控制流劫持154 
6.2.1修改.ctors/.init_array節154 
6.2.2檢測PLT/GOT鉤子155 
6.2 .3檢測函數蹦床158 
6.3識別寄生代碼特徵159 
6.4檢查動態段是否被DLL注入161 
6.5識別逆向text填充感染164 
6.6識別text段填充感染166 
6.7識別被保護的二進製文件170 
6.8 IDA Pro 175 
6.9總結175

第7章進程內存取證分析177 
7.1進程內存佈局178 
7.1.1可執行文件內存映射179 
7.1.2程序堆179 
7.1.3共享庫映射180 
7.1.4棧、VDSO和vsyscall 180 
7.2進程內存感染181 
7.2 .1進程感染工具181 
7.2.2進程感染技術182 
7.3檢測ET_DYN注入184 
7.3.1 Azazel:用戶級rootkit檢測184 
7.3.2映射出進程的地址空間184 
7.3.3查找棧中的LD_PRELOAD 187 
7.3.4檢測PLT/GOT鉤子188 
7.3.5 ET_DYN注入內部原理190 
7.3.6操縱VDSO 194 
7.3.7共享目標文件加載195 
7.3.8檢測.so注入的啟發方法196 
7.3.9檢測PLT/GOT鉤子的工具197 
7.4 Linux ELF核心文件198 
7.5總結204 

第8章ECFS——擴展核心文件快照技術205 
8.1歷史205 
8.2 ECFS原理206 
8.3 ECFS入門206 
8.3.1將ECFS嵌入到核心處理器中207 
8.3.2在不終止進程的情況下使用ECFS快照208
8.4 libecfs——解析ECFS文件的庫208 
8.5 readecfs工具209 
8.6使用ECFS檢測被感染的進程210 
8.6.1感染主機進程210 
8.6.2捕獲並分析ECFS快照211 
8.6.3使用readecfs提取寄生代碼215 
8.6. 4 Azazel用戶級rootkit分析216 
8.7 ECFS參考指南224 
8.7.1 ECFS符號表重建225 
8.7.2 ECFS節頭226 
8.7.3使用ECFS文件作為常規的核心文件229 
8.7.4 libecfs API的使用229 
8.8使用ECFS恢復中斷的進程230 
8.9了解更多ECFS相關內容231 
8.10總結232 

第9章Linux/proc/kcore分析233 
9.1 Linux內核取證分析和rootkit 233 
9.2沒有符號的備份vmlinux 234 
9.3探索/proc/kcore和GDB 236 
9.4直接修改sys_call_table 237 
9.4.1檢測sys_call_table修改238 
9.4.2內核函數蹦床238 
9.4.3函數蹦床示例239 
9.4.4檢測函數蹦床241 
9.4.5檢測中斷處理器修復243
9.5 Kprobe rootkit 243 
9.6調試寄存器rootkit——DRR 244 
9.7 VFS層rootkit 244 
9.8其他內核感染技術245 
9.9 vmlinux和.altinstructions修補245 
9.9.1 .altinstructions和.altinstr_replace 246 
9.9.2 arch/x86/include/asm/ alternative.h代碼片段246 
9.9.3使用textify驗證內核代碼完整性247 
9.9.4使用textify檢查sys_call_table 247 
9.10使用taskverse查看隱藏進程248 
9.11感染的LKM——內核驅動249 
9.11.1方法一:感染LKM文件——符號劫持249 
9.11.2方法二:感染LKM文件——函數劫持249 
9.11.3檢測被感染的LKM 250 
9.12 /dev/kmem和/dev/mem 250 
9.12.1 /dev/mem 251 
9.12.2 FreeBSD /dev/kmem 251 
9.13 K-ecfs ——內核ECFS 251 
9.14內核黑客工具252 
9.14.1通用的逆向工程和調試253 
9.14.2高級內核劫持/調試接口253 
9.14.3本章提到的論文253
9.15 總結254