图书目录

目录

第1 章绪论............................................ 1

1.1 软件安全概述.................................... 1

1.1.1 基本概念.................................. 1

1.1.2 核心原则.................................. 1

1.2 程序基础知识.................................... 3

1.2.1 程序的内存布局............................. 3

1.2.2 程序的栈帧结构............................. 5

1.2.3 函数的序言与后记............................ 5

1.2.4 ELF 文件格式............................... 6

1.2.5 程序的链接机制............................. 8

1.2.6 程序的权限管理............................. 9

1.3 常用工具介绍................................... 10

1.3.1 gdb 调试工具.............................. 10

1.3.2 CodeQL 静态分析工具........................ 11

1.3.3 逆向分析工具.............................. 15

1.3.4 QEMU 模拟器............................. 16

1.3.5 git 版本控制工具............................ 17

1.3.6 漏洞利用与二进制分析库...................... 17

1.3.7 代码片段提取工具........................... 18

1.3.8 ELF 文件执行环境修改工具.................... 19

1.3.9 ELF 文件安全属性查询工具.................... 19

第2 章栈缓冲区溢出漏洞攻防............................. 20

2.1 栈缓冲区溢出漏洞简介............................. 20

2.2 return-to-shellcode 攻击手法......................... 21

2.2.1 攻击原理简介.............................. 21

2.2.2 shellcode 核心原理.......................... 22

2.2.3 return-to-shellcode 攻击示例................... 24

2.3 return-to-libc 与ROP 攻击手法....................... 25

2.3.1 ASLR 关闭时的return-to-libc 攻击......................... 26

2.3.2 ASLR 开启时的return-to-libc 攻击......................... 29

2.3.3 栈迁移............................................. 32

2.3.4 BROP 攻击......................................... 35

2.4 栈溢出漏洞防御与检测....................................... 42

2.4.1 栈溢出漏洞防御...................................... 42

2.4.2 栈溢出漏洞检测...................................... 44

第3 章格式化字符串漏洞攻防....................................... 46

3.1 格式化字符串漏洞简介....................................... 46

3.2 printf() 函数的原理......................................... 46

3.3 格式化字符串漏洞攻击手法................................... 48

3.3.1 32 位格式化字符串漏洞利用.............................. 49

3.3.2 64 位格式化字符串漏洞利用.............................. 50

3.4 格式化字符串漏洞防御与检测.................................. 52

3.4.1 格式化字符串漏洞防御................................. 52

3.4.2 格式化字符串漏洞检测................................. 52

第4 章堆漏洞攻防................................................ 54

4.1 堆内存管理简介............................................ 54

4.1.1 堆空间的接口与使用................................... 54

4.1.2 堆的内部实现........................................ 55

4.1.3 malloc/free 接口实现................................... 60

4.1.4 堆的分配与释放示例................................... 62

4.2 堆漏洞简介............................................... 65

4.2.1 堆溢出漏洞.......................................... 66

4.2.2 释放后重用漏洞...................................... 66

4.2.3 重复释放漏洞........................................ 67

4.3 堆漏洞的利用方法.......................................... 67

4.3.1 堆溢出漏洞利用...................................... 67

4.3.2 释放后重用漏洞利用................................... 75

4.3.3 重复释放漏洞利用..................................... 79

4.4 堆漏洞防御与检测.......................................... 81

4.4.1 堆漏洞防御.......................................... 81

4.4.2 堆漏洞检测.......................................... 82

第5 章整数溢出漏洞攻防........................................... 89

5.1 整数溢出漏洞原理.......................................... 89

5.2 整数溢出漏洞攻击手法....................................... 91

5.3 整数溢出漏洞防御与检测..................................... 93

5.3.1 整数溢出漏洞防御..................................... 93

5.3.2 整数溢出漏洞检测..................................... 93

第6 章Linux 内核漏洞攻防......................................... 97

6.1 Linux 内核简介............................................ 97

6.1.1 内核子系统简介...................................... 97

6.1.2 内核关键文件简介.................................... 102

6.2 内核栈溢出漏洞........................................... 103

6.2.1 内核ret2usr 攻击..................................... 104

6.2.2 内核ROP .......................................... 109

6.2.3 内核栈迁移......................................... 113

6.2.4 内核KPTI trampoline ................................. 116

6.2.5 内核ret2dir 攻击..................................... 121

6.2.6 内核信息泄露....................................... 125

6.3 内核堆漏洞.............................................. 132

6.3.1 内核堆管理机制原理.................................. 133

6.3.2 内核堆内存分配与释放示例............................. 134

6.3.3 内核堆溢出漏洞...................................... 136

6.3.4 内核空指针解引用漏洞................................. 140

6.3.5 内核释放后重用漏洞.................................. 146

6.4 内核竞态条件漏洞......................................... 161

6.4.1 内核竞态条件示例.................................... 162

6.4.2 内核双取漏洞....................................... 167

6.4.3 提高竞态条件利用成功率............................... 175

6.5 内核漏洞防御与检测........................................ 184

6.5.1 内核漏洞防御....................................... 184

6.5.2 内核漏洞检测....................................... 187

参考文献....................................................... 192