【干貨】徹底理解Windows認(rèn)證
在內(nèi)部分享的《徹底理解Windows認(rèn)證》議題解讀,本次議題圍繞著Windows認(rèn)證分別講解了:
- Pass The Hash
- Silver Tickets、Golden Tickets、
- Impersonation Token
這些技術(shù)分別能夠滿足我們?cè)跐B透中持續(xù)的維持權(quán)限、提權(quán)。
https://youtu.be/-FgWkU5awQE
0x00 本地認(rèn)證
- 本地認(rèn)證基礎(chǔ)知識(shí)
- NTLM Hash與NTLM
- NTLM Hash的產(chǎn)生
- 本地認(rèn)證流程
- LM Hash
0x01 網(wǎng)絡(luò)認(rèn)證
- NTLM 協(xié)議
- Chalenge/Response
- NTLM V2協(xié)議
- Pass The Hash
0x02 Kerberos域認(rèn)證
- Active Directory(活動(dòng)目錄)概念
- Active Directory(活動(dòng)目錄)功能
- 域認(rèn)證體系 - Kerbroes
- 域認(rèn)證所參與的角色 (三只狗頭)
- 域認(rèn)證粗略流程
- 域認(rèn)證
- 白銀票據(jù)(Silver Tickets)
- 偽造白銀票據(jù)(Silver Tickets)
- 白銀票據(jù)(Silver Tickets)演示
- 白銀票據(jù)(Silver Tickets)防御
- 黃金票據(jù)(Golden Tickets)
- 黃金票據(jù)(Golden Tickets)-MSF kiwi
- 黃金票據(jù)(Golden Tickets) - 偽造
- 黃金票據(jù)(Golden Tickets) - 演示
- Tickets 總結(jié)
0x03 Windows Access Token
- Windows Access Token 簡(jiǎn)介
- Windows Access Token組成
- Windows Access Token – SID (Security Identifiers)安全標(biāo)識(shí)符
- Windows Access Token產(chǎn)生過程
- Windows Access Token令牌假冒實(shí)戰(zhàn)
- Windows Access Token令牌假冒實(shí)戰(zhàn)
- Windows Access Token令牌假冒防御
0x04 知識(shí)點(diǎn)總結(jié)
0x00 本地認(rèn)證
本地認(rèn)證基礎(chǔ)知識(shí)
在本地登錄Windows的情況下,操作系統(tǒng)會(huì)使用用戶輸入的密碼作為憑證去與系統(tǒng)中的密碼進(jìn)行驗(yàn)證,但是操作系統(tǒng)中的密碼存儲(chǔ)在哪里呢?
%SystemRoot%\system32\config\sam
當(dāng)我們登錄系統(tǒng)的時(shí)候,系統(tǒng)會(huì)自動(dòng)地讀取SAM文件中的“密碼”與我們輸入的“密碼”進(jìn)行比對(duì),如果相同,證明認(rèn)證成功!
這個(gè)SAM文件中保留了計(jì)算機(jī)本地所有用戶的憑證信息,可以理解為是一個(gè)數(shù)據(jù)庫(kù)。
上面認(rèn)證的過程只是粗略的說法,整個(gè)認(rèn)證過程并沒有那么簡(jiǎn)單,從操作系統(tǒng)的角度來看,還是需要鋪墊很多概念的。
Windows本身不保存明文密碼,只保留密碼的Hash。
Hash,一般翻譯做“散列”,也有直接音譯為“哈希”的,就是把任意長(zhǎng)度的輸入(又叫做預(yù)映射pre-image)通過散列算法變換成固定長(zhǎng)度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,所以不可能從散列值來確定唯一的輸入值。簡(jiǎn)單的說就是一種將任意長(zhǎng)度的消息壓縮到某一固定長(zhǎng)度的消息摘要的函數(shù)。 – Baidu
為了保證存儲(chǔ)的不是明文,從而采用Hash,但是密碼Hash也需要特定的生成算法以及表現(xiàn)形式。
NTLM Hash與NTLM
在Windows中,密碼Hash目前稱之為NTLM Hash,其中NTLM全稱是:“NT LAN Manager”。
這個(gè)NTLM是一種網(wǎng)絡(luò)認(rèn)證協(xié)議,與NTLM Hash的關(guān)系就是:NTLM網(wǎng)絡(luò)認(rèn)證協(xié)議是以NTLM Hash作為根本憑證進(jìn)行認(rèn)證的協(xié)議。
也就是說,NTLM與NTLM Hash相互對(duì)應(yīng)。
在本地認(rèn)證的過程中,其實(shí)就是將用戶輸入的密碼轉(zhuǎn)換為NTLM Hash與SAM中的NTLM Hash進(jìn)行比較。
NTLM Hash的產(chǎn)生
假設(shè)我的密碼是admin,那么操作系統(tǒng)會(huì)將admin轉(zhuǎn)換為十六進(jìn)制,經(jīng)過Unicode轉(zhuǎn)換后,再調(diào)用MD4加密算法加密,這個(gè)加密結(jié)果的十六進(jìn)制就是NTLM Hash
- admin -> hex(16進(jìn)制編碼) = 61646d696e
- 61646d696e -> Unicode = 610064006d0069006e00
- 610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
本地認(rèn)證流程
- winlogon.exe -> 接收用戶輸入 -> lsass.exe -> (認(rèn)證)
首先,用戶注銷、重啟、鎖屏后,操作系統(tǒng)會(huì)讓winlogon顯示登錄界面,也就是輸入框,接收輸入后,將密碼交給lsass進(jìn)程,這個(gè)進(jìn)程中會(huì)存一份明文密碼,將明文密碼加密成NTLM Hash,對(duì)SAM數(shù)據(jù)庫(kù)比較認(rèn)證。
- Windows Logon Process(即 winlogon.exe),是Windows NT 用戶登 陸程序,用于管理用戶登錄和退出。
- LSASS用于微軟Windows系統(tǒng)的安全機(jī) 制。它用于本地安全和登陸策略。
LM Hash
在NTLM協(xié)議問世之前,它對(duì)前身就是LM(LAN Manager)協(xié)議。
LM與NTLM協(xié)議的認(rèn)證機(jī)制相同,但是加密算法不同。
目前大多數(shù)的Windows都采用NTLM協(xié)議認(rèn)證,LM協(xié)議已經(jīng)基本淘汰了。
LM協(xié)議認(rèn)證過程中需要LM Hash作為根本憑證進(jìn)行參與認(rèn)證,下面就簡(jiǎn)述一些LM Hash的產(chǎn)生:
- 將所有小寫字母轉(zhuǎn)換為大寫字母• >123ABC // 未達(dá)到7個(gè)字符• 將密碼轉(zhuǎn)化為16進(jìn)制,分兩組,填充為14個(gè)字符,空余位使用0x00字符填補(bǔ)>31323341424300000000000000• 將密碼分割為兩組7個(gè)字節(jié)的塊
- >31323341424300 00000000000000 // 16進(jìn)制• 將每組轉(zhuǎn)化為比特流,不足56Bit則在左邊加0• >31323341424300 ->(轉(zhuǎn)換為二進(jìn)制) 110001001100100011001101000001010000100100001100000000-> (補(bǔ) 足56Bit)
- 00110001001100100011001101000001010000100100001100000000• 將比特流按照7比特一組,分出8組,末尾加0由于后者都為0,結(jié)果可想而知,那就都是0;
- 將每組比特流轉(zhuǎn)換為16進(jìn)制作為被加密的值,使用DES加密,字符串 “KGS!@#$%”為Key(0x4B47532140232425),得到8個(gè)結(jié)果 ,每個(gè) 結(jié)果轉(zhuǎn)換為16進(jìn)制。• -> 00110000100110001000110001101000000101000001001000001100
- 00000000• ->30988C6814120C00 -> DES(30988C6814120C00) -> 48-D7-EB-91- 2F-5E-69-7C
- 由于我們的密碼不超過7字節(jié),所以后面的一半是固定的:
- AA-D3-B4-35-B5-14-04-EE
- 連接兩個(gè)DES加密字符串。這是LM哈希。
- 48-D7-EB-91-2F-5E-69-7C-AA-D3-B4-35-B5-14-04-EE
在上面的產(chǎn)生過程中,脆弱點(diǎn)就在于DES的Key(KGS!@#$%)是固定的,也就是說,有了Key就能夠解出原文。
并且根據(jù)LM Hash特征,也能夠判斷用戶的密碼是否是大于等于7位。
0x01 網(wǎng)絡(luò)認(rèn)證
在內(nèi)網(wǎng)滲透中,經(jīng)常遇到工作組環(huán)境,而工作組環(huán)境是一個(gè)邏輯 上的網(wǎng)絡(luò)環(huán)境(工作區(qū)),隸屬于工作組的機(jī)器之間無(wú)法互相建 立一個(gè)完美的信任機(jī)制,只能點(diǎn)對(duì)點(diǎn),是比較落后的認(rèn)證方式, 沒有信托機(jī)構(gòu)。
假設(shè)A主機(jī)與B主機(jī)屬于同一個(gè)工作組環(huán)境,A想訪問B主機(jī)上的資料,需要將一個(gè)存在于B主機(jī)上的賬戶憑證發(fā)送至B主機(jī),經(jīng)過認(rèn)證才能夠訪問B主機(jī)上的資源。
這是我們接觸比較多的SMB共享文件的案例,SMB的默認(rèn)端口是445。
早期SMB協(xié)議在網(wǎng)絡(luò)上傳輸明文口令。后來出現(xiàn) LAN Manager Challenge/Response 驗(yàn)證機(jī)制,簡(jiǎn)稱LM,它是如此簡(jiǎn)單以至很容易就被破解,現(xiàn)在又有了NTLM以及Kerberos。
NTLM協(xié)議
NTLM是一種網(wǎng)絡(luò)認(rèn)證協(xié)議,它是基于挑戰(zhàn)(Chalenge)/響應(yīng)(Response)認(rèn)證機(jī)制的一種認(rèn)證模式。
這個(gè)協(xié)議只支持Windows
Chalenge/Response
NTLM協(xié)議的認(rèn)證過程分為三步:
- 協(xié)商
- 質(zhì)詢
- 驗(yàn)證
協(xié)商:主要用于確認(rèn)雙方協(xié)議版本
質(zhì)詢:就是挑戰(zhàn)(Chalenge)/響應(yīng)(Response)認(rèn)證機(jī)制起作用的范疇,本小節(jié)主要討論這個(gè)機(jī)制的運(yùn)作流程。
驗(yàn)證:驗(yàn)證主要是在質(zhì)詢完成后,驗(yàn)證結(jié)果,是認(rèn)證的最后一步。
質(zhì)詢的完整過程:
1.客戶端向服務(wù)器端發(fā)送用戶信息(用戶名)請(qǐng)求
2.服務(wù)器接受到請(qǐng)求,生成一個(gè)16位的隨機(jī)數(shù),被稱之為“Challenge”, 使用登錄用戶名對(duì)應(yīng)的NTLM Hash加密Challenge(16位隨機(jī)字符), 生成Challenge1。同時(shí),生成Challenge1后,將Challenge(16位隨機(jī) 字符)發(fā)送給客戶端。
3.客戶端接受到Challenge后,使用將要登錄到賬戶對(duì)應(yīng)的NTLM Hash加密Challenge生成Response,然后將Response發(fā)送至服務(wù)器端。
其中,經(jīng)過NTLM Hash加密Challenge的結(jié)果在網(wǎng)絡(luò)協(xié)議中稱之為Net NTLM Hash。
驗(yàn)證: 服務(wù)器端收到客戶端的Response后,比對(duì)Chanllenge1與Response是否相等,若相等,則認(rèn)證通過。
使用另外一種方式解讀:
1.Server接收到Client發(fā)送的用戶名后,判斷本地賬戶列 表是否有用戶名share_user
- 如果沒有,返回認(rèn)證失敗
- 如果有,生成Chanllenge,并且從本地查找share_user對(duì) 應(yīng)的NTLM Hash,使用NTLM Hash加密Chanllenge,生成一 個(gè)Net-NTLM Hash存在內(nèi)存中,并將Chanllenge發(fā)送給Client。
2.Client接收到Chanllenge后,將自己提供的share_user的密碼轉(zhuǎn)換為NTLM Hash,使用NTLM Hash加密Chanllenge, 這個(gè)結(jié)果叫Response,表現(xiàn)形式是Net-NTLM Hash,最后將Response發(fā)送給Server。
3.Server接收到Client發(fā)送的Response,將Response與之 前的Net-NTLM Hash進(jìn)行比較,如果相等,則認(rèn)證通過。
注意:
1.Chanllenge是Server產(chǎn)生的一個(gè)16字節(jié)的隨機(jī)數(shù),每次認(rèn)證都不同
2.Response的表現(xiàn)形式是Net-NTLM Hash,它是由客戶端 提供的密碼Hash加密Server返回的Chanllenge產(chǎn)生的結(jié)果。
NTLM V2協(xié)議
NTLM v1與NTLM v2最顯著的區(qū)別就是Challenge與加密算法不同,共同點(diǎn)就是加密的原料都是NTLM Hash。
下面細(xì)說一下有什么不同:
- Challage:NTLM v1的Challenge有8位,NTLM v2的Challenge為16位。
- Net-NTLM Hash:NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。
現(xiàn)在應(yīng)該能夠理解什么是NTLM、NTLM Hash、LM、LM Hash、Net NTLM Hash了吧?
Pass The Hash
在內(nèi)網(wǎng)滲透中,我們經(jīng)常會(huì)需要抓取管理員的密碼、NTLM Hash,通過搜集這些信息有助于我們擴(kuò)大戰(zhàn)果,尤其是在域環(huán)境下。
- 什么是哈希傳遞?
- 哈希傳遞是能夠在不需要賬戶明文密碼的情況下完成認(rèn)證的一個(gè)技術(shù)。
- 哈希傳遞的作用?
解決了我們滲透中獲取不到明文密碼、破解不了NTLM Hash而又 想擴(kuò)大戰(zhàn)果的問題。
- Pass The Hash - 必要條件
- 哈希傳遞需要被認(rèn)證的主機(jī)能夠訪問到服務(wù)器(廢話)
- 哈希傳遞需要被傳遞認(rèn)證的用戶名
- 哈希傳遞需要被傳遞認(rèn)證用戶的NTLM Hash
要完成一個(gè)NTLM認(rèn)證,第一步需要客戶端將自己要參與認(rèn)證的 用戶名發(fā)送至服務(wù)器端,等待服務(wù)器端給出的Challenge⋯⋯
其實(shí)哈希傳遞就是使用用戶名對(duì)應(yīng)的NTLM Hash將服務(wù)器給出的 Chanllenge加密,生成一個(gè)Response,來完成認(rèn)證。
Pass The Hash能夠完成一個(gè)不需要輸入密碼的NTLM協(xié)議認(rèn)證流程,所以不算是一個(gè)漏洞,算是一個(gè)技巧。
Pass The Hash的工具:
- Smbmap
- CrackMapExec
- Smbexec
- Metasploit
使用CrackMapExec實(shí)現(xiàn)Hash傳遞:
- root@kali:~/cache# cme smb 192.168.3.5 -u administrator -H dab7de8feeb5ecac65faf9fdc6cac3a9 -x whoami
- SMB 192.168.3.5 445 LIYINGZHEA30B
- [*] Windows 7 Ultimate 7601 Service Pack 1 x64 (name:LIYINGZHEA30B)
- (domain:PAYLOADS) (signing:False) (SMBv1:True)
- SMB 192.168.3.5 445 LIYINGZHEA30B
- [+] PAYLOADS\administrator dab7de8feeb5ecac65faf9fdc6cac3a9
- (Pwn3d!)SMB 192.168.3.5 445 LIYINGZHEA30B [+] Executed command
0x02 Kerberos域認(rèn)證
Active Directory(活動(dòng)目錄)概念
Windows提供了為企業(yè)管理資產(chǎn)、服務(wù)、網(wǎng)絡(luò)對(duì)象進(jìn)行組織化的管理,這非常符合企業(yè)架構(gòu)的管理模式。而承載這些管理機(jī)制的就是活動(dòng)目錄服務(wù)。如果要搭建一個(gè)域,就需要安裝活動(dòng)目錄服務(wù),當(dāng)然,這個(gè)不在我們的討論范圍。
活動(dòng)目錄服務(wù)以域名來劃分域的邊界,域外就不屬于管理范圍了,也就是說,一個(gè)域?qū)?yīng)一個(gè)域名,域之間也可以相互信任。
- Active Directory存儲(chǔ)了有關(guān)網(wǎng)絡(luò)對(duì)象的信息,并且讓管理員和用 戶能夠輕松地查找和使用這些信息。Active Directory使用了一種 結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)方式,并以此作為基礎(chǔ)對(duì)目錄信息進(jìn)行合乎邏 輯的分層組織。
- 網(wǎng)絡(luò)對(duì)象分為:用戶、用戶組、計(jì)算機(jī)、域、組織單位以及安全 策略等。
Active Directory(活動(dòng)目錄)功能
- 服務(wù)器及客戶端計(jì)算機(jī)管理:管理服務(wù)器及客戶端計(jì)算機(jī)賬戶, 所有服務(wù)器及客戶端計(jì)算機(jī)加入域管理并實(shí)施組策略。
- 用戶服務(wù):管理用戶域賬戶、用戶信息、企業(yè)通訊錄(與電子郵 件系統(tǒng)集成)、用戶組管理、用戶身份認(rèn)證、用戶授權(quán)管理等, 按省實(shí)施組管理策略。
- 資源管理:管理打印機(jī)、文件共享服務(wù)等網(wǎng)絡(luò)資源。
- 桌面配置:系統(tǒng)管理員可以集中的配置各種桌面配置策略,如: 用戶使用域中資源權(quán)限限制、界面功能的限制、應(yīng)用程序執(zhí)行特 征限制、網(wǎng)絡(luò)連接限制、安全配置限制等。
- 應(yīng)用系統(tǒng)支撐:支持財(cái)務(wù)、人事、電子郵件、企業(yè)信息門戶、辦 公自動(dòng)化、補(bǔ)丁管理、防病毒系統(tǒng)等各種應(yīng)用系統(tǒng)。
在域中,網(wǎng)絡(luò)對(duì)象可以相互訪問,但是在真實(shí)情況中,需要對(duì)某些部門的計(jì)算機(jī)進(jìn)行限制,例如:銷售部門不能訪問技術(shù)部門的服務(wù)器。
這個(gè)中間就需要Kerberos認(rèn)證協(xié)議來驗(yàn)證網(wǎng)絡(luò)對(duì)象間的權(quán)限。
域認(rèn)證體系 - Kerbroes
Kerberos 是一種網(wǎng)絡(luò)認(rèn)證協(xié)議,其設(shè)計(jì)目標(biāo)是通過密鑰系統(tǒng)為客 戶機(jī) / 服務(wù)器應(yīng)用程序提供強(qiáng)大的認(rèn)證服務(wù)。該認(rèn)證過程的實(shí)現(xiàn)不 依賴于主機(jī)操作系統(tǒng)的認(rèn)證,無(wú)需基于主機(jī)地址的信任,不要求 網(wǎng)絡(luò)上所有主機(jī)的物理安全,并假定網(wǎng)絡(luò)上傳送的數(shù)據(jù)包可以被 任意地讀取、修改和插入數(shù)據(jù)。在以上情況下, Kerberos 作為一 種可信任的第三方認(rèn)證服務(wù),是通過傳統(tǒng)的密碼技術(shù)(如:共享 密鑰)執(zhí)行認(rèn)證服務(wù)的。
域認(rèn)證所參與的角色 (三只狗頭)
Kerberos的標(biāo)志是三只狗頭,狗頭分別代表以下角色:
- Client
- Server
- KDC(Key Distribution Center) = DC(Domain Controller)
Kerberos認(rèn)證協(xié)議的基礎(chǔ)概念:
票據(jù)(Ticket):是網(wǎng)絡(luò)對(duì)象互相訪問的憑證。 TGT(Ticket Granting Ticket):入場(chǎng)券,通過入場(chǎng)券能夠獲得票據(jù),是一種臨時(shí)憑證的存在。
KDC負(fù)責(zé)管理票據(jù)、認(rèn)證票據(jù)、分發(fā)票據(jù),但是KDC不是一個(gè)獨(dú)立的服務(wù),它由以下服務(wù)組成:
- Authentication Service: 為client生成TGT的服務(wù)
- Ticket Granting Service: 為client生成某個(gè)服務(wù)的ticket
另外還需要介紹一個(gè)類似于本機(jī)SAM的一個(gè)數(shù)據(jù)庫(kù):AD,全稱叫account database,存儲(chǔ)所有client的白名單,只有存 在于白名單的client才能順利申請(qǐng)到TGT。
從物理層面看,AD與KDC均為域控制器(Domain Controller)。
域認(rèn)證粗略流程
- client向kerberos服務(wù)請(qǐng)求,希望獲取訪問server的權(quán)限。 kerberos得到了這個(gè)消息,首先得判斷client是否是可信賴的, 也就是白名單黑名單的說法。這就是AS服務(wù)完成的工作,通過 在AD中存儲(chǔ)黑名單和白名單來區(qū)分client。成功后,返回AS返 回TGT給client。
- client得到了TGT后,繼續(xù)向kerberos請(qǐng)求,希望獲取訪問 server的權(quán)限。kerberos又得到了這個(gè)消息,這時(shí)候通過client 消息中的TGT,判斷出了client擁有了這個(gè)權(quán)限,給了client訪 問server的權(quán)限ticket。
- client得到ticket后,終于可以成功訪問server。這個(gè)ticket只是 針對(duì)這個(gè)server,其他server需要向TGS申請(qǐng)。
域認(rèn)證
首先,客戶端需要發(fā)送自己的身份信息到KDC,身份信息中起碼包含用戶名,KDC根據(jù)用戶名在AD中尋找是否在白名單中,然后根據(jù)用戶名提取到對(duì)應(yīng)的NTLM Hash。
KDC此時(shí)生成一個(gè)隨機(jī)字符串,叫Session Key,使用用戶名對(duì)應(yīng)的NTLM Hash加密Session Key,作為AS數(shù)據(jù),使用KDC中某個(gè)用戶的NTLM Hash加密Session Key和客戶端的信息,生成TGT。
- Session Key用于客戶端向TGS服務(wù)通信。
- 域內(nèi)所有網(wǎng)絡(luò)對(duì)象的憑證都在AD中保存
- KDC中某個(gè)用戶指的是krbtgt
數(shù)據(jù)結(jié)構(gòu):
其中,TGT的到期時(shí)間為8小時(shí),如果超過了8小時(shí),還需要重新申請(qǐng)TGT,不能之間進(jìn)入下一步獲取Ticket。
Kerberos是一個(gè)假設(shè)網(wǎng)絡(luò)環(huán)境不安全的情況下能夠正常進(jìn)行認(rèn)證工作的協(xié)議。
第一步中,KDC返回的TGT客戶端是無(wú)法解密的,因?yàn)樗鼪]有KDC Hash,如果有,我們就可以偽造黃金票據(jù),這個(gè)是后話了。
第二步客戶端需要提供TGT與第一步中使用自己NTLM Hash解密出來的Session Key加密的客戶端信息跟時(shí)間戳。
如果假設(shè)這個(gè)數(shù)據(jù)被中間人竊取到,也無(wú)法在段時(shí)間內(nèi)破解,因?yàn)镵DC會(huì)校驗(yàn)時(shí)間戳。
KDC接到TGT與其他內(nèi)容后,會(huì)首先解密TGT,只有KDC可以解密TGT,從TGT中提取到Session Key,再使用Session Key解密其他內(nèi)容,解密出來的內(nèi)容同TGT中的信息進(jìn)行校驗(yàn)來確認(rèn)客戶端是否受信。
驗(yàn)證通過后,就會(huì)生成一個(gè)新的Session Key,我們稱之為Server Session Key,這個(gè)Server Session Key主要用于和服務(wù)器進(jìn)行通信。同時(shí)還會(huì)生成一個(gè)Ticket,也就是最后的票據(jù)了。
Ticket組成如下:
Server Hash:這個(gè)Hash是在AD中服務(wù)器計(jì)算機(jī)的NTLM Hash
在第三步里,客戶端向服務(wù)器請(qǐng)求,需要提供Ticket,Server Session Key加密的客戶端信息與時(shí)間戳。
- Ticket客戶端無(wú)法解密
- 服務(wù)器端通過解密Ticket解密Server Session Key(Client info + Timestamp)
- 比較時(shí)間長(zhǎng)度
校驗(yàn)通過后,認(rèn)證成功,該票據(jù)會(huì)一直存在客戶端內(nèi)存中。
白銀票據(jù)(Silver Tickets)
白銀票據(jù)特點(diǎn):
- 1.不需要與KDC進(jìn)行交互
- 2.需要目標(biāo)服務(wù)的NTLM Hash
在第三步認(rèn)證中的Ticket的組成:
- Ticket=Server Hash(Server Session Key+Client info+End Time)
當(dāng)擁有Server Hash時(shí),我們就可以偽造一個(gè)不經(jīng)過KDC認(rèn)證的一個(gè)Ticket。
PS:Server Session Key在未發(fā)送Ticket之前,服務(wù)器是不知道Server Session Key是什么的。 所以,一切憑據(jù)都來源于Server Hash。
偽造白銀票據(jù)(Silver Tickets)
首先需要導(dǎo)出Server Hash:
- C:\files>mimikatz.exe "privilege::debug” "sekurlsa::logonpasswords" "exit" > log.txt
偽造票據(jù):
- mimikatz “kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目標(biāo)服務(wù)器主機(jī)名> /service:<服務(wù)類型> /rc4: /user:<用戶名> /ptt" exit
Other:
- kerberos::list #列出票據(jù)
- kerberos::purge # 清除票據(jù)
由于白銀票據(jù)需要目標(biāo)服務(wù)器的Hash,所以沒辦法生成對(duì)應(yīng)域內(nèi) 所有服務(wù)器的票據(jù),也不能通過TGT申請(qǐng)。因此只能針對(duì)服務(wù)器 上的某些服務(wù)去偽造,偽造的服務(wù)類型列表如下:
白銀票據(jù)(Silver Tickets)演示
https://rvn0xsy.oss-cn-shanghai.aliyuncs.com/2018-11-30/kerberos_stgt.mp4
白銀票據(jù)(Silver Tickets)防御
- 1.盡量保證服務(wù)器憑證不被竊取
- 2.開啟PAC (Privileged Attribute Certificate) 特權(quán)屬性證書保護(hù) 功能,PAC主要是規(guī)定服務(wù)器將票據(jù)發(fā)送給kerberos服務(wù),由 kerberos服務(wù)驗(yàn)證票據(jù)是否有效。
開啟方式:
將注冊(cè)表中
- HKEY_LOCAL_MACHINE\SYSTEM \ CurrentControlSet\Control\Lsa\Kerberos\Parameters
中的ValidateKdcPacSignature設(shè)置為1。
黃金票據(jù)(Golden Tickets)
黃金票據(jù)特點(diǎn):
- 1.需要與DC通信
- 2.需要krbtgt用戶的hash
PS:這里的krbtgt hash就是之前講的KDC Hash
黃金票據(jù)(Golden Tickets)-MSF kiwi
使用meterpreter中的kiwi模塊:
load kiwi
創(chuàng)建票據(jù):
注入到內(nèi)存:
使用wmic在目標(biāo)服務(wù)器上創(chuàng)建一個(gè)進(jìn)程:
黃金票據(jù)(Golden Tickets) - 偽造
偽造票據(jù):
- mimikatz “kerberos::golden /domain:<域名> /sid:<域SID> /rc4: /user:<任意用戶名> /ptt" exit
黃金票據(jù)(Golden Tickets) - 演示
https://rvn0xsy.oss-cn-shanghai.aliyuncs.com/2018-11-30/kerberos_gtgt.mp4
Tickets 總結(jié)
黃金票據(jù):從攻擊面來看,獲取krbtgt用戶的hash后,可以在域中 進(jìn)行持久性的隱藏,并且日志無(wú)法溯源,但是需要拿到DC權(quán)限, 使用黃金票據(jù)能夠在一個(gè)域環(huán)境中長(zhǎng)時(shí)間控制整個(gè)域。
從防御角度來看,需要經(jīng)常更新krbtgt的密碼,才能夠使得原有的 票據(jù)失效。最根本的辦法是不允許域管賬戶登錄其他服務(wù)器。
白銀票據(jù):從攻擊面來看,偽造白銀票據(jù)的難度比偽造黃金票據(jù)的 難度較小,因?yàn)橐粋€(gè)域中的服務(wù)器如果對(duì)外的話,非常容易被入侵, 并且容易被轉(zhuǎn)儲(chǔ)Server。
從防御角度來看,需要開啟PAC認(rèn)證,但這會(huì)降低認(rèn)證效率,增加 DC的負(fù)擔(dān),最根本的還是要加固服務(wù)器本身對(duì)外的服務(wù)。
0x03 Windows Access Token
01Windows Access Token 簡(jiǎn)介
Windows Token其實(shí)叫Access Token(訪問令牌),它是一個(gè)描 述進(jìn)程或者線程安全上下文的一個(gè)對(duì)象。不同的用戶登錄計(jì)算機(jī)后, 都會(huì)生成一個(gè)Access Token,這個(gè)Token在用戶創(chuàng)建進(jìn)程或者線程 時(shí)會(huì)被使用,不斷的拷貝,這也就解釋了A用戶創(chuàng)建一個(gè)進(jìn)程而該 進(jìn)程沒有B用戶的權(quán)限。
Access Token種類:
- 主令牌
- 模擬令牌
一般情況下,用戶雙擊運(yùn)行一個(gè)程序,都會(huì)拷貝“explorer.exe”的Access Token。
當(dāng)用戶注銷后,系統(tǒng)將會(huì)使主令牌切換為模擬令牌,不會(huì)將令牌清除,只有在重啟機(jī)器后才會(huì)清除。
02Windows Access Token組成
- 用戶帳戶的安全標(biāo)識(shí)符(SID)
- 用戶所屬的組的SID
- 用于標(biāo)識(shí)當(dāng)前登錄會(huì)話的登錄SID
- 用戶或用戶組所擁有的權(quán)限列表
- 所有者SID
- 主要組的SID
- 訪問控制列表
- 訪問令牌的來源
- 令牌是主要令牌還是模擬令牌
- 限制SID的可選列表
- 目前的模擬等級(jí)
- 其他統(tǒng)計(jì)數(shù)據(jù)
03Windows Access Token
– SID (Security Identifiers)安全標(biāo)識(shí)符
安全標(biāo)識(shí)符是一個(gè)唯一的字符串,它可以代表一個(gè)賬戶、一個(gè)用戶 組、或者是一次登錄。通常它還有一個(gè)SID固定列表,例如 Everyone這種已經(jīng)內(nèi)置的賬戶,默認(rèn)擁有固定的SID。
- SID的表現(xiàn)形式:
- 域SID-用戶ID
- 計(jì)算機(jī)SID-用戶ID
SID列表都會(huì)存儲(chǔ)在域控的AD或者計(jì)算機(jī)本地賬戶數(shù)據(jù)庫(kù)中。
04Windows Access Token產(chǎn)生過程
每個(gè)進(jìn)程創(chuàng)建時(shí)都會(huì)根據(jù)登錄會(huì)話權(quán)限由LSA(Local Security Authority)分配一個(gè)Token(如果CreaetProcess時(shí)自己指定了 Token, LSA會(huì)用該Token, 否則就用父進(jìn)程Token的一份拷貝。
05Windows Access Token令牌假冒實(shí)戰(zhàn)
當(dāng)用戶注銷后,系統(tǒng)將會(huì)使主令牌切換為模擬令牌,不會(huì)將令牌清 除,只有在重啟機(jī)器后才會(huì)清除。
可以使用多種工具查看目前系統(tǒng)上存在的模擬令牌:
- Incognito
- Powershell - Invoke-TokenManipulation.ps1
- Cobalt Strike - steal_token
案例(針對(duì)某跨國(guó)企業(yè)的一次滲透測(cè)試 獲取DC權(quán)限): http://blog.360ec.net/archives/32/
06Windows Access Token令牌假冒實(shí)戰(zhàn)
- meterpreter > getsystem
- meterpreter > load incognito meterpreter > list_tokens –u
- Delegation Tokens Available ============================== NT AUTHORITY\LOCAL SERVICENT AUTHORITY\NETWORK SERVICENT AUTHORITY\SYSTEM PAYLOADS\Administrator PAYLOADS\w7
- meterpreter > impersonate_token "PAYLOADS\\Administrator”
- [+] Delegation token available
- [+] Successfully impersonated user PAYLOADS\Administrator
07Windows Access Token令牌假冒防御
禁止Domain Admins登錄對(duì)外且未做安全加固的服務(wù)器,因?yàn)橐坏┓?wù)器被入侵,域管理員的令牌可能會(huì)被攻擊者假冒,從控制DC。
如果想清除假冒,重啟服務(wù)器即可。
0x04 知識(shí)點(diǎn)總結(jié)
本次議題圍繞著Windows認(rèn)證分別講解了Pass The Hash、Silver Tickets、Golden Tickets、 Impersonation Token的原理。 這些技術(shù)分別能夠滿足我們?cè)跐B透中持續(xù)的維持權(quán)限、提權(quán)。
可拓展:
域滲透技術(shù)/思路,SPN掃描,Red/Blue team
- https://lolbas-project.github.io/
- https://gtfobins.github.io/
- https://github.com/yeyintminthuhtut/Awesome-Red-Teaming