從活動目錄中獲取域管理員許可權的6種方法

通常,在大多數企業當中,攻擊者根本不需要太長的時間,就可以將域中普通用戶的許可權提升到域管理員的許可權。公司運維人員會困惑,「這一切都是怎麼發生的?」

一次攻擊,往往開始於公司中的一個或多個用戶打開了惡意郵件,使得攻擊者可以在目標網路中的計算機上執行惡意代碼。一旦惡意代碼被運行,攻擊者就會利用惡意代碼對企業內網進行偵查,以便於發現有用的資源進行提權,進行持久控制,當然,他們還有可能進行信息掠奪。

雖然整體的細節以及流程大多不同,但是他們的目的幾乎是一樣的,如:

惡意軟體注入(web應用漏洞利用,Spear-Phish網路釣魚攻擊等等)

進行內網信息收集

嗅探密鑰

進行攻擊以及提權

獲取數據

持久控制

我們從攻擊者進入內網區域開始講述,因為這在真實網路環境中,並不是很困難的事情。此外,攻擊者從主機普通用戶許可權提升到本地管理員的許可權並不是那麼困難,他們可以通過利用主機未修補的提權漏洞進行提權,或者從SYSVOL中找到本地管理員的密碼,比如:組策略首選項。

我曾經在會議上分享過許多關於這種攻擊的方法,也在文章里中介紹過。

下面,我們就開始我們的正文吧~

從域普通用戶到域管理員的攻擊方法:

1.SYSVOL和組策略首選項中的密碼

因為不使用任何工具,所以這種攻擊方法是最簡單的。攻擊者需要做的就是打開windows任務管理器,並搜索名為SYSVOL

DFS的共享XML文檔。大多數情況下,以下文檔會包含密碼:

groups.xml,scheduledtasks.xml以及Services.xml.

SYSVOL是將在域中所有經過身份驗證的用戶都可以讀取許可權的活動目錄在域中進行共享。SYSVOL包括登錄腳本,組策略數據,以及域控需要訪問的其他域裡面的數據(因為SYSVOL是在所有域控之間自動同步並且共享的)。所有域的組策略都存在於:

<DOMAIN>SYSVOL<DOMAIN>Policiesn

當新的GPP(組策略選項)創建時,會在SYSVOL中創建一個與相關配置數據相關聯的XML文件,如果提供了密碼,那麼加密方式應該是AES-256。

除了在2012年微軟公布了AES加密的私鑰外,任何經過身份驗證的用戶(任何域中用戶或者受信任域中的用戶)都可以查看SYSVOL中的包含AES加密密碼的XML文件。

當進入到這個XML文件當中後,攻擊者可以使用上述AES的私鑰對組策略選項中的密碼進行解密。PowerSploit中的一個模塊Get-GPPPassword可以對組策略密碼進行破解。下面截圖就是類似模塊對在SYSVOL的GPP密碼進行解密的方法。

一些其他的文件可能也存在已經嵌入的密碼,通常是明文,比如vbs,bat文件。

你會認為通過發布的補丁,將管理員的信息不放進組策略就可以避免這個問題的發生,但是我現在在對客戶進行安全評估時,依舊可以在SYSVOL中找到用戶的密碼。

解決方法:

在用於管理GPO(組策略對象)的每台計算機上安裝KB2962486補丁,以防止新的憑據被放置在組策略首選項中。

刪除SYSVOL中存在GPP密碼的XML文件。

不要將密碼暴露在任何域用戶面前。

關於這個攻擊方法的更多信息,你可以具體參考這篇文章:Finding Passwords in SYSVOL & Exploiting Group Policy Preferences

2.在未打補丁的域控上使用MS14-068關於Kerberos的漏洞進行攻擊。

自從KB3011780補丁對MS14-068進行修補已經過去一年多了,並且已經有方法可以對MS14-068攻擊進行檢測和防禦,不過這並不意味這所有的域控制器都會對這個漏洞進行檢測。大多數的企業都在KB301178發布一個月後對域控上面的漏洞進行修補,但是並不確保新成為域控的伺服器都對這個漏洞進行了修復。

感謝@Gavin Millard,讓我們可以簡單的進行介紹這種攻擊。

簡單來說,攻擊者利用MS14-068可以在5分鐘之內重寫一個有效的Kerberos

TGT身份驗證,並且使他成為域管理員以及目錄林管理員。如上圖所示,就像採取了有效的登機密碼,在登記前,在登機牌上寫上」我是飛行員」,然後你就會被安排到駕駛倉,並且還會給你提供咖啡。就好比這種攻擊,系統會將普通用戶當成了域管理員,然後給予域管理員的許可權。

補丁發布兩周後,MS14-068漏洞利用的exp第一次公開發布。exp是由Sylvain

Monné編寫,被叫做PyKEK.PyKEK是一個可以運行在任何具有Python環境平台上的一個python腳本,當然,這個平台需要能夠和未打補丁的域控進行通信。他通過捕獲一個ccache文件,然後利用Mimikatz將作為管理員的TGT注入到內存,然後你就可以以域管理員許可權進行各種操作。

解決方法:使用補丁,或者域控使用windows2012/2012R2

MS14-068利用過程:

普通用戶發送一個不包含PAC(Privilege Attribute Certificate 特權屬性證書)的kerberos TGT 認證請求,然後域控會回復TGT。

生成偽造的PAC,沒有密鑰,所以生成的PAC是將域用戶的密碼數據使用MD5演算法加密而不是使用HMAC_MD5「簽名」。

將沒有PAC的TGT以及作為TGS服務認證請求數據的一部分的偽造PAC發送給域控。

域控被發送過來的數據混淆,所以它將用戶發送過來的無PAC的TGT丟棄,同時創建一個新的TGT,將我們的偽造的PAC插入到當中,然後將這個新的TGT發送給用戶。

通過偽造的新的TGT將用戶設置成域管理員。

Mimikatz的作者Benjamin Delpy通過改進PyKEK寫了一個新的MS14-068的exp,叫做kekeo。這個exp可以發現並且定位存在漏洞的域控,不管在域中是否有補丁,以及是否使用windows2012/2012R2。攻擊使用的Exp是和PyKEK相同的,不過他在最後加了一個新的步驟,可以產生一個對任何內網的域控都可以進行訪問的TGT。這樣就可以在域的任何一處地方執行exp,得到域管許可權。

解決方案:

1. 確保DCPromo進程在運行DCPromo之前包括一個補丁查詢步驟,以檢查KB3011780的安裝。可以使用PowerShell命令:get-hotfix 3011780進行快速檢查。

2. 此外,實施一個自動化過程,確保在系統在不符合規定的情況下運行時,自動應用關鍵補丁。即設置自動更新補丁

3.kerberos TGS服務憑證離線爆破(kerberoast)

Kerberoast能夠使普通用戶在不向目標系統發送任何數據包的情況下從活動目錄提取服務賬戶信息。因為大多數人都會使用比較弱的密碼,所以這種攻擊是一個很好的攻擊方法。之所以很容易攻擊成功是因為大多數的服務的密碼長度都會和域中設置的最小長度相同,這就意味著爆破也不會花費太長的時間,不會導致超過這個密碼的到期時間。大多數的服務不會為密碼設置到期時間,所以相同的密碼可能會幾個月或者幾年都會生效。此外,大多數的服務許可權都賦予的很高,並且一般都是域管理員許可權,具有完整的對活動目錄操作的許可權.(儘管服務帳戶只需要能夠修改某些對象類型上的屬性或持有特定伺服器上的管理員許可權)

注意:當目標服務是windows的系統管理服務時,這種攻擊不會成功,因為他們會在活動目錄中產生128個字元的密鑰,這暴力破解起來很困難,並且基本不可能實現。

這種攻擊方法是為目標賬戶的服務主體名稱一個Kerberos服務憑證(TGS)。這個請求使用一個有效的域用戶憑證(TGT)為目標運行的多個服務請求一個或者多個服務憑證。域控一般不會確認這個用戶是不是已經連接到這些資源(甚至不確認它是否有許可權訪問)。域控會在活動目錄中查找SPN,並且使用與SPN相關聯的賬戶對憑證進行加密,以便於服務驗證用戶的訪問許可權。請求Kerberos服務憑證加密方式為:RC4_HMAC_MD5,這意味著服務賬戶的NTLM密碼用於了加密服務憑證。這也就意味著Kerberoast可以嘗試通過嘗試不同的NTLM散列來解密Kerberos憑證,並且當憑證成功解密時,會發現正確的服務帳戶密碼。

注意:這裡沒有對許可權進行提升,以及沒有與目標進行任何通信。

Tim Medin在DerbyCon 2014上發表了他的「攻擊微軟Kerberosd的想法」演示文稿(幻燈片和視頻),以及發布了Kerberoast Python TGS破解者。

解決方法:

最有效的防禦這種攻擊的方法就是將確保服務賬戶的密碼超過25個字元。

使用託管服務帳戶和組託管服務帳戶是確保服務帳戶密碼長,複雜以及定期更改的好方法。使用提供密碼保管的第三方產品也是管理服務帳戶密碼的堅實解決方案。

關於這種攻擊的詳細介紹您可以在這篇文章中可以了解:Cracking Kerberos TGS Tickets Using Kerberoast - Exploiting Kerberos to Compromise the Active Directory Domain

4.悄無聲息盜竊密碼

因為這種方法實在是難以描述,所以我把它叫做了」悄無聲息盜竊密碼」。將它看成是一次舞蹈演出。先拿下一台簡單的伺服器,提權,並且將憑證導出。然後通過憑證進入到其他主機中,再進行提權,在進行憑證導出。

由於大多數的活動目錄的管理員使用賬戶登錄到他們的主機上面,然後使用RunAs(將其管理員憑據放在本地使用的命令)或者RDP命令連接到遠程服務端,所以,這種攻擊方法得到域管理員的憑證通常很迅速。

步驟一:拿下一台主機,並且進行提權,得到本地管理員許可權,然後運行Mimikatz或者類似導出本地用戶信息的工具,得到最近登錄的信息以及賬戶密碼。

步驟二:使用步驟一收集的管理員信息,並且嘗試這去登陸其他具有管理員許可權的機器。一般是會成功的,因為本地的管理員賬戶很難被設置正確(現在你可以使用微軟的LAPS進行配置)。如果你知道了一組管理員的帳號密碼,就相當於知道了多個甚至全部主機的賬戶和密碼,這就以為著你有了所有主機的管理員許可權。連接到其他主機,並且以同樣的方法對這些主機進行本地登錄信息的導出,直到得到了域管理員的賬戶信息。並且,使用本地用戶進行登錄是一個很隱蔽的方法,這樣不需要登錄到域管上面,也很少有主機發送安全日誌到中央日誌記錄系統當中(SIEM)。

步驟三:利用被盜取的賬戶信息收集更多的信息。比如運行一些應用的伺服器中,往往具有大量用戶信息(更有可能含有域管理員信息)。比如:CAS伺服器,OWA伺服器,MSSQL伺服器,RDP伺服器。

步驟四:結束攻擊,收尾。

使用被竊取的域管理員的賬戶,攻擊者可以毫無阻礙的得到所有域中的用戶信息。

如果域管在所有主機中都在控制著一個服務,那麼只要拿下一台機器,就相當於拿下了整個域。

通常PowerShell是一種很好的管理方法,因為通過PowerShell連接到遠程系統是一種網路登錄(沒有憑據存儲在遠程系統的內存中)。這是理想的,而微軟正在通過管理員模式將RDP轉變。有一種通過PowerShell遠程連接到遠程系統的方法,並能夠通過CredSSP使用憑據。但是這裡的問題是CredSSP不安全。

Joe Bialek在PowershellMagazine.com關於這種連接寫到:

「使用PowerShell遠程連接時管理員面臨的常見問題是「雙跳」問題。管理員使用PowerShell遠程連接連接到伺服器A,然後嘗試從伺服器A連接到伺服器B.不幸的是,在第二步時連接失敗。

原因是,默認情況下,PowerShell使用「網路登錄」遠程處理身份驗證。網路登錄通過向遠程伺服器證明您擁有用戶憑據而不向該伺服器發送憑證(參見Kerberos和NTLM身份驗證)。因為遠程伺服器不擁有憑據,所以當您嘗試進行第二跳(從伺服器A到伺服器B)時,它會失敗,因為伺服器A沒有憑證到伺服器B,進行身份驗證失敗。

為了解決這個問題,PowerShell提供了CredSSP(Credential Security Support

Provider)選項。使用CredSSP時,PowerShell將執行「網路清除文本登錄」而不是「網路登錄」。網路清除文本登錄通過將用戶的明文密碼發送到遠程伺服器。使用CredSSP時,伺服器A將發送用戶的明文密碼,因此能夠對伺服器B進行身份驗證。這樣」雙跳」連接就會成功。

更新:這次實驗是在Windows2012上進行的,微軟已經在WIN

server2012R2以及win8.1上做出了更改,不會將明文密碼存儲在內存裡面。這就意味著攻擊者即使運行Mimikatz也不會得到明文密碼,但是攻擊者還是可以看到你的NT密碼的hash值以及你的Kerberos

TGT,這兩者與得到密碼相比,都是一樣的。都可用於網路身份驗證。

此外,即使您的明文憑據未保存在內存中,仍會發送到遠程伺服器。攻擊者可以在本地安全機構子系統服務(LSASS.exe)中注入惡意代碼,並在傳輸過程中攔截您的密碼。所以儘管你可能不會再看到你的密碼了,你的密碼仍然可以被攻擊者得到。

所以,請不要使用CredSSP。類似的一個漏洞是在Powershell遠程連接中使用的WinRM中的一個配置問題,這個配置叫做:「AllowUnencrypted」。將這個配置選項改為」True」,就會禁用通過這個系統的任何WinRM通信的加密,使用明文傳輸。當然也包括Powershell遠程鏈接。

5.hash傳遞攻擊到憑證傳遞攻擊

大部分人都應該聽過hash傳遞攻擊(pass-the-hash(PtH)),它是通過找到用戶密碼的hash值來進行攻擊的。(通常是NTLM密碼hash),使用PtH進行攻擊有趣的地方是,他不需要知道明文密碼到底是什麼,因為在windows的網路通信中,Hash就是用來對用戶身份進行驗證的。

微軟的產品和工具顯然不支持傳遞哈希攻擊,所以需要第三方工具,如Mimikatz。一旦發現密碼哈希,Hash傳遞攻擊為攻擊者提供了很多途徑,但還有其他選擇。憑證傳遞攻擊(Pass-the-Ticket(PtT))通過收集已經存在的kerberos憑證,並且使用它進行用戶驗證。

Mimikatz支持收集當前用戶的Kerberos憑證,也可以收集經過系統驗證的每個用戶的Kerberos憑證(如果配置了Kerberos無約束委託,這可能是一個很大的問題)。一旦獲得Kerberos憑證,他們可以使用Mimikatz傳遞,並用於訪問資源(當然是在Kerberos票據生存期內)。

超hash傳遞攻擊(OverPass-the-Hash)又名密鑰傳遞攻擊。這種攻擊涉及使用獲取的密碼哈希來獲取Kerberos憑證。此技術清除當前用戶的所有現有Kerberos密鑰(哈希值),並將獲取的哈希值注入到Kerberos憑證請求的內存中。下一次需要Kerberos憑證進行資源訪問時,注入的散列(現在是內存中的Kerberos密鑰)用於請求Kerberos憑證。Mimikatz提供執行OverPass-the-Hash的功能。因為有方法對hash傳遞攻擊進行檢測,所以這種方法是相對來說比較好的。

注意:如果獲取的散列是NTLM,則Kerberos憑證加密方法是RC4。如果散列加密方法為AES,則Kerberos票使用AES進行的加密。

當然還有很多用來竊取憑證的方法,不過這幾種是最常用的:

  • hash傳遞攻擊(PtH):抓住哈希並使用它來訪問資源。用戶更改帳戶密碼之前有效。

  • 憑證傳遞攻擊(PtT):抓取Kerberos憑證,並且使用它進行訪問資源。攻擊有效期是在票證有效期之內(一般為7天)。

  • 超hash傳遞攻擊(OPtH):使用密碼哈希來獲取Kerberos憑證。用戶更改帳戶密碼之前,哈希才有效。

解決方法:

  • 管理員應該有管理活動的單獨管理主機。管理員帳戶不應該登錄到正在執行用戶活動(如電子郵件和網頁瀏覽)的主機。這會大大減少了盜號機會。請注意,智能卡不會阻止用戶信息泄漏,因為在訪問智能卡時仍會用到賬戶對應的hash值。智能卡僅確保正在對系統進行登錄的用戶擁有智能卡。一旦用於對系統進行身份驗證,智能卡雙因素身份驗證會就會成為使用帳戶的密碼的一個因素,也就是用戶密碼的hash值。此外,一旦帳戶配置為智能卡身份驗證,系統會為該帳戶生成一個新密碼(並且從未更改)。

  • 主機和伺服器上的所有本地管理員帳戶密碼應使用像Microsoft LAPS這樣的產品,使用較長,複雜和隨機的密碼。

  • 配置組策略以防止本地管理員帳戶通過網路進行身份驗證。以下GPO示例可防止本地帳戶通過網路登錄(包括RDP),並阻止域管理員和目錄林管理員登錄。 GPO包括以下設置:

    1. 拒絕以下賬戶從網路訪問此計算機:本地帳戶,目錄林管理員(Enterprise Admins),域管理員n2. 拒絕以下賬戶通過遠程桌面服務登錄:本地帳戶,目錄林管理員,域管理員n3。拒絕本地登錄:目錄林管理員,域管理員n

6.獲取活動目錄中的資料庫文件訪問許可權(ntds.dit)

活動目錄的資料庫文件(ntds.dit)包含有關活動目錄域中所有對象的所有信息。此資料庫中的數據將複製到域中的所有域控制器。該文件還包含所有域用戶和計算機帳戶的密碼哈希值。域控制器(DC)上的ntds.dit文件只能由可以登錄到DC的用戶訪問。很明顯,保護這個文件至關重要,因為攻擊者訪問這個文件會導致整個域淪陷。以下是一個不完整的列表,用於非域管理員情況下,獲取NTDS.dit數據方法:

備份路徑(備份伺服器存儲,媒體或網路共享))

攻擊者使用備份共享中的ntds.dit文件訪問域控備份並且安裝後門。確保存儲域控備份的任何網路位置已經被保護。只有域管理員才能訪問它們。

在成為域控之前伺服器上查找NTDS.dit文件

IFM與DCPromo是使用的」從媒體安裝」的安裝方式,因此正在升級的伺服器不需要通過網路從其他域控複製域數據。

IFM集是NTDS.dit文件的副本,可以在共享上分享用來配置新的域控,或者可能在尚未被提升為域控的伺服器上找到。並且此伺服器可能沒有被正確的保護。

通過虛擬機的管理許可權,克隆虛擬域控,並且離線獲得數據

訪問虛擬域控存儲數據並訪問域憑據。你運行VMWare嗎? VCenter Admins是完整的管理員,具有全部許可權。所以使用VCenter Admin許可權可以克隆域控並將數據複製到本地硬碟。

當VM掛起時,也可以從VM內存中提取LSASS數據。不要低估虛擬管理員對虛擬域控制器的影響。如果你的VCenter管理員組是在域控當中,那麼你需要儘快改變這一設置。授予相應組的適當許可權,不要通過伺服器管理員帳戶為攻擊者提供後門攻擊域控的能力。

攻擊有權登錄到域控的賬戶

在活動目錄中,有幾個組是最不應該對域控制器具有默認登錄許可權的。

這些組可以默認登錄到域控制器:

Enterprise Admins (目錄林管理員組)

Domain Admins(域管理員組)

Administrators(管理員組)

Backup Operators(備份操作成員)

Account Operators(賬戶管理組)

Print Operators(印表機操作組)

這意味著如果攻擊者可能會損害帳戶管理組或印表機操作組中的帳戶,則活動目錄域可能會受到威脅,因為這些組對域控制器具有登錄許可權。

解決方案:

  • 限制有權登錄到域控制器的組/帳戶。

  • 限制具有完整活動目錄許可權的組/帳戶,特別是服務帳戶。

  • 保護活動目錄資料庫的每一個副本,並且不要將它放在比域控信任級別低的主機上面。

那麼,當一個帳戶具有域控制器的登錄許可權會怎麼樣?如果是域控,那當然是先把所有的登錄憑證全部獲取到本地。

1.使用Mimikatz獲取所有登錄信息

Mimikatz可以從域控上面抓取到所有賬戶信息:

2.使用Mimikatz轉儲LSASS內存(獲取域管理員憑據)

Mimikatz可用於轉儲LSASS,然後從不同系統上的LSASS.dmp文件中提取登錄憑據。在域控制器上,這幾乎總是導致域管理員憑據。

3.使用任務管理器轉儲LSASS內存(獲取域管理員憑據)

一旦LSASS被轉儲,mimikatz就可以對lsass.dmp進行提取。

4.用NTDSUtil創建媒體安裝集(IFM) (用於抓取NTDS.dit文件)

NTDSUtil一個本地運行的針對活動目錄資料庫(ntds.dit)的命令,並且允許為DCPromo準備IFM集。IFM是用於DCPromo命令中」從媒體安裝」這一過程的,所以,在配置域控時就不需要通過網路從其他域控拷貝數據。IFM集,並且也會在c:/temp目錄下生成的一份NTDS.dit附件。

該文件可能會在新域控上進行共享,或者可能在尚未升級成域控的新伺服器上找到該文件。這樣的伺服器可能未正確保護。

5.從NTDS.dit文件(和註冊表系統配置單元)轉儲活動目錄域憑據。

一旦攻擊者擁有NTDS.dit文件的副本(以及某些註冊表項用來解密資料庫文件),則可以提取活動目錄資料庫文件中的憑證數據。

一旦攻擊者從註冊表和NTDS.dit fie獲得系統配置單元,他們就擁有所有的管理員憑據!這個截圖來自一個安裝了Impacket python工具的Kali。使用Impacket中的secretsdump.py python腳本轉儲DIT。

截至2015年10月,還有一種Windows方法:利用PowerShell方法從DSInternals.com中的NTDS.dit文件(和註冊表系統配置單元)中轉儲憑據,名為Get-ADDBAccount(儘管它僅適用於Windows 8和Windows Server 2012及更高版本)。

一旦攻擊者轉儲了域資料庫,就有很多選擇來持久化並保留高級許可權,包括創建和使用Golden Tickets,從拿下單個域到控制整個目錄群。

參考鏈接:

  • Sean Metcalf關於Active Directory安全性的演講

  • Mimikatz指南和命令參考

  • 最常見的活動目錄安全問題和您可以做些什麼來解決它們

  • 在SYSVOL中查找密碼並利用組策略首選項

  • MS14-068漏洞,利用和漏洞檢測

  • 使用Kerberoast破解Kerberos TGS票證 – 利用Kerberos來攻擊活動目錄域

  • 攻擊者如何轉儲活動目錄資料庫憑據

  • 使用組策略首選項進行密碼管理=壞主意

  • 潛行的活動目錄持久性技巧

  • Gloden Tiket通過控制一個域,進而控制整個目錄群

  • PowerSploit功能Get-GPPPassword

  • 現在已經修補的組策略首選項密碼漏洞

  • Microsoft本地管理員密碼解決方案(LAPS)

  • Tim Medin的DerbyCon在2014年(幻燈片和視頻)中發布了Kerberoast Python TGS cracker,「攻擊微軟Kerberos」演示文稿

本文翻譯自Attack Methods for Gaining Domain Admin Rights in Active Directory,如若轉載,請註明原文地址:t從活動目錄中獲取域管理員許可權的6種方法 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

20元感冒藥賣65萬,揭秘互聯網交易的黑暗一面
IoT Security Guideline 1 - overview
價值10000美元的Uber漏洞,可隨意重置任何賬戶的密碼
洋娃娃黑化 變身「竊聽狂魔」?德國禁售「間諜」洋娃娃Cayla
重磅來襲 | 安全客2017季刊—第4期,這次讓我們談談尺度問題

TAG:技术分析 | 网络安全 |