聲明
以下內(nèi)容,均為文章作者原創(chuàng),由于傳播,利用此文所提供的信息而造成的任何直接或間接的后果和損失,均由使用者本人負(fù)責(zé),長白山攻防實驗室以及文章作者不承擔(dān)任何責(zé)任。
長白山攻防實驗室擁有該文章的修改和解釋權(quán)。如欲轉(zhuǎn)載或傳播此文章,必須保證此文章的副本,包括版權(quán)聲明等全部內(nèi)容。聲明長白山攻防實驗室允許,不得任意修改或增減此文章內(nèi)容,不得以任何方式將其用于商業(yè)目的。
0x01?前言
Kerberos 是一種網(wǎng)絡(luò)認(rèn)證協(xié)議,其設(shè)計目標(biāo)是通過密鑰系統(tǒng)為客戶機(jī) / 服務(wù)器應(yīng)用程序提供強(qiáng)大的認(rèn)證服務(wù)。該認(rèn)證過程的實現(xiàn)不依賴于主機(jī)操作系統(tǒng)的認(rèn)證,無需基于主機(jī)地址的信任,不要求網(wǎng)絡(luò)上所有主機(jī)的物理安全,并假定網(wǎng)絡(luò)上傳送的數(shù)據(jù)包可以被任意地讀取、修改和插入數(shù)據(jù)。在以上情況下, Kerberos 作為一種可信任的第三方認(rèn)證服務(wù),是通過傳統(tǒng)的密碼技術(shù)(如:共享密鑰)執(zhí)行認(rèn)證服務(wù)的。

Kerberos認(rèn)證流程簡述:
AS(Authentication Server)= 認(rèn)證服務(wù)器
KDC(Key Distribution Center)= 密鑰分發(fā)中心
TGT(Ticket Granting Ticket)=票據(jù)授權(quán)票據(jù),票據(jù)的票據(jù)
TGS(Ticket Granting Server)=票據(jù)授權(quán)服務(wù)器
SS(Service Server)= 特定服務(wù)提供端
當(dāng)Client想要訪問Server的服務(wù)時,先要向AS發(fā)送能夠證明自己身份的驗證,驗證通過后AS會給Client發(fā)送一個TGT,隨后Client再向TGS去驗證自己的身份通過后,TGS會給Client發(fā)送一個ST,最后是Client和Server做雙向驗證。整體流程分為三個部分:
1.? [Client與AS的交互]?
2.? [Client與TGS的交互]?
3.? [Client與Server雙向驗證]?
0x02?Client與AS之間的交互
一、請求
1、Client向Server發(fā)送認(rèn)證
Client在向Server發(fā)送請求時,會將密碼進(jìn)行hash code,也叫Master Key。
Client會向AS發(fā)送 Authenticator(認(rèn)證者),這里簡稱為A1。
A1內(nèi)容為:
(1):Client的信息和用戶名。
(2):使用Master Key加密的時間戳。
2、AS驗證A1
AS在接受到A1之后,會根據(jù)A1攜帶的用戶名去AD中尋找是否存在白名單中,然后查詢到密碼,并提取Client對應(yīng)的Master Key,對加密后的時間戳進(jìn)行解密,如果時間戳是合法的,就證明了Client提供的用戶名和密碼是存在AD中的。(ps:時間戳不能超過5分鐘)
二、響應(yīng)
1、發(fā)放TGT
驗證通過后,AS會給Client發(fā)送一個由Client的Master Key加密過的Logon Session Key和一個TGT(ps:TGT的內(nèi)容:經(jīng)過KDC中的krbtgt的密碼HASH加密的 Logon Session Key(登錄會話密鑰) 和 TimeStamp(時間戳)、TGS會話密鑰、Client info、TGT到期時間。)
0x03?Client與TGS的交互
一、請求
1、Client向TGS發(fā)送認(rèn)證
Client首先要通過自己的Master Key去解密Logon Session Key,再通過得到的Logon Session Key去加密自身的信息和時間戳形成Authenticator(以下簡稱A2),再攜帶A2和TGT對TGS發(fā)送請求。
2、 TGS驗證TGT的真?zhèn)?/strong>
TGS接受到Client發(fā)送的請求后,驗證Client的真實身份。首先要確定Client提供的TGT是否是由AS頒發(fā)的,于是使用自身的Master Key(krbtgt的hash處理)對TGT進(jìn)行解密得到Logon Session Key和Client info,在使用得到的Logon Session Key對A2進(jìn)行解密,得到Clinet info和時間戳。(TGT中的Client info是AS頒發(fā)的,所以只需要比對A2和TGT中的Client info是否一致就可以確定TGT的真?zhèn)瘟耍?/p>
二、響應(yīng)
1、發(fā)放ST和Session Key
TGS驗證通過后,會生成一個使用Logon Session Key加密的用于Client和Server之間通信的Session Key,和一個使用Server的Master Key進(jìn)行加密的ST(Service Ticket)
Ps:ST中包含以下內(nèi)容:
(1):Session Key(2):Domain name\Client(3):Ticket的到期時間
2、Client得到Session Key和ST
Client收到響應(yīng),使用Logon Session Key解密得到Session Key,有個Session Key和ST就可以直接與Server進(jìn)行交互了,無需通過KDC。
0x04 Client與Server的雙向驗證
一、Server驗證Client
1、Client向Server發(fā)送A3和ST
Client會將Authenticator(以下簡稱A3)和時間戳提取出來,然后使用Session Key進(jìn)行加密,隨后將A3和ST發(fā)送給Server。還有一個flag用于表示是否需要進(jìn)行雙向驗證
2、Server驗證Client身份
Server接收到A3和ST以后,會使用自身的Master Key(krbtgt的密碼hash處理)解密ST,從而獲得Session Key,再利用Session Key解密A3,從而驗證Client的身份,如果驗證成功,且時間戳不超過5min,就讓Client訪問相應(yīng)資源,否則就會直接拒絕請求。
3、Client驗證Server真實性
Client要確保自己訪問的是想要訪問的Server。Server收到flag以后就知道了需要向Client證明自己的身份,Server將從A3解密出來的時間戳再次使用Session Key加密發(fā)送給Client。Client再使用之前獲得的Session Key進(jìn)行解密,如果時間戳與之前的時間戳完全一致,則可以證明Server就是想要訪問的Server。
0x04 Here We Go
小黑去小明家里幫忙給喂狗,小黑來到小明家小區(qū),把身份證給門衛(wèi)看,門衛(wèi)確定了你是小黑,會給你一個小區(qū)卡,你拿著小區(qū)卡去小明家樓下,物業(yè)要證明小區(qū)卡是門衛(wèi)給的,物業(yè)確認(rèn)了以后給你小明家的鑰匙,然后小明家的防盜門會驗證你的鑰匙是不是樓下物業(yè)給的,是就讓你進(jìn)去,不是就直接拒絕。同時小明家的門口有一坨奧里給,你看到了就知道這確實是小明家
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?小明=Server? ? ? ? ? ?小黑=Client
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?門衛(wèi)=AS? ? ? ? ? ? ? ? ?物業(yè)=TGS
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 身份證=A1,A2, A3? ?小區(qū)卡=TGT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 鑰匙=ST? ? ? ? ? ? ? ? ? ?flag=奧里給

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 長白山攻防實驗室
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 學(xué)習(xí)最新技術(shù)知識