常見(jiàn)AD攻擊及預(yù)防措施詳解一
活動(dòng)目錄以下簡(jiǎn)稱AD對(duì)于系統(tǒng)管理員有著至關(guān)重要的作用,下文是介紹常見(jiàn)的AD的攻擊以及預(yù)防措施,具體內(nèi)容如下所述。
微軟的活動(dòng)目錄AD為大規(guī)模的企業(yè)系統(tǒng)提供了方便的管理架構(gòu),但是,你了解針對(duì)AD的攻擊嗎?你管理的AD安全嗎?如何加強(qiáng)AD的安全管理呢?相信本文一定會(huì)成為很好的參考。
現(xiàn)在,許多企業(yè)在Windows架構(gòu)中采用活動(dòng)目錄(AD)作為企業(yè)目錄或者是網(wǎng)絡(luò)操作系統(tǒng)目錄(NOS),AD已經(jīng)成為企業(yè)中一項(xiàng)重要的資產(chǎn)。顯然,如此有價(jià)值的東西當(dāng)然要受到重點(diǎn)保護(hù)。
對(duì)AD的攻擊可以來(lái)自許多方面——我們來(lái)看看五個(gè)常用的攻擊手段以及如何保護(hù)AD以應(yīng)對(duì)攻擊。本文提到的前三種攻擊可以在AD中提升攻擊者的權(quán)限,后兩種攻擊則嚴(yán)重影響了AD架構(gòu)的可用性。除非特別說(shuō)明,本文的內(nèi)容適用于WindowServer2003和Windows2000Server中的AD。
在本文中我不能列出全部的AD攻擊,我的主要目的是讓AD管理員有危機(jī)感,能夠用多種方法加固AD,保護(hù)AD。
攻擊一:基于LMHash破解密碼
密碼破解實(shí)際上是利用操作系統(tǒng)使用的同一個(gè)哈希算法對(duì)可能的用戶密碼進(jìn)行哈希運(yùn)算,然后把結(jié)果和目標(biāo)操作系統(tǒng)中保存的密碼哈希進(jìn)行對(duì)比,從而獲得破解的密碼。密碼破解一般非常耗時(shí),破解者通常要試驗(yàn)大量(有時(shí)候是全部)可能的密碼。不過(guò),一些免費(fèi)工具,如JohntheRipper和LCP可以進(jìn)行自動(dòng)破解,最新版本的JohntheRipper和LCP可以分別從http://www.openwall.com/john和http://www.lcpsoft.com/english/index.htm下載,這些工具對(duì)于破解在AD環(huán)境中采用普通的NTLANManager(NTLM)認(rèn)證協(xié)議的密碼十分有效。NTLM是WindowsNT4.0的默認(rèn)認(rèn)證協(xié)議,但是出于向下兼容的考慮,仍然在Windows2000和后續(xù)操作系統(tǒng)中使用。NTLM包括兩種認(rèn)證協(xié)議:LM和NTLM,分別使用不同的哈希算法,這些哈希值分別被稱為L(zhǎng)M和NT,或者是Unicode、哈希。
由于Windows創(chuàng)建LM哈希的方法存在漏洞,可以顯著加速破解過(guò)程。一個(gè)漏洞是密碼不能長(zhǎng)于14個(gè)字符,并且LM還在哈希運(yùn)算中將密碼字符全部轉(zhuǎn)換為大寫,此外,LM哈希實(shí)際上并沒(méi)有使用哈希函數(shù),而是采用對(duì)稱加密生成了哈希值。
在圖1中顯示了用戶密碼“hpinvent1”是如何生成LM哈希值的過(guò)程。首先,密碼被轉(zhuǎn)換成大寫字母“HPINVENT1”;然后,這些大寫字母被分割成兩段字符串,每段7個(gè)字符,“HPINVEN”和“T1*****”,其中第二段要用空字符補(bǔ)齊;接著,這兩段字符串作為密鑰,通過(guò)DigitalEncryptionStandard(DES)對(duì)稱加密去加密一個(gè)常數(shù),而不是使用哈希函數(shù);最后,把DES加密的結(jié)果連接起來(lái)就生成了LM哈希值。
攻擊一預(yù)防措施
要降低LM密碼哈希的危害,需要采取以下措施:在AD數(shù)據(jù)庫(kù)中取消LM哈希,要求Windows用戶采用更為強(qiáng)壯的NTLMv2認(rèn)證協(xié)議,或者要求用戶應(yīng)用特殊的密碼創(chuàng)建規(guī)則。
在WindowsServer2003、WindowsXP和后續(xù)的平臺(tái)中,可以設(shè)置組策略(GPO)或者本地策略禁止AD保存LM哈希:
網(wǎng)絡(luò)安全:在下次改變密碼時(shí)不保存LANManager哈希。
在Windows2000,該設(shè)置并不能從AD或SAM(本地安全數(shù)據(jù)庫(kù))移除LM哈希,只能確保用戶下次更改密碼的時(shí)候不會(huì)保存LM哈希。因此,進(jìn)行該設(shè)置以后,需要強(qiáng)制所有受影響的用戶更改密碼。在WindowsServer2003和WindowsXP,上述設(shè)置則可以清除安全數(shù)據(jù)庫(kù)中的LM哈希歷史數(shù)據(jù)。
對(duì)于WindowsServer2003、WindowsXP和Windows2000SP2或后續(xù)平臺(tái),還可以編輯注冊(cè)表,直接禁止保存LM哈希,即把HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\nolmhash(REG_DWORD)的值改為1。
如果是在域環(huán)境中,則必須要設(shè)置全部的域控制器(DC)。如果用戶仍然在使用Windows98或者Windows95這些沒(méi)有安裝目錄服務(wù)客戶端的系統(tǒng),則不可以進(jìn)行上述設(shè)置,因?yàn)檫@些客戶端只能使用LM認(rèn)證。關(guān)于nolmhash的使用介紹,請(qǐng)參見(jiàn)微軟知識(shí)庫(kù)文章“如何防止Windows在活動(dòng)目錄和本地SAM數(shù)據(jù)庫(kù)中保存LANManager密碼哈希”(http://support.microsoft.com/kb/299656)。
如果是在WindowsServer2003或Windows2000群集環(huán)境中,必須確保群集服務(wù)的帳號(hào)密碼長(zhǎng)度至少為15個(gè)字符。如果小于此長(zhǎng)度,使用群集管理工具會(huì)出現(xiàn)問(wèn)題,微軟知識(shí)庫(kù)文章“設(shè)置NoLMHash策略后必須設(shè)置群集服務(wù)帳號(hào)密碼長(zhǎng)度不少于15個(gè)字符”(http://support.microsoft.com/kb/828861)對(duì)此問(wèn)題有詳細(xì)的說(shuō)明。
為了確保用戶都使用強(qiáng)壯的NTLMv2認(rèn)證協(xié)議,必須為運(yùn)行老版本的Windows平臺(tái)準(zhǔn)備好NTLMv2軟件。對(duì)于Windows98和Windows95用戶,可以下載http://download.microsoft.com/download/0/0/a/00a7161e-8da8-4c44-b74e-469d769ce96e/dsclient9x.msi,安裝目錄服務(wù)客戶端。WindowsServer2003、WindowsXP、Windows2000或者WindowsNTSP4以上版本都已經(jīng)內(nèi)置了NTLMv2支持。
在WindowsServer2003或Windows2000AD環(huán)境中強(qiáng)制客戶端使用NTLMv2,需要設(shè)置網(wǎng)絡(luò)安全:LANManager認(rèn)證級(jí)別組策略為“只發(fā)送NTLMv2應(yīng)答,拒絕LM”,或者直接修改注冊(cè)表鍵值HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\lmcompatibilitylevel(REG_DWORD)為4,可以參見(jiàn)微軟網(wǎng)站上的文章“LmCompatibilityLevel”(http://www.microsoft.com/resources/documentation/Windows/2000/server/reskit/en-us/regentry/76052.asp)。
這樣,如果用戶遵從下述密碼規(guī)則,Windows將不再會(huì)創(chuàng)建LM哈希:
使用的密碼長(zhǎng)度超過(guò)14個(gè)字符;
在密碼中使用特定的ALT字符,可以按住ALT鍵敲四個(gè)數(shù)字生成ALT字符,在圖2中列出了這些防止LM哈希的ALT字符。
攻擊二:基于Kerberos預(yù)認(rèn)證數(shù)據(jù)破解密碼
長(zhǎng)期以來(lái),我們都認(rèn)為在WindowsServer2003、WindowsXP或Windows2000中使用默認(rèn)的Kerberos認(rèn)證能夠保護(hù)密碼,能有效對(duì)付前面所述的那類暴力破解攻擊手段,但是在2002年末(發(fā)布Windows2000兩年后)Internet上出現(xiàn)了名為KerbCrack的工具。KerbCrack包括兩個(gè)工具,分別為kerbsniff和kerbcrack,能夠暴力破解Kerberos數(shù)據(jù)包,其中Kerbsniff從網(wǎng)絡(luò)中捕獲Kerberos數(shù)據(jù)包,kerbcrack則利用kerbsniff的輸出進(jìn)行暴力破解。在http://www.ntsecurity.nu/toolbox/kerbcrack可以下載這兩個(gè)工具。http://www.hut.fi/~autikkan/kerberos/docs/phase1/pdf/LATEST_password_attack.pdf這篇文章則描述了類似的攻擊手段,不過(guò)是使用了另外的工具。
Kerberos5.0引入了Kerberos預(yù)認(rèn)證功能,由客戶端使用預(yù)認(rèn)證數(shù)據(jù)到Kerberos密鑰分發(fā)中心(KerberosKeyDistributionCenter,KDC,即每臺(tái)WindowsServer2003和Windows2000域控制器上運(yùn)行的Kerberos服務(wù))驗(yàn)證密碼,然后客戶端可以接收到一個(gè)TicketGrantingTicket(TGT)。Kerberos破解攻擊的目標(biāo)就是在其預(yù)認(rèn)證數(shù)據(jù)中嵌入的加密時(shí)間戳,而該時(shí)間戳使用用戶主密鑰加密(例如,基于用戶密碼的密鑰)。
攻擊二預(yù)防措施
有兩種方法可以應(yīng)對(duì)Kerberos預(yù)認(rèn)證攻擊:使用Windows智能卡登錄,或者在Kerberos客戶端和域控制器之間采用IPsec加密網(wǎng)絡(luò)傳輸。Windows智能卡登錄使用了被稱為PKINIT的Kerberos擴(kuò)展,不使用用戶主密鑰加密數(shù)據(jù)包,而使用用戶的私有密鑰加密。文章“Kerberos初始認(rèn)證的公共密鑰加密”(http://www.ietf.org/proceedings/03mar/I-D/draft-ietf-cat-kerberos-pk-init-16.txt)詳細(xì)介紹了PKINIT。目前,暴力破解還無(wú)法處理使用公共-私有密鑰加密的數(shù)據(jù)包。
攻擊三:利用SIDHistory提升權(quán)限
在Windows2000的AD用戶帳號(hào)對(duì)象中,微軟增加了SIDHistory屬性。對(duì)于域內(nèi)的帳號(hào)移植和森林域內(nèi)的帳號(hào)移動(dòng),SIDHistory簡(jiǎn)化了資源訪問(wèn)過(guò)程。例如,當(dāng)用戶帳號(hào)從WindowsNT4.0域遷移到Windows2000域時(shí),Windows2000域創(chuàng)建新的用戶帳號(hào),會(huì)自動(dòng)添加SIDHistory屬性,包含了該用戶帳號(hào)在WindowsNT4.0域中的SID。登錄時(shí),Windows2000域會(huì)收集用戶的認(rèn)證數(shù)據(jù)(組成員等),域控制器從SIDHistory屬性中將用戶舊的SID添加到認(rèn)證數(shù)據(jù)中,這樣,在舊的域中的資源不需要被重新分配許可(例如不用更新ACL),用戶使用新的帳號(hào)即可以繼續(xù)正常訪問(wèn)。
而對(duì)于心懷惡意的AD管理員來(lái)說(shuō),就可以通過(guò)嘗試修改用戶帳號(hào)對(duì)象的SIDHistory屬性來(lái)提升權(quán)限。例如,在一個(gè)域信任環(huán)境中,被信任域的管理員會(huì)嘗試將信任域的管理員帳號(hào)的SID添加到自己域中一個(gè)用戶帳號(hào)的SIDHistory屬性里,如果成功的話,被信任域的該用戶將獲得信任域的管理員訪問(wèn)權(quán)限。
在發(fā)布的Windows2000第一版中,信任域的域控制器并不檢查來(lái)自被信任域的包含有認(rèn)證數(shù)據(jù)的資源訪問(wèn)請(qǐng)求,信任域的域控制器會(huì)自動(dòng)認(rèn)為只包含被信任域的域控制器SID的請(qǐng)求是被授權(quán)的資源。
雖然修改AD用戶帳號(hào)的SIDHistory屬性并不容易(只能在AD離線模式時(shí)操作),但這是可行的,而且已經(jīng)出現(xiàn)了這樣的修改工具,SHEdit就是一個(gè)例證,可以在http://www.tbiro.com/projects/shedit/index.htm下載。
這種攻擊在各種Windows域信任環(huán)境下都能發(fā)生:可以在單一森林的域中間,也可以在存在信任關(guān)系的連接外部的域之間或者森林之間。在單一森林中,能夠物理接觸到域控制器的管理員或用戶都可能利用SIDHistory漏洞把自己提升到企業(yè)管理員組。
攻擊三預(yù)防措施
為了避免SIDHistory屬性造成危害,必須確保企業(yè)管理員組和域管理員組的成員是值得信任的,還需要確保域控制器具有高的物理訪問(wèn)安全級(jí)別,防止用戶將域控制器離線進(jìn)行漏洞攻擊。
此外,還可以利用不同森林中域之間建立的信任關(guān)系的SID過(guò)濾功能,防止管理員修改SIDHistory屬性。SID過(guò)濾可以讓管理員隔離域,激活SID過(guò)濾時(shí),信任域的域控制器會(huì)檢查來(lái)自被信任域的包含認(rèn)證數(shù)據(jù)的資源訪問(wèn)請(qǐng)求是否真實(shí),信任域的域控制器將自動(dòng)刪除不是來(lái)自被信任域的SID。因?yàn)樵摬僮魍瑫r(shí)刪除了認(rèn)證數(shù)據(jù)中由SIDHistory屬性增加的SID,所以,SIDHistory和SID過(guò)濾是互斥的兩個(gè)功能。
Windows2000SP2及后續(xù)版本都提供了SID過(guò)濾功能,用命令行命令netdom.exe可以打開或關(guān)閉SID過(guò)濾。如微軟知識(shí)庫(kù)文章“MS02-001:在Windows2000中偽造SID導(dǎo)致提升權(quán)限”(http://support.microsoft.com/kb/289243)所述,在Windows2000中,可以使用trust和/filtersids開關(guān),而在WindowsServer2003中,則使用trust和/quarantine開關(guān)。對(duì)于WindowsServer2003外部和森林信任關(guān)系,SID過(guò)濾是默認(rèn)被打開的。
在同一森林里具有信任關(guān)系的域之間,則不應(yīng)該使用SID過(guò)濾,因?yàn)檫@會(huì)終止AD的復(fù)制和傳遞信任關(guān)系。如果需要隔離一個(gè)域,應(yīng)該把它放到另一個(gè)森林中。
欲知更多有關(guān)AD的攻擊和預(yù)防措施的知識(shí),請(qǐng)點(diǎn)擊有關(guān)AD的攻擊及預(yù)防措施知識(shí)簡(jiǎn)介二
【編輯推薦】