Kerberos能抵御哈希值傳遞攻擊嗎?
在上篇“如何防御哈希值傳遞攻擊”發(fā)表后,很多朋友詢問(wèn)Kerberos身份驗(yàn)證是否能夠有效抵御哈希值傳遞攻擊。本文我們將討論Kerberos抵御哈希值傳遞攻擊的問(wèn)題,Kerberos是用于各種計(jì)算機(jī)系統(tǒng)的一種開(kāi)放式身份驗(yàn)證協(xié)議,Kerberos在多方參與的服務(wù)間傳遞加密密鑰保護(hù)的身份驗(yàn)證“票”,密碼哈希既不被發(fā)送也不被存儲(chǔ),所以無(wú)法被獲取或者重復(fù)利用。
Kerberos是部署在Windows2000中的默認(rèn)身份驗(yàn)證協(xié)議,現(xiàn)在很多操作系統(tǒng)使用Kerberos連接到Windows 2000和更高版本的Kerberos保護(hù)的資源和服務(wù)。在現(xiàn)在的Windows網(wǎng)絡(luò)中,Kerberos身份驗(yàn)證廣泛使用,它可能能夠減少哈希值傳遞風(fēng)險(xiǎn),但是并不像很多人想象的那么強(qiáng)大。
首先,哈希值傳遞攻擊只針對(duì)互動(dòng)的登錄,在windows系統(tǒng)中,哈希密碼既沒(méi)有被發(fā)送也沒(méi)有被存儲(chǔ)在遠(yuǎn)程服務(wù)器或者windows內(nèi)通過(guò)網(wǎng)絡(luò)連接(除RDP連接外)的主機(jī)程序中,無(wú)論是使用NTLM/NTLMv2還是Kerberos。攻擊者只能捕捉存儲(chǔ)在SAM中本地計(jì)算機(jī)或者Active Directory數(shù)據(jù)庫(kù)中的密碼哈希,或者用戶以交互式方式登錄時(shí)的密碼哈希。攻擊者能夠獲取對(duì)服務(wù)器電腦的高權(quán)限訪問(wèn)并捕捉網(wǎng)絡(luò)中每個(gè)連接用戶的密碼的說(shuō)法是不現(xiàn)實(shí)的,在大多數(shù)情況下,Kerberos并不提供比NTLM/NTLMv2更多的保護(hù)。
其次,當(dāng)用戶以交互方式登錄到使用Kerberos的計(jì)算機(jī),他/她的NT密碼哈希被存儲(chǔ)在計(jì)算機(jī)的內(nèi)存中并且可能被竊取。這是因?yàn)樗械膚indows計(jì)算機(jī)必須支持至少一種其他身份驗(yàn)證協(xié)議,例如LanManager、NTLM或者NTLMv2。在windows server 2008之前,NT哈希是用于被稱為“Kerberos前身”的協(xié)議中,在W2K8和更高的操作系統(tǒng)中使用的是AES。
值得注意的是,從Windows 7和Windows Server2008 R2開(kāi)始,除Kerberos外的身份驗(yàn)證協(xié)議可以通過(guò)Restrict NTLM功能來(lái)關(guān)閉,不過(guò),這很難部署到最常用的操作系統(tǒng)中。
在大多數(shù)網(wǎng)絡(luò)中,運(yùn)行的都是較舊的身份驗(yàn)證協(xié)議。例如,很多應(yīng)用程序和服務(wù)并不理解Kerberos或者接受它們的驗(yàn)證票。有些應(yīng)用程序(例如微軟的sharepoint)能夠理解Kerberos但是默認(rèn)啟用的是NTLM以達(dá)到兼容目的。很多代理服務(wù)器和負(fù)載平衡器不允許Kerberos運(yùn)行,卻隨時(shí)允許NTLM通過(guò)。默認(rèn)情況下,IP地址提及的網(wǎng)絡(luò)服務(wù)器(而不是DNS或者NetBIOS名)不會(huì)使用Kerberos,較舊的或者未配置的Samba安裝不會(huì)使用underconfigured。
網(wǎng)絡(luò)沒(méi)有運(yùn)行大量的NTLM身份驗(yàn)證是極其罕見(jiàn)的情況。在大多數(shù)情況下,NT哈希被存儲(chǔ)在初始計(jì)算機(jī)中,即時(shí)只有使用Kerberos時(shí)。
同樣需要記住的是,獲取哈希值首先需要高級(jí)別訪問(wèn)。如果攻擊者可以訪問(wèn)并查看NT哈希,他/她就能夠獲取Kerberos TGT(票證授權(quán)票)并通過(guò)驗(yàn)證。
Kerberos還是具備一定保護(hù)能力的,目前似乎還沒(méi)有工具可以攻擊Kerberos,攻擊者也很難制作這樣的工具,但是攻擊者可以輕松地利用內(nèi)存掃描儀或者拆卸(例如IdaPro)來(lái)進(jìn)行攻擊。(注意:NT哈希存儲(chǔ)在Kerberos TGT中,并可以從中獲取該NT哈希,除了在最新的windows操作系統(tǒng)上外。)
身份驗(yàn)證者捕捉或者重復(fù)使用是所有對(duì)稱型身份驗(yàn)證系統(tǒng)面臨的問(wèn)題,包括大部分Kerberos部署系統(tǒng)。在Unix、Linux和BSD中,Kerberos能夠以非對(duì)稱形式被使用,但大部分情況卻不能這樣使用。你同樣可以使用其他非對(duì)稱身份驗(yàn)證程序,如Sesame、智能卡、加密密鑰卡和生物識(shí)別設(shè)備等,但每種方法都有自己的缺點(diǎn)和局限性。例如,很多智能卡使用的是密碼哈希,很多生物識(shí)別技術(shù)要求使用密碼來(lái)運(yùn)行。計(jì)算機(jī)安全比表面看起來(lái)更復(fù)雜。
有些人還吹捧crypto key fobs的反重放機(jī)制,Kerberos確實(shí)有反重放功能,但哈希值傳遞攻擊并不屬于重放攻擊,哈希值傳遞攻擊利用的是最終身份驗(yàn)證要素:密碼哈希,并將哈希用于新會(huì)話。
Kerberos可能在某些特定情況下能夠緩解哈希值傳遞攻擊,但在大多數(shù)環(huán)境中它并不能明顯減少哈希值傳遞的風(fēng)險(xiǎn)。我們可以列舉出很多理由(性能、其他安全保護(hù)、相互驗(yàn)證等)來(lái)說(shuō)明應(yīng)該使用Kerberos驗(yàn)證而不是較舊的驗(yàn)證協(xié)議,大家應(yīng)該注意這一點(diǎn)。
【編輯推薦】