首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Minifilter阻止dll注入

如何通过Minifilter阻止dll注入
EN

Stack Overflow用户
提问于 2020-02-03 22:39:36
回答 1查看 546关注 0票数 1

我正在尝试通过Minifilter将注入(或一般注入) block .dll到特定进程中

这是我的PreOperationCallback:

代码语言:javascript
复制
    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文件的执行。过滤文件扩展名很容易绕过...

我希望有人知道更多关于它的信息;)

EN

回答 1

Stack Overflow用户

发布于 2020-02-04 06:34:27

Minifilter不适用于此。

当进程调用CreateFileMapping/ZwCreateSection.时会调用AcquireForSectionSync

假设ProcessA想要向ProcessB注入一个动态链接库。它可以创建一个远程线程,使ProcessB调用LoadLibrary

在这一点上,您的筛选器将看到每个进程在启动时都会调用AcquireForSection同步,因为加载程序将加载所有基本的dll,如:ntdllkernel32等……

您需要的是Ob回调,例如:

ObRegisterCallbacks function

ObRegisterCallbacks例程注册线程、进程和桌面句柄操作的回调例程列表。

这些回调将允许您阻止一个进程打开另一个具有各种权限的进程。

假设您有一个场景,其中ProcessA想要通过某种CreateRemoteThread/ReadWriteProcessMemory操作向ProcessB注入一些东西。

ProcessA

代码语言:javascript
复制
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
  • WriteProcessMemory

在ProcessB上,系统将拒绝访问,因为句柄不再拥有这些权限(您在Ob回调中剥离了这些权限)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60041430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档