如何破解128位密碼?
使用可逆加密儲存的密碼,即使它們非常長,也可以被攻擊者輕易的逆向破解。
破解密碼是一個非常有趣的挑戰,Hashcat系列軟體是非常強大的開源的密碼破譯軟體,號稱世界上最快的密碼破解軟體。Hashcat是基於GPGPU規則引擎,免費多GPU(高達128個GPU),多雜湊,多作業系統(Linux和Windows本地二進位制檔案),多平臺(OpenCL和CUDA支援),多演算法,資源利用率低,支援分散式破解等,配合強大的字典,可以破譯超過百分之九十的密碼。啟動Hashcat意味著密碼破解的成功率超過了一半,該工具分析一堆雜湊的時間僅需幾分鐘。目前最新版本為ofollow,noindex">4.01 ,Hashcat目前支援各類公開演算法高達247類,市面上公開的密碼加密演算法基本都支援!
hashcat系列軟體在硬體上支援使用CPU、NVIDIA GPU、ATI GPU來進行密碼破解。在作業系統上支援Windows、Linux平臺,並且需要安裝官方指定版本的顯示卡驅動程式,如果驅動程式版本不對,可能導致程式無法執行。NVIDIA users GPU破解驅動需要ForceWare 331.67以及更高版本 ,AMD使用者則需要Catalyst 14.9以及更高版本,可以通過Catalyst自動偵測和下載檢測工具來檢測系統應該下載那個版本,點此 下載。
簡而言之,密碼破解工具的破解原理都是通過獲取潛在密碼(例如Autumn2018),然後計算對應的雜湊值。之後,Hashcat將新計算的代表Autumn2018的雜湊值與你給出的雜湊值列表進行比較。如果找到一個或多個匹配項,則表示這些帳戶使用的是密碼Autumn2018。
一切提取工作都開始於從域控制器中提取雜湊值。通常情況下,提取者會提升到域管理並登入到域控制器以獲得所需的檔案。
有時甚至更容易,只要有一個備份檔案可供較低許可權的帳戶訪問,且該檔案包含Active Directory(AD)資料庫即可。
由於提取者無法複製活動且正在執行的AD資料庫(它在使用時被鎖定),因此提取者會建立一個VSS快照並將ntds.dit檔案與包含提取雜湊所需的BOOTKEY的SYSTEM登錄檔配置單元一起復制。本文所講樣本的研究者通常使用內建的ntdsutil命令執行此操作,然後再使用Impacket secretsdump Python指令碼來實際從資料庫中提取雜湊值。
secretsdump.py -system SYSTEM -ntds ntds.dit LOCAL -outputfile breakme
雖然以上的操作經常會出現包含NTLM雜湊值的* .NTDS檔案,但在最近的測試中,指令碼還會輸出副檔名為“.CLEARTEXT”的檔案。(為了保護測試者的隱私,有些樣本是在實驗室中重新建立的,但這確實發生在實際測試中。)
secretsdump指令碼使用outputfile引數指定的字首“breakme”將所有雜湊值寫入檔案,在本文列舉的案例中,發現了NTLM雜湊,明文雜湊和Kerberos金鑰。事實證明,“CLEARTEXT”檔案包含相關使用者的明文密碼,其中包括幾個長度為128個字元的密碼!所以,這篇文章主要講的是CLEARTEXT檔案。
CLEARTEXT檔案實際上有一個包含每個使用者帳戶和相應的明文密碼的輸出檔案,不需要破解。當然,研究者立即抽查了其中的一些賬戶(一個域管理帳戶),看看密碼是否有效,經過一番調查,研究人員瞭解到至少有幾種不同的機制會強制儲存明文憑據。
注意:Cleartext並不真正意味著密碼按原樣儲存,它們使用RC4加密以加密形式儲存。用於加密和解密的金鑰是SYSKEY,它儲存在登錄檔中,可以由域管理員提取。這意味著雜湊值可以簡單地逆向為明文值,因此稱為“可逆加密”。
對於使用可逆加密儲存密碼的帳戶,Active Directory Users and Computers (ADUC)中的帳戶屬性可能會顯示使用可逆加密檢查儲存密碼的複選框。
研究人員可以使用以下Shell/">PowerShell命令,為UserAccountControl屬性中設定了可逆加密標誌的任何使用者查詢AD。
Get-ADUser-Filter‘useraccountcontrol-band128’-Properties useraccountcontrol| Format-Table name, samaccountname,useraccountcontrol
如果你想要了解有關此命令語法的詳細資訊,請向下滾動到標題為In the Weeds的底部。否則,只需說上面的命令就可以獲得所有已配置為使用可逆加密儲存密碼的帳戶。
也許你會好奇,為什麼會以這種方式儲存憑據呢?答案是某些應用程式需要這種儲存機制。為此,微軟為需要知道使用者密碼值的應用程式提供了這種機制,以強制儲存可逆加密的密碼,以便對使用者進行身份驗證。目前我所知道的需要可逆加密的應用程式是MS CHAP,SASL摘要式身份驗證,需要對Windows域進行身份驗證的舊MacOS主機。不過,也很可能還有其他第三方應用程式也使用它。
以下是Microsoft關於此設定 的最佳實踐提示:
1.儘管需要域管理員使用上面所示的方法從Active Directory資料庫中提取雜湊,但這意味著DA(或被盜的DA帳戶)可以輕鬆的學習其他使用者的密碼。這違反了不可否認(non-repudiation )原則,該原則會防止使用者對資訊系統內的活動進行有爭議的活動。
2.研究人員經常找到包含VSS快照的備份集,這些快照提供對AD資料庫的訪問。備份集通常可以被較低許可權的帳戶訪問,甚至可以被所有域使用者訪問。在這種情況下,任何域使用者都可以輕鬆訪問使用可逆加密儲存的任何帳戶密碼。
下面是使用PowerShell從Active Directory中提取使用可逆加密儲存密碼的使用者的命令:
Get-ADUser-Filter‘useraccountcontrol-band128’-Properties useraccountcontrol| Format-Table name, samaccountname,useraccountcontrol
下面讓我們一一對每個命令塊進行詳細分析一下:
Get-ADUser是ActiveDirectory PowerShell模組中的一個cmdlet,預設情況下安裝在Windows Server 2008 R2及更高版本上。可以使用Import-Module命令匯入它。
Filter是使用PowerShell表示式告訴cmdlet要搜尋的引數是什麼。在本文的案例中,我們要搜尋具有特定UserAccountControl屬性值的使用者帳戶(稍後將對此進行詳細討論)。
你也可以使用LDAP/">LDAPFilter代替Filter。它與Filter相同,它的功能與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:Active Directory中的UserAccountControl屬性與使用者帳戶設定相關聯,長度為32位。每個位都代表了關於該使用者帳戶的特定設定。例如,當一個帳戶被禁用時,第二個低階位被設定為“1”。在可逆加密的情況下,第8個低階位將被設定為“1”。第8位低階位對應於十進位制值128位。
要訪問此特定值中特定位的值,必須使用邏輯位級操作。要了解有關位級操作的更多資訊,你可以在此處 或點此 檢視。在本文的案例中,-band 128表示使用值為128的位級AND運算來確定是否設定了第8個低位(無論在32位值內設定了哪些其他位)。
如果使用得是LDAPFilter,則通過使用按位操作符(Bitwise operators) 的等效LDAP語法1.2.840.113556.1.4.803來指定按位操作。
通過指定值128,研究人員請求返回第8個低階位設定為“1”的所有記錄。最困難的部分結束了,命令的其餘部分實際上只是格式化輸出。
按位操作符(Bitwise operators) 將其運算元(operands)當作32位的位元序列(由0和1組成),而不是十進位制、十六進位制或八進位制數值。例如,十進位制數9,用二進位制表示則為1001。按位操作符運算元字的二進位制形式,但是返回值依然是標準的JavaScript數值。
Properties useraccountcontrol:由於Get-ADUser命令檢索不包含UserAccountControl屬性的預設屬性集,因此必須使用-Properties引數在結果中明確詢問它。
Format-Table name, samaccountname,useraccountcontrol:Format-Table命令會告訴PowerShell如何將輸出格式化以及要顯示哪些屬性。如果希望垂直列出而不是在表中列出結果,可以使用Format-List而不是Format-Table。當然,你可以將其全部輸出到檔案中以供進一步處理。
Get-ADUser-Filter‘useraccountcontrol-band128’-Properties useraccountcontrol| Format-Table name, samaccountname,useraccountcontrol | Out-File -Encoding ascii MyOutput.txt