??之前看到一篇關于Lsass記憶體dump的文章,學習記錄一下,
??lsass.exe(Local Security Authority Subsystem Service)行程空間中,存有著機器的域、本地用戶名和密碼等重要資訊,如果獲取本地高權限,用戶便可以訪問 LSASS 行程記憶體,從而可以匯出內部資料(password),用于橫向移動和權限提升,
??Windows環境中,一款知名的開源工具Mimikatz(開發者為Benjamin Delpy)可以從 LSASS 記憶體資料中提取用戶名和密碼,但是直接運行相應工具,可能會被本地AV產品檢測到,因此 dump LSASS 行程記憶體后進行回傳變得原來越常見,
Dump LSASS 的已知方法
1. 微軟簽名檔案
-
ProcDump
ProcDump是微軟簽名的合法二進制檔案,被提供用于轉儲行程記憶體,
-
任務管理器
打開任務管理器,選中目標行程,右鍵選單中點擊“創建轉儲檔案”,檔案保存為%temp%\<行程名>.dmp,
-
ProcExp
和ProcDump同屬于Windows提供的合法工具,該程式可以認為是任務管理器的升級版,同樣是右鍵選中目標行程后創建轉儲檔案,包括 Minidump 和 Full Dump 兩種,如果是要竊取 LSASS 中的用戶登錄憑據,應選擇全部DUMP,
-
SQLDumper
SQLDumper.exe包含在Microsoft SQL和Office中,可生成完整轉儲檔案,
-
Comsvcs.dll
每個Windows系統中都可以找到該檔案,可以使用Rundll32執行其匯出函式MiniDump實作行程的完全轉儲,
-
CreateDump.exe
.NET5中提供的工具,
2. 其他工具/方法
- PowerSploit的模塊之一Out-MiniDump
- Process Hacker
- AvDump.exe(Avast反病毒產品組件)
3. 全記憶體轉儲(指的是整個RAM記憶體空間進行轉儲,耗時長且占磁盤空間大)
- WinPmem
- RowCopy(從 hiberfil.sys 匯出憑據)
- 從 VMEM/VMSN 中獲取憑據,這二者是虛擬機記憶體存盤檔案
4. 自定義轉儲
- MiniDumpWriteDump方法,匯出自dbghelp.dll,該API呼叫 NtReadVirtualMemory 讀取目標行程記憶體資料
- MiniDumpWriteDump + PssCaptureSnapshot,后者可用于獲取目標行程的記憶體快照,之后呼叫MiniDumpWriteDump將從獲取的快照記憶體中讀取資料,而不是直接從目標行程中獲取,更容易躲避AV/EDR檢測,
一種DUMP LSASS的新方式
??該技術和Werfault.exe行程有關,在某個運行中的行程崩潰時,werfault.exe將會Dump崩潰行程的記憶體,從這一點看,可以利用該行為進行目標行程記憶體的Dump,
??這種方法依賴于Win7開始引入的一種被稱為“靜默行程退出”的機制,該機制提供了在兩種情況下可以觸發對被監控進行進行特殊動作的能力:
??(1)被監控行程呼叫 ExitProcess() 終止自身;
??(2)其他行程呼叫 TerminateProcess() 結束被監控行程,
??經過配置,在觸發"靜默行程退出"機制時,可被支持的幾個動作包括:
- 啟動一個監控行程
- 顯示一個彈窗
- 創建一個Dump檔案
??這里主要討論第3種方式,即創建DUMP檔案,
??要對一個行程設定”靜默退出“監控,需要對幾個注冊表項進行預置:
-
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<被監控行程名>\ 注冊表項下的GlobalFlag值:0x200(FLG_MONITOR_SILENT_PROCESS_EXIT);
-
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\<被監控行程名>\ 注冊表項下的3個鍵值:
1)ReportingMode(REG_DWORD),該值可設定為以下幾個,具有不同功能:
??a)LAUNCH_MONITORPROCESS (0x1) – 啟動監控行程;
??b)LOCAL_DUMP (0x2) – 為導致被監控行程終止的行程和被監控行程本身 二者 創建DUMP檔案;
??c)NOTIFICATION (0x4) – 顯示彈窗,2)LocalDumpFolder (REG_SZ) – DUMP檔案被存放的目錄,默認為
%TEMP%\\Silent Process Exit;3)DumpType – 根據 MINIDUMP_TYPE 列舉值指定DUMP檔案的型別 (Micro, Mini, Heap 或 Custom) ,完全轉儲目標行程記憶體的值為
MiniDumpWithFullMemory(0x2),
??那么現在只需要終止目標行程即可獲得相應檔案的DUMP檔案,但是我們的目的是為了獲取LSASS行程中的管理員登錄憑據,而kill掉LSASS意味著系統將重啟,不僅增大了被發現的風險,還可能導致程式無法再次運行,
??那么是否具有可以觸發”Silent Process Exit“機制但又不實際終止被監控行程的方法呢?還是有的,根據作者所述,它參考了博客 Hexacorn’s blog(該博客發布過大量Windows平臺利用技術的研究文章) ,從中可知,當行程終止時,它將從ntdll.dll呼叫 RtlReportSilentProcessExit API,該API將與Windows錯誤報告服務(WerSvcGroup下的WerSvc )通信,以告知當前行程正在執行靜默退出,然后,WER服務將啟動WerFault.exe轉儲當前行程,值得注意的是,呼叫此API不會導致行程退出,這可以讓我們在LSASS行程上執行DUMP動作而不導致LSASS的終止,
NTSTATUS(NTAPI* RtlReportSilentProcessExit) (
_In_ HANDLE ProcessHandle,
_In_ NTSTATUS ExitStatus
);
??作者使用兩種方式,一種是直接呼叫RtlReportSilentProcessExit,一種是遠程在LSASS中創建執行緒執行RtlReportSilentProcessExit,這里我只嘗試直接呼叫RtlReportSilentProcessExit,注入其他行程動作太多了(懶),

??通過Procmon觀察一下,可知行程順序是 lsassdump.exe->svchost.exe (WerSvcGroup)->WerFault.exe,由運行級別為high的Wefault.exe進行dump檔案創建,


??CODE
??檢測方法就看攻擊程序分析一一識別,
??關于另一個使用Silent Process Exit進行持久化駐留的手法,個人感覺純粹為了持久化的話感覺沒有那么實用,倒不如用于惡意行程被洗掉時進行保護,比如重啟或是延遲重啟、重命名移動重啟等等,不過如果對于專業人員沒啥用,
參考
https://www.deepinstinct.com/2021/01/24/lsass-memory-dumps-are-stealthier-than-ever-before/
https://www.deepinstinct.com/2021/02/16/lsass-memory-dumps-are-stealthier-than-ever-before-part-2/
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/registry-entries-for-silent-process-exit
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/270524.html
標籤:Windows
上一篇:Win10環境搭建
