扫描二维码,下载手机APP
下载安卓APP箭头
客服QQ
箭头给我发消息

客服QQ:3315713922

Linux二进制分析

综合评级:
★★★★★

定价:
¥46.60

作者:
Ryan O'Neill

出版社:
人民邮电

出版日期:
2017/12/01

页数:
16

ISBN:
9787115469236

书籍介绍

本书首先讲解了UNIX/Linux中分析目标文件的实用工具和ELF二进制格式的相关内容,随后介绍了进程追踪、各种不同类型的Linux和UNIX病毒,以及如何使用ELF病毒技术进行处理。

本书的后半部分介绍了如何使用Kprobe工具进行内核破解、代码修补和调试,如何检测并处理内核模式的rootkit,以及如何分析静态代码;对复杂的用户级内存感染分析进行了相关讲解。

本书将带领读者探索甚至连一些专家都未曾接触的领域,正式进入计算机黑客世界。

本书读者对象

如果你是一名软件工程师或者逆向工程师,想要学习Linux二进制分析相关的内容,本书实为明智之选。本书提供了在安全、取证和杀毒领域中实施二进制分析的解决方案。本书也适合安全爱好者和系统工程师阅读。为了更好地理解本书内容,读者需要具备一定的C语言编程基础和Linux命令行知识。

本书内容

ELF二进制格式的内部工作原理;

UNIX病毒感染和分析的相关技术;

二进制加固和软件防篡改技术;

修补可执行文件和进程内存;

绕过恶意软件中的反调试;

二进制取证分析技术;

用C语言设计ELF相关的工具;

如何使用ptrace操作内存。

本书源码可通过www.epubit.com.cn/book/details/4696下载。

二进制分析属于信息安全业界逆向工程中的一种技术,通过利用可执行的机器代码(二进制)来分析应用程序的控制结构和运行方式,有助于信息安全从业人员更好地分析各种漏洞、病毒以及恶意软件,从而找到相应的解决方案。

《Linux二进制分析》是一本剖析Linux ELF工作机制的图书,共分为9章,其内容涵盖了Linux环境和相关工具、ELF二进制格式、Linux进程追踪、ELF病毒技术、Linux二进制保护、Linux中的ELF二进制取证分析、进程内存取证分析、扩展核心文件快照技术、Linux/proc/kcore分析等。

《Linux二进制分析》适合具有一定的Linux操作知识,且了解C语言编程技巧的信息安全从业人员阅读。

作者简介

RyaO'Neill(ELF大师)是一名计算机安全研究员兼软件工程师,具有逆向工程、软件开发、安全防御和取证分析技术方面的背景。他是在计算机黑客亚文化的世界中成长起来的――那个由EFnet、BBS系统以及系统可执行栈上的远程缓冲区溢出组成的世界。他在年轻时就接触了系统安全、开发和病毒编写等领域。他对计算机黑客的极大热情如今已经演变成了对软件开发和专业安全研究的热爱。Ryan在DEFCON和RuxCon等很多计算机安全会议上发表过演讲,还举办了一个为期两天的ELF二进制黑客研讨会。

他的职业生涯非常成功,曾就职于Pikewerks、Leviathan安全集团这样的大公司,最近在Backtrace担任软件工程师。

Ryan还未出版过其他图书,不过他在Phrack和VXHeaven这样的在线期刊上发表的论文让他声名远扬。

目录

第1章 Linux环境和相关工具t1

1.1 Linux工具t1

1.1.1 GDBt2

1.1.2 GNU binutils中的objdumpt2

1.1.3 GNU binutils中的objcopyt3

1.1.4 stracet3

1.1.5 ltracet4

1.1.6 基本的lTrace命令t4

1.1.7 ftracet4

1.1.8 readelft4

1.1.9 ERESI――ELF反编译系统接口t5

1.2 有用的设备和文件t6

1.2.1 /proc//mapst6

1.2.2 /proc/kcoret6

1.2.3 /boot/System.mapt6

1.2.4 /proc/kallsymst7

1.2.5 /proc/iomemt7

1.2.6 ECFSt7

1.3 链接器相关环境指针t7

1.3.1 LD_PRELOAD环境变量t8

1.3.2 LD_SHOW_AUXV环境变量t8

1.3.3 链接器脚本t9

1.4 总结t10

第2章 ELF二进制格式t11

2.1 ELF文件类型t12

2.2 ELF程序头t14

2.2.1 PT_LOADt14

2.2.2 PT_DYNAMIC――动态段的Phdrt15

2.2.3 PT_NOTEt17

2.2.4 PT_INTERPt17

2.2.5 PT_PHDRt17

2.3 ELF节头t18

2.3.1 .text节t20

2.3.2 .rodata节t20

2.3.3 .plt节t21

2.3.4 .data节t21

2.3.5 .bss节t21

2.3.6 .got.plt节t21

2.3.7 .dynsym节t21

2.3.8 .dynstr节t22

2.3.9 .rel.*节t22

2.3.10 .hash节t22

2.3.11 .symtab节t22

2.3.12 .strtab节t23

2.3.13 .shstrtab节t23

2.3.14 .ctors和.dtors节t23

2.4 ELF符号t27

2.4.1 st_namet28

2.4.2 st_valuet28

2.4.3 st_sizet28

2.4.4 st_othert28

2.4.5 st_shndxt29

2.4.6 st_infot29

2.5 ELF重定位t34

2.6 ELF动态链接t43

2.6.1 辅助向量t44

2.6.2 了解PLT/GOTt46

2.6.3 重温动态段t49

2.7 编码一个ELF解析器t52

2.8 总结t55

第3章 Linux进程追踪t57

3.1 ptrace的重要性t57

3.2 ptrace请求t58

3.3 进程寄存器状态和标记t60

3.4 基于ptrace的调试器示例t61

3.5 ptrace调试器t67

3.6 高级函数追踪软件t75

3.7 ptrace和取证分析t75

3.8 进程镜像重建t77

3.8.1 重建进程到可执行文件的挑战t78

3.8.2 重建可执行文件的挑战t78

3.8.3 添加节头表t79

3.8.4 重建过程算法t79

3.8.5 在32位测试环境中使用Quenya重建进程t81

3.9 使用ptrace进行代码注入t83

3.10 简单的例子演示复杂的过程t91

3.11 code_inject工具演示t92

3.12 ptrace反调试技巧t92

3.13 总结t94

第4章 ELF病毒技术――Linux/Unix病毒t95

4.1 ELF病毒技术t96

4.2 设计ELF病毒面临的挑战t97

4.2.1 寄生代码必须是独立的t97

4.2.2 字符串存储的复杂度t99

4.2.3 寻找存放寄生代码的合理空间t100

4.2.4 将执行控制流传给寄生代码t100

4.3 ELF病毒寄生代码感染方法t101

4.3.1 Silvio填充感染t101

4.3.2 逆向text感染t106

4.3.3 data段感染t108

4.4 PT_NOTE到PT_LOAD转换感染t110

4.5 感染控制流t112

4.5.1 直接PLT感染t113

4.5.2 函数蹦床(functiotrampolines)t113

4.5.3 重写.ctors/.dtors函数指针t114

4.5.4 GOT感染或PLT/GOT重定向t115

4.5.5 感染数据结构t115

4.5.6 函数指针重写t115

4.6 进程内存病毒和rootkits――远程代码注入技术t115

4.6.1 共享库注入t116

4.6.2 text段代码注入t120

4.6.3 可执行文件注入t120

4.6.4 重定位代码注入――ET_REL注入t120

4.7 ELF反调试和封装技术t121

4.7.1 PTRACE_TRACEME技术t121

4.7.2 SIGTRAP处理技术t122

4.7.3 /proc/self/status技术t122

4.7.4 代码混淆技术t123

4.7.5 字符串表转换技术t124

4.8 ELF病毒检测和杀毒t124

4.9 总结t126

第5章 Linux二进制保护t127

5.1 ELF二进制加壳器t127

5.2 存根机制和用户层执行t128

5.3 保护器存根的其他用途t133

5.4 现存的ELF二进制保护器t133

5.4.1 DacryFile――Grugq于2001年发布t134

5.4.2 Burneye――Scut于2002年发布t134

5.4.3 Shiva――Neil Mehta和ShawClowes于2003年发布t135

5.4.4 May's Veil――RyaO'Neill于2014年发布t136

5.5 下载Maya保护的二进制文件t142

5.6 二进制保护中的反调试t142

5.7 防模拟技术t143

5.7.1 通过系统调用检测模拟t144

5.7.2 检测模拟的CPU不一致t144

5.7.3 检测特定指令之间的时延t144

5.8 混淆方法t145

5.9 保护控制流完整性t145

5.9.1 基于ptrace的攻击t145

5.9.2 基于安全漏洞的攻击t146

5.10 其他资源t147

5.11 总结t147

第6章 Linux下的ELF二进制取证分析t149

6.1 检测入口点修改技术t150

6.2 检测其他形式的控制流劫持t154

6.2.1 修改.ctors/.init_array节t154

6.2.2 检测PLT/GOT钩子t155

6.2.3 检测函数蹦床t158

6.3 识别寄生代码特征t159

6.4 检查动态段是否被DLL注入t161

6.5 识别逆向text填充感染t164

6.6 识别text段填充感染t166

6.7 识别被保护的二进制文件t170

6.8 IDA Prot175

6.9 总结t175

第7章 进程内存取证分析t177

7.1 进程内存布局t178

7.1.1 可执行文件内存映射t179

7.1.2 程序堆t179

7.1.3 共享库映射t180

7.1.4 栈、VDSO和vsyscallt180

7.2 进程内存感染t181

7.2.1 进程感染工具t181

7.2.2 进程感染技术t182

7.3 检测ET_DYN注入t184

7.3.1 Azazel:用户级rootkit检测t184

7.3.2 映射出进程的地址空间t184

7.3.3 查找栈中的LD_PRELOADt187

7.3.4 检测PLT/GOT钩子t188

7.3.5 ET_DYN注入内部原理t190

7.3.6 操纵VDSOt194

7.3.7 共享目标文件加载t195

7.3.8 检测.so注入的启发方法t196

7.3.9 检测PLT/GOT钩子的工具t197

7.4 Linux ELF核心文件t198

7.5 总结t204

第8章 ECFS――扩展核心文件快照技术t205

8.1 历史t205

8.2 ECFS原理t206

8.3 ECFS入门t206

8.3.1 将ECFS嵌入到核心处理器中t207

8.3.2 在不终止进程的情况下使用ECFS快照t208

8.4 libecfs――解析ECFS文件的库t208

8.5 readecfs工具t209

8.6 使用ECFS检测被感染的进程t210

8.6.1 感染主机进程t210

8.6.2 捕获并分析ECFS快照t211

8.6.3 使用readecfs提取寄生代码t215

8.6.4 Azazel用户级rootkit分析t216

8.7 ECFS参考指南t224

8.7.1 ECFS符号表重建t225

8.7.2 ECFS节头t226

8.7.3 使用ECFS文件作为常规的核心文件t229

8.7.4 libecfs API的使用t229

8.8 使用ECFS恢复中断的进程t230

8.9 了解更多ECFS相关内容t231

8.10 总结t232

第9章 Linux/proc/kcore分析t233

9.1 Linux内核取证分析和rootkitt233

9.2 没有符号的备份vmlinuxt234

9.3 探索/proc/kcore和GDBt236

9.4 直接修改sys_call_tablet237

9.4.1 检测sys_call_table修改t238

9.4.2 内核函数蹦床t238

9.4.3 函数蹦床示例t239

9.4.4 检测函数蹦床t241

9.4.5 检测中断处理器修复t243

9.5 Kprobe rootkitt243

9.6 调试寄存器rootkit――DRRt244

9.7 VFS层rootkitt244

9.8 其他内核感染技术t245

9.9 vmlinux和.altinstructions修补t245

9.9.1 .altinstructions和.altinstr_replacet246

9.9.2 arch/x86/include/asm/alternative.h代码片段t246

9.9.3 使用textify验证内核代码完整性t247

9.9.4 使用textify检查sys_call_tablet247

9.10 使用taskverse查看隐藏进程t248

9.11 感染的LKM――内核驱动t249

9.11.1 方法一:感染LKM文件――符号劫持t249

9.11.2 方法二:感染LKM文件――函数劫持t249

9.11.3 检测被感染的LKMt250

9.12 /dev/kmem和/dev/memt250

9.12.1 /dev/memt251

9.12.2 FreeBSD /dev/kmemt251

9.13 K-ecfs ――内核ECFSt251

9.14 内核黑客工具t252

9.14.1 通用的逆向工程和调试t253

9.14.2 高级内核劫持/调试接口t253

9.14.3 本章提到的论文t253

9.15 总结t254