摘要:Kerberos協議是一個被廣泛采用的、基于可信任第三方提供安全認證服務的網絡認證協議。利用共享的會話密鑰,Kerberos協議保證了通信的機密性和完整性。描述了Kerberos5協議最新版本的基本原理,介紹了協議的詳細過程,通過對比前一版本,分析了其改進之處和仍存在的不足。
關鍵詞:Kerberos協議;安全分析;認證
Security Analysis of Kerberos 5 Protocol
SHAO Ye-qin, TU Zhong-qun,ZHANG Xiao-rong
(Modern Education Technology Center, Nantong University, Nantong 226001, China)
Abstract: Kerberos is a widely-adopted network authentication protocol, which provides secure authentication service based on the trusted third-party. By exploiting a shared key, Kerberos ensures the confidentiality and integrity for a session. This paper describes the basic principles of the newly- issued version, introduces the detailed procedure of the protocol and by being compared with the previous version, analyze the improvement and faults of Kerberos 5.
Key words: kerberos protocol; security analysis; authentication
隨著網絡的不斷普及,網絡安全事件變得越來越頻繁,網絡安全也越來越受到人們的關注。網絡安全協議作為網絡安全通信的基礎,對其的研究和分析具有重要的意義。Kerberos協議作為一個基于可信任第三方的安全認證協議,由于能保障通信的機密性和完整性,已經內嵌在Windows,RedHat Linux等操作系統中,并逐漸為更多網絡軟件所支持,正成為業界研究的熱點。
1 Kerberos 5協議
Kerberos協議是麻省理工學院為Athena項目設計的一個網絡認證協議。它允許用戶在非安全的網絡環境中只要一次認證,就可以安全地訪問網絡中所有需要的應用。Kerberos協議以域為單位進行管理,每個域中有若干個客戶端(Client),多個應用服務器(Application Server),一個認證服務器(Authentication Server,AS)和一個票據授權服務器(Ticket Granting Server,TGS)。協議的示意圖如1所示。
其中,認證服務器負責認證用戶帳號信息和產生可證明用戶身份的票據授權票據(Ticket-Granting Ticket,TGT),并把TGT返回給客戶端,由客戶端保存。憑借這個TGT,用戶不需要再次認證就可訪問所需的所有應用。為了完成認證,認證服務器需要事先保存所有用戶的帳號信息。
票據授權服務器負責所在域中各應用服務器的訪問票據的授權。客戶端需要訪問應用服務器時,將保存在本地的TGT發送給TGS,TGS對其驗證通過后,產生應用服務器的訪問票據(Ticket)并授權給客戶端。為了完成授權,每個應用服務器需要事先在票據授權服務器中注冊,確定一個能證明自己身份的共享密鑰。
有些情況下,AS和TGS放在一個服務器上,合稱為KDC(Key Distribution Center)。KDC作為可信賴的第三方,負責協調客戶端和應用服務器的安全通信。
Kerberos協議的處理過程如下:
1) Client以明文的方式向AS發送認證請求KRB_AS_REQ,請求自己與TGS服務器通信的會話密鑰。請求的內容為:{options,idc,realm,idtgs,times1,nonce1}
其中,options表示如何處理該請求的一些選項;times1表示所申請票據壽命相關的時間字段,包括了票據壽命的起止時間,票據的最大續訂時間等;nonce1表示一個隨機數,用于保證響應的新鮮。
2) AS向Client發送認證響應KRB_AS_REP,將生成的Client與TGS的會話密鑰一份加密后返回給客戶端,一份封裝在訪問TGS的票據中。響應的內容為:
{realmc,idc,tickettgs,enc-part}
tickettgs=realmtgs,idtgs,ELtgs[kc,tgs,realmc,idc,times1,addc]
enc-part=EKc[kc,tgs,nonce1,key-expiration,times1,realmtgs,idtgs,addc]
其中,tickettgs表示AS產生的客戶端與TGS通信的票據,它由TGS的密鑰加密得到,包含了客戶端和TGS共享的會話密鑰kc,tgs;enc-part表示AS返回給客戶端的信息,它由Client的密鑰加密得到,包含與TGS共享的會話密鑰kc,tgs。由于會話密鑰只有客戶端和TGS知道,保證了它們之間通信的安全。
3) Client向TGS發送票據授權請求KRB_TGS_REQ,請求自己與應用服務器通信的會話密鑰。請求的內容為:
{options,realmv,idv,time2,nonce2,authenticatorc,tickettgs}
authenticatorc=EKc,tgs[realmc,idc,ts2]
其中,tickettgs表示由KRB_AS_REP消息返回給客戶端,用于客戶端和TGS通信的票據;authenticatorc表示客戶端即時產生的認證信息,它用客戶端與TGS共享的密鑰加密,用于和TGS通信時證明客戶端的身份;ts2表示一個防止重放攻擊的時間戳。
4) TGS向Client發送票據授權響應KRB_TGS_REP,將生成的Client與應用服務器的會話密鑰一份加密后返回給客戶端, 一份封裝在訪問應用服務器的票據中。響應的內容為:
{realmc,idc,ticket,enc-part}
ticket=realmv,idv,EKv[kc,vrealmc,idc,times2,addc]
enc-part=EKc,tgs[kc,v,nonce2,key-expiration,times2,realmv,idv,addc]
其中,ticketv表示由TGS產生的,用于客戶端與服務器通信的票據,它用服務器的密鑰加密,包含了客戶端與服務器的會話密鑰kc,v;enc-part表示TGS返回給客戶端的信息,用客戶端和TGS的會話密鑰加密,包含了與應用服務器共享的會話密鑰kc,v。由于會話密鑰只有客戶端和應用服務器知道,因此保證了它們之間通信的安全。
5) Client使用得到的票據和即時生成的認證信息向應用服務器發送訪問請求KRB_AP_REQ。請求的內容為:
{options,ticket,authenticatorc}
authenticatorc =Ekc,v[realmc,idc,ts2,subkey,seq-mumber]
其中,ticketv表示由KRB_TGS_REP消息返回給客戶端,用于客戶端和應用服務器通信的票據;authenticatorc表示客戶端即時產生的認證信息,它用客戶端與應用服務器共享的密鑰加密,用于和應用服務器通信時證明客戶端的身份;ts2表示客戶端的時間戳,用于防止信息的重放攻擊;subkey表示客戶與應用服務器動態協商的通信子密鑰,可代替會話密鑰來保護客戶與應用服務器間的通信;seq-number表示隨機產生的一個整數,作為客戶和服務器通信時的初始序列號。每次客戶端請求時,該系列號在前一次的基礎上加1,防止請求信息的重放攻擊。
6) Application Server向Client發送響應KRB_AP_REP。響應的內容為:{EKv[ts2,subkey,seq-mumber]}
其中,ts2,subkey,seq-mumber分別對應KRB_AP_REQ認證信息中的相應字段。
2 Kerberos 5協議的分析
2.1 Kerberos 5協議的改進
Kerberos 5協議通過改進,在以下幾個方面克服了版本4的一些局限性和安全隱患:
1) 加密系統Kerberos 5使用一個加密類型的字段來確定信息加密的方法,克服了Kerberos 4只能使用DES加密的局限。
2) 網絡協議地址
Kerberos 5通過指定類型和長度來表示網絡協議地址,這樣就可以使用任意的地址,克服了Kerberos 4只能使用IPv4地址的限制。
3) 票據的壽命
Kerberos 5允許設置票據壽命的起、止時間,票據的最大續訂時間等,使票據的壽命可任意設置,不再受制于Kerberos 4中以5分鐘為單位,8比特表示的最大壽命256×5分鐘的限制。
4) 前向認證
Kerberos 5通過選項信息來支持前向認證,使得被一臺應用服務器驗證過的客戶認證信息可轉發至其它應用服務器或客戶,這樣就可以直接訪問其它的應用服務器,而Kerberos 4不支持。
5) 票據二次加密
Kerberos 5對AS和TGS產生的票據只加密一次,而Kerberos 4除了用TGS或應用服務器的密鑰加密后,還用客戶端的密鑰加密,既沒有必要,又消耗了服務器的資源。
6) 重放攻擊
Kerberos 5通過使用序列號(Seq-number)來防止客戶端訪問應用服務器請求的重放,克服了Kerberos 4依賴時間同步的時間戳所帶來的不準確性。
7) 訪問應用服務的保護
Kerberos 5可以選擇通過客戶端和應用服務器協商的subkey來代替由TGS下發的會話密鑰,避免了Kerberos 4中客戶端每次訪問應用服務器都使用相同的密鑰帶來的不安全因素。
2.2 Kerberos 5協議的缺陷
Kerberos 5相對于Kerberos 4雖然作了改進,但仍存在著如下的問題:
1) 密碼字典攻擊
為了方便記憶,一般用戶的密碼都設置的比較簡單,或很有規律,如12345、abcde、生日等。這給入侵者成功實施字典攻擊提供了條件。而kerberos 5協議雖然引入了預認證機制,但還是沒有很好地解決這個問題。
2) 重放問題
已經使用過的認證信息如果被有所圖謀的人存儲或重用,就會發生重放攻擊。理論上可以將使用過的認證信息保存起來,但實現起來有難度。Kerberos通過在票據中加入時間戳來防止重放攻擊,但攻擊者仍可在票據的有效期(一般5分鐘)內進行重放。雖然在客戶端請求中添加了隨機數來控制響應的重放,但網絡環境的好壞會影響到其作用的發揮。
3) KDC單點故障
所有的用戶信息都保存在KDC中,因此,KDC容易成為攻擊者的目標。只要KDC不能工作,整個系統就陷入癱瘓。一旦KDC被非法入侵,所有的用戶帳號也直接被暴露。因此, KDC成為一個故障點,它的安全和性能直接決定了整個系統的安全和性能。
4) 時間同步
Kerberos協議是在網絡上的時鐘都同步的前提下實施的,但實際上很難做到。盡管網絡時間協議可以做到這一點,但其本身就存在安全性問題,所以不能用來解決時鐘的同步問題。
5) 容易受到DOS攻擊
Kerberos協議對客戶端發送的請求沒有限制,所有的請求KDC都要進行處理,這給DOS攻擊創造了條件。
3 結論與展望
Kerberos協議是依賴可信任的第三方進行客戶和服務器安全認證與通信的協議。本文介紹了RFC4120中定義的協議的最新版本,并通過與前一版本的對比和分析,發現Kerberos 5雖然做了改進,但仍存在時間同步,重放等問題。今后,我們將針對協議存在的具體的問題進行深入地研究和改進。
參考文獻:
[1] Neuman C,Yu T,Hartman S,et al.The Kerberos Network Authentication Service (V5)[EB/OL].http://www.ietf.org/rfc/rfc4120.
[2] Neuman C, Theodore Ts'o.Kerberos An Authentication Service for Computer Networks[J].IEEE Communications Magazine,1994,32(9).
[3] Bellovin S,Merritt M.Limitations of the Kerberos Authentication System[J].Computer Communications Review,1990,20(5).
[4] Stallings W.密碼學與網絡安全--原理與實踐[M].孟慶樹,譯.北京:電子工業出版社,2006.