自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

反取證技術(shù):內(nèi)核模式下的進(jìn)程隱蔽

新聞 Windows
本文是介紹惡意軟件的持久性及傳播性技術(shù)這一系列的第一次迭代,這些技術(shù)中大部分是研究人員幾年前發(fā)現(xiàn)并披露的,在此介紹的目的是建立這些技術(shù)和取證方面的知識(shí)框架。

本文是介紹惡意軟件的持久性及傳播性技術(shù)這一系列的第一次迭代,這些技術(shù)中大部分是研究人員幾年前發(fā)現(xiàn)并披露的,在此介紹的目的是建立這些技術(shù)和取證方面的知識(shí)框架。

用于證明概念的代碼可以在 CERT的GitHub 上查看。由于CERT分析師Devoteam在這個(gè)領(lǐng)域的經(jīng)驗(yàn),知識(shí)框架會(huì)不斷完善。

第一篇文章將討論DKOM(分布式組件對(duì)象模式)進(jìn)程隱藏的以下幾個(gè)方面:

Windows進(jìn)程

隱藏直接內(nèi)核對(duì)象的修改

概念性證明(PoC)

使用Volatility進(jìn)行內(nèi)存檢測(cè)

這個(gè)概念在2004年的美國(guó)黑帽大會(huì)上被介紹,不過(guò)到現(xiàn)在還被用于幾個(gè)內(nèi)核工具,比如介紹者本人所開(kāi)發(fā)的FU-rootkit。

Windows進(jìn)程

Windows內(nèi)核使用 EPROCESS 來(lái)處理進(jìn)程,這些是不透明進(jìn)程,且沒(méi)有被微軟記錄,標(biāo)準(zhǔn)編譯頭也沒(méi)有詳細(xì)標(biāo)明。

MSDN鏈接: EPROCESS (Windows Driver)

但是這仍然能通過(guò)使用 KD 通過(guò)內(nèi)核調(diào)試被分析。

該示例中的結(jié)構(gòu)有207個(gè)字段(Windows 10 64位系統(tǒng))。

只有三個(gè)相關(guān)的可以解釋該技術(shù)。

此列表包含兩個(gè)鏈接: Flink 和 Blink 。這些鏈接很有趣,因?yàn)樗鼈冎赶驅(qū)儆趯儆谙乱粋€(gè)進(jìn)程( Forwardlink )和之前的進(jìn)程( Backlink )的另外兩個(gè) LIST_ENTRY 結(jié)構(gòu)。

Windows系統(tǒng)中的所有進(jìn)程通過(guò)其 ActiveProcessLinks 結(jié)構(gòu)中的指針來(lái)引用。它們構(gòu)成了諸如taskmgr.exe(任務(wù)管理器)或某些 SysInternals (例如 procexp.exe )等工具使用的雙鏈表。

雙鏈表會(huì)被定時(shí)檢查以更新進(jìn)程顯示。

隱藏直接內(nèi)核對(duì)象的修改

DKOM技術(shù)隱藏了一個(gè)取消鏈接它自己的 ActiveProcessLinks 的進(jìn)程,并將“前一個(gè)”和“下一個(gè)”進(jìn)程直接相互鏈接。

從雙鏈表中獲取進(jìn)程(示例圖中的 smss.exe )使得它不依賴于此列表的工具來(lái)顯示進(jìn)程。

取消鏈接流程不會(huì)影響其執(zhí)行流程。調(diào)度器將計(jì)算時(shí)間分配給線程,而不是進(jìn)程。

當(dāng)修改惡意進(jìn)程的 ActiveProcessList 時(shí),它的 Blink 和 Flink 被修改以指向它們自己的結(jié)構(gòu)。這樣做是為了避免在進(jìn)程退出時(shí)出現(xiàn)任何問(wèn)題。如果 Blink 或 Flink 指向的是舊的或無(wú)效的內(nèi)存地址,那么當(dāng)嘗試更新“相鄰”進(jìn)程時(shí),內(nèi)核可能會(huì)引發(fā)異常。

實(shí)現(xiàn)

關(guān)于概念性證明(PoC)的評(píng)論

CERT在Github上的代碼 是一個(gè)測(cè)試驅(qū)動(dòng)程序,它是從使用 內(nèi)核模式驅(qū)動(dòng)程序框架 的Windows示例中實(shí)現(xiàn)的。驅(qū)動(dòng)配置的初始化使用 WDF_DRIVER_CONFIG_INIT() 被hook。該hook搜索一個(gè) ImageFileName 字段為 virus.exe 的進(jìn)程,并使用DKOM技術(shù)進(jìn)行隱藏。

注意:這不是一個(gè)功能性的工具(只是在安裝的時(shí)候會(huì)嘗試隱藏一個(gè)進(jìn)程),而且只被用于教學(xué)目的。

該代碼大量使用Windows 10 64位測(cè)試的硬編碼的存儲(chǔ)器偏移。它們被用于直接訪問(wèn) EPROCESS 字段,并且在其他Windows版本上可能無(wú)法正常工作。

以上顯示的偏移可以在 Windows進(jìn)程 部分的第一個(gè) KD 截圖中找到。

代碼很容易被改進(jìn),可以使用更穩(wěn)定的訪問(wèn)這些字段的方式然后提供一個(gè)用戶控制界面。

EPROCESS字段訪問(wèn)及版本

Windows API沒(méi)有提供 EPROCESS 的結(jié)構(gòu)定義,但是可以使用API​​調(diào)用來(lái)檢索這些結(jié)構(gòu)的指針。

PoC中使用的函數(shù)是 PsGetCurrentProcess() ,它返回一個(gè)當(dāng)前進(jìn)程“ EPROCESS ”結(jié)構(gòu)的指針。在執(zhí)行的過(guò)程中,它返回一個(gè)指向System進(jìn)程結(jié)構(gòu)的指針,一旦找到一個(gè) EPROCESS 結(jié)構(gòu),就調(diào)用一個(gè)搜索函數(shù),以便通過(guò) EPROCESS 循環(huán)列表來(lái)查找 virus.exe ImageFileName 。

如果搜索返回一個(gè) EPROCESS 結(jié)構(gòu),那么它的 ActiveProcessLinks 就會(huì)被修以隱藏它。這通過(guò) EPROCESS 結(jié)構(gòu)在內(nèi)存中的操作來(lái)實(shí)現(xiàn)。

其他相關(guān)與當(dāng)前操作系統(tǒng)的保護(hù)

PoC生成的驅(qū)動(dòng)程序已提交到 https://nodistribute.com/ 平臺(tái),以檢查是否會(huì)報(bào)毒。

沒(méi)有一個(gè)報(bào)了毒,考慮到代碼十分簡(jiǎn)單,系統(tǒng)調(diào)用量也很低,這樣一來(lái)就一點(diǎn)也不奇怪了。另外,雖然這種技術(shù)非常隱蔽,但是并不是在所有Windows版本上都很穩(wěn)定。

一個(gè)叫PatchGuard的對(duì)Windows 64位的保護(hù)可以檢測(cè)前面提到的操作。 PatchGuard 也被稱為內(nèi)核補(bǔ)丁保護(hù)( KPP ),于2005年在Windows XP 64位和Windows Server 2003 SP1中被引入。

KPP以一個(gè)隨機(jī)頻率驗(yàn)證內(nèi)核結(jié)構(gòu),幾十分鐘可以分開(kāi)成兩個(gè)檢查。當(dāng)檢測(cè)到異常時(shí),會(huì)引發(fā) 0×109  -  CRITICAL_STRUCTURE_CORRUPTION 內(nèi)核錯(cuò)誤,然后強(qiáng)制阻止系統(tǒng)執(zhí)行。其實(shí) KPP 并沒(méi)有真正阻止這種技術(shù)的執(zhí)行,它只是關(guān)閉了操作系統(tǒng)。

由于該技術(shù)旨在提供隱蔽性,而藍(lán)屏的顯示會(huì)破壞其有效性。另外,該保護(hù)僅在64位版本的Windows中實(shí)現(xiàn),所以32位系統(tǒng)就會(huì)容易受到攻擊。如今,大多數(shù)人安裝的都是64位,因此他們會(huì)被保護(hù)免受這種威脅。

不過(guò)即使使用了 KPP ,這種技術(shù)也不能忽視,因?yàn)椋?/p>

在32位系統(tǒng)的事件響應(yīng)中可以遇到。

內(nèi)核模式驅(qū)動(dòng)(仍然是一個(gè)活躍的研究領(lǐng)域)存在對(duì) PatchGuard 的攻擊。

使用Volatility進(jìn)行內(nèi)存檢測(cè)

使用工具在受感染的主機(jī)上檢測(cè)這種技術(shù)可能有點(diǎn)棘手,不過(guò)它可以很容易地在內(nèi)存捕獲中被檢測(cè)到。事實(shí)上,許多監(jiān)控/系統(tǒng)工具(例如 SysInternals Microsoft套件 )都是基于雙鏈表的進(jìn)程枚舉。

為了演示這個(gè)概念,PoC已在運(yùn)行Windows 10 Professional版本的主機(jī)上執(zhí)行。

在PoC系統(tǒng)上執(zhí)行的Process Explorer,VMMap,ListDlls和Handle64的示例

這個(gè)進(jìn)程對(duì)于這幾個(gè)工具是不可見(jiàn)的。但是該進(jìn)程其實(shí)正在運(yùn)行,并且其系統(tǒng)事件可以被進(jìn)程監(jiān)視器捕獲。

在現(xiàn)實(shí)生活中,很多rootkit可以修改和劫持大量的系統(tǒng)功能,使得大多數(shù)實(shí)時(shí)檢測(cè)變得更加困難。這里推薦使用諸如 Volatility 等適應(yīng)框架對(duì)RAM轉(zhuǎn)儲(chǔ)然后脫機(jī)研究。

以前提到的Windows版本由擁有Win10x64_14393的配置文件的Volatility 2.6支持。

內(nèi)存轉(zhuǎn)儲(chǔ)由Winpmem實(shí)現(xiàn),該工具是Google Rekall項(xiàng)目分發(fā)的工具。

在Winpmem的輸出中列出了驅(qū)動(dòng)程序名稱,我們可以看到PoC二進(jìn)制文件(這里稱為2017_remote_helloworld)。

一旦內(nèi)存捕獲過(guò)程完成,研究就可以開(kāi)始了。

Volatility有幾個(gè)插件來(lái)分析轉(zhuǎn)儲(chǔ)中的運(yùn)行進(jìn)程,可以通過(guò)以下方式進(jìn)行快速比較:

只有psscan和psxview發(fā)現(xiàn)了我們的隱藏過(guò)程。

這些插件的文檔可以幫助我們了解為什么有些人會(huì)發(fā)現(xiàn)這個(gè)進(jìn)程,為什么有些人沒(méi)有發(fā)現(xiàn)。

pslist – 通過(guò)檢查雙鏈表來(lái)檢測(cè)進(jìn)程

pstree – 使用了相同技術(shù),只是顯示有小小的差別

psscan – 在內(nèi)存中掃描_POOL_HEADER結(jié)構(gòu)(內(nèi)存頁(yè)池)以識(shí)別相關(guān)進(jìn)程

psxview – 幾種技術(shù)的組合:

pslist :如上所述

psscan :如上所述

thrdproc :線程掃描,檢索調(diào)度程序使用的_KTHREAD列表(不能在不中斷進(jìn)程執(zhí)行的情況下修改它),然后搜索相關(guān)的_EPROCESS對(duì)象。

pspcid

csrss :csrss.exe進(jìn)程保留著可以在其內(nèi)存中檢索到的進(jìn)程的獨(dú)立列表。

session

deskthrd

在這些插件中,psxview是分析正在運(yùn)行的進(jìn)程的最快方法,它為用戶提供了不同檢測(cè)技術(shù)。

我們知道隱藏的進(jìn)程稱為virus.exe,且PID為4952,現(xiàn)在可以利用Volatility進(jìn)一步研究。

在這種“隱藏”情況下,PID不能直接被Volatility插件使用,因此必須指定進(jìn)程內(nèi)存偏移量。

對(duì)于大多數(shù)波動(dòng)插件,可以使用存儲(chǔ)器偏移(P代表Physical)代替PID。

有了這個(gè)信息,可以獲得很多東西,例如:

打開(kāi)系統(tǒng)資源的處理(文件,注冊(cè)表項(xiàng)…)

進(jìn)程命令行

驅(qū)動(dòng)程序/rootkit也可以從內(nèi)存轉(zhuǎn)儲(chǔ)中恢復(fù)

 

 

責(zé)任編輯:張燕妮 來(lái)源: 推酷
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)