网络安全

关注公众号 jb51net

关闭
Rootkit:系统灰色地带的潜伏者(原书第2版) PDF扫描版[119MB]

Rootkit:系统灰色地带的潜伏者(原书第2版) PDF扫描版[119MB]

热门排行

简介

Rootkit:系统灰色地带的潜伏者(原书第2版) 简介:

Amazon五星级畅销书,rootkit领域的重要著作,计算机安全领域公认经典。从反取证角度,深入、系统解读rootkit的本质和核心技术,以及如何构建属于自己的rootkit武器。包含大量模块化示例,行文风趣幽默,颇具实战性和可读性。

《Rootkit:系统灰色地带的潜伏者(原书第2版)》共分四部分。第一部分(第1~6章),全新阐释rootkit 本质、rootkit与反取证关系、安全领域态势,以及反取证技术的策略、应对建议和攻击优势。之后,从硬件、软件(系统)、行业工具和内核空间方面介绍rootkit调查过程和利用反取证技术破坏调查过程的策略,使你对取证和反取证有全新了解。第二部分(第7~8章),主要介绍rootkit如何阻止磁盘分析和可执行文件的分析,而调查人员如何利用有效的工具和策略来分析辅助存储器(例如磁盘分析、卷分析、文件系统分析以及未知二进制分析)中可能留下的rootkit痕迹,并对内存驻留和多级释放器技术及用户态Exec(Userland Exec)理念进行了深入剖析。第三部分(第9~15章)主要详解攻击者利用rootkit破坏数据收集过程和造成“一切安好”的假象的前沿实用策略:阻止在线取证、内核模式策略、更改调用表、更改代码、更改内核对象、创建隐秘通道和部署带外rootkit。第四部分(第16章),高屋建瓴地重新总结了rootkit的核心策略,以及如何识别隐藏的rootkit、注意事项和如何处理感染等。

Rootkit:系统灰色地带的潜伏者(原书第2版) 目录:

译者序
献给“孙悟空”
前言
第一部分 基 础 知 识
第1章 清空思想 / 1
1.1 不速之客 / 1
1.2 提炼一个更确切的定义 / 2
1.2.1 攻击循环 / 3
1.2.2 rootkit在攻击循环中的角色 / 4
1.2.3 单级释放器与多级释放器 / 4
1.2.4 其他部署方法 / 5
1.2.5 确切的学术性定义 / 6
1.2.6 不要混淆设计目标与实现 / 7
1.2.7 rootkit技术——力量倍增器 / 7
1.2.8 金·费尔比式比喻:破坏与毁坏 / 8
1.2.9 为何使用隐身技术?rootkit不能被发现吗 / 8
1.3 rootkit不等于恶意软件 / 9
1.3.1 感染源 / 9
1.3.2 广告软件和间谍软件 / 10
1.3.3 僵尸网络的兴起 / 10
1.3.4 引入:愚人飞客病毒 / 11
1.3.5 恶意软件与rootkit / 11
1.4 谁在开发和使用rootkit / 12
1.4.1 市场营销 / 12
1.4.2 数字版权管理 / 12
1.4.3 不是rootkit,而是种功能 / 13
1.4.4 法律实施 / 13
1.4.5 商业间谍 / 14
1.4.6 政治间谍 / 14
1.4.7 网络犯罪 / 15
1.4.8 谁开发了颇具艺术感的rootkit / 16
1.4.9 rootkit的道德性 / 17
1.5 慑魄惊魂:战场伤员分类 / 17
1.6 总结 / 21
第2章 反取证综述 / 22
2.1 事件响应 / 23
2.1.1 入侵检测系统(和入侵防御系统) / 23
2.1.2 异常行为 / 23
2.1.3 发生故障 / 24
2.2 计算机取证 / 24
2.2.1 rootkit不是隐身的吗?为什么还要进行反取证 / 24
2.2.2 假定最糟糕案例的场景 / 25
2.2.3 取证技术分类:第一种方法 / 26
2.2.4 取证技术分类:第二种方法 / 26
2.2.5 在线取证 / 27
2.2.6 当关机不再是种选择 / 28
2.2.7 关于拔掉电源插头的争论 / 28
2.2.8 崩溃转储或者不进行崩溃转储 / 28
2.2.9 事后检查分析 / 28
2.2.10 非本地数据 / 29
2.3 AF策略 / 29
2.3.1 数据销毁 / 30
2.3.2 数据隐藏 / 30
2.3.3 数据转换 / 31
2.3.4 数据伪造 / 31
2.3.5 数据源消除 / 31
2.4 AF技术的总体建议 / 31
2.4.1 使用定制工具 / 31
2.4.2 低且慢与焦土策略 / 32
2.4.3 避免特定实例攻击 / 32
2.4.4 使用分层防御 / 33
2.5 不明身份者具有优势 / 33
2.5.1 攻击者能够专注于攻击 / 33
2.5.2 防御者面临制度性挑战 / 33
2.5.3 安全是一种过程(而且还是一种令人讨厌的过程) / 34
2.5.4 持续增加的复杂度 / 34
2.6 总结 / 35
第3章 硬件概述 / 36
3.1 物理内存 / 36
3.2 IA-32内存模型 / 38
3.2.1 平面内存模型 / 38
3.2.2 分段内存模型 / 38
3.2.3 操作模式 / 39
3.3 实模式 / 39
3.3.1 案例研究:MS-DOS / 40
3.3.2 这不是浪费时间吗?为什么学习实模式 / 42
3.3.3 实模式执行环境 / 42
3.3.4 实模式中断 / 44
3.3.5 分段和程序控制 / 46
3.3.6 案例研究:转储IVT / 47
3.3.7 案例研究:用TSR记录击键 / 48
3.3.8 案例研究:隐藏TSR / 52
3.3.9 案例研究:为TREE.COM命令打补丁 / 56
3.3.10 小结 / 58
3.4 保护模式 / 59
3.4.1 保护模式执行环境 / 59
3.4.2 保护模式分段 / 61
3.4.3 保护模式分页 / 64
3.4.4 地址扩展分页 / 66
3.4.5 进一步研究页表 / 67
3.4.6 进一步研究控制寄存器 / 68
3.5 实现内存保护 / 70
3.5.1 通过分段实现保护 / 70
3.5.2 界限检查 / 70
3.5.3 类型检查 / 70
3.5.4 特权检查 / 71
3.5.5 受限指令检查 / 72
3.5.6 门描述符 / 72
3.5.7 保护模式中断表 / 75
3.5.8 分页保护 / 76
3.5.9 总结 / 77
第4章 系统概述 / 79
4.1 Windows系统下的物理内存 / 80
4.1.1 失落的大陆(内存) / 80
4.1.2 Windows如何使用物理地址扩展 / 81
4.1.3 页、页帧、页帧号 / 82
4.2 Windows下的分段和分页 / 82
4.2.1 分段 / 83
4.2.2 分页 / 84
4.2.3 线性地址到物理地址的转换 / 87
4.2.4 一个更快的方法 / 88
4.2.5 关于EPROCESS和KPROCESS的讨论 / 88
4.3 用户空间和内核空间 / 89
4.3.1 4GB调优(4GT) / 90
4.3.2 各得其所 / 91
4.3.3 跨越篱笆 / 91
4.3.4 用户空间剖析 / 92
4.3.5 内核空间动态分配 / 93
4.3.6 地址窗口化扩展 / 94
4.3.7 PAE、4GT和AWE的对比 / 94
4.4 用户模式和内核模式 / 94
4.4.1 执行方式与执行位置 / 95
4.4.2 内核模式组件 / 95
4.4.3 用户模式组件 / 98
4.5 其他内存保护特征 / 99
4.5.1 数据执行保护 / 100
4.5.2 地址空间布局随机化 / 103
4.5.3 /GS 编译选项 / 105
4.5.4 /SAFESEH链接器选项 / 107
4.6 本机API / 108
4.6.1 中断向量表的发展 / 108
4.6.2 进一步研究中断描述表 / 109
4.6.3 通过中断进行系统调用 / 110
4.6.4 SYSENTER指令 / 110
4.6.5 系统服务调度表 / 111
4.6.6 枚举本机API / 114
4.6.7 Nt*( )系统调用与Zw*( )系统调用 / 114
4.6.8 系统调用的生命周期 / 115
4.6.9 其他内核模式例程 / 117
4.6.10 内核模式API文档 / 119
4.7 引导过程 / 121
4.7.1 BIOS固件启动 / 121
4.7.2 EFI固件启动 / 122
4.7.3 Windows启动管理器 / 122
4.7.4 Windows启动加载器 / 124
4.7.5 初始化执行体 / 125
4.7.6 会话管理器 / 126
4.7.7 wininit.exe / 128
4.7.8 winlogon.exe / 128
4.7.9 启动过程概括 / 129
4.8 设计决策 / 130
4.8.1 藏在人群中:类型0 / 131
4.8.2 主动隐藏:类型1和类型2 / 131
4.8.3 跳出边界:类型3 / 132
4.8.4 前景展望 / 133
第5章 行业工具 / 134
5.1 开发工具 / 134
5.1.1 诊断工具 / 135
5.1.2 磁盘映像工具 / 135
5.1.3 更快速救灾:虚拟机 / 136
5.1.4 工具综述 / 137
5.2 调试器 / 138
5.2.1 配置CDB.exe / 139
5.2.2 符号文件 / 140
5.2.3 Windows符号 / 140
5.2.4 激活CDB.exe / 141
5.2.5 控制CDB.exe / 142
5.2.6 有用的调试器命令 / 143
5.2.7 检查符号命令(x) / 143
5.2.8 列举已加载的模块(lm和!lmi) / 144
5.2.9 显示类型命令(dt) / 146
5.2.10 反汇编命令(u) / 146
5.2.11 显示命令(d*) / 147
5.2.12 寄存器命令(r) / 148
5.3 KD.exe内核调试器 / 148
5.3.1 使用内核调试器的不同方法 / 148
5.3.2 物理宿主机–目标机配置 / 150
5.3.3 准备硬件 / 150
5.3.4 准备软件 / 152
5.3.5 启动内核调试会话 / 153
5.3.6 控制目标机 / 154
5.3.7 虚拟宿主机–目标机配置 / 155
5.3.8 有用的内核模式调试器命令 / 156
5.3.9 列举已加载模块命令 / 156
5.3.10 !process扩展命令 / 156
5.3.11 寄存器命令(r) / 158
5.3.12 使用崩溃转储 / 159
5.3.13 方法1:PS/2键盘技巧 / 159
5.3.14 方法2:KD.exe命令 / 160
5.3.15 方法3:NotMyFault.exe / 161
5.3.16 崩溃转储分析 / 161
第6章 内核空间中的玄机 / 162
6.1 KMD模板 / 162
6.1.1 内核模式驱动程序:全局概览 / 163
6.1.2 WDK框架 / 164
6.1.3 真正最小的KMD / 164
6.1.4 处理IRP / 167
6.1.5 与用户模式代码通信 / 171
6.1.6 从用户模式发送命令 / 174
6.2 加载内核模式驱动程序 / 177
6.3 服务控制管理器 / 177
6.3.1 在命令行使用sc.exe / 177
6.3.2 编程使用SCM / 179
6.3.3 注册表踪迹 / 181
6.4 使用导出驱动程序 / 181
6.5 综合利用内核中的漏洞 / 184
6.6 Windows内核模式安全 / 185
6.6.1 内核模式代码签名 / 185
6.6.2 KMCS的应对措施 / 187
6.6.3 内核补丁保护 / 189
6.6.4 KPP的应对措施 / 189
6.7 同步 / 190
6.7.1 中断请求级 / 190
6.7.2 延迟过程调用 / 193
6.7.3 实现 / 193
6.8 总结 / 198
第二部分 事 后 分 析
第7章 阻止磁盘分析 / 199
7.1 事后调查:概述 / 199
7.2 取证副本 / 200
7.3 卷分析 / 202
7.3.1 Windows下的存储卷 / 203
7.3.2 手工分析卷 / 204
7.3.3 应对措施:破坏分区表 / 205
7.3.4 Windows下的原始磁盘访问 / 205
7.3.5 原始磁盘访问:突破常规 / 206
7.4 文件系统分析 / 208
7.4.1 恢复删除的文件 / 209
7.4.2 恢复删除的文件:应对措施 / 209
7.4.3 枚举可选数据流 / 210
7.4.4 枚举可选数据流: 应对措施 / 212
7.4.5 恢复文件系统对象 / 212
7.4.6 恢复文件系统对象:应对措施 / 212
7.4.7 带外隐藏 / 213
7.4.8 带内隐藏 / 217
7.4.9 引入:FragFS / 225
7.4.10 应用层隐藏 / 226
7.4.11 获取元数据 / 226
7.4.12 获取元数据:应对措施 / 229
7.4.13 改变时间戳 / 230
7.4.14 改变校验和 / 232
7.4.15 识别已知文件 / 232
7.4.16 交叉时间差异与交叉视图差异 / 233
7.4.17 识别已知文件:应对措施 / 234
7.5 文件签名分析 / 235
7.6 总结 / 236
第8章 阻止可执行文件分析 / 237
8.1 静态分析 / 237
8.1.1 扫描相关人工痕迹 / 237
8.1.2 验证数字签名 / 238
8.1.3 转储字符串数据 / 239
8.1.4 检查文件头 / 239
8.1.5 反汇编和反编译 / 240
8.2 破坏静态分析 / 242
8.2.1 数据转换:加壳 / 242
8.2.2 加壳:加密程序 / 243
8.2.3 密钥管理 / 249
8.2.4 加壳:压缩程序 / 249
8.2.5 加壳:变形代码 / 251
8.2.6 定制工具的需求 / 253
8.2.7 关于加壳的争论 / 254
8.2.8 数据伪造 / 254
8.2.9 虚旗攻击 / 256
8.2.10 数据源清除:多级加载器 / 256
8.2.11 深度防御 / 257
8.3 运行时分析 / 258
8.3.1 运行环境 / 258
8.3.2 手工与自动运行时分析 / 260
8.3.3 手工分析:基本概要 / 260
8.3.4 手工分析:跟踪 / 261
8.3.5 手工分析:内存转储 / 263
8.3.6 手工分析:捕捉网络活动 / 264
8.3.7 自动化分析 / 265
8.3.8 运行时复合分析 / 266
8.4 破坏运行时分析 / 267
8.4.1 跟踪的应对措施 / 267
8.4.2 API跟踪:规避迂回补丁 / 268
8.4.3 API跟踪:多级加载器 / 272
8.4.4 指令级跟踪:攻击调试器 / 273
8.4.5 断点 / 273
8.4.6 检测用户模式调试器 / 273
8.4.7 检测内核模式调试器 / 276
8.4.8 检测用户模式调试器或者内核模式调试器 / 276
8.4.9 通过代码校验和检测调试器 / 277
8.4.10 关于反调试器技术的争论 / 278
8.4.11 指令级跟踪:混淆 / 278
8.4.12 混淆应用数据 / 278
8.4.13 混淆应用代码 / 279
8.4.14 阻止自动化 / 282
8.4.15 应对运行时复合分析 / 282
8.5 总结 / 283
第三部分 在 线 取 证
第9章 阻止在线取证 / 285
9.1 在线取证:基本过程 / 290
9.2 用户模式加载器 / 294
9.2.1 UML破坏现有的API / 294
9.2.2 关于加载器API模块的争论 / 295
9.2.3 纵览Windows PE文件格式 / 296
9.2.4 相对虚拟地址 / 296
9.2.5 PE文件头 / 297
9.2.6 导入数据节(.idata) / 300
9.2.7 基址重定位节(.reloc) / 302
9.2.8 实现独立的UML / 303
9.3 最小化加载器踪迹 / 307
9.3.1 数据节育:献给The Grugq的颂歌 / 307
9.3.2 下一步:通过漏洞利用程序加载 / 308
9.4 关于独立PE加载器的争论 / 308
第10章 用C语言创建shellcode / 309
10.1 用户模式shellcode / 311
10.1.1 Visual Studio工程设置 / 312
10.1.2 使用相对地址 / 313
10.1.3 寻找kernel32.dll:通往TEB和PEB的旅程 / 316
10.1.4 扩展地址表 / 321
10.1.5 解析kernel32.dll导出表 / 322
10.1.6 提取shellcode / 325
10.1.7 危险空间 / 327
10.1.8 构建自动化 / 329
10.2 内核模式shellcode / 329
10.2.1 工程设置:$(NTMAKEENV)\makefile.new / 330
10.2.2 工程设置:SOURCES / 331
10.2.3 地址解析 / 332
10.2.4 加载内核模式shellcode / 334
10.3 特殊武器和策略 / 337
10.4 展望 / 338
第11章 更改调用表 / 340
11.1 在用户空间挂钩:IAT / 342
11.1.1 DLL基础 / 342
11.1.2 访问导出例程 / 344
11.1.3 注入DLL / 345
11.1.4 走查磁盘上PE文件的IAT / 349
11.1.5 挂钩IAT / 354
11.2 内核空间的调用表 / 357
11.3 挂钩IDT / 358
11.3.1 处理多处理器:方案#1 / 359
11.3.2 裸例程 / 363
11.3.3 关于挂钩IDT的问题 / 365
11.4 挂钩处理器MSR / 366
11.5 挂钩SSDT / 372
11.5.1 禁用WP位:技巧#1 / 373
11.5.2 禁用WP位:技巧#2 / 374
11.5.3 挂钩SSDT项 / 376
11.5.4 SSDT示例:跟踪系统调用 / 377
11.5.5 SSDT示例:隐藏进程 / 380
11.5.6 SSDT示例:隐藏网络连接 / 385
11.6 挂钩IRP处理程序 / 385
11.7 挂钩GDT:安装调用门 / 387
11.8 挂钩的应对措施 / 395
11.8.1 检查内核模式挂钩 / 396
11.8.2 检查IA32_SYSENTER_EIP / 398
11.8.3 检查 INT 0x2E / 399
11.8.4 检查 SSDT / 401
11.8.5 检查IRP处理程序 / 402
11.8.6 检查用户模式钩子 / 404
11.8.7 解析PEB:第1部分 / 406
11.8.8 解析PEB:第2部分 / 408
11.9 反应对措施 / 408
11.9.1 假设最坏的案例 / 409
11.9.2 最坏案例应对措施#1 / 409
11.9.3 最坏案例应对措施#2 / 409
第12章 更改代码 / 410
12.1 跟踪调用 / 415
12.1.1 迂回实现 / 418
12.1.2 获取NtSetValueKey()的地址 / 421
12.1.3 初始化补丁元数据结构 / 421
12.1.4 对照已知签名核实原始机器码 / 423
12.1.5 保存原始序言和尾声代码 / 423
12.1.6 更新补丁元数据结构 / 423
12.1.7 锁定访问并禁用写保护 / 424
12.1.8 注入迂回 / 424
12.1.9 序言迂回 / 425
12.1.10 尾声迂回 / 426
12.1.11 事后总结 / 430
12.2 破坏组策略 / 430
12.2.1 迂回实现 / 432
12.2.2 初始化补丁元数据结构 / 432
12.2.3 尾声迂回 / 433
12.2.4 将注册表值映射到组策略 / 436
12.3 绕过内核模式API记录器 / 437
12.3.1 故障安全规避 / 438
12.3.2 更上一层楼 / 441
12.4 指令补丁应对措施 / 441
第13章 更改内核对象 / 442
13.1 隐形的代价 / 442
13.1.1 问题#1:陡峭的学习曲线 / 442
13.1.2 问题#2:并发性 / 443
13.1.3 问题#3:可移植性和指针运算 / 443
13.1.4 特有技术:DKOM / 445
13.1.5 对象 / 445
13.2 再访EPROCESS对象 / 446
13.2.1 获取EPROCESS指针 / 446
13.2.2 EPROCESS相关域 / 448
13.2.3 UniqueProcessId / 448
13.2.4 ActiveProcessLinks / 448
13.2.5 Token / 449
13.2.6 ImageFileName / 450
13.3 DRIVER_SECTION对象 / 450
13.4 令牌对象 / 452
13.4.1 Windows授权 / 452
13.4.2 定位令牌对象 / 455
13.4.3 令牌对象中的相关域 / 457
13.5 隐藏进程 / 460
13.6 隐藏驱动程序 / 464
13.7 操纵访问令牌 / 467
13.8 使用No-FU / 470
13.9 内核模式回调 / 472
13.10 应对措施 / 475
13.10.1 交叉视图检测 / 475
13.10.2 高级枚举:CreateToolhelp32Snapshot() / 475
13.10.3 高级枚举:PID暴力 / 477
13.10.4 低级枚举:进程 / 480
13.10.5 低级枚举:线程 / 481
13.10.6 相关软件 / 487
13.10.7 域校验和 / 488
13.11 反应对措施 / 488
13.11.1 最好的防护:饿死对手 / 489
13.11.2 评论:超越双环模型 / 489
13.11.3 最后一道防线 / 490
第14章 隐秘通道 / 491
14.1 普通恶意软件通道 / 491
14.1.1 互联网中继聊天 / 491
14.1.2 对等通信 / 492
14.1.3 HTTP / 492
14.2 最坏案例场景:截获所有数据内容 / 495
14.2.1 协议隧道 / 495
14.2.2 DNS / 496
14.2.3 ICMP / 496
14.2.4 外围设备问题 / 498
14.3 Windows TCP/IP栈 / 499
14.3.1 Windows Sockets 2 / 499
14.3.2 原始套接字 / 500
14.3.3 Winsock内核API / 501
14.3.4 NDIS / 502
14.3.5 不同任务使用不同的工具 / 503
14.4 DNS隧道 / 504
14.4.1 DNS查询 / 504
14.4.2 DNS应答 / 506
14.5 DNS隧道:用户模式 / 507
14.6 DNS隧道:WSK实现 / 511
14.6.1 初始化应用程序的上下文 / 517
14.6.2 创建内核模式套接字 / 517
14.6.3 确定本地传输地址 / 519
14.6.4 绑定套接字与传输地址 / 520
14.6.5 设置远程地址(C2客户端) / 521
14.6.6 发送DNS查询 / 522
14.6.7 接收DNS应答 / 523
14.7 NDIS协议驱动程序 / 525
14.7.1 创建并运行NDISProt6.0示例 / 526
14.7.2 客户端代码概要 / 528
14.7.3 驱动程序代码概要 / 531
14.7.4 Protocol*()例程 / 533
14.7.5 缺失的特征 / 537
14.8 被动的隐秘通道 / 538
第15章 转到带外 / 540
15.1 附加处理器模式 / 541
15.1.1 系统管理模式 / 542
15.1.2 流氓管理程序 / 546
15.1.3 白帽成员对策 / 548
15.1.4 流氓管理程序与SMM rootkit / 549
15.2 固件 / 550
15.2.1 主板BIOS / 550
15.2.2 ACPI组件 / 551
15.2.3 扩展ROM / 552
15.2.4 UEFI固件 / 553
15.3 远程管理设施 / 554
15.4 不太明显的备用方案 / 554
15.4.1 板载闪存 / 555
15.4.2 电路级伎俩 / 555
15.5 总结 / 556
第四部分 结 束 语
第16章 rootkit之道 / 559
16.1 核心策略 / 563
16.1.1 尊重你的对手 / 563
16.1.2 五指穿心掌 / 563
16.1.3 忍耐强行夺取的欲望 / 564
16.1.4 研究你的目标 / 564
16.2 识别隐藏之门 / 564
16.2.1 对付专有系统 / 565
16.2.2 监视内核 / 565
16.2.3 重要特点:硬件是新软件 / 566
16.2.4 充分利用现有研究 / 566
16.3 建筑领域的训诫 / 566
16.3.1 首先加载,深度加载 / 566
16.3.2 为自主性而奋斗 / 567
16.3.3 Butler Lampson:策略与机制分离 / 567
16.4 设计rootkit / 567
16.4.1 隐身与开发努力 / 568
16.4.2 使用定制工具 / 568
16.4.3 稳定性很重要:致力于最佳实践 / 568
16.4.4 逐步提高 / 569
16.4.5 容错移转:自我修复的rootkit / 570
16.5 处理感染 / 570

大家还下载了