欢迎访问学兔兔,学习、交流 分享 !

返回首页 |

Linux二进制分析 [美] 瑞安,奥尼尔(Ryan O'Neill) 著 棣琦 译 2017年版

收藏
  • 大小:112.63 MB
  • 语言:中文版
  • 格式: PDF文档
  • 阅读软件: Adobe Reader
资源简介
Linux二进制分析
作者: [美] 瑞安,奥尼尔(Ryan O'Neill) 著 棣琦 译
出版时间: 2017年版
内容简介
  二进制分析属于信息安全业界逆向工程中的一种技术,通过利用可执行的机器代码(二进制)来分析应用程序的控制结构和运行方式,有助于信息安全从业人员更好地分析各种漏洞、病毒以及恶意软件,从而找到相应的解决方案。《Linux二进制分析》是一本剖析Linux ELF工作机制的图书,共分为9章,其内容涵盖了Linux环境和相关工具、ELF二进制格式、Linux进程追踪、ELF病毒技术、Linux二进制保护、Linux中的ELF二进制取证分析、进程内存取证分析、扩展核心文件快照技术、Linux/proc/kcore分析等。《Linux二进制分析》适合具有一定的Linux操作知识,且了解C语言编程技巧的信息安全从业人员阅读。
目录
第1章 Linux环境和相关工具\t1
1.1 Linux工具\t1
1.1.1 GDB\t2
1.1.2 GNU binutils中的objdump\t2
1.1.3 GNU binutils中的objcopy\t3
1.1.4 strace\t3
1.1.5 ltrace\t4
1.1.6 基本的ltrace命令\t4
1.1.7 ftrace\t4
1.1.8 readelf\t4
1.1.9 ERESI——ELF反编译系统接口\t5
1.2 有用的设备和文件\t6
1.2.1 /proc//maps\t6
1.2.2 /proc/kcore\t6
1.2.3 /boot/System.map\t6
1.2.4 /proc/kallsyms\t7
1.2.5 /proc/iomem\t7
1.2.6 ECFS\t7
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_LOAD\t14
2.2.2 PT_DYNAMIC——动态段的Phdr\t15
2.2.3 PT_NOTE\t17
2.2.4 PT_INTERP\t17
2.2.5 PT_PHDR\t17
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_name\t28
2.4.2 st_value\t28
2.4.3 st_size\t28
2.4.4 st_other\t28
2.4.5 st_shndx\t29
2.4.6 st_info\t29
2.5 ELF重定位\t34
2.6 ELF动态链接\t43
2.6.1 辅助向量\t44
2.6.2 了解PLT/GOT\t46
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 函数蹦床(function trampolines)\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和Shawn Clowes于2003年发布\t135
5.4.4 May's Veil——Ryan O'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 Pro\t175
6.9 总结\t175
第7章 进程内存取证分析\t177
7.1 进程内存布局\t178
7.1.1 可执行文件内存映射\t179
7.1.2 程序堆\t179
7.1.3 共享库映射\t180
7.1.4 栈、VDSO和vsyscall\t180
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_PRELOAD\t187
7.3.4 检测PLT/GOT钩子\t188
7.3.5 ET_DYN注入内部原理\t190
7.3.6 操纵VDSO\t194
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内核取证分析和rootkit\t233
9.2 没有符号的备份vmlinux\t234
9.3 探索/proc/kcore和GDB\t236
9.4 直接修改sys_call_table\t237
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 rootkit\t243
9.6 调试寄存器rootkit——DRR\t244
9.7 VFS层rootkit\t244
9.8 其他内核感染技术\t245
9.9 vmlinux和.altinstructions修补\t245
9.9.1 .altinstructions和.altinstr_replace\t246
9.9.2 arch/x86/include/asm/alternative.h代码片段\t246
9.9.3 使用textify验证内核代码完整性\t247
9.9.4 使用textify检查sys_call_table\t247
9.10 使用taskverse查看隐藏进程\t248
9.11 感染的LKM——内核驱动\t249
9.11.1 方法一:感染LKM文件——符号劫持\t249
9.11.2 方法二:感染LKM文件——函数劫持\t249
9.11.3 检测被感染的LKM\t250
9.12 /dev/kmem和/dev/mem\t250
9.12.1 /dev/mem\t251
9.12.2 FreeBSD /dev/kmem\t251
9.13 K-ecfs ——内核ECFS\t251
9.14 内核黑客工具\t252
9.14.1 通用的逆向工程和调试\t253
9.14.2 高级内核劫持/调试接口\t253
9.14.3 本章提到的论文\t253
9.15 总结\t254
下载地址