我正在尝试通过Minifilter将注入(或一般注入) block .dll到特定进程中
这是我的PreOperationCallback:
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会在动态链接库注入时调用!我也尝试过"IRP_MJ_CREATE“,但是我也阻止了任何.exe文件的执行。过滤文件扩展名很容易绕过...
我希望有人知道更多关于它的信息;)
发布于 2020-02-04 06:34:27
Minifilter不适用于此。
当进程调用CreateFileMapping/ZwCreateSection.时会调用AcquireForSectionSync
假设ProcessA想要向ProcessB注入一个动态链接库。它可以创建一个远程线程,使ProcessB调用LoadLibrary。
在这一点上,您的筛选器将看到每个进程在启动时都会调用AcquireForSection同步,因为加载程序将加载所有基本的dll,如:ntdll、kernel32等……
您需要的是Ob回调,例如:
ObRegisterCallbacks例程注册线程、进程和桌面句柄操作的回调例程列表。
这些回调将允许您阻止一个进程打开另一个具有各种权限的进程。
假设您有一个场景,其中ProcessA想要通过某种CreateRemoteThread/ReadWriteProcessMemory操作向ProcessB注入一些东西。
ProcessA
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尝试调用
在ProcessB上,系统将拒绝访问,因为句柄不再拥有这些权限(您在Ob回调中剥离了这些权限)。
https://stackoverflow.com/questions/60041430
复制相似问题