溫馨提示×

溫馨提示×

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

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

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

發(fā)布時間:2021-12-18 15:35:12 來源:億速云 閱讀:168 作者:柒染 欄目:數(shù)據(jù)安全

本篇文章為大家展示了怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

IFEO(Image File Execution Options )是設(shè)置在Windows注冊表中,創(chuàng)建IFEO注冊表項的目的是讓開發(fā)人員可以選擇調(diào)試他們的軟件,是為了開發(fā)人員可以使用注冊表項將任何程序附加到任何可執(zhí)行文件,但是很多被利用了去實現(xiàn)進程注入。很多只知道ring3的部分機制,但是并不知道完整的機制,今天們就來分析下它的ring3到ring0的整個過程的機理。

開發(fā)一個小的test.exe解析命令行,為了方便上調(diào)試器調(diào)試加上Messagebox 彈框怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

編譯后,我們可以修改注冊表演示下IFFO

**HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\{name of the executable}**

加個notepad.exe的項目然后添加Debuggerkeyvalue

“Debugger”=”{full path to the debugger}”

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

然后我們在windows左下角搜索框輸入notepad

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

然后啟動notepad.exe,這時我們的test.exe就會被啟動了

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

今天的目的就是來分析下這種機制的原理。

把上述代碼繼續(xù)改造的MessageBox去掉,加直接啟動notepad.exe的啟動參數(shù)里的進程

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

然后上ollydbg調(diào)試運行。

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

啟動后對CreatPorcessW下斷點輸入命令: bp CreatPorcessW

斷點停下來

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

繼續(xù)F8 然后F7進入

**775F1054 |. E8 22010100 CALL kernel32.CreateProcessInternalW**

通過IDA查看CreateProcessInternalW前面基本都是一些字符串拷貝的動作

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

Ollydbg開始階段就直接F8單步運行過去

接著就是創(chuàng)建環(huán)境

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

這些也直接單步走過,當我們單步到這里的時候

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

調(diào)試器在這里下斷點

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

然后F8

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

發(fā)現(xiàn)

NtCreateUserProcess(&Process, &ThreadHandle, 0x2000000, 0x2000000, v188, v189, v64, 1, v60, &v194, &v347)


函數(shù)的eax的返回值是0xC0000039,也就是說這里調(diào)用內(nèi)核去創(chuàng)建的時候是直接失敗的,
返回值是STATUS_OBJECT_PATH_INVALID 意識就是說路徑對象無效,通過分析第九個參數(shù)結(jié)構(gòu)體的數(shù)據(jù)發(fā)現(xiàn)路徑確實沒有任何問題

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

我們可以做個對比實驗,把IFEO的對應(yīng)注冊表Debugger刪除后再運行調(diào)試

下面是正常情況下把注冊表刪除了后的運行

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

參數(shù)基本一模一樣,然后直接F8 單步運行,結(jié)果出現(xiàn)了返回值eax == 0

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

也就是STATUS_SUCCES,沒有debugger注冊表鍵值的時候NtCreateUserProcess內(nèi)核返回值是0,現(xiàn)在我們大致可以猜測內(nèi)核里也對這個IFEO位置的注冊表鍵值做了處理,為了搞清楚內(nèi)核如何處理,直接上windbg用虛擬機進行雙機調(diào)試,調(diào)試內(nèi)核。

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

接下來在NtCreateUserProcess上下斷點,當Ollydbg里執(zhí)行NtCreadtUserProcesswindbg里斷點停下來

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

有個最簡單的方法就是不斷的嘗試單步進入函數(shù)后單步Call返回值為0xC0000039的函數(shù),最后經(jīng)過反復的實現(xiàn)發(fā)現(xiàn)NtCreateUserProcess內(nèi)在調(diào)用**PspAllocateProcess**函數(shù)時返回0xC0000039

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

fffff800`0412651f 出下斷點

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

運行后斷下

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

調(diào)試器停在了
call nt!PspAllocateProcess (fffff8000412852c),F10 后查看eaxr eax,顯示

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

也就是說在這個函數(shù)里可能會涉及處理注冊表的過程,用ida打開ntkrnlmap.exe的內(nèi)核文件,慢慢查看會發(fā)現(xiàn)有這么一段代碼

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

在這段代碼里判斷IFEOKEY 是否有對應(yīng)Debugger注冊表設(shè)置,往上面翻會發(fā)現(xiàn)IFEOKey打開的就是當前進程名的IFEOKey的注冊表

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

RtlpOpenImageFileOptionsKey調(diào)用了RtlpOpenBaseImageFileOptionsKey,RtlpOpenBaseImageFileOptionsKeyZwOpenKey IFEO注冊表

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

為了驗證我們的結(jié)果,在RtlQueryImageFileKeyOption函數(shù)下斷點

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

進入 RtlQueryImageFileKeyOption函數(shù)單步執(zhí)行到ZwQueryValueKey時,F(xiàn)10后

查看rsi里的值

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

會發(fā)現(xiàn)此時讀取到Debugger的設(shè)置注冊表,然后返回到調(diào)用之前的下面一句指令:

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

判斷eax是否是0,此時函數(shù)返回值就是0,然后就進入了

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

mov r12d,0xC00000039h

最后把 r12d 賦值給了eax返回

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

就是最后我看到創(chuàng)建進程失敗了,錯誤號0xC00000039

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

當前者失敗后,ring3 層就進入了

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

76B4F75F . FF15 5006B176 CALL DWORD PTR DS:[<&ntdll.LdrQueryImageFileKeyOption>] ; ntdll.LdrQueryImageFileKeyOption

函數(shù)去讀取IFEODebugger注冊表

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

獲取了數(shù)據(jù)后,解析參數(shù)成功后就把當前進程的路徑加載Debugger對應(yīng)的進程后面作為一個參數(shù)組合成一個啟動進程參數(shù)

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

在上圖可以看到兩個路徑被加到一起。構(gòu)造的的新參數(shù)就是

UNICODE "C:\Users\Administrator\Desktop\test.exe C:\Windows\System32\notepad.exe"

最后goto LABEL_87重新組建進程參數(shù)環(huán)境去執(zhí)行新的進程,又會進入NtCreateUserProcess,但這時啟動的是test.exe

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

這時返回值就是0了,創(chuàng)建成功

怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理

至此整個過程就分析完畢了,微軟的IFEO機制本來是給開發(fā)人員調(diào)試程序用的,后來慢慢被惡意軟件用來鏡像劫持,在微軟的官方msdn里有一段描述說使用DEBUG_ONLY_THIS_PROCESS和DEBUG_PROCESS方式 CreateProcess時是不會讀取注冊表去劫持的,而實際測試時確實如此,具體原理讀者可以自行分析。

特別申明:逆向分析調(diào)試是一種武器,切莫用于非法途徑。

上述內(nèi)容就是怎么逆向分析微軟IFEO鏡像劫持從ring3到ring0的實現(xiàn)機理,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

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

AI