Mitre ATT&CK矩陣中的三種進(jìn)程注入手法

Mitre ATT&CK矩陣中的三種進(jìn)程注入手法

mitre att&ck矩陣中的三種進(jìn)程注入手法:經(jīng)典的進(jìn)程注入、process hollowing和process doppelg?nging。

惡意軟件使用進(jìn)程注入的主要目的大致是為了躲避殺軟的檢測(cè)或者進(jìn)行提權(quán)操作。這里我們將主要針對(duì)第一種情況下的3種手段進(jìn)行詳細(xì)的討論。

一:經(jīng)典的進(jìn)程注入(DLL注入)

這是最為經(jīng)典的手段,流程也十分簡(jiǎn)潔明了即:

OpenProcess -> VirtualAllocEx -> WriteProcessMemory -> CreateRemoteThread

Mitre ATT&CK矩陣中的三種進(jìn)程注入手法

二:Process Hollowing

這是一種相當(dāng)古老的手段了,中文一般譯為”創(chuàng)建傀儡進(jìn)程”,使用該手法創(chuàng)建的進(jìn)程可以偽裝為任意的合法進(jìn)程,比如偽裝為IE,在內(nèi)存中使用process hacker查看時(shí)其圖標(biāo)資源、描述、數(shù)字簽名均為IE的值。這樣應(yīng)急響應(yīng)人員在進(jìn)行排查的時(shí)候可能難以發(fā)現(xiàn)。

用簡(jiǎn)潔的語(yǔ)言概括該手法,即惡意進(jìn)程首先創(chuàng)建一個(gè)掛起狀態(tài)的進(jìn)程,然后取消其原先的內(nèi)存映射并替換成事先準(zhǔn)備的惡意代碼,在對(duì)修改后的映像文件進(jìn)行重定向后再恢復(fù)該進(jìn)程的運(yùn)行狀態(tài)。

實(shí)現(xiàn)思路:

1、通過(guò)CreateProcess創(chuàng)建目標(biāo)進(jìn)程,傳入?yún)?shù)CREATE_SUSPENDED使進(jìn)程掛起

Mitre ATT&CK矩陣中的三種進(jìn)程注入手法

2、通過(guò)NtQueryProcessInformation獲取目標(biāo)進(jìn)程內(nèi)存中映像文件的基地址。(PEB塊數(shù)據(jù)結(jié)構(gòu))

Mitre ATT&CK矩陣中的三種進(jìn)程注入手法

3、通過(guò)NtUnmapViewOfSection清空目標(biāo)進(jìn)程的內(nèi)存數(shù)據(jù)(section),傳入?yún)?shù)為進(jìn)程句柄和映像文件的基地址

Mitre ATT&CK矩陣中的三種進(jìn)程注入手法

4、通過(guò)VirtualAllocEx申請(qǐng)新的內(nèi)存(起始地址為之前映像文件的基地址,大小則為payload的大小)

5、通過(guò)WriteProcessMemory向內(nèi)存寫入payload

6、將寫入內(nèi)存中的payload進(jìn)行基址重定向

7、通過(guò)GetThreadContext獲取目標(biāo)線程的上下文,將上下文的eax寄存器修改為正確的代碼入口點(diǎn)

8、通過(guò)SetThreadContext設(shè)置入口點(diǎn)

9、通過(guò)ResumeThread喚醒進(jìn)程,執(zhí)行payload

對(duì)抗思路:

從實(shí)現(xiàn)思路中可以看出,步驟1、4、5、6、7、8、9是常規(guī)的創(chuàng)建一個(gè)進(jìn)程然后自己注入的手段。只有步驟2、3是比較特殊的。用常規(guī)的檢測(cè)手段如Hook關(guān)鍵函數(shù)進(jìn)行判斷即可檢測(cè)。

三:Process Doppelg?nging

這是一種比較新的注入手段,首次提出于2017年的歐洲black hat大會(huì)。該手段在原理及表現(xiàn)上與Process Hollowing是類似的,利用Process Doppelg?nging創(chuàng)建的進(jìn)程在內(nèi)存中使用process hacker查看時(shí)其圖標(biāo)資源、描述、數(shù)字簽名均為指定的目標(biāo)程序。

該手法利用了windows事務(wù)(TxF)的特性,在事務(wù)中使用惡意文件覆蓋合法文件,此時(shí)不提交事務(wù)(即覆蓋不會(huì)在磁盤上發(fā)生),然后創(chuàng)建一個(gè)section(當(dāng)前事務(wù)的拷貝)。在獲得了section的句柄后,就將事務(wù)回滾,防止惡意文件在磁盤上真正地覆蓋合法文件。之后就使用內(nèi)存中section的句柄進(jìn)行進(jìn)程創(chuàng)建操作。而創(chuàng)建的進(jìn)程是擁有合法可執(zhí)行文件的信息的。

可以看到,由于需要在事務(wù)中覆蓋文件,所以該手法需要對(duì)目標(biāo)文件有寫權(quán)限。

實(shí)現(xiàn)思路:

1、創(chuàng)建一個(gè)TxF事務(wù)對(duì)象(NtCreateTransaction)

Mitre ATT&CK矩陣中的三種進(jìn)程注入手法

2、以事務(wù)API打開合法可執(zhí)行文件,即在事務(wù)對(duì)象中加入文件(CreateFileTransacted)

Mitre ATT&CK矩陣中的三種進(jìn)程注入手法

3、打開惡意文件并為其分配內(nèi)存空間(CreateFile、GetFileSizeEx -> NtAllocateVirtualMemory -> ReadFile)

4、用內(nèi)存中的惡意文件覆蓋事務(wù)中的合法可執(zhí)行文件(WriteFile)

Mitre ATT&CK矩陣中的三種進(jìn)程注入手法

5、創(chuàng)建當(dāng)前事務(wù)的section(NtCreateSection)

Mitre ATT&CK矩陣中的三種進(jìn)程注入手法

6、回滾事務(wù),使剛剛的覆蓋恢復(fù)成合法可執(zhí)行文件(NtRollbackTransaction)

Mitre ATT&CK矩陣中的三種進(jìn)程注入手法

7、使用內(nèi)存中的section來(lái)創(chuàng)建進(jìn)程對(duì)象(NtCreateProcessEx)

Mitre ATT&CK矩陣中的三種進(jìn)程注入手法

8、獲取惡意文件的入口點(diǎn),創(chuàng)建進(jìn)程參數(shù)塊,然后將進(jìn)程塊寫入進(jìn)程內(nèi)存中(NtQueryInformationProcess -> RtlInitUnicodeString -> RtlCreateProcessParametersEx)

9、更新PEB中的進(jìn)程參數(shù)塊,為目標(biāo)進(jìn)程對(duì)象創(chuàng)建線程,執(zhí)行惡意代碼(NtCreateThreadEx)

對(duì)抗思路:

從步驟上看,Hook關(guān)鍵函數(shù)(如NtCreateThreadEx)進(jìn)行判斷即可檢測(cè)該手法。

總結(jié)

從上述3種手法的演變上可以看到幾點(diǎn)趨勢(shì)。

第一點(diǎn),內(nèi)存中的隱蔽能力越來(lái)越強(qiáng),由最開始的毫無(wú)隱蔽性可言,到現(xiàn)在可以做到在內(nèi)存中表現(xiàn)得與合法程序一致。

第二點(diǎn),payload釋放到內(nèi)存中的手段越來(lái)越難以檢測(cè),最初payload是直接拷貝到內(nèi)存中的,現(xiàn)在攻擊者可以利用一些特性(如TxF)來(lái)進(jìn)一步隱蔽釋放過(guò)程。

第三點(diǎn),最終階段的關(guān)鍵函數(shù)幾乎沒(méi)有變化,即使payload的釋放越來(lái)越隱蔽,但是最終還是要釋放到內(nèi)存中并且調(diào)用執(zhí)行的。通過(guò)對(duì)有限的關(guān)鍵函數(shù)進(jìn)行Hook,應(yīng)該就能dump出最終的payload。

更多相關(guān)教程推薦:web服務(wù)器安全

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊5 分享