溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SILENTTRINITY的工作原理與檢測(cè)技巧是什么

發(fā)布時(shí)間:2021-12-03 10:26:31 來(lái)源:億速云 閱讀:130 作者:柒染 欄目:編程語(yǔ)言

這篇文章給大家介紹SILENTTRINITY的工作原理與檢測(cè)技巧是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

介紹

SILENTTRINITY 是最近發(fā)布的一款基于IronPython和c#的工具。這篇文章將深入探討它的工作原理和檢測(cè)技術(shù)。 .NET由于其強(qiáng)大的功能、易于開(kāi)發(fā)以及在現(xiàn)代Windows平臺(tái)上的默認(rèn)存在的特點(diǎn),已經(jīng)成為安全領(lǐng)域中的一個(gè)重要組件。由于藍(lán)隊(duì)檢測(cè)惡意PowerShell的能力不斷增強(qiáng),它開(kāi)始取代PowerShell(最初出于類(lèi)似的原因使用它)。 IronPython本質(zhì)上是與.NET框架緊密結(jié)合的Python。這意味著攻擊者能夠利用簡(jiǎn)單的Python腳本與.NET庫(kù)的強(qiáng)大功能,更輕松地在Windows平臺(tái)上開(kāi)發(fā)。

DLR

.NET語(yǔ)言變量類(lèi)型和方法在編譯時(shí)綁定,而Python是一種解釋型腳本語(yǔ)言。因此,如何在.NET環(huán)境中執(zhí)行Python代碼?答案就在于DLR(dynamic language runtime)。下圖顯示了DLR的架構(gòu)視圖(Microsoft 2017)。       
SILENTTRINITY的工作原理與檢測(cè)技巧是什么DLR是一個(gè)運(yùn)行時(shí)環(huán)境,允許像Python這樣的動(dòng)態(tài)語(yǔ)言在.NET上運(yùn)行,并最終編譯成相應(yīng)的通用中間語(yǔ)言(CIL)格式。使這成為可能的DLR組件之一是“動(dòng)態(tài)對(duì)象互操作性”。   Python的一個(gè)關(guān)鍵特性是它不必在編譯時(shí)聲明其變量類(lèi)型。相反,變量類(lèi)型解析在運(yùn)行時(shí)執(zhí)行,這與標(biāo)準(zhǔn).NET語(yǔ)言(如C#)的運(yùn)行方式不同。為了解決這個(gè)問(wèn)題,DLR提供了一種稱(chēng)為“動(dòng)態(tài)”的數(shù)據(jù)類(lèi)型。分配有“動(dòng)態(tài)”數(shù)據(jù)類(lèi)型的變量在運(yùn)行時(shí)而不是編譯時(shí)解析,從而允許Python保持其動(dòng)態(tài)特性并仍然能夠在.NET環(huán)境中運(yùn)行。 在SILENTTRINITY中,IronPython代碼嵌入并在C#對(duì)象中執(zhí)行,并且通過(guò)擴(kuò)展,在.NET環(huán)境中執(zhí)行。這意味著它將首先編譯為CIL代碼,隨后通過(guò)使用JIT引擎成為本機(jī)代碼。我們之前已經(jīng)在博客中對(duì)此進(jìn)行了更詳細(xì)的討論(    第1 部分和第2部分)。  

SILENTTRINITY的工作原理

SILENTTRINITY由運(yùn)行Python的C2服務(wù)器和C#后門(mén)組成,使用動(dòng)態(tài).NET程序集在受害者的機(jī)器上執(zhí)行。下面的圖片顯示了SILENTTRINITY如何工作的。我們將使用msbuild stager機(jī)制作為示例。    
   
1.首先將包含c#后門(mén)的xml文件放入受害者。2.通過(guò)MsBuild.exe執(zhí)行,C#后門(mén)被反序列化并加載到內(nèi)存中。3.一旦植入到內(nèi)存中,后門(mén)將連接回SILENTTRINITY C2服務(wù)器并將名為staged.zip的zip文件下載到內(nèi)存中。該zip文件實(shí)際上由IronPython的.NET程序集和一個(gè)名為stage.py的Python腳本組成。4.隨后,.NET程序集通過(guò)使用.NET的庫(kù)加載到內(nèi)存中。一旦加載了程序集,就能夠調(diào)用IronPython引擎來(lái)執(zhí)行stage.py.5.C2服務(wù)器現(xiàn)在可以向受害者推送Python編碼的模塊。 

檢測(cè)SILENTTRINITY

現(xiàn)在我們已經(jīng)了解了SILENTTRINITY的工作原理,讓我們來(lái)看看如何檢測(cè)它。我們將通過(guò)發(fā)布的Python腳本使用. NET ETW提供程序來(lái)跟蹤C(jī)LR底層使用的行為。

動(dòng)態(tài)裝配加載

C#implant實(shí)際上是“ST”類(lèi)型的C#類(lèi),它的一個(gè)實(shí)例是在運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建的。這可以通過(guò).NET的“Reflection”和“Activator”庫(kù)來(lái)實(shí)現(xiàn),如下面的代碼片段所示。    
SILENTTRINITY的工作原理與檢測(cè)技巧是什么因此,我們可以嘗試使用Python腳本跟蹤此類(lèi)函數(shù)調(diào)用的存在,如下圖所示。    
SILENTTRINITY的工作原理與檢測(cè)技巧是什么如圖所示,我們可以觀察到“GetType”和“CreateInstance”函數(shù)的JIT-Inlining失敗,因此表明這些函數(shù)至少執(zhí)行了一次。但是,我們也看到內(nèi)存中的程序集負(fù)載與實(shí)例創(chuàng)建和SILENTTRINITY程序集本身相關(guān):    
SILENTTRINITY的工作原理與檢測(cè)技巧是什么

IronPython程序集

C#后門(mén)如果想要使用python引擎執(zhí)行python代碼,那么在這之前,它必須首先在運(yùn)行時(shí)導(dǎo)入一組程序集,即: 

?IronPython.dll
?IronPython.Modules.dll
?Microsoft.Dynamic.dll
?Microsoft.Scripting.dll

 這可以通過(guò)利用“ResolveAssembly”事件的回調(diào)方法來(lái)完成(Richter,2010)。下面的代碼片段顯示了如何實(shí)現(xiàn)這一目標(biāo)。 SILENTTRINITY的工作原理與檢測(cè)技巧是什么一旦正確加載了程序集,C#后門(mén)就能夠利用IronPython引擎來(lái)執(zhí)行Python代碼,如下面的代碼片段所示。    
SILENTTRINITY的工作原理與檢測(cè)技巧是什么由于上述DLL的加載是SILENTTRINITY的關(guān)鍵部分,我們也可以嘗試尋找這些裝配負(fù)載的證據(jù):    
SILENTTRINITY的工作原理與檢測(cè)技巧是什么在這個(gè)例子中,我們可以通過(guò)“DomainModuleDCStart_V1”和“ModuleDCStart_V2”事件來(lái)觀察正在加載的dll,從而表明IronPython的存在。它們也在內(nèi)存中加載,沒(méi)有文件支持。但是,重要的是要注意這些程序集的存在并不表示任何惡意行為本身。使用IronPython引擎的合法.NET應(yīng)用程序也會(huì)加載這些,,不過(guò)它更有可能從磁盤(pán)加載這些文件。但是,在大多數(shù)企業(yè)環(huán)境中,很多應(yīng)用程序不太可能合法地使用IronPython。與其他IronPython用法的另一個(gè)重要區(qū)別是,這里涉及的程序集用于SILENTTRINITY使用的IronPython的嵌入式使用。如果IronPython被用作一個(gè)獨(dú)立的python解釋器來(lái)運(yùn)行在。net框架上調(diào)用的python腳本,那么可以看到ipy.exe獨(dú)立解釋器正在使用。

SafetyKatz模塊

SILENTTRINITY包含一些后期開(kāi)發(fā)階段的模塊。我們將看看其中一個(gè)模塊SafetyKatz。這很像同名的GhostPack模塊,它會(huì)轉(zhuǎn)儲(chǔ)lsass的進(jìn)程內(nèi)存,然后在內(nèi)存中加載Mimikatz來(lái)提取憑據(jù)。下面的代碼片段顯示了Python中SafetyKatz的實(shí)現(xiàn):    
SILENTTRINITY的工作原理與檢測(cè)技巧是什么正如在動(dòng)態(tài)語(yǔ)言運(yùn)行時(shí)一節(jié)中提到的,可以通過(guò)使用.NET ETW提供程序來(lái)跟蹤JIT和Interop事件來(lái)檢測(cè)這一點(diǎn)。    
SILENTTRINITY的工作原理與檢測(cè)技巧是什么正如所料,我們能夠觀察到來(lái)自SharpSploit模塊的VirtualAlloc和MinDumpWrite函數(shù)調(diào)用的互操作事件所關(guān)注的事件。

流程活動(dòng)

除了查看.NET ETW事件,我們還可以跟蹤可疑的流程活動(dòng)。由于我們?cè)诖耸纠惺褂昧薽sbuild stager,因此我們顯然會(huì)看到msbuild進(jìn)程執(zhí)行事件。    
SILENTTRINITY的工作原理與檢測(cè)技巧是什么由于MSBuild負(fù)責(zé)執(zhí)行xml文件,我們可以尋找由MSBuild執(zhí)行的xml執(zhí)行的跡象。大多數(shù)MSBuild事件遵循術(shù)語(yǔ)或父和參數(shù)的通用格式,因此在整個(gè)企業(yè)中,可以基線正?;顒?dòng)和點(diǎn)偏差。我們還可以尋找源自MSBuild的連接。C#后門(mén)必須定期連接回C2服務(wù)器以檢查待處理的操作,如下面的代碼所示。    
SILENTTRINITY的工作原理與檢測(cè)技巧是什么因此,即使沒(méi)有掛起的作業(yè),c#后門(mén)也必須定期與C2通信,或者直到MSBuild進(jìn)程終止。因此,我們可以搜索流量,如下圖所示。      
SILENTTRINITY的工作原理與檢測(cè)技巧是什么SILENTTRINITY的工作原理與檢測(cè)技巧是什么

結(jié)論

作為維護(hù)者,當(dāng)我們確定IOC時(shí),這也是正確的。這篇文章提出了幾個(gè)IOC來(lái)檢測(cè)SILENTTRINITY的存在。一些IOC,例如檢測(cè)IronPython裝配加載,本身就是低保真度指標(biāo),但當(dāng)你將所有活動(dòng)結(jié)合起來(lái)時(shí),SILENTRINITY的行為變得越來(lái)越具體,這有助于尋找它。在調(diào)查期間,維護(hù)者通常必須得出一個(gè)假設(shè),并且有幾個(gè)不同的IOC通??梢约訌?qiáng)這個(gè)假設(shè)。例如,如果我們要檢測(cè)動(dòng)態(tài)程序集加載,結(jié)合IronPython程序集加載,結(jié)合MSBuild.exe的XML參數(shù)和常規(guī)網(wǎng)絡(luò)連接,那么即使在像Safetykatz這樣的惡意模塊運(yùn)行之前,我們也有更多的妥協(xié)證據(jù)。    。 我們要感謝byt3bl33d3r創(chuàng)建這樣一個(gè)令人印象深刻的工具。 

關(guān)于SILENTTRINITY的工作原理與檢測(cè)技巧是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI