內(nèi)存竊取與防御:從Mimikatz提取到安全加固)
1. 從攻擊視角看RDP憑據(jù)保護(hù)的薄弱點(diǎn)在內(nèi)網(wǎng)環(huán)境中遠(yuǎn)程桌面協(xié)議RDP一直是運(yùn)維管理最常用的通道之一。但恰恰是這種高權(quán)限的遠(yuǎn)程訪問方式成了內(nèi)網(wǎng)攻擊鏈中被重點(diǎn)針對的環(huán)節(jié)。最近我復(fù)盤了一次針對模擬內(nèi)網(wǎng)環(huán)境X的完整攻防流程對RDP憑據(jù)在內(nèi)存中被竊取的過程做了詳細(xì)記錄這里從操作者視角出發(fā)把整個思路和關(guān)鍵細(xì)節(jié)梳理出來希望幫助安全從業(yè)人員更深入地理解攻擊路徑從而有針對性地強(qiáng)化防御。先說一下背景。某次授權(quán)演練中我負(fù)責(zé)模擬攻擊者從邊界突破后的橫向移動環(huán)節(jié)。在拿下一臺普通辦公終端后發(fā)現(xiàn)該終端的本地管理員組里存在一個高權(quán)限賬戶且該賬戶最近有過遠(yuǎn)程登錄其他服務(wù)器的行為。通過條件判斷這臺終端上極有可能存在該賬戶的明文密碼或可重用的憑據(jù)哈希。于是我采用mimikatz對本地內(nèi)存中的RDP相關(guān)憑據(jù)進(jìn)行了提取。整個過程非常順利幾分鐘內(nèi)就獲取到了目標(biāo)服務(wù)器的遠(yuǎn)程登錄權(quán)限。這個案例說明RDP憑據(jù)一旦在內(nèi)存中被暴露攻擊者可以輕松實現(xiàn)內(nèi)網(wǎng)環(huán)境和核心系統(tǒng)的橫向滲透。這篇文章由三部分組成先拆解RDP憑據(jù)為什么會出現(xiàn)在內(nèi)存中再詳細(xì)介紹基于mimikatz的提取思路和實際操作最后結(jié)合實戰(zhàn)場景分析如何發(fā)現(xiàn)和阻斷這類攻擊。無論你是紅隊滲透測試人員、藍(lán)隊防御人員還是企業(yè)IT管理員這一整套邏輯都值得收藏參考。提示本文所有內(nèi)容僅限授權(quán)環(huán)境下的安全測試與防御研究。任何未授權(quán)環(huán)境下的攻擊行為均違反法律法規(guī)請讀者務(wù)必注意適用范圍。2. RDP憑據(jù)泄露的根源內(nèi)存中的明文與哈希2.1 操作系統(tǒng)為什么要保留這些憑據(jù)很多人不理解一個問題為什么Windows系統(tǒng)會在內(nèi)存中保留RDP相關(guān)的憑據(jù)這其實和Windows的憑據(jù)管理機(jī)制有關(guān)。當(dāng)你使用遠(yuǎn)程桌面登錄某臺服務(wù)器時客戶端和服務(wù)器之間會進(jìn)行身份認(rèn)證。在這個過程中操作系統(tǒng)為了優(yōu)化用戶體驗、實現(xiàn)單點(diǎn)登錄效果會在當(dāng)前會話的本地內(nèi)存中暫存一組憑據(jù)信息。這些憑據(jù)可能是明文密碼也可能是經(jīng)過特定算法處理的哈希值。特別是當(dāng)你勾選了“允許保存憑據(jù)”或系統(tǒng)組策略開啟了“將憑據(jù)作為進(jìn)程運(yùn)行”選項時憑據(jù)留在內(nèi)存中的概率會大幅增加。另一個容易被忽略的場景是當(dāng)你從機(jī)器A遠(yuǎn)程登錄機(jī)器B時如果在登錄界面輸入了密碼這個密碼在內(nèi)存中其實會保留一段時間。在Windows 8.1和Windows Server 2012 R2之后微軟做了一些安全性改進(jìn)默認(rèn)情況下不再像早期版本那樣直接保存明文密碼而是保存了加密后的數(shù)據(jù)塊。但問題在于解密這些數(shù)據(jù)塊的密鑰往往也存在于同一臺機(jī)器上——或者存儲在LSASS進(jìn)程本地安全認(rèn)證服務(wù)的上下文中或者可以通過特定方式推導(dǎo)出來。2.2 常見的憑據(jù)存儲位置從攻擊視角看RDP憑據(jù)可能散落在多個位置包括但不限于LSASS進(jìn)程內(nèi)存這是最常見的憑據(jù)寶庫賬號密碼、哈希、Kerberos票據(jù)都集中在這里。憑據(jù)管理器Windows的憑據(jù)管理器Credential Manager會保存遠(yuǎn)程登錄時勾選“記住憑據(jù)”的條目這些憑據(jù)經(jīng)過DPAPI加密但解密的master key可能就在當(dāng)前用戶會話中。RDP緩存文件某些版本或配置下RDP會話的相關(guān)信息會緩存在本地文件中里面可能包含可用的驗證信息。終端服務(wù)相關(guān)的進(jìn)程內(nèi)存如運(yùn)行svchost或其他終端服務(wù)相關(guān)進(jìn)程時也可能在內(nèi)存中保留身份驗證數(shù)據(jù)。這三種位置各具特色LSASS是最高價值的目標(biāo)因為這里面的數(shù)據(jù)是最新的、可用的憑據(jù)管理器更適合拿到穩(wěn)定的、長期有效的口令RDP緩存文件則可能在未及時清理的臨時文件或系統(tǒng)卷影副本中被發(fā)現(xiàn)給攻擊者留下可乘之機(jī)。2.3 為什么Mimikatz能發(fā)揮作用說到mimikatz很多人第一反應(yīng)是“神器”但很少人真正理解它的工作原理。mimikatz之所以能從LSASS進(jìn)程中提取到憑據(jù)基于一個核心前提——LSASS進(jìn)程在認(rèn)證過程中必須使用可逆的加密方式或直接在內(nèi)存中以明文形式處理特定數(shù)據(jù)。以新版Windows系統(tǒng)為例微軟默認(rèn)啟用了“受保護(hù)的用戶”組和Credential Guard等功能來防止憑據(jù)被提取。但在默認(rèn)配置的普通工作站和服務(wù)器環(huán)境中LSASS依然會以傳統(tǒng)方式工作它需要使用用戶的密碼哈希來驗證傳入的認(rèn)證請求并將這些哈希緩存在自己的內(nèi)存空間中。這就為mimikatz這類工具提供了可乘之機(jī)。在解密的原理上wdigest、kerberos、tspkg這幾種不同的認(rèn)證提供程序會分別以不同的格式保存憑據(jù)。其中tspkg終端服務(wù)提供程序與RDP直接相關(guān)當(dāng)用戶通過遠(yuǎn)程桌面進(jìn)行認(rèn)證時tspkg會接收密碼信息并以可逆的格式暫存在內(nèi)存中以便后續(xù)的多跳認(rèn)證和單點(diǎn)登錄。mimikatz正是利用了這一特性通過讀取LSASS進(jìn)程的內(nèi)存空間并解析特定結(jié)構(gòu)來還原這些憑據(jù)。3. 實操前置確認(rèn)環(huán)境與攻擊條件3.1 環(huán)境說明與角色分配這一節(jié)先介紹一下我實際用到的測試環(huán)境方便你對照理解。我所在的模擬域環(huán)境中有三臺主機(jī)攻擊機(jī)模擬攻擊者控制的主機(jī)運(yùn)行Windows 10專業(yè)版IP為192.168.10.50。被突破的普通辦公終端目標(biāo)機(jī)運(yùn)行Windows 10企業(yè)版IP為192.168.10.100屬于某生產(chǎn)域的成員機(jī)器。目標(biāo)服務(wù)器橫向移動的最終目標(biāo)運(yùn)行Windows Server 2016IP為192.168.20.15數(shù)據(jù)庫和內(nèi)部核心應(yīng)用都部署在這臺機(jī)器上。初始攻擊條件如下已通過釣魚郵件拿到辦公終端192.168.10.100的本地管理員權(quán)限。該管理員賬戶在該終端上擁有調(diào)試權(quán)限即具有SeDebugPrivilege。攻擊流程的目標(biāo)是獲取到目標(biāo)服務(wù)器192.168.20.15的RDP訪問權(quán)限進(jìn)而訪問數(shù)據(jù)庫。有了這些條件接下來就是實操的具體過程了。3.2 檢查目標(biāo)是否具備提權(quán)條件在實際執(zhí)行中第一步不是急著去運(yùn)行mimikatz而是先檢查當(dāng)前進(jìn)程是否具備足夠的權(quán)限。通過mimikatz提權(quán)的方式有兩種privilege::debug開啟SeDebugPrivilege用于讀取其他進(jìn)程的內(nèi)存空間。token::elevate將當(dāng)前令牌提升到SYSTEM權(quán)限以便訪問LSASS進(jìn)程。如果當(dāng)前用戶是本地管理員通常privilege::debug就夠了但如果得到的是一個普通用戶權(quán)限那還需要先進(jìn)行本地提權(quán)才能完成后續(xù)步驟。這里有一個經(jīng)常被新手忽略的細(xì)節(jié)如果當(dāng)前會話是UAC用戶賬戶控制過濾后的管理員令牌即便你是管理員組成員也需要先通過token::elevate或繞過UAC方式獲得完整的管理員權(quán)限否則mimikatz后續(xù)操作會失敗。我在實戰(zhàn)中遇到過一個情況拿到的那臺終端上雖然當(dāng)前用戶是管理員但UAC設(shè)置為總是通知導(dǎo)致所有操作都是以受限管理員身份運(yùn)行的。折騰了一陣才發(fā)現(xiàn)要先執(zhí)行UAC繞過這也提醒大家在做攻擊路徑推演時UAC的影響不可小覷。3.3 現(xiàn)場執(zhí)行mimikatz的標(biāo)準(zhǔn)流程確認(rèn)權(quán)限無誤后我按以下流程操作第一步開啟調(diào)試權(quán)限privilege::debug這條命令沒有回顯報錯的話基本就說明權(quán)限夠用了。如果返回錯誤那說明當(dāng)前不是管理員權(quán)限或者被Credential Guard保護(hù)了。第二步提取LSASS中的所有憑據(jù)sekurlsa::logonpasswords這條命令會列出自系統(tǒng)啟動以來的所有登錄會話包括交互式登錄、服務(wù)登錄、網(wǎng)絡(luò)登錄以及最關(guān)鍵的遠(yuǎn)程桌面登錄會話。輸出中會顯示對應(yīng)會話的用戶名、域名、以及NTLM哈希和明文密碼如果系統(tǒng)支持。第三步定向提取RDP相關(guān)憑據(jù)sekurlsa::tspkg這個命令是專門針對終端服務(wù)提供程序的。如果mimikatz中的Sekurlsa模塊能識別LSASS用于tspkg的內(nèi)存地址就可以從中讀出與RDP會話相關(guān)的明文密碼信息。這里要說明的是看到的是最近一次RDP登錄的憑據(jù)而不是歷史上所有的RDP憑據(jù)。第四步檢查憑據(jù)管理器中的RDP條目cmd::lsadump::credman這一步用于查看憑據(jù)管理器里保存的遠(yuǎn)程登錄信息。如果目標(biāo)用戶曾經(jīng)在憑據(jù)管理器中保存過RDP密碼這里就能直接看到。執(zhí)行結(jié)果分析通過sekurlsa::logonpasswords我成功獲取到了192.168.20.15上管理員賬戶的NTLM哈希通過sekurlsa::tspkg還原出了明文密碼。這兩種憑據(jù)信息中的任意一種都可以直接用于遠(yuǎn)程登錄。整個過程從開始到拿到憑據(jù)耗時不超過三分鐘。4. 深入RDP會話憑據(jù)提取的執(zhí)行細(xì)節(jié)4.1 RDP憑據(jù)提取的成功條件RDP憑據(jù)能不能成功提取很大程度上取決于三個條件第一LSASS進(jìn)程中是否存有可解析的密碼信息。這取決于目標(biāo)系統(tǒng)的Windows版本。經(jīng)過實際測試Windows 10 1607版本前的系統(tǒng)比較容易被直接提出明文而1709版本后的系統(tǒng)默認(rèn)情況下不容易直接提出明文但哈希仍然是可以拿到的。在Windows Server 2016默認(rèn)配置下RDP的明文提取概率要高于Windows 10。第二目標(biāo)當(dāng)前是否有活動的RDP會話。如果沒有用戶正在通過遠(yuǎn)程桌面連接這臺機(jī)器或者登錄完成后已經(jīng)注銷了會話憑據(jù)在內(nèi)存中保留的時間就會非常短。最常見的情形是某個運(yùn)維人員正在通過RDP連到服務(wù)器上操作這時同一臺機(jī)器被攻擊者拿到本地管理員權(quán)限內(nèi)存中的RDP憑據(jù)就比較容易提取。第三是否存在可解除加密的DPAPI主密鑰。如果憑據(jù)是通過Credential Manager保存的攻擊者需要以該用戶的身份來解密憑據(jù)條目。如果當(dāng)前不是該用戶上下文還需進(jìn)行額外的分析和對抗比如獲取該用戶的密碼哈希后模擬登錄或利用DPAPI的相關(guān)漏洞來獲取主密鑰。4.2 實戰(zhàn)中細(xì)化的操作步驟我在真實操作時并沒有一套固定的命令走天下而是根據(jù)不同的現(xiàn)場情況微調(diào)方案。下面是我常用的兩套中途方案。方案一直接從LSASS內(nèi)存提取RDP相關(guān)的緩存信息# 先確認(rèn)mimikatz版本和權(quán)限 mimikatz # version # 開啟調(diào)試權(quán)限 privilege::debug # 列出當(dāng)前所有登錄會話 sekurlsa::logonpasswords # 如果輸出過長可以配合log參數(shù)輸出到文件 sekurlsa::logonpasswords /out:cred.txt # 導(dǎo)出LSASS進(jìn)程的內(nèi)存鏡像便于離線分析 sekurlsa::minidump lsass.dmp方案二在目標(biāo)服務(wù)器已開啟Credential Guard的場景下的應(yīng)對手段如果檢測到LSASS進(jìn)程運(yùn)行在受保護(hù)的環(huán)境中通過檢查Lsass進(jìn)程是否存在“LsaIso”進(jìn)程來判斷常規(guī)的mimikatz提取方法就會失效。在這種場景下我的做法是先檢查當(dāng)前系統(tǒng)是否運(yùn)行了LsaIso.exe進(jìn)程如果存在說明已啟用Credential Guard。在這種情況下考慮通過注冊表方式暫時禁用Credential Guard這需要重啟系統(tǒng)代價較大且容易引起藍(lán)隊警覺。或者逆向思路從內(nèi)存文件中找到LSASS進(jìn)程的寫時復(fù)制副本再在離線環(huán)境中使用mimikatz的dcdiy模塊來提取。這里我重點(diǎn)提一下minidump的用法。mimikatz支持通過sekurlsa::minidump讀取離線導(dǎo)出的LSASS內(nèi)存鏡像文件這意味著我們可以先將LSASS的內(nèi)存完整復(fù)制下來再把它拷貝到攻擊機(jī)上慢慢分析。這樣做的好處是目標(biāo)機(jī)器上的操作時間極短不容易被檢測到。常用的導(dǎo)出LSASS內(nèi)存的方式包括使用系統(tǒng)自帶的任務(wù)管理器、或使用其他開源工具如ProcDump等。但需要注意如果在導(dǎo)出過程中被殺毒軟件攔截整個操作就會暴露所以這種方式更多適用于對抗能力較弱的模擬環(huán)境中。4.3 常見參數(shù)與輸出字段解讀實際執(zhí)行sekurlsa::logonpasswords后回顯往往包含大量無關(guān)信息——比如系統(tǒng)服務(wù)賬戶、機(jī)器賬戶的哈希等。這時候如何快速定位RDP憑據(jù)呢我一般會重點(diǎn)看這幾類字段Authentication ID這個字段中的數(shù)字若是以xxxxx結(jié)尾的往往對應(yīng)登錄會話相關(guān)字段正常登錄的會話ID不同具體分析時需要留意。Package如果顯示為tspkg、wdigest、kerberos說明對應(yīng)的憑據(jù)與遠(yuǎn)程桌面認(rèn)證存在關(guān)聯(lián)。Domain和User快速判斷這個憑據(jù)屬于哪個域和哪個用戶。如果看到目標(biāo)是高權(quán)限域管賬戶優(yōu)先級會立刻拉高。NTLM哈希即使沒有明文密碼哈希也可以用于直接遠(yuǎn)程登錄配合RDP的Pass-the-Hash技巧非常有效。Password在某些系統(tǒng)配置下這里會直接顯示明文密碼拿到手直接就能用了。這里我記錄一段典型輸出出于安全考慮已做脫敏處理Authentication Id : 0 ; 0x47f8 (123456) Session : Interactive from 192.168.10.100 User Name : Administrator Domain : X-DOMAIN Logon Server : X-DC01 Logon Time : 2024/3/15 9:24:31 SID : S-1-5-21-123456789-123456789-123456789-500 msv : [00000003] Primary * Username : Administrator * Domain : X-DOMAIN * NTLM : a3f4b2c1d5e6f7a8b9c0d1e2f3a4b5c6 * SHA1 : b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1 tspkg : * Username : Administrator * Domain : X-DOMAIN * Password : CleartextPassword123! wdigest : * Username : Administrator * Domain : X-DOMAIN * Password : (null) kerberos : * Username : Administrator * Domain : X-DOMAIN * Password : CleartextPassword123!看到tspkg和kerberos字段下都出現(xiàn)了明文密碼基本上就說明了這個憑據(jù)可以直接用于遠(yuǎn)程登錄目標(biāo)服務(wù)器192.168.20.15。這里的Password字段顯示的是暫時可用的明文密碼。4.4 RDP會話憑據(jù)與Pass-the-Hash的配合拿到NTLM哈希后還有一個高效的方式配合工具進(jìn)行Pass-the-Hash直接以哈希作為憑據(jù)發(fā)起RDP連接。這種方式在目標(biāo)環(huán)境開啟了Restricted Admin模式的情況下非常有效因為Restricted Admin模式本身就允許使用哈希進(jìn)行認(rèn)證而不需要明文密碼。操作命令大致如下# 使用哈希直接發(fā)起遠(yuǎn)程桌面登錄 xfreerdp /v:192.168.20.15 /u:administrator /pth:a3f4b2c1d5e6f7a8b9c0d1e2f3a4b5c6這種方式的優(yōu)勢在于不需要知道明文密碼而且不會觸發(fā)常規(guī)的“賬戶鎖定”策略因為本質(zhì)上屬于Kerberos的PKINIT機(jī)制隱蔽性更高。當(dāng)然如果目標(biāo)系統(tǒng)不支持Restricted Admin模式就需要先通過哈希獲取明文密碼再用標(biāo)準(zhǔn)方式登錄。整個過程就像打仗時手中同時握有鑰匙和開鎖工具哪個能用就用哪個。5. 檢測與防御從藍(lán)隊視角升級RDP安全5.1 如何發(fā)現(xiàn)攻擊行為如果我是防守方如何發(fā)現(xiàn)mimikatz提取RDP憑據(jù)的行為這需要從兩個角度進(jìn)行檢測。第一個角度是進(jìn)程行為監(jiān)控。正常情況下一個普通進(jìn)程不會主動請求SeDebugPrivilege來讀取LSASS進(jìn)程的內(nèi)容。當(dāng)出現(xiàn)以下行為特征時要立刻拉響警報某個非系統(tǒng)進(jìn)程調(diào)用了OpenProcess去打開LSASS進(jìn)程句柄。某個進(jìn)程嘗試使用MiniDumpWriteDump導(dǎo)出LSASS進(jìn)程的內(nèi)存鏡像。進(jìn)程加載了不常見的DLL到LSASS進(jìn)程中可能是注入攻擊的前奏。第二個角度是系統(tǒng)日志分析。Windows安全日志中與登錄類型和權(quán)限相關(guān)的審計項可以揭示RDP憑據(jù)提取的痕跡登錄類型10遠(yuǎn)程交互式登錄短時間內(nèi)在同一臺機(jī)器上出現(xiàn)大量登錄類型為10的記錄說明有人在批量嘗試RDP連接。事件ID 4624和4625結(jié)合審計策略詳細(xì)記錄每次遠(yuǎn)程登錄的成功與失敗信息。如果看到同一賬戶在短時間內(nèi)連續(xù)登錄多臺機(jī)器很可能是橫向移動。進(jìn)程創(chuàng)建事件事件ID 4688如果捕獲到mimikatz相關(guān)進(jìn)程的執(zhí)行記錄則可以順藤摸瓜找出攻擊源頭。在實際攻防演練中部署EDR終端檢測與響應(yīng)產(chǎn)品會大幅提高發(fā)現(xiàn)這類行為的能力。EDR可以通過行為特征如LSASS內(nèi)存訪問、異常進(jìn)程創(chuàng)建精準(zhǔn)捕獲攻擊行為并自動觸發(fā)響應(yīng)比如隔離主機(jī)、結(jié)束進(jìn)程等。5.2 阻止RDP憑據(jù)被進(jìn)一步濫用防御的核心思路是讓攻擊者在拿到憑據(jù)之后“用不了”。首先必須啟用Credential Guard。這是微軟官方提供的應(yīng)對憑據(jù)竊取攻擊的核心機(jī)制。開啟后LSASS進(jìn)程中的憑據(jù)數(shù)據(jù)將交由獨(dú)立的虛擬化安全進(jìn)程LsaIso保護(hù)常規(guī)的mimikatz提取手段都會失效。啟用方式如下通過組策略開啟“基于虛擬化的安全”。在“設(shè)備安全性”中啟用“內(nèi)核隔離”和“內(nèi)存完整性”。確認(rèn)運(yùn)行msinfo32后“基于虛擬化的安全”顯示為“正在運(yùn)行”。其次可以將高權(quán)限賬戶加入到“受保護(hù)的用戶”組。這個組的成員在認(rèn)證時會使用更嚴(yán)格的機(jī)制不支持NTLM哈希的簡單轉(zhuǎn)發(fā)也不允許委派從而大幅降低憑據(jù)被重放的風(fēng)險。再者建議限制本地管理員權(quán)限。很多攻擊場景中攻擊者之所以能提權(quán)到管理員是因為當(dāng)前用戶本身就在目標(biāo)機(jī)器的本地管理員組中。最小權(quán)限原則的落實程度直接決定了攻擊者的初始權(quán)限上限。5.3 安全配置與基線建議從長期防御視角看RDP相關(guān)的安全加固應(yīng)形成一套完整的基線措施包括但不限于開啟網(wǎng)絡(luò)級別認(rèn)證NLA這要求用戶在建立RDP會話前先完成身份驗證在一定程度上防止了憑據(jù)直接暴露在早期會話中。關(guān)閉不必要的RDP服務(wù)沒有實際需求的服務(wù)器不應(yīng)該開啟遠(yuǎn)程桌面。即使需要開啟也應(yīng)該限制允許來源IP從網(wǎng)絡(luò)層面隔離風(fēng)險。使用遠(yuǎn)程桌面網(wǎng)關(guān)RD Gateway通過網(wǎng)關(guān)中轉(zhuǎn)所有RDP流量并在網(wǎng)關(guān)層實施多因素認(rèn)證這樣即使拿到賬戶密碼也無法直接訪問后端服務(wù)器。定期輪換高權(quán)限口令萬一憑據(jù)已經(jīng)泄露短時間內(nèi)通過定期輪換可以減少影響。尤其是服務(wù)賬戶和域管賬戶強(qiáng)烈建議建立固定周期的輪換機(jī)制。我在某次防御實戰(zhàn)中發(fā)現(xiàn)真正讓RDP憑據(jù)暴露的根本原因并不是技術(shù)漏洞而是運(yùn)維習(xí)慣——有人習(xí)慣在辦公終端上保存RDP憑據(jù)或者在不同服務(wù)器之間反復(fù)用同一個管理員密碼。這些習(xí)慣為攻擊者提供了打開內(nèi)網(wǎng)大門的鑰匙防御工作不僅要解決技術(shù)問題還要解決人的問題。6. 常見問題速查與避坑經(jīng)驗在多次滲透測試和攻防演練中RDP憑據(jù)提取不是每次都順利。這里把常見問題和我的解決思路整理成表方便后續(xù)查閱?,F(xiàn)象可能原因解決辦法privilege::debug返回錯誤當(dāng)前令牌權(quán)限不足UAC過濾嘗試token::elevate或先繞過UAC檢查是否本地管理員sekurlsa::logonpasswords輸出為空系統(tǒng)啟用了Credential Guard無活動會話確認(rèn)是否運(yùn)行LsaIso.exe換用離線分析LSASS dump的方式檢查登錄會話是否過期sekurlsa::tspkg無明文密碼Windows版本較高默認(rèn)不保存明文改用哈希進(jìn)行Pass-the-Hash或提取Kerberos票據(jù)使用憑據(jù)管理器條目無法打開當(dāng)前用戶不是加密憑據(jù)的用戶獲取目標(biāo)用戶的NTDS哈希模擬該用戶登錄后再解密提取到哈希但無法RDP登錄目標(biāo)未開啟Restricted Admin模式使用工具先轉(zhuǎn)換出明文或結(jié)合SMB進(jìn)行攻擊與橫向移動目標(biāo)安裝了殺毒軟件mimikatz被殺殺軟對內(nèi)存操作有攔截考慮使用反射加載、分離免殺等方式但需注意合法授權(quán)范圍這里再分享三個不會寫在標(biāo)準(zhǔn)文檔里的經(jīng)驗第一很多有價值的信息其實來自服務(wù)賬戶。滲透測試時很多攻防人員只關(guān)注域管賬戶而忽略了SQL服務(wù)、IIS應(yīng)用池等賬戶。這些服務(wù)賬戶的密碼往往長期不變且權(quán)限不小如果能在LSASS中提取到它們的哈希常有意想不到的收獲。第二內(nèi)存中的憑據(jù)具有時效性。如果目標(biāo)機(jī)器長時間無人登錄內(nèi)存中的憑據(jù)可能已經(jīng)被清理。這時候可以嘗試誘導(dǎo)目標(biāo)管理員重新登錄——比如通過發(fā)送釣魚鏈接、觸發(fā)某種業(yè)務(wù)操作等。這就回到攻擊鏈設(shè)計的層面單一技術(shù)動作很難保證成功前期的信息偵察和策略規(guī)劃同樣重要。第三取證時要保護(hù)好現(xiàn)場。在檢測響應(yīng)過程中如果發(fā)現(xiàn)疑似憑據(jù)竊取行為第一步不是直接殺進(jìn)程或關(guān)機(jī)器而是先導(dǎo)出LSASS進(jìn)程的內(nèi)存鏡像作為后續(xù)排查和溯源的關(guān)鍵證據(jù)。很多安全工程師在初期容易犯的錯誤是過度響應(yīng)導(dǎo)致關(guān)鍵證據(jù)被清除。7. 從一次實戰(zhàn)案例看整體攻防視角我復(fù)盤一個完整的攻擊鏈幫你建立對RDP憑據(jù)提取在全局中的位置感知。時間線如下09:00——攻擊者使用釣魚郵件投遞惡意宏在終端A上成功執(zhí)行反彈得到一個普通用戶權(quán)限。09:15——攻擊者利用本地提權(quán)漏洞如PrintNightmare或類似CVE成功拿到終端A本地管理員權(quán)限。09:20——在管理員權(quán)限下運(yùn)行mimikatz開啟調(diào)試權(quán)限并從LSASS中提取到運(yùn)維人員賬戶的NTLM哈希和明文密碼。09:25——使用提取到的憑據(jù)通過RDP橫向登錄到終端B并在終端B上繼續(xù)收集憑據(jù)。09:40——在終端B上發(fā)現(xiàn)存有域管賬戶的哈希配合內(nèi)存中獲取的會話票據(jù)成功拿下域控制器訪問權(quán)限。在這個攻擊鏈中第三步的RDP憑據(jù)提取是承上啟下的關(guān)鍵節(jié)點(diǎn)。如果沒有通過內(nèi)存提取RDP憑據(jù)攻擊者就只能停留在終端A的普通權(quán)限上無法繼續(xù)深入內(nèi)網(wǎng)。而實際場景中很多企業(yè)恰恰忽略了這一步的檢測導(dǎo)致攻擊者拿到管理員權(quán)限后暢通無阻。從防守方角度看如果在第三步能夠及時通過EDR檢測到LSASS進(jìn)程的異常訪問整個攻擊鏈就會被攔腰截斷。這也是我一直強(qiáng)調(diào)“檢測響應(yīng)及時性”的原因。防守方不是要阻止每一次攻擊動作而是要在關(guān)鍵節(jié)點(diǎn)卡住攻擊者的去路。這個案例讓我意識到RDP憑據(jù)的安全問題本質(zhì)上是一個安全配置與管理規(guī)范的復(fù)合問題。單靠某個安全產(chǎn)品無法解決需要從身份治理、認(rèn)證方式、監(jiān)控檢測和應(yīng)急響應(yīng)四個維度全面發(fā)力。8. 寫在最后攻防視角下的幾點(diǎn)體會在實戰(zhàn)中反復(fù)打磨RDP憑據(jù)的提取與防御后我個人最大的體會是技術(shù)本身是鏡像的關(guān)鍵取決于使用者與上下文。mimikatz作為安全研究工具的價值無需贅述但如果企業(yè)內(nèi)部的RDP配置長期處于“裸奔”狀態(tài)這些工具就會變成攻擊者手中的利器。從防御角度倒推回來幾個優(yōu)先級最高的改進(jìn)方向值得特別關(guān)注一是盡快啟用Credential Guard。在大型組織的Windows環(huán)境中這個功能雖然會帶來一定的兼容性挑戰(zhàn)比如與某些第三方認(rèn)證軟件的兼容性問題但相比憑據(jù)泄露造成的損失這些兼容性付出的成本完全可以接受。二是加強(qiáng)本地管理員賬戶的治理。很多企業(yè)的本地管理員密碼是統(tǒng)一且長期不變的這種情況下攻擊者只要拿到一臺機(jī)器就會迅速掌握全網(wǎng)機(jī)器的登錄權(quán)限。建議通過本地密碼管理方案進(jìn)行差異化管控定期輪換降低憑據(jù)被橫向復(fù)用的風(fēng)險。三是把“憑據(jù)竊取”當(dāng)作核心監(jiān)控場景來建設(shè)。無論是EDR的規(guī)則設(shè)計、還是SIEM的告警邏輯都應(yīng)圍繞LSASS訪問、內(nèi)存轉(zhuǎn)儲、憑據(jù)重放高頻場景做針對性開發(fā)。技術(shù)對抗中搶先一步發(fā)現(xiàn)就等于阻止了一次深度滲透。最后想說的是安全對抗是一個持續(xù)更新的過程。攻擊者不會只停留在一招一式上mimikatz只是整個攻擊鏈中一個環(huán)節(jié)。真正有效的防御策略永遠(yuǎn)不是堆砌某個工具而是建立“監(jiān)控到行為、響應(yīng)到進(jìn)程、修復(fù)到機(jī)制”的全鏈路安全運(yùn)營體系。希望這篇實戰(zhàn)記錄能給你帶來一些可落地的啟示也期待大家在自己的環(huán)境中多多演練用實戰(zhàn)驅(qū)動的思路來檢驗安全防線。