Windows 如何通过Minifilter阻止dll注入
我试图通过 这是我的预约:Windows 如何通过Minifilter阻止dll注入,windows,kernel,driver,kmdf,minifilter,Windows,Kernel,Driver,Kmdf,Minifilter,我试图通过 这是我的预约: if (Data->Iopb->MajorFunction == IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION) { /* Open file for writing/appending? */ if ((Data->Iopb->Parameters.Create.SecurityContext->DesiredAccess & PAGE_EXECUT
if (Data->Iopb->MajorFunction == IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION) {
/* Open file for writing/appending? */
if ((Data->Iopb->Parameters.Create.SecurityContext->DesiredAccess & PAGE_EXECUTE) == PAGE_EXECUTE) {
if (security) {
DbgPrint("[ miniFilter ] [IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION] [ Blocked ]\n");
Data->IoStatus.Status = STATUS_ACCESS_DENIED;
return FLT_PREOP_COMPLETE;
}
}
if ((Data->Iopb->Parameters.Create.SecurityContext->DesiredAccess & FILE_EXECUTE) == FILE_EXECUTE) {
if (security) {
DbgPrint("[ miniFilter ] [IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION] [ Blocked ]\n");
Data->IoStatus.Status = STATUS_ACCESS_DENIED;
return FLT_PREOP_COMPLETE;
}
}
}
}
根据其他论坛IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
将在DLL注入时调用!
我也尝试过“IRP_MJ_CREATE”,但是我也阻止了.exe
文件的任何执行。过滤文件扩展名可以很容易地绕过
我希望有人知道得更多;) 微型过滤器不适用于此 当进程调用CreateFileMapping/ZwCreateSection时,将调用AcquireForSectionSync 假设ProcessA希望将DLL注入ProcessB。它可以创建一个远程线程,使ProcessB调用装入库 此时,您的筛选器将看到ProcessB调用AcquireForSection同步,每个进程在启动时都会这样做,因为加载程序将加载所有基本DLL,如:
ntdll
,kernel32
,等等
您需要的是Ob回调,例如:
ObRegisterCallbacks例程为线程、进程和桌面句柄操作注册回调例程列表 这些回调将允许您阻止一个进程打开另一个具有各种权限的进程 假设您有一个场景,其中ProcessA希望通过某种CreateRemoteThread/ReadWriteProcessMemory操作将某些内容注入ProcessB 过程a:
OpenProcess(ProcessB, PROCESS_VM_...);
YouDriverObCallbackRoutine() {
Check if ProcessA should have access it asks for ProcessB.
If not you can simply strip away the access and return.
}
这将导致ProcessA有一个句柄,而没有ProcessB的那些权限
现在当ProcessA尝试调用
- CreateRemoteThread
- ReadProcessMemory
- 写进程内存
在ProcessB上,系统将拒绝访问,因为句柄不再具有这些权限(您在Ob回调中剥夺了这些权限)。ObCallBacks是不够的。例如,SetWindowsHookEx()将完全忽略回调。