目录
第 1 章 EDR 架构 1
11 EDR 的组件 1
111 代理 1
112 遥测数据 2
113 传感器 3
114 检测 3
12 规避 EDR 的挑战 4
13 识别恶意活动 5
131 考虑上下文 5
132 脆弱检测与鲁棒检测的应用 6
133 探索弹性检测规则 7
14 代理设计 9
141 基础设计 9
142 中级设计 10
143 高级设计 11
15 绕过类型 12
16 关联规避技术:一次攻击示例 13
17 总结 15
第 2 章 函数挂钩 DLL 16
21 函数挂钩的工作原理 16
211 使用 Microsoft Detours 实现挂钩 18
目录
2
212 注入 DLL 21
22 检测函数挂钩 22
23 规避函数挂钩 24
231 直接系统调用 24
232 动态解析系统调用编号 27
233 重新映射 ntdlldll 28
24 总结 32
第 3 章 进程与线程创建通知 33
31 通知回调例程的工作原理 33
32 进程通知 34
321 注册进程回调例程 35
322 查看系统上注册的回调例程 36
323 收集进程创建信息 37
33 线程通知 39
331 注册线程回调例程 39
332 检测远程线程创建 40
34 规避进程和线程创建回调 42
341 命令行篡改 42
342 伪造父进程 ID 46
343 进程镜像修改 50
35 一个进程注入案例研究:fork&run 60
36 结论 62
第 4 章 对象通知 63
41 对象通知的工作原理 63
411 注册新的回调 63
目录
3
412 监视新的和重复的进程句柄请求 65
42 检测 EDR 正在监视的对象 67
43 检测驱动程序触发后的行为 69
44 绕过认证攻击中的对象回调 71
441 执行句柄窃取 72
442 竞速回调例程 77
45 结论 82
第 5 章 镜像加载与注册表通知 83
51 镜像加载通知的工作原理 83
511 注册回调例程 83
512 查看系统上注册的回调例程 84
513 收集镜像加载信息 85
52 使用隧道工具规避镜像加载通知 88
53 使用镜像加载通知触发 KAPC 注入 90
531 理解 KAPC 注入 90
532 获取 DLL 加载函数指针 91
533 准备注入 92
534 创建 KAPC 结构体 93
535 APC 队列 94
54 防止 KAPC 注入 95
55 注册表通知的工作原理 96
551 注册注册表通知 98
552 缓解性能挑战 100
56 规避注册表回调 102
57 使用回调条目覆盖规避 EDR 驱动程序 106
58 结论 107
目录
4
第 6 章 文件系统微筛选器驱动程序 108
61 传统过滤器和过滤器管理器 108
62 微筛选器架构 110
63 编写微筛选器 113
631 开始注册 113
632 定义前操作回调 115
633 定义后操作回调 118
634 定义可选回调 119
635 激活微筛选器 119
64 管理微筛选器 120
65 使用微筛选器检测对手的战术 121
651 文件检测 121
652 命名管道检测 122
66 规避微筛选器 124
661 卸载 124
662 预防 126
663 干扰 127
67 结论 127
第 7 章 网络过滤驱动程序 128
71 基于网络与终端的监控 128
72 传统网络驱动接口规范驱动程序 130
73 Windows 过滤平台 131
731 过滤引擎 132
732 过滤仲裁 132
733 回调驱动程序 133
74 使用网络过滤器检测对手的战术 133
741 打开过滤引擎会话 134
目录
5
742 注册回调 134
743 将回调函数添加到过滤引擎 135
744 添加新过滤器对象 136
745 分配权重和子层 139
746 添加安全描述符 140
75 通过网络过滤器检测对手战术 141
751 基础网络数据 142
752 元数据 144
753 层数据 145
76 绕过网络过滤 146
77 小结 150
第 8 章 Windows 事件追踪 151
81 架构 151
811 提供者 151
812 控制器 157
813 消费者 159
82 创建消费者以识别恶意的NET 程序集 159
821 创建追踪会话 160
822 启用提供者 162
823 启动追踪会话 164
824 停止追踪会话 166
825 处理事件 167
826 测试消费者 175
83 规避基于 ETW 的检测 175
831 补丁 176
832 配置修改 176
833 追踪会话篡改 176
目录
6
834 追踪会话干扰 177
84 绕过NET 消费者 177
85 结论 181
第 9 章 扫描器 182
91 防病毒扫描器简史 182
92 扫描模式 183
921 按需扫描 183
922 按访问扫描 184
93 规则集 185
94 案例研究:YARA 186
941 理解 YARA 规则 186
942 逆向工程规则 189
95 规避扫描器签名 190
96 结论 193
第 10 章 反恶意软件扫描接口 194
101 脚本恶意软件的挑战 194
102 AMSI 的工作原理 196
1021 探索 PowerShell 的 AMSI 实现 197
1022 理解 AMSI 的底层工作机制 200
1023 实现自定义 AMSI 提供者 205
103 规避 AMSI 209
1031 字符串混淆 209
1032 AMSI 修补 210
1033 无补丁 AMSI 绕过 211
104 结论 212
目录
7
第 11 章 早期启动反恶意软件驱动程序 213
111 ELAM 驱动程序如何保护启动过程 214
112 开发 ELAM 驱动程序 215
1121 注册回调例程 215
1122 应用检测逻辑 218
113 驱动程序示例:阻止 Mimidrv 加载 219
114 加载 ELAM 驱动程序 220
1141 签署驱动程序 221
1142 设置加载顺序 223
115 规避 ELAM 驱动程序 225
116 令人遗憾的现实 226
117 结论 227
第 12 章 微软 Windows 威胁情报 228
121 对提供者进行逆向工程 228
1211 检查提供者和事件是否已启用 229
1212 确定触发的事件 231
122 确定事件的来源 234
1221 使用 Neo4j 发现传感器触发点 235
1222 获取可与 Neo4j 配合使用的数据集 236
1223 查看调用树 237
123 消费 EtwTi 事件 240
1231 理解受保护进程 241
1232 创建受保护的进程 243
1233 处理事件 248
124 规避 EtwTi 249
1241 并存 249
1242 追踪句柄覆盖 249
目录
8
125 结论 253
第 13 章 案例研究:面向检测的攻击 254
131 作战规则 254
132 初始访问 255
1321 编写载荷 255
1322 传递载荷 257
1323 执行载荷 258
1324 建立命令与控制 259
1325 规避内存扫描 261
133 持久化 261
134 侦察 264
135 权限提升 266
1351 获取频繁用户列表 266
1352 劫持文件处理器 267
136 横向移动 274
1361 查找目标 274
1362 枚举共享 275
137 文件外传 278
138 结论 279