第 1章 设置PowerShell测试环境 ............ 1
1.1 选择PowerShell版本................... 1
1.2 配置PowerShell ........................... 1
1.3 PowerShell语言概述 ................... 3
1.3.1 理解类型、变量和表达式 ... 3
1.3.2 执行命令 ............................. 6
1.3.3 发现命令并获取帮助 ......... 7
1.3.4 定义函数 ............................. 9
1.3.5 显示和操作对象 ............... 10
1.3.6 过滤、排序和分组对象 ... 13
1.3.7 导出数据 ........................... 15
1.4 总结 ............................................. 16
第 2章 Windows内核 ............................... 17
2.1 Windows内核执行体 ................. 17
2.2 安全参考监视器 ......................... 18
2.3 对象管理器 ................................. 20
2.3.1 对象类型 ........................... 20
2.3.2 对象管理器命名空间 ....... 21
2.3.3 系统调用 ........................... 22
2.3.4 NTSTATUS状态码 .......... 25
2.3.5 对象句柄 ........................... 27
2.3.6 Query和Set信息系统调用 ............................. 33
2.4 输入/输出管理器 ........................ 36
2.5 进程和线程管理器 ..................... 38
2.6 内存管理器 ................................. 39
2.6.1 NtVirtualMemory系列命令 ........................ 40
2.6.2 节对象 ............................... 42
2.7 代码完整性 ................................. 44
2.8 高级本地过程调用 ..................... 45
2.9 配置管理器 ................................. 45
2.10 示例实践 ................................... 46
2.10.1 根据名称查找已打开的句柄 .......................... 46
2.10.2 查找共享对象 ................. 47
2.10.3 修改映射节 ..................... 48
2.10.4 查找可写可执行内存 ..... 49
2.11 总结 ........................................... 50
第3章 用户模式应用程序 ......................... 51
3.1 Win32与用户模式Windows API ........................ 51
3.1.1 加载新库 ........................... 52
3.1.2 查看导入的API ................ 54
3.1.3 搜索DLL .......................... 55
3.2 Win32 GUI .................................. 57
3.2.1 GUI内核资源 ................... 57
3.2.2 窗口消息 ........................... 59
3.2.3 控制台会话 ....................... 60
3.3 比较Win32 API和系统调用 ..... 62
3.4 Win32注册表路径 ..................... 65
3.4.1 打开注册表项 ................... 66
3.4.2 列出注册表的内容 ........... 66
3.5 DOS设备路径 ............................ 67
3.5.1 路径类型 ........................... 69
3.5.2 最大路径长度 ................... 70
3.6 进程创建 ..................................... 71
3.6.1 命令行解析 ....................... 72
3.6.2 Shell API ............................ 73
3.7 系统进程 ..................................... 75
3.7.1 会话管理器 ....................... 75
3.7.2 Windows登录进程 ........... 75
3.7.3 本地安全机构子系统 ....... 76
3.7.4 服务控制管理器 ............... 76
3.8 示例实践 ..................................... 77
3.8.1 查找导入特定API的可执行文件 ..................... 77
3.8.2 查找隐藏的注册表键或值 ........................... 77
3.9 总结 ............................................. 79
第4章 安全访问令牌 ................................. 80
4.1 主令牌 ......................................... 80
4.2 模拟令牌 ..................................... 84
4.2.1 安全服务质量 ................... 84
4.2.2 显式模拟令牌 ................... 86
4.3 令牌类型转换 ............................. 87
4.4 伪令牌句柄 ................................. 88
4.5 令牌组 ......................................... 89
4.5.1 Enabled、EnabledByDefault和Mandatory .................... 89
4.5.2 LogonId ............................. 90
4.5.3 Owner ................................ 90
4.5.4 UseForDenyOnly .............. 90
4.5.5 Integrity与IntegrityEnabled ................ 91
4.5.6 Resource ............................ 92
4.5.7 设备组 ............................... 92
4.6 特权 ............................................. 92
4.7 沙箱令牌 ..................................... 95
4.7.1 受限令牌 ........................... 95
4.7.2 写入受限令牌 ................... 97
4.7.3 AppContainer和LowBox令牌 ........................... 97
4.8 什么是管理员账户 ................... 100
4.9 用户账户控制 ........................... 101
4.9.1 关联令牌和提升类型 ..... 103
4.9.2 UI访问 ............................ 105
4.9.3 虚拟化 ............................. 106
4.10 安全属性 ................................. 106
4.11 创建令牌 ................................. 108
4.12 令牌分配 ................................. 109
4.12.1 分配主令牌 ................... 109
4.12.2 分配模拟令牌 ............... 111
4.13 示例实践 ............................. 113
4.13.1 查找具有UI访问权限的进程 .......................... 113
4.13.2 查找可用于模拟的令牌句柄 ................................ 114
4.13.3 移除管理员特权 ........... 115
4.14 总结 ......................................... 115
第5章 安全描述符 ................................... 117
5.1 安全描述符的结构 ................... 117
5.2 SID的结构 ................................ 119
5.3 绝对和相对安全描述符 ........... 121
5.4 访问控制列表头部和条目 ....... 123
5.4.1 列表头部 ......................... 124
5.4.2 ACE列表 ........................ 125
5.5 构造与操作安全描述符 ........... 127
5.5.1 创建新的安全描述符 ..... 128
5.5.2 排序ACE ........................ 129
5.5.3 格式化安全描述符 ......... 130
5.5.4 相对安全描述符的双向转换 ....................... 133
5.6 安全描述符定义语言 ............... 135
5.7 示例实践 ................................... 142
5.7.1 手动解析二进制SID ..... 142
5.7.2 枚举SID ......................... 143
5.8 总结 ............................. 145
第6章 读取并分配安全描述符 ............... 146
6.1 读取安全描述符 ....................... 146
6.2 分配安全描述符 ....................... 148
6.2.1 在资源创建过程中分配安全描述符 ..................... 149
6.2.2 为已存在的资源分配安全描述符 ............................. 171
6.3 Win32安全API ........................ 174
6.4 服务器安全描述符和复合ACE ........................................... 178
6.5 继承行为总结 ........................... 180
6.6 示例实践 ................................... 181
6.6.1 查找对象管理器资源的所有者 .......................... 181
6.6.2 修改资源的所有权 ......... 183
6.7 总结 ........................................... 184
第7章 访问检查过程 ............................... 185
7.1 执行访问检查 ........................... 185
7.1.1 内核模式访问检查 ......... 185
7.1.2 访问模式 ......................... 186
7.1.3 PowerShell命令Get-NtGrantedAccess ...... 189
7.2 PowerShell中的访问检查过程 ......................................190
7.2.1 定义访问检查函数 ......... 191
7.2.2 执行强制访问检查 ......... 192
7.2.3 执行令牌访问检查 ......... 200
7.2.4 执行自主访问检查 ......... 203
7.3 沙箱机制 ................................... 206
7.3.1 受限令牌 ......................... 206
7.3.2 LowBox令牌 .................. 207
7.4 企业访问检查 ........................... 210
7.4.1 对象类型访问检查 ......... 211
7.4.2 集中访问策略 ................. 216
7.5 示例实践 ................................... 221
7.5.1 使用Get-PSGrantedAccess命令 ..................... 221
7.5.2 计算资源的授予访问权限 ......................... 223
7.6 总结 ........................................... 224
第8章 访问检查的其他应用场景 ........... 225
8.1 遍历检查 ................................... 225
8.1.1 SeChangeNotifyPrivilege特权 ....................... 226
8.1.2 受限检查 ......................... 227
8.2 句柄复制的访问检查 ............... 228
8.3 沙箱令牌检查 ........................... 231
8.4 自动化访问检查 ....................... 233
8.5 示例实践 ................................... 236
8.5.1 简化对象的访问检查 ..... 236
8.5.2 查找可写的Section对象 ................................. 236
8.6 总结 ........................................... 237
第9章 安全审计 ....................................... 238
9.1 安全事件日志 ........................... 238
9.1.1 配置系统审计策略 ......... 239
9.1.2 配置每用户的审计策略 .... 241
9.2 审计策略安全 ........................... 242
9.2.1 配置资源的SACL .......... 244
9.2.2 配置全局SACL .............. 247
9.3 示例实践 ................................... 248
9.3.1 验证审计访问的安全性 ... 248
9.3.2 查找包含审计ACE的资源 ................................. 249
9.4 总结 ........................................... 250
第 10章 Windows身份验证 ................... 251
10.1 域身份验证 ............................. 251
10.1.1 本地身份验证 ............... 252
10.1.2 企业网络域 ................... 252
10.1.3 域林 ............................... 253
10.2 本地域配置 ............................. 255
10.2.1 用户数据库 ................... 256
10.2.2 LSA策略数据库 .......... 259
10.3 远程LSA服务 ....................... 261
10.3.1 SAM远程服务 ............. 262
10.3.2 域策略远程服务 ........... 267
10.4 SAM和SECURITY数据库 ... 272
10.4.1 通过注册表访问SAM数据库 ....................... 273
10.4.2 查看SECURITY数据库 ....................... 281
10.5 示例实践 ................................. 283
10.5.1 RID循环遍历 ............... 283
10.5.2 强制用户更改密码 ....... 284
10.5.3 提取所有本地用户哈希...................... 285
10.6 总结 ......................................... 287
第 11章 活动目录 ..................................... 288
11.1 活动目录简史 ......................... 288
11.2 使用PowerShell探索活动目录域............................ 289
11.2.1 远程服务器管理工具 ... 289
11.2.2 林和域的基本信息 ....... 290
11.2.3 用户 ............................... 291
11.2.4 组 ................................... 292
11.2.5 计算机 ........................... 293
11.3 对象和可分辨名称 ................. 294
11.3.1 枚举目录对象 ............... 295
11.3.2 访问其他域中的对象 ... 297
11.4 架构 ......................................... 298
11.4.1 查看架构 ....................... 299
11.4.2 访问安全属性 ............... 300
11.5 安全描述符 ............................. 302
11.5.1 查询目录对象的安全描述符 ........................ 302
11.5.2 为新目录对象分配安全描述符 ................ 304
11.5.3 为现有对象分配安全描述符 .................... 307
11.5.4 检查安全描述符的继承安全来源 ....................... 309
11.6 访问检查 ................................. 309
11.6.1 创建对象 ....................... 310
11.6.2 删除对象 ....................... 312
11.6.3 列出对象 ....................... 312
11.6.4 读取和写入属性 ........... 313
11.6.5 检查多个属性 ............... 314
11.6.6 分析属性集 ................... 315
11.6.7 检查控制访问权限 ....... 319
11.6.8 分析验证写入访问权限 ........................... 320
11.6.9 访问SELF SID .............. 321
11.6.10 执行额外的安全检查 .... 322
11.7 声明与集中访问策略 ............. 324
11.8 组策略 ..................................... 326
11.9 示例实践 ................................. 328
11.9.1 构建授权上下文 ........... 328
11.9.2 收集对象信息 ............... 331
11.9.3 执行访问检查 ............... 332
11.10 总结 ....................................... 336
第 12章 交互式身份验证 ......................... 337
12.1 创建用户桌面 ......................... 337
12.2 LsaLogonUser API .................. 339
12.2.1 本地身份验证 ............... 340
12.2.2 域身份验证 ................... 341
12.2.3 登录会话和控制台会话 ............................... 343
12.2.4 令牌创建 ....................... 345
12.3 从PowerShell中调用LsaLogonUser API .................. 347
12.4 使用令牌创建新进程 ............. 349
12.5 服务登录类型 ......................... 350
12.6 示例实践 ................................. 351
12.6.1 测试权限和登录账户权限 ............................... 352
12.6.2 在其他控制台会话中创建进程 ....................... 353
12.6.3 虚拟账户身份验证 ....... 354
12.7 总结 ......................................... 356
第 13章 网络身份验证 ............................ 357
13.1 NTLM网络身份验证 ............. 358
13.1.1 使用PowerShell实现NTLM身份验证 ........... 359
13.1.2 密码学衍生过程 ........... 365
13.1.3 直通身份验证 ............... 367
13.1.4 本地环回身份验证 ....... 368
13.1.5 替代客户端凭据 ........... 370
13.2 NTLM中继攻击 ..................... 371
13.2.1 攻击概述 ....................... 372
13.2.2 活动服务器质询 ........... 373
13.2.3 签名和密封 ................... 373
13.2.4 目标名称 ....................... 375
13.2.5 通道绑定 ....................... 376
13.3 示例实践 ................................. 377
13.3.1 概述 ............................... 377
13.3.2 代码模块 ....................... 378
13.3.3 服务器实现 ................... 381
13.3.4 客户端实现 ................... 383
13.3.5 NTLM身份验证测试 ... 385
13.4 总结 ........................................ 386
第 14章 Kerberos .................................... 387
14.1 使用Kerberos进行交互式身份验证 ........................... 387
14.1.1 初始用户身份验证 ....... 388
14.1.2 网络服务身份验证 ....... 392
14.2 在PowerShell中执行Kerberos身份验证 .................... 394
14.3 解密AP-REQ消息 ................. 397
14.4 解密AP-REP消息 ................. 403
14.5 跨域身份验证 ......................... 405
14.6 Kerberos委派 ......................... 406
14.6.1 无约束委派 ................... 407
14.6.2 约束委派 ....................... 411
14.7 用户对用户Kerberos身份验证 ................................ 416
14.8 示例实践 ................................. 419
14.8.1 查询Kerberos票据缓存 ............................... 419
14.8.2 简单的Kerberoasting攻击 ......................... 420
14.9 总结 ......................................... 422
第 15章 协商身份验证与其他安全包 ..... 423
15.1 安全缓冲区 ............................. 423
15.1.1 在身份验证上下文中使用缓冲区 ................... 424
15.1.2 在签名与密封中使用缓冲区 ........................... 425
15.2 协商协议 ................................. 426
15.3 不常见的安全包 ..................... 428
15.3.1 安全通道 ....................... 428
15.3.2 CredSSP ......................... 432
15.4 远程凭据防护与受限管理员模式 ........................ 434
15.5 凭证管理器 ............................. 435
15.6 额外的请求属性标志 ............. 438
15.6.1 匿名会话 ....................... 438
15.6.2 身份令牌 ....................... 439
15.7 LowBox令牌下网络身份验证 .............................. 440
15.7.1 使用企业身份验证功能进行身份验证 .............. 441
15.7.2 对已知Web代理进行身份验证 ............................ 441
15.7.3 使用显式凭据进行身份验证 ....................... 442
15.8 身份验证审计事件日志 ......... 444
15.9 示例实践 ................................. 447
15.9.1 确定身份验证失败的原因 ....................... 447
15.9.2 使用安全通道提取服务器的TLS证书 .................. 450
15.10 总结 ....................................... 452
15.11 最后的思考 ........................... 452
附录A 搭建供测试使用的Windows域网络............................ 453
附录B SDDL SID别名映射 .................... 462