上篇 技术解析篇 3
第1章 Linux内核级安全开发基础 3
1.1 操作系统体系结构概述 4
1.1.1 单体式结构 4
1.1.2 微内核结构 5
1.2 Linux的动态内核模块机制 5
1.2.1 动态内核模块机制概述 5
1.2.2 Linux内核模块的加载和卸载 6
1.3 Linux内核模块开发方法 7
1.3.1 源代码组成 7
1.3.2 外部符号引用 7
1.3.3 编译和运行模式 8
1.3.4 调试和信息输出 9
1.4 Linux系统调用概述 9
1.4.1 系统调用与系统安全 9
1.4.2 系统调用的服务功能 10
1.5 Linux系统调用的实现 11
1.5.1 系统调用入口地址表 11
1.5.2 中断机制和系统调用实现 11
1.5.3 Linux系统调用的实现过程 12
1.6 应用程序和内核模块的信息交互方式 13
1.6.1 Netlink机制 13
1.6.2 创建设备文件 14
1.6.3 添加系统调用 15
1.7 本章小结 15
习题 16
第2章 Linux内核级安全机制实现解析 18
2.1 Linux的安全模块(LSM)机制 19
2.1.1 LSM机制的出现背景 19
2.1.2 LSM机制的实现原理 19
2.1.3 LSM机制中钩子函数的注册 20
2.1.4 钩子函数的参数传递 21
2.2 基于LSM的Linux内核级安全机制实现 21
2.2.1 基于LSM的内核级安全机制实现概述 21
2.2.2 访问监视类安全机制的实现 22
2.2.3 访问控制类安全机制的实现 22
2.2.4 数据转换类安全机制的实现 23
2.3 Linux系统调用重载技术 23
2.3.1 系统调用重载的概念 23
2.3.2 系统调用重载的实现技术 24
2.3.3 系统调用重载中的参数传递 24
2.4 基于系统调用重载的内核级安全机制实现 25
2.4.1 基于系统调用重载的内核级安全机制实现概述 25
2.4.2 访问监视类安全机制的实现 26
2.4.3 访问控制类安全机制的实现 26
2.4.4 数据转换类安全机制的实现 27
2.5 基于LSM的文件访问控制实现解析 27
2.5.1 原有文件访问控制机制概述 28
2.5.2 基于LSM的文件访问控制实现结构 28
2.6 基于系统调用重载的文件访问日志实现解析 30
2.6.1 Linux的日志系统概述 30
2.6.2 基于系统调用重载的文件访问日志 30
2.7 本章小结 31
习题 32
第3章 网络防火墙功能与结构解析 33
3.1 网络防火墙的基本概念 33
3.2 防火墙的网络访问控制功能 33
3.3 访问控制功能的实现要素 34
3.3.1 访问控制规则的配置 34
3.3.2 基于访问控制规则的访问判决 36
3.3.3 网络访问判决的实施 36
3.4 网络防火墙的逻辑结构 37
3.4.1 访问控制规则配置模块 37
3.4.2 访问控制规则数据库 38
3.4.3 网络访问截获和控制模块 38
3.4.4 网络访问判决模块 38
3.5 网络防火墙接入的协议层次 39
3.5.1 非代理模式下的协议处理流程 39
3.5.2 代理模式下的协议处理流程 40
3.5.3 网络防火墙的IP层接入 42
3.5.4 网络防火墙的应用代理接入 43
3.6 网络访问的控制粒度 43
3.7 本章小结 44
习题 45
第4章 网络防火墙的技术类型 46
4.1 包过滤防火墙原理及特征 46
4.1.1 包过滤防火墙工作原理 46
4.1.2 包过滤防火墙工作流程 47
4.1.3 包过滤防火墙的优缺点 47
4.2 应用代理防火墙原理与特征 48
4.2.1 应用代理防火墙工作原理 48
4.2.2 应用代理防火墙工作流程 49
4.2.3 应用代理防火墙的优缺点 49
4.3 透明代理防火墙原理及特征 50
4.3.1 透明代理防火墙的技术背景 50
4.3.2 透明代理防火墙技术解析 51
4.3.3 透明代理防火墙工作原理 52
4.3.4 透明代理防火墙的功能特征 53
4.4 防火墙技术类型的新发展 53
4.5 本章小结 54
习题 55
第5章 各类型防火墙实现解析 56
5.1 防火墙实现基础:Netfilter机制 57
5.1.1 Netfilter概述 57
5.1.2 Netfilter机制的运行原理 58
5.1.3 Netfilter功能种类 59
5.2 Linux内置包过滤防火墙 60
5.2.1 Linux内置包过滤防火墙概述 60
5.2.2 Linux内置包过滤防火墙的构建 61
5.2.3 过滤规则配置及测试 62
5.2.4 Linux内置包过滤防火墙的管理 63
5.3 基于内核模块的包过滤防火墙实现解析 64
5.4 基于Netfilter队列机制的防火墙实现解析 65
5.5 应用代理防火墙实现解析 66
5.6 透明代理防火墙实现解析 67
5.7 本章小结 68
习题 69
第6章 系统脆弱性检测技术及实现解析 71
6.1 安全脆弱性检测概述 71
6.2 脆弱性检测的技术分类 72
6.2.1 基于主机的脆弱性检测 72
6.2.2 基于网络的脆弱性检测 73
6.3 端口扫描的基本原理和技术 74
6.3.1 全连接扫描技术解析 74
6.3.2 半连接扫描技术解析 75
6.3.3 结束连接(FIN)扫描技术解析 76
6.3.4 UDP端口扫描技术解析 77
6.4 端口扫描的实现解析 77
6.4.1 原始套接字及编程 78
6.4.2 Libnet和Libpcap库函数编程 79
6.5 弱口令扫描技术基本原理 82
6.5.1 口令认证方式解析 82
6.5.2 弱口令扫描的基本原理 83
6.6 Linux下弱口令扫描实现解析 84
6.6.1 口令信息的保存 84
6.6.2 口令的加密方式 85
6.6.3 弱口令扫描的场景和流程 85
6.7 本章小结 86
习题 86
第7章 入侵检测技术及实现解析 88
7.1 入侵检测概述 88
7.2 入侵检测的主要技术 89
7.2.1 误用检测 89
7.2.2 异常检测 90
7.3 主机入侵检测和网络入侵检测 91
7.3.1 主机入侵检测 91
7.3.2 网络入侵检测 92
7.4 入侵检测系统的实现技术解析 93
7.4.1 入侵检测系统的工作原理 93
7.4.2 判定入侵的依据 93
7.4.3 入侵检测算法的实现方式 95
7.4.4 系统预知特征的获取方式 95
7.4.5 入侵检测系统的实现结构 96
7.4.6 网络入侵检测系统的接入方式 97
7.5 网络入侵检测系统实例及实现解析 98
7.5.1 基于特征串匹配的网络攻击检测解析 99
7.5.2 针对端口扫描的攻击检测系统解析 100
7.6 本章小结 100
习题 101
下篇 开发实践篇 105
第8章 基于LSM的文件访问控制原型实现 105
8.1 原型系统的总体设计 105
8.2 配置程序的实现 106
8.2.1 程序用到的库函数 106
8.2.2 源码与注释 107
8.3 LSM内核控制模块的实现 108
8.3.1 涉及到的外部函数及结构体 108
8.3.2 头文件、全局变量及函数声明 111
8.3.3 函数功能设计 113
8.3.4 函数实现与注释 114
8.4 编译、运行及测试 116
8.4.1 编译方法和过程 116
8.4.2 运行及测试环境配置 117
8.4.3 文件操作控制功能的测试 119
8.5 扩展开发实践 120
8.5.1 基于LSM的程序运行权限管理 120
8.5.2 基于LSM的程序完整性保护 122
8.5.3 基于LSM的网络连接控制 123
8.5.4 基于LSM的基本型文件保险箱 123
8.5.5 基于LSM的系统级资源访问审计 124
8.6 本章小结 125
习题 125
第9章 基于系统调用重载的文件访问日志原型实现 127
9.1 原型系统的总体设计 127
9.2 内核日志模块的实现 128
9.2.1 涉及的外部函数及结构 129
9.2.2 头文件、全局变量及声明 131
9.2.3 函数组成和功能设计 132
9.2.4 函数实现与注释 135
9.3 日志应用程序的实现 139
9.3.1 程序功能及实现思路 139
9.3.2 涉及的库函数和结构体 139
9.3.3 头文件及全局变量 141
9.3.4 函数组成及功能设计 142
9.3.5 函数实现与注释 142
9.4 编译、运行及测试 145
9.4.1 编译方法和过程 145
9.4.2 文件操作日志测试 146
9.5 扩展开发实践 148
9.5.1 基于系统调用重载的系统级资源访问审计 148
9.5.2 基于系统调用重载的访问控制类开发实践 149
9.5.3 基于系统调用重载的加密型文件保险箱 150
9.5.4 基于系统调用重载的日志原型系统的移植 151
9.6 本章小结 151
习题 152
第10章 内核模块包过滤防火墙的原型实现 153
10.1 原型系统的总体设计 153
10.1.1 规则配置程序的设计 153
10.1.2 内核模块的设计 155
10.2 规则配置程序的实现 155
10.2.1 用到的库函数 155
10.2.2 规则配置程序的函数组成 156
10.2.3 头文件和全局变量 157
10.2.4 函数的源代码实现 157
10.3 内核控制模块的实现 160
10.3.1 外部函数及结构 160
10.3.2 头文件、全局变量及声明 163
10.3.3 函数组成及功能设计 164
10.3.4 函数实现与注释 166
10.4 编译、运行及测试 171
10.4.1 编译方法和过程 171
10.4.2 测试环境说明 171
10.4.3 功能测试过程 172
10.5 扩展开发实践 173
10.5.1 内核模块包过滤防火墙的控制功能扩展 174
10.5.2 内核模块包过滤防火墙原型系统的移植 174
10.5.3 基于Netfilter的网络加密通信系统 175
10.5.4 内核模块包过滤防火墙的攻击检测功能扩展 175
10.6 本章小结 176
习题 176
第11章 基于队列机制的应用层包过滤防火墙原型实现 178
11.1 原型系统的总体设计 178
11.1.1 应用层IP报文获取方案 178
11.1.2 功能和结构设计 179
11.1.3 运行方式 179
11.2 原型系统的实现 180
11.2.1 外部库函数 180
11.2.2 头文件和全局变量 180
11.2.3 函数组成及功能设计 181
11.2.4 函数实现和注释 183
11.3 编译、运行及测试 189
11.3.1 编译环境、方法和过程 189
11.3.2 测试环境 190
11.3.3 防火墙的功能测试 190
11.4 扩展开发实践 193
11.4.1 应用层包过滤防火墙的控制功能扩展 194
11.4.2 应用层包过滤防火墙的Netlink通信 194
11.4.3 应用层包过滤防火墙的报文内容变换扩展 195
11.4.4 应用层包过滤防火墙的攻击检测功能扩展 195
11.5 本章小结 195
习题 196
第12章 应用代理防火墙的原型实现 197
12.1 原型系统的总体设计 197
12.1.1 原型系统的功能设计 197
12.1.2 原型系统的逻辑结构 198
12.1.3 程序运行方式 198
12.2 原型系统的实现 199
12.2.1 主要库函数 199
12.2.2 头文件及全局变量 200
12.2.3 函数功能与设计 200
12.2.4 主线程实现 201
12.2.5 子线程实现 203
12.3 编译、运行与测试 206
12.3.1 编译和运行 206
12.3.2 测试环境设置 206
12.3.3 测试过程 207
12.4 扩展开发实践 208
12.4.1 应用代理防火墙的控制功能扩展 208
12.4.2 应用代理防火墙的缓存机制支持 209
12.4.3 应用代理防火墙的消息变换功能扩展 209
12.4.4 应用代理防火墙的审计功能扩展 210
12.4.5 应用代理防火墙的FTP支持扩展 210
12.5 本章小结 211
习题 211
第13章 透明代理防火墙的原型实现 213
13.1 透明代理防火墙的关键技术解析 213
13.1.1 目标服务器标识获取 214
13.1.2 至客户端的源地址重定向 214
13.2 原型系统的总体设计 215
13.2.1 原型系统的功能设计 215
13.2.2 原型系统的逻辑结构 216
13.2.3 原型系统运行方式 216
13.3 原型系统的实现 217
13.3.1 关键库函数 217
13.3.2 头文件及全局变量 218
13.3.3 函数组成和功能设计 218
13.3.4 主线程代码实现与注释 219
13.3.5 子线程代码实现与注释 221
13.4 编译、运行与测试 223
13.4.1 测试环境设置 223
13.4.2 编译和运行 224
13.4.3 测试过程 224
13.5 扩展开发实践 226
13.5.1 透明代理防火墙的多规则支持和动态配置扩展 226
13.5.2 透明代理防火墙的HTTP协议解析与控制扩展 227
13.5.3 透明代理防火墙的FTP协议解析与控制扩展 227
13.5.4 透明代理防火墙的网页缓存扩展 227
13.5.5 透明代理防火墙的HTTP消息变换扩展 228
13.6 本章小结 228
习题 228
第14章 端口扫描工具的原型实现 230
14.1 原型工具的总体设计 230
14.1.1 功能及实现方案 230
14.1.2 原型工具的运行方式 230
14.2 原型工具的实现 231
14.2.1 主要头文件及宏定义 231
14.2.2 主要数据结构 232
14.2.3 函数组成和功能设计 233
14.2.4 函数源代码与注释 235
14.3 编译、运行和测试 241
14.3.1 端口扫描工具的编译 242
14.3.2 对Linux系统的扫描测试 242
14.3.3 对Windows系统的扫描测试 243
14.4 扩展开发实践 244
14.4.1 UDP扫描扩展实现 245
14.4.2 全连接扫描的多线程扩展 245
14.4.3 端口扫描原型工具的扫描功能扩展 245
14.5 本章小结 246
习题 246
第15章 弱口令扫描工具的原型实现 247
15.1 原型工具的总体设计 247
15.1.1 原型工具的输入 247
15.1.2 口令加密方式 247
15.1.3 原型工具的运行方式 247
15.2 原型工具的实现 248
15.2.1 头文件和数据结构 248
15.2.2 函数组成和功能设计 248
15.2.3 函数源代码和注释 249
15.3 编译、运行与测试 251
15.4 扩展开发实践 252
15.4.1 弱口令扫描的功能增强扩展 252
15.4.2 针对Windows系统的弱口令扫描实现 252
15.5 本章小结 253
习题 253
第16章 基于特征串匹配的攻击检测系统原型实现 254
16.1 原型系统的总体设计 254
16.1.1 检测功能概述 254
16.1.2 TCP数据包的获取方案 255
16.1.3 特征串匹配算法 255
16.1.4 程序运行方式 256
16.2 原型系统的实现 256
16.2.1 主要头文件 256
16.2.2 主要数据结构 256
16.2.3 使用的全局变量 257
16.2.4 函数组成和调用关系 257
16.2.5 函数源代码与注释 259
16.3 编译及运行测试 261
16.3.1 编译方式 262
16.3.2 运行与测试 262
16.4 扩展开发实践 263
16.4.1 原型系统的抗逃避检测扩展 263
16.4.2 原型系统的特征串匹配算法改进 264
16.4.3 原型系统的检测准确性扩展 265
16.5 本章小结 265
习题 266
第17章 端口扫描检测系统的原型实现 267
17.1 原型系统的总体设计 267
17.1.1 原型系统的功能及实现原理 267
17.1.2 程序运行方式 268
17.2 原型系统的实现 268
17.2.1 主要头文件及宏定义 268
17.2.2 主要数据结构 269
17.2.3 使用的全局变量 270
17.2.4 函数组成和功能设计 270
17.2.5 函数源代码与注释 271
17.3 编译及运行测试 275
17.3.1 编译 275
17.3.2 运行与测试 276
17.4 扩展开发实践 277
17.4.1 原型系统的检测准确性改善 277
17.4.2 针对FIN扫描检测扩展 278
17.4.3 针对UDP端口扫描检测扩展 278
17.4.4 针对半连接攻击的检测扩展 278
17.5 本章小结 278
习题 279
附录A 扩展开发实践题目汇总 280
参考文献 291