Windows安全內幕:身份驗證、授權與審計(AAA)核心技術詳解

詹姆斯·福肖(James Forshaw)

  • Windows安全內幕:身份驗證、授權與審計(AAA)核心技術詳解-preview-1
Windows安全內幕:身份驗證、授權與審計(AAA)核心技術詳解-preview-1

買這商品的人也買了...

商品描述

Windows是全球應用廣泛的操作系統,安全機制隨技術發展持續疊代升級。由於系統閉源且采用面向API的架構,其底層安全原理的探究門檻較高,長期是行業內的研究難點。如今Windows安全體系日趨復雜,也成為網絡攻擊的主要目標,深入掌握其安全機制對網絡安全防護至關重要。

本書共分為3部分,第1部分從編程視角梳理Windows操作系統基礎,為後續安全知識學習搭建框架;第2部分聚焦Windows內核核心安全組件——安全參考監視器,詳解訪問控制全流程相關原理與實現;第3部分深入剖析Windows身份驗證體系,涵蓋身份驗證結構、各類驗證協議及安全包等關鍵內容,並配套PowerShell實操示例助力理解。此外,本書還有兩個附錄,提供了Windows安全相關的配置細節和擴展學習資源。

本書面向所有從事Windows安全相關工作的專業人員,包括希望保障產品安全性的Windows軟件開發人員、負責企業級Windows安全防護的系統管理員,以及致力於挖掘操作系統安全漏洞的安全研究人員,是學習Windows安全內核知識、開展相關研究與實踐的實用參考資料。

作者簡介

James Forshaw(詹姆斯·福肖),Google Project Zero團隊的知名計算機安全專家,擁有超過20年的微軟Windows及其他產品安全問題分析與漏洞利用研究經驗,已在微軟平臺上發現數百個公開披露的漏洞。他的研究成果常被業界廣泛引用,並通過博客、國際頂級安全會議演講以及原創工具進行呈現,深刻影響並啟發了眾多業內研究人員。在從事漏洞挖掘與安全突破研究之余,James也以防禦者的身份,為多個團隊提供安全設計咨詢,並參與優化Chromium在 Windows平臺上的沙箱機制,為全球數十億用戶提供安全保障。

 

目錄大綱

第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