Iva*_*kov 18 c++ security winapi kernel driver
我正在使用ESet防病毒软件,最近它的GUI前端egui.exe挂起并占用了50%的CPU(即100%的一个核心).令人惊讶的是,即使启用了调试权限,我也发现无法杀死它.
现在我很好奇:他们如何实现这样的防御,有没有办法在没有编写内核驱动程序的情况下杀掉它?
egui.exe进程在常规用户(非管理员)下运行,我尝试使用管理帐户以各种方式终止它.这是我尝试过的.
然后我开始编程并发现:
在非特权用户下,您可以使用PROSESS_TERMINATE访问权限打开它,但实际调用TerminateProcess()失败,错误为5.
在管理员帐户下,您可以使用您想要的任何访问权限打开它(当然,在启用调试权限之后),但随后调用TerminateProcess(),GetKernelObjectSecurity(),SetKernelObjectSecurity()都会失败并显示错误5.
除了设置进程DACL之外,这肯定指向某种方式,因为如果Terminate不在DACL中,您将无法首先使用PROCESS_TERMINATE打开进程.它们实际上拦截了Win32 API调用吗?如果是,那怎么样?我做了低级系统编程已经有一段时间了,所以请原谅我的无知.
如果你能得到"系统的处女验证"从乔安娜鲁特克丝卡的保持,这应该给你一个不错的主意,在那里他们实现他们的钩.类似的工具(包括GMER)可用于调查系统内部发生的情况.这可能听起来很奇怪,但有时AV使用恶意软件中常见的技术,即rootkit技术,试图保护他们的软件不被愚弄.
听起来像SSDT-Hooking和类似的技术已被用于"保护"过程.我对此的第一次尝试是暂停该过程的所有线程.大多数此类保护机制(恶意软件和反恶意软件等)仅在终止尝试时触发.但是一旦你挂起所有线程(Process Explorer可以做到这一点),调度程序将不再调度它们(导致没有CPU使用).
SSDT(有时是SDT)代表系统服务描述符表.它是具有系统服务的功能地址的表(作为索引的系统服务的编号).当您CreateFile
从Win32应用程序调用类似的东西时,它将以NTDLL调用结束NtCreateFile
(ZwCreateFile
在UM中== ).从那里开始,机制(自Windows 2000/XP以来已经发生变化)将如何转换为内核模式(KM),即"ring 0".无论如何,NtCreateFile
NTDLL中的实现大致执行以下操作:它将系统服务的索引移动到寄存器中,然后调用用于转换到KM的方法(sysenter
较新实现中的操作码).到达KM后,处理程序将检查索引,从SSDT中找出函数地址,然后调用该函数.这里有更多的UM堆栈检查(当你来自UM时),但这是简单的过程.因此,当您在此级别挂钩功能时,可以阻止任何子系统(包括Win32子系统)执行操作.但是,这附带了几个问题(你的问题最少).大多数实施者都做得不好,这在恶意软件中经常可见,例如索尼在2005年选择放置一些音频CD的rootkit.因此,如果没有错误检查的风险和几个独立的代码挂钩,几乎不可能取消挂钩.由于部分实施者的鲁莽行为,SSDT指数通常也会导致问题.
所以暂停线程似乎是可能的,虽然这个问题当然是开放式的(不知道ESET驱动程序的细节).但是,如果它们也阻止了这一点,那么你应该考虑切换产品.我打赌这些产品的系统稳定性的缺点超过了额外的"保护",尽管他们(ESET)会告诉你.
另一种可能的方法是注入代码(例如通过DLL)并让进程本身调用ExitProcess
.这还取决于他们的钩子是否允许这个漏洞.
归档时间: |
|
查看次数: |
6260 次 |
最近记录: |