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