尋找活動目錄中使用可逆加密存儲密碼的賬戶

密碼安全問題一直都受到個人和企業的關注。對於個人而言,或許僅僅只是個人隱私的被公開,而對於企業而言則可能會是災難性的。爲了避免出現這種情況,越來越多的企業都開始使用一些不可逆,且強度高的加密算法來加密其賬戶密碼。但一些安全意識薄弱的企業或個人,仍在使用可逆加密存儲其賬戶密碼。一旦使用可逆加密,即使你的密碼設置的非常長也可以被攻擊者輕易的破解。

說到破解,Hashcat絕對是我的首選工。我可以一邊開着Hashcat,一邊做其它的事情。可能只需幾分鐘,幾個小時或短短的幾天,Hashcat就能爲我得到我想要的一切!

Hashcat的工作原理也很簡單。首先,它會獲取潛在的密碼(例如Autumn2018)並計算其哈希值。然後,Hashcat將新計算的代表Autumn2018的哈希值,與你給出的哈希值列表進行比較。如果找到一個或多個匹配項,則表示這些帳戶使用的密碼爲Autumn2018。

好了,話不多說!下面進入我們的正題。

這一切都始於從域控中提取哈希值。通常我們需要先將權限提升爲域管並登錄到域控才能獲取到這些文件。但在某些特殊情況下,可能會存在一個可供較低權限帳戶訪問的備份文件,該文件包含Active Directory(AD)數據庫。

由於當前的AD數據庫出於活動運行狀態,因此我們無法複製該文件(使用時會被系統鎖定)。爲此,我創建了一個VSS快照並將ntds.dit文件與包含提取哈希所需的BOOTKEY的SYSTEM註冊表hive一起復制。我通常使用內置的ntdsutil命令來執行此操作,如下所示:

然後,我們可以使用Impacket secretsdump Python腳本來從數據庫中提取哈希值。

secretsdump.py -system SYSTEM -ntds ntds.dit LOCAL -outputfile breakme

我原本只想獲取包含NTLM哈希值的*.NTDS文件。但在測試中我意外的發現,腳本還會輸出了擴展名爲“.CLEARTEXT”的文件。

secretsdump腳本使用outputfile參數指定,將所有哈希寫入前綴爲“breakme”的文件。在這個過程中我們發現了NTLM哈希,cleartext哈希,以及Kerberos 密鑰。在“CLEARTEXT”文件中包含了相關用戶的明文密碼,其中包括幾個長度爲128個字符的密碼!

說實話,做了這麼多的測試任務這是我頭一次碰到這種情況。文件中包含的用戶賬戶和相應的密碼一目瞭然,沒有任何的加密保護措施!我立即檢查了其中的一些賬戶(呵呵~其中竟有一個域管理員的賬戶),經過驗證域管的賬戶密碼爲真實可用密碼!經過一番調查,我瞭解到至少有幾種不同的機制會強制存儲明文憑據。

注:Cleartext(明文)並不意味着密碼就是按原樣存儲。它們一般會使用RC4加密形式存儲。而用於加密和解密的密鑰是SYSKEY,它被存儲在註冊表中,可以由域管理員提取。這意味着哈希值可逆爲明文,因此我們稱它爲“可逆加密”。

對於使用可逆加密存儲密碼的帳戶,Active Directory用戶和計算機(ADUC)中的帳戶屬性,會顯示使用可逆加密存儲密碼的複選框。如下所示:

你可以使用以下PowerShell命令,來查詢AD活動目錄中UserAccountControl屬性中設置了可逆加密標誌的任何用戶:

Get-ADUser  -Filter  ‘useraccountcontrol  -band  128’  -Properties useraccountcontrol  | Format-Table name, samaccountname,useraccountcontrol

那麼,爲什麼要支持這種不安全的可逆加密存儲呢?答案是爲了滿足某些應用程序的需要。因此,微軟爲需要知道用戶密碼值的應用程序提供了一種機制,就是強制存儲可逆加密的密碼,以便對用戶進行身份驗證。我所知道的需要可逆加密的應用程序是MS CHAP, SASL Digest身份驗證,需要對Windows域進行身份驗證的舊版MacOS主機。也很可能還有其他一些我不知道的,第三方應用程序也需要用到。

以下是微軟關於該設置的最佳實踐提示:

  1. 即使它需要域管理員使用上面的方法,從Active Directory數據庫中提取哈希值,也意味着DA(或被盜取的DA帳戶)可以輕鬆地學習其他用戶的密碼。這違反了不可否認原則。不可否認性的目的是爲解決有關事件或行爲是否發生過糾紛,而對涉及被聲稱事件或行爲不可辯駁的證據進行收集、維護和使其可用並且證實。
  2. 我們經常發現包含VSS快照的備份可以訪問AD數據庫。備份文件通常可由較低權限的帳戶訪問,甚至是所有的域用戶。在這種情況下,任何域用戶都可以輕鬆訪問,使用可逆加密存儲的任何帳戶密碼。

下面,我來分解下之前那條使用PowerShell從AD中提取使用可逆加密存儲密碼用戶的命令。

Get-ADUser  -Filter  ‘useraccountcontrol  -band  128’  -Properties useraccountcontrol  | Format-Table name, samaccountname,useraccountcontrol

Get-ADUser – 是Active Directory PowerShell模塊中的cmdlet,默認情況下安裝在Windows Server 2008 R2及更高版本上。可以使用Import-Module命令導入它。

Filter – 使用PowerShell表達式告訴cmdlet搜索參數是什麼。這裏,我們搜索的是具有特定UserAccountControl屬性值的用戶帳戶。

你也可以使用LDAPFilter,它與Filter是相同的,但使用的是LDAP查詢語法。查找所需UserAccountControl值的正確語法如下:

Get-ADUser -LDAPFilter “(&(objectCategory=Person)(UserAccountControl:1.2.840.113556.1.4.803:=128))” -Properties useraccountcontrol | Format-Table name,samaccountname

useraccountcontrol -band 128

AD中的UserAccountControl屬性是與用戶帳戶的設置相關聯的屬性,長度爲32位。每個位代表有關該用戶帳戶的特定設置。例如,當帳戶被禁用時,第二個低位被設置爲“1”。在可逆加密的情況下,將第8個低位設置爲“1”。第8個低位對應於十進制值128。

要訪問其中特定位的值,必須使用邏輯位級操作。瞭解有關更多按位操作的信息,請點擊這裏(或此處)查看。在我們的示例中,-band 128表示使用值爲128的按位AND運算,來確定其是否設置了第8個低位(無論在32位數內設置了哪些其它位)。

如果使用LDAPFilter,則可以通過LDAP語法1.2.840.113556.1.4.803來指定按位操作。通過指定值128,我們請求返回第8個低位設置爲“1”的所有記錄。

Properties useraccountcontrol

由於Get-ADUser命令檢索不包含UserAccountControl屬性的默認屬性集,因此必須使用-Properties參數在結果中明確進行詢問。

Format-Table name, samaccountname,useraccountcontrol

Format-Table命令將告訴PowerShell格式化輸出以及要顯示的屬性。如果你希望結果垂直列出而不是以表格的形式列出,那麼你可以使用Format-List命令。

當然,你也可以將結果全部輸出到一個文件中....

Get-ADUser  -Filter  ‘useraccountcontrol  -band  128’  -Properties useraccountcontrol  | Format-Table name, samaccountname,useraccountcontrol | Out-File -Encoding ascii MyOutput.txt

*參考來源:blackhillsinfosec ,FB小編secist編譯,轉載請註明來自FreeBuf.COM

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章