◆嚴比卓 黃 佳
(長沙市中心醫院 湖南 410000)
關于滲透測試密碼破解的研究
◆嚴比卓 黃 佳
(長沙市中心醫院 湖南 410000)
密碼破解是進行滲透測試中發現信息系統漏洞的常用方法。本文分別從破解工具和破解方式兩個方面,對暴力破解和散列還原的破解方式進行研究,并給出了預防這些攻擊的應對方法。
滲透測試;系統漏洞;密碼破解
滲透測試是通過模擬惡意黑客的攻擊手法,來對目標網絡系統的安全進行評估的一種方式[1]。在滲透測試的過程中,任何僅通過密碼進行身份鑒別而沒有采用雙因素認證的應用或系統,對其密碼的暴力破解總是可實現的。下面對在滲透測試中進行密碼破解的經驗以及所使用的工具和方法進行研究。
常用密碼破解工具:
(1) Burp Suite(https://portswigger.net/burp/): 在線Web 登錄表單破解;
(2) Hydra (https://www.thc.org/thc-hydra/): 在線服務破解;
(3) Hashcat (http://hashcat.net/hashcat/): 離線Hash破解;
(4)Mimikatz (https://github.com/gentilkiwi/mimikatz): Windows密碼還原。
當然,一份優秀的字典也是必不可少的,好的字典在密碼猜解過程中往往可以找到系統的突破口,有效提升滲透測試的成功率。
3.1 暴力破解
3.1.1 Web 表單破解
以單一密碼作為身份認證的 Web 登錄表單,一直是滲透測試中尋求突破的入口,尤其是針對網站管理后臺的暴力猜解。通常網站會采用驗證碼來防止工具的暴力猜解。當一個 Web登錄表單滿足以下條件之一時,即可進行暴力破解:
(1)沒有驗證碼機制;
(2)服務端沒有及時銷毀用戶會話中的驗證碼導致驗證碼復用;
(3)所用驗證碼圖形較為簡單,可被工具輕易識別。
工具Burp Suite 的Intruder 模塊是一個針對Web應用的自動化攻擊工具,其主要應用場景即針對Web登錄表單的暴力猜解,尤其是Burp 1.7版本最高支持999線程,大大提高了暴力破解的速度。通常根據響應包的長度,HTTP 狀態碼或響應包中的關鍵字來判斷是否登錄成功。
3.1.2 常用服務爆破
服務爆破工具有 Medusa 和 hydra等,均支持 ftp、 ssh、telnet、pop3、smtp、mysql、mssql、rdp等常用服務。對于僅僅內網才能訪問的服務,運維人員的安全意識不足,通常存在各種弱口令以及相同服務使用相同口令的情形。
對服務的爆破適用于內網滲透,此時測試人員已經擁有一臺內網服務器權限或者其上的 Webshell,可以以此服務器或Webshell 作為代理,突破邊界防火墻,對內網其他服務進行爆破,一般能夠發現多個弱口令。
3.2 散列還原
在滲透測試過程中,除了密碼從無到有的過程,還有大量已知密碼Hash需要恢復出明文密碼的情形。這些密碼 Hash一般通過SQL注入,直接訪問數據庫,嗅探等方式獲得。
(1)爆破還原
很多網站使用MD5, SHA1等Hash函數來加密用戶口令,MySQL數據庫也使用自定義名為MySQL323或MySQL5的算法加密數據庫口令,這些Hash函數(算法)都是不可逆的。因此,要想從密碼Hash直接恢復出明文密碼是不可能的。但是通常情形下,Hash值是唯一的,從而黑客可以收集大量常用明文密碼,計算出其Hash值,并與已有Hash值進行比對,Hash值匹配相等則視為明文密碼相同。
字典爆破是還原Hash值最合適的方法。該方法通過收集各大網站泄漏的數據庫中的明文密碼生成字典,破解一般用戶的密碼成功率很高。Hashcat支持多種已知加密算法,且能夠跨平臺運行,是字典爆破的理想工具。
Hashcat使用方法為:
hashcat.exe m 〈hash類型〉 -a 〈破解方式〉〈hash文件〉〈字典/掩碼〉
掩碼攻擊是另一種暴力破解Hash的方式。通過分析國人使用密碼的習慣,中國人習慣用姓名首字母縮寫加上6位或8位生日、QQ號、手機號等數字作為密碼,這樣的密碼對使用者來說記憶方便,但是對于攻擊者來說,暴力猜解密碼并不需要遍歷所有可能的明文空間。如果以?l代表一位小寫字母,?d代表一位數字,如前所述的密碼組成可能是這樣的,第 1-3 位(或第 1-2位)是?l,然后接著6位?d或8~9位?d或11位?d。如此一來,黑客需要窮舉的明文密碼所有值的數量將大大減少,破解成功率也大大提升。圖1所示是Hash Manager通過掩碼攻擊破解某密碼。

圖1 Hash Manager 攻擊破解
無論是字典爆破還是掩碼攻擊,運算速度都是至關重要的因素。多核服務器的運算速度通常遠超個人 PC。但是如果PC帶有獨立顯卡,Hashcat的GPU版本cudaHashcat/oclhashcat使用顯卡進行運算,效率大大超過CPU版本,甚至可能反超多核服務器。
(2)解密還原
在一些應用場景中,數據庫密碼、連接字符串或者通過公開的自定義算法加密,如Weblogic,或者使用DES, AES等對稱加密算法,但是密鑰硬編碼在應用源碼中。當測試人員通過源碼獲知算法與密鑰后,即可將密文恢復為明文密碼。
.NET開發的應用,密鑰和加密算法可能編譯為*.dll存在于網站根路徑的bin目錄中;Java開發的應用,密鑰和加密算法多編譯成*.jar或*.class文件存在于網站根路徑的 WEB-INF/lib或WEB-INF/classes目錄中。
在某服務器的MSSQL數據庫中發現如圖2所示的管理員用戶及密碼Hash。

圖2 管理員用戶和密碼Hash
UserPwd疑似MD5 hash, 但無法解開。分析應用源碼得知其采用的是自定義算法,在網站根路徑的 bin目錄下發現文件BBDCL.dll, 逆向該文件得知應用采用 DES算法,密鑰是"jgheobinhainnnglggzcianjingn", 如圖3所示:

圖3 逆向計算
本地運行 Visual Studio新建.NET項目,導入BBDCL.dll,調用dll中的Decrypt方法,成功解密管理員Hash, 如圖4所示。

圖4 解密管理員Hash
(3)內存還原
用戶登錄Windows操作系統時,明文密碼經過可逆算法加密后存放在Windows認證(lsass.exe)的進程內存中。Mimikatz是一款能夠從lsass.exe進程中獲取內存,并且獲取明文密碼和NTLM哈希值的工具。運行 Mimikatz需要操作系統管理員或 NT AUTHORITYSYSTEM權限,通常使用DEBUG權限執行相關操作,與lsass.exe進程進行交互。其使用過程簡單,將Mimikatz上傳到服務端,運行以下兩條命令,如圖5示。
提升權限:privilege::debug
獲取密碼:sekurlsa::logonpasswords

圖5 獲取密碼
具備強大功能的Mimikatz是殺毒軟件的必殺。除了自行編譯Mimikatz源碼外,還可使用下面兩種手段繞過殺毒軟件的查殺。
(1)直接在內存中調用Mimikatz,避免上傳文件到服務器。
通過Invoke-Mimikatz這個PowerShell腳本,利用mimikatz2.0和Invoke- ReflectivePEInjection將Mimikatz源程序完全加載到系統內存中運行,這將使得轉儲憑證時無需將 Mimikatz 的二進制文件寫到磁盤中。
通過命令行或PowerShell運行下面的代碼:
PowerShell "IEX (New-Object Net.WebClient).Download String('https://raw.githubusercontent.com/mattifestati-on/Pow-erSploit /master/Exfiltration/Invoke-Mimikatz.ps1');Invoke-Mimikatz DumpCreds"
(2)利用微軟官方工具procdump獲取進程lsass.exe的內存轉儲文件
procdump作為一款內存dump工具,帶有微軟公司官方數字證書簽名,可繞過殺毒軟件的查殺。上傳procdump.exe到目標系統,運行procdump -accepteula -ma lsass.exe lsass.dmp得到內存轉儲文件lsass.dmp, 下載lsass.dmp到本地,運行下面的命令獲取明文密碼。
sekurlsa::minidumplsass.dmp
sekurlsa::logonpasswords
從 Windows 8.1 和 Windows Server 2012 R2 開始,LM 哈希和“純文本”密碼將不在內存中生成。此功能也被“移植”到了較早版本的 Windows 中,Windows 7/8/2008 R2/2012 需要打KB2871997 補丁。為了防止在 lsass.exe 進程中顯示“明文”密碼,下面的注冊表鍵需要被設置為“0”:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecu rityProvidersWDigest “UseLogonCredential”(DWORD)
遇到此種情形時,在命令行中將上述注冊表的值修改為1,然后靜候管理員重新登錄系統即可,此時就可從lsass.exe進程中恢復出管理員密碼。
(1)及時更新操作系統補丁,安裝部署防病毒,防惡意代碼軟件,WAF等,并對最新安全漏洞保持關注;
(2)操作系統、數據庫、應用系統之間不要使用相同或相近易被猜測的密碼;
(3)密碼長度應設置到8位以上,包含大小寫字母、數字、特殊符號至少各兩個,尤其操作系統密碼應設置到大于14位;
(4)Web中間件和數據庫等服務等均不要以 NT AUTHORITYSYSTEM (Administrator)或者root權限運行;
(5)在Windows操作系統中,通常無須使用procdump工具,可將procdump.exe添加到殺毒軟件黑名單,并使用組策略等方式監測注冊表項HKEY_LOCAL_MACHINESYSTEM CurrentControl SetControlSecurityProvidersWDigest“Us eLogonCredential”的值,若值為1即可認為已經遭到了入侵,需要全面排查系統漏洞。
本文對滲透測試過程中的密碼破解進行了一些研究,并給出應對辦法。希望能為讀者提高信息系統安全防范意識和水平帶來幫助。
[1]夏龍,肖明明,馬天遠,王瑾.滲透測試技術在校園網中的應用研究.電腦知識與技術,2016.
[2]段鋼.加密與解密(第三版)[M].電子工業出版社,2008.