CMSTP 繞過 UAC:方法1,通過INF RunPreSetupCommandSection 實現繞過UAC。方法2,通過COM接口直接利用UAC繞過。
UAC 是微軟在 Windows Vista 以后版本引入的一種安全機制,通過 UAC,應用程序和任務可始終在非管理員帳戶的安全上下文中運行,除非管理員特別授予管理員級別的系統訪問權限。UAC 可以阻止未經授權的應用程序自動進行安裝,并防止無意中更改系統設置。
CMSTP 是一個舊的遠程訪問配置工具,且附帶有一個名為 Config Manager Admin Kit 的配置向導。這個向導還會彈出一個 INF 配置文件,幫助攻擊者實施攻擊。
CMSTP 繞過 UAC
方法1:通過INF RunPreSetupCommandSection 實現繞過UAC
正如Odvar Moe在他的研究中發現的那樣,事實證明INF文件中的RegisterOCXSection并不是唯一容易被武器化的部分。查看由Connection Manager Admin Kit生成的另一個INF文件,可以插入任意二進制文件,以便在RunPreSetupCommandSection下執行。在本例中,我們生成一個shell,然后清除cmstp可執行文件。
需要一些新選項,確保在彈出的對話框中選中了“All Users/所有用戶”,然后單擊OK。
然后就有了shell。請注意,與前面的方法不同,可執行文件以這種方式運行,在不通知用戶的情況下提升了它們的安全上下文,從而繞過UAC。我們將在方法3中研究一種更隱蔽的方法來實現這一點,該方法不涉及彈出窗口。
注意Sysmon 12和Sysmon 13注冊表value add和value set事件:
Dllhost.exe在Sysmon 12中創建對象cmmgr32.exe,然后在隨后的Sysmon 13中將ProfileInstallPath值設置為C:ProgramDataMicrosoftNetworkConnectionsCm。
讓我們看看實際上產生cmd.exe的Sysmon 1事件:
在ParentCommand行字段中看到,Dllhost.exe使用帶有某種GUID的ProcessID選項。為了理解GUID在那里做什么,將重新運行,但這次使用修改的Sysmon配置,允許我們獲得Sysmon事件10s進程訪問。
為了限制事件10的收集孔徑,避免系統陷入停頓,我們將遵循Tim Burrell的做法,在這里設置Sysmon,以便我們只提取那些請求高度特權級別的進程訪問的Sysmon 10事件,或者在CallTrack中包含一個“unknown”字符串:
需要讓Sysmon知道通過運行以下命令來使用更新后的配置:
sysmon -c <modified_config.xml>
重新運行時,會看到另外幾個Sysmon 10事件。其中特別有趣的是,Dllhost.exe訪問TargetImage cmd.exe。
注意CallTrack數據。其中一個被調用的DLL是cmlua.dll,[@hFireF0X]將它作為包含一個名為CMLUAUTIL的自動提升的COM接口調用。當使用方法2時,將再次看到CMLUAUTIL。
方法2:通過COM接口直接利用UAC繞過
正如@hFireF0X在他的tweet中所說的,cmlua.dll分別通過cmlua.dll和cmstplua.dll引用自動提升COM接口CMLUAUTIL和CMSTPLUA。在他的UAC繞過項目UACME(https:/github.com/hfire0x/UACME)中,列舉了幾個實現繞過的方法,但是#41包含了一個PoC,可以執行我們在方法1中看到的相同的攻擊,除了不處理cmstp.exe,它是彈出對話框,并且依賴DLL與COM接口進行對接,直接與它們進行對接。
如果使用這個方法,對Sysmon可見性的潛在影響是什么?
要在2018年7月開始執行這種UACME驅動的攻擊,我們需要在“Compiled”和“Source”目錄仍然有效的情況下獲取UACME REPO的前一次提交(他已經刪除了我們所需的可執行文件,因此需要使用2018年5月或6月的提交)。在Compiled目錄下,讓我們運行“Akagi32.exe 41”。
如果我們回到方法2中所分析的Sysmon 10事件,其中Dllhost.exe訪問cmd.exe并查看CallTrack,則沒有提到cmlua.dll。還請注意,沒有Sysmon 12或13事件。這表明查找cmlua.dll或注冊表adds / mods 可能很難:
讓我們重新訪問Sysmon 1事件,其中dllhost.exe產生cmd.exe。事實證明,我們在ParentCommandLine字段中看到的GUID實際上是我們連接到的COM對象的類ID,在本例中是支持自動提升的CMSTPLUA。
然后,檢測方法1和2的一個潛在的高級方法是在ParentCommand行中對dllhost.exe以及CMSTPLUA的GUID發出警報:
Sysmon 1,其中ParentCommandLine包含dllhost.exe并包含CMSTPLUA COM對象的GUID(3E5FC7F9-9A51-4367-9063-A120244FBEC7)