2012-06-26 33 views
18

我正在使用ESet防病毒軟件,最近它的GUI前端egui.exe掛起並佔用了50%的CPU(即100%的一個內核)。令人驚訝的是,我發現即使啓用了調試權限,我也無法殺死它。終止受保護的防病毒過程

現在我很好奇:他們如何實現這樣的防禦,並且有沒有辦法在編寫內核驅動程序時將其殺死?

egui.exe進程在普通用戶(非管理員)下運行,我嘗試使用管理帳戶以各種方式殺死它。這是我的嘗試。

  • 你不能從任務管理器殺它
  • 你不能使用pskill
  • 使用進程管理器,你不能殺它,也可以附加一個調試器是

然後,我開始殺吧一些編程,發現:

  • 在非特權用戶下,你可以用PROSESS_TERMINA打開它TE訪問,但實際調用TerminateProcess()失敗,出現錯誤5.

  • 在管理員帳戶下,您可以使用您想要的任何訪問權限(當然啓用調試權限後)打開它,但隨後調用TerminateProcess() GetKernelObjectSecurity(),SetKernelObjectSecurity()都失敗,錯誤5

這絕對指向某種擺弄不僅僅是設置過程DACL,因爲如果終止不是在DACL的,你就不能首先用PROCESS_TERMINATE打開進程。他們實際上攔截了Win32 API調用嗎?如果是,那麼如何?自從我做低層次的系統編程已經有一段時間了,所以請原諒我的無知。

+2

爲什麼你想知道這一點? :) –

+0

AV通常具有內核模式組件。如果你只要給自己最高的特權就可以殺死它,這將是糟糕的保護。 –

+0

當它正常運行時,你可以殺死它嗎?還是隻是當它掛起時你不能殺死它? – nos

回答

6

如果你能得到「系統的處女驗證」從喬安娜魯特克絲卡的保持,這應該給你一個不錯的主意其中他們實現他們的鉤。可以使用類似的工具(包括GMER)來調查系統內部發生的情況。這可能聽起來很奇怪,但有時AV會使用惡意軟件中常見的技術,例如rootkit技術,以試圖保護軟件免受欺騙。

這聽起來像SSDT鉤狀和類似的技術已被用來「保護」的過程。我的第一槍就是暫停進程的所有線程。大多數這樣的保護機制(惡意軟件和反惡意軟件一樣)僅在終止嘗試時觸發。但是,一旦你暫停所有的線程(Process Explorer可以做到這一點),它們中的任何一個都不會被調度器調度(導致不使用CPU)。

SSDT(有時SDT)代表系統服務描述表。它是具有系統服務功能地址的表(系統服務的號碼是索引)。當您從Win32應用程序調用類似CreateFile時,它將以NTDLL形式呼叫NtCreateFile(在UM中爲== ZwCreateFile)。從那裏起,機制(自Windows 2000/XP以來已經發生了變化)將在它如何轉變爲內核模式(KM),即「環0」方面有所不同。無論如何,在NtCreateFile NTDLL執行大致具有以下功能:它移動系統服務的索引到寄存器中,然後調用,用於過渡到KM方法(sysenter操作碼在較新的實現方式)。到達KM後,處理程序將檢查索引,從SSDT中找出函數地址,然後調用該函數。這裏還有更多關於UM堆棧的檢查(當你來自UM時),但這是一個簡單的過程。所以當你在這個級別掛鉤功能時,你可以防止包括Win32子系統在內的任何子系統做事。但是,這有幾個問題附加(你是他們中最小的)。大多數實施者都做得不好,這在​​惡意軟件中可能經常出現,比如索尼在2005年選擇放置一些音頻CD的rootkit。因此,在不進行錯誤檢查的情況下,掛鉤幾乎是不可能的,並且幾個獨立的代碼鉤住相同的代碼由於部分實施者的魯莽,SSDT指數通常也會導致問題。

所以暫停線程似乎是有可能,當然,這個問題是一種開放式的(不知道ESET驅動程序()的詳細信息)。但是,如果他們阻止了這一點,那麼您應該確實考慮更換產品。我認爲這些產品的系統穩定性的缺點超過了額外的「保護」,儘管他們(ESET)會另外告訴你。

另一種可能的方法可以是將代碼注入(例如,經由一個DLL),並且具有該方法本身調用ExitProcess。這也取決於他們的鉤子是否允許這個漏洞。

+0

謝謝!我嘗試在Process Explorer中掛起線程(以及整個進程),這也被禁用。但是,我可以給它一個空閒的優先權。我會檢查你提到的工具:我不知道SSDT掛鉤,我想這正是我所期待的。 –

+0

我可能是錯的,但我想我記得有些地方不能修改Vista/W7中的SSDT:你會得到一個藍屏。 –

+1

@Cicada:並非完全正確,但是有一種叫做Patchguard的機制,最着名的是x64版本。有辦法解決這個問題,更有甚者,獨立軟件開發商有辦法做一些你通常無法做到的事情,那就是「單純的凡人」。 Authentium在Vista的時代仍然圍繞着Patchguard尋找出路,這顯然促使MS爲ISV創造了其他方式。 – 0xC0000022L

1

可以有不同的情況,說:

  1. 如果你試圖殺死正在等待一些內核對象的進程的一個子線程,它不會被終止直到等待完成。這可能會導致應用程序停止響應。進程中的所有線程都標記爲終止 - 這是進程終止步驟之一;
  2. 像防火牆,AV和其他安全相關的東西這樣的智能軟件總是安裝內核鉤子(又名掛鉤 - 攔截API調用,在內核對象或軟件組件之間傳遞的消息或事件)。他們總是有盾牌來保護外部力量。

您正在收到ERROR_ACCESS_DENIED。我不知道你走過了哪些步驟,但我可以這樣建議:​​

  1. 打開任務管理器並轉到進程選項卡;
  2. 右鍵單擊egui.exe並單擊屬性;
  3. 單擊安全選項卡,然後單擊編輯。
  4. 在權限窗口中檢查您的憑據;
  5. 添加用戶和/或設置完整權限。

你可以玩這個遊戲,因爲即使你開啓了你的應用程序(這就是你想要做的,我假設)它會使用你的賬戶的憑證。

+0

他們如何安裝內核鉤子?要查找什麼關鍵字? 至於其他建議:它是Windows XP,在任務管理器中沒有「安全性」。 Process Explorer不會顯示每個組旁邊都帶有「MANDATORY」標誌的組列表,但這是隻讀的,我不確定這意味着什麼。我嘗試閱讀DACL的過程失敗,所以我不明白爲什麼他們會更成功:)我在機器上有多個帳戶,我寫的「終結者」應用程序在管理帳戶下運行,否則,例如, ,我無法設置SeDebugPrivilege。 –

+0

您可以試試這個:[鏈接](http://msdn.microsoft.com/en-us/library/windows/desktop/ms644959(v = vs.85).aspx) – Oleg

+0

這些是用戶模式掛鉤 –