serviceFu
在近期所進(jìn)行的安全審計活動中,我們的團(tuán)隊設(shè)計出了一種新的安全工具,并希望能跟整個社區(qū)一起分享。
當(dāng)時在進(jìn)行安全審計開始前,我們首先需要嘗試獲取到客戶網(wǎng)絡(luò)系統(tǒng)的初始訪問權(quán)。這位特殊的客戶之前曾投入過大量的人力和物力資源來提升企業(yè)網(wǎng)絡(luò)系統(tǒng)的安全性。在客戶域名系統(tǒng)中的大多數(shù)客戶都需要進(jìn)行智能卡認(rèn)證,并且禁用了憑證緩存(Mimikatz的sekurlsa::logonPasswords無效),而且還設(shè)置了基于主機(jī)的日志記錄系統(tǒng)(Powershell, Sysmon, HIPS)。
在進(jìn)行了仔細(xì)分析之后,我們把注意力放在了一臺更有“價值”的服務(wù)器上。這臺服務(wù)器之所以“有價值”,是因為擁有高等級權(quán)限的網(wǎng)絡(luò)管理員需要使用這臺服務(wù)器來執(zhí)行管理員任務(wù)。我們成功在這臺服務(wù)器上發(fā)現(xiàn)了一個0 day漏洞,并且通過手動編碼的形式設(shè)計出了漏洞利用代碼,最終成功拿到了SYSTEM權(quán)限。
有了SYSTEM權(quán)限之后,我們就能夠偽裝成一些經(jīng)常會登錄目標(biāo)系統(tǒng)的用戶了,比如說通過注入用戶進(jìn)程或直接竊取他們的用戶令牌。雖然這種技術(shù)可以有效實現(xiàn)提權(quán)和橫向滲透,但是它要求我們能尋找到活動會話才能實現(xiàn)身份偽裝。因此,這個過程可能需要我們等待用戶登錄才能實現(xiàn)提權(quán),當(dāng)他們注銷賬號之后,我們就無法使用他們的賬號了。所以,這種技術(shù)只能用來尋找那些使用賬號憑證登錄的用戶信息,而無法適用于采用智能卡認(rèn)證的情況。
不過幸運(yùn)的是,客戶的活動目錄在安裝和配置時使用的是多個高等級權(quán)限的服務(wù)賬號,而且涉及到域中的多臺服務(wù)器。這些域服務(wù)賬號使用了賬號憑證來實現(xiàn)登錄認(rèn)證。Windows會在注冊表HKLM:\Security\Policy\Secrets中為每一個服務(wù)的域服務(wù)賬號服務(wù)賬號存儲一個加密后的憑證在lsadump::secrets module(Mimikatz)的幫助下,我們能夠直接解密這些憑證。
接下來,我們的主要問題就變成了如何找出目標(biāo)域服務(wù)賬號下運(yùn)行了那些服務(wù)組件:我們是對每一個系統(tǒng)手動運(yùn)行mimikatz,還是在收集到系統(tǒng)信息和注冊表鍵內(nèi)容后在線下執(zhí)行分析?雖然這并不是一個技術(shù)難點,但是我們很懶,能自動化完成的我們肯定不會手動進(jìn)行。下面的截圖顯示的是mimikatz導(dǎo)出的每一個服務(wù)賬號的憑證信息:
假設(shè)我們的工具運(yùn)行在一臺登錄了管理員權(quán)限賬號的目標(biāo)主機(jī)上,我們將能夠利用Win32 API來遠(yuǎn)程查詢目標(biāo)主機(jī)中運(yùn)行的服務(wù)。我們可以通過解析服務(wù)啟動名稱來判斷當(dāng)前運(yùn)行環(huán)境是否為系統(tǒng)級賬號。如果確定了運(yùn)行環(huán)境,我們就可以使用遠(yuǎn)程注冊表API來存儲系統(tǒng)信息和注冊表信息了。接下來,在拿到相關(guān)注冊表鍵之后,我們可以使用mimikatz來對其進(jìn)行解析和解密,并獲取到服務(wù)賬號憑證。需要注意的是,我們之所以采用C++來開發(fā)這款工具,主要也是考慮到之后可以輕松將其以模塊的形式整合進(jìn)原生的C2框架之中。
不過我們得承認(rèn),這款工具只適用于這種特定情況,在其他特殊情況下該工具可能無法完成你所要求的任務(wù)。但不管怎樣,它都能夠幫助你遠(yuǎn)程掃描出整個目標(biāo)域中域服務(wù)憑證的明文文本信息,這一點還是非常有用的。如果你對本項目感興趣的話,歡迎到我們的GitHub上留言或提交代碼。
|