防止迈克菲 Dll 注入

Prevent McAfee Dlls injection

本文关键字:Dll 注入      更新时间:2023-10-16

我有一个在WinSock模块上做一些内联钩子的过程(发送和接收函数)。在装有迈克菲的计算机上,我可以看到两个 dll 正在注入到我的进程中:

  • 希皮.dll
  • 希普卡.dll

两者都可能在这些功能上进行内联钩接,我遇到了冲突和不需要的行为。是否有选项可以防止/卸载这些 dll,以便它们不会干扰?

10倍,家伙

有很多场景可以实现DLL注入(钩子),顺便说一句,你必须更多地了解每个方法背后的工作原理,最常见的是使用CreateRemoteThread()API函数,然后你必须在每个进程上注入你的安全DLL,并钩住/重定向/拒绝任何对CreateRemoteThread()的调用或任何"危险"的API调用。

PS:但请记住:

用户模式挂钩永远不能成为应用额外安全性的选项 以任何安全的方式进行检查。如果你只想 "沙盒"一个专用进程,你很清楚,而这个过程实际上不知道 EasyHook,这可能会成功!但永远不要尝试根据用户编写任何安全软件 模式挂钩。这行不通,我向你保证...

您有 2 个选项。

  1. 为您的进程添加排除项,以便迈克菲不会尝试扫描它。我不使用 McAfee 的产品,但我认为这将是一个相对简单的过程。
  2. 卸载迈克菲

最简单的解决方案是取消挂钩受影响的函数。我必须做同样的事情来解决一些戴尔垃圾软件。这并不过分困难,即使它需要对 x86 汇编有一些了解。您必须禁用 DEP,使修补的代码可写,找到原始指令,然后将它们复制回来。找到原始说明可能意味着拆卸补丁。

另一种选择是简单地将其钩在不同的位置。例如,改为挂钩 IAT,然后在完成所需的任何操作后,将执行转发回实际函数,然后它将通过 McAfee 的钩子。

我不得不处理类似的事情一次。阅读他们自己的钩子组件存根,这样你就可以弄清楚如何以你之后链接到他们的钩子的方式钩子。

我想迈克菲正在从内核模式执行DLL注入。他们可能会找到 KeServiceDescriptorTable 的地址(由 NTOSKRNL 在 32 位系统上导出,它的地址在 64 位环境中由 KiSystemServiceRepeat -> 泄漏,接近 IA32_LSTAR Model 特定寄存器找到的 KiSystemCall64),然后从服务表中找到 NtCreateThreadEx,或者他们使用 KeInitializeApc 和 KeInsertQueueApc(均由 NTOSKRNL 导出)进行 APC 注入(自定义 NtQueueApcThread 包装器)。考虑到他们是一家拥有大量资源的安全供应商,这是合乎逻辑的,我怀疑他们会从用户模式注入。

他们很可能滥用 PsSetCreateProcessNotifyRoutineEx 或 PsSetLoadImageNotifyRoutineEx 来检测新进程的创建。前者不如后者,后者更适合过滤NTDLL.DLL因为它是加载到每个进程中的第一个模块,并且表示该进程实际上已正确启动并且即将准备好执行自己的代码(在Windows模块加载后,并且因为McAfee需要等待像kernel32.dll这样的Win32模块加载,否则如果他们在注入的模块中使用 Win32 API)。

你可以尝试拦截LdrInitializeThunk或KiUserApcDispatcher,但老实说,你无能为力。 无论您做什么,McAfee都会找到一种方法注入到您的进程中,因为它们可以从内核模式进行控制。如果通过驱动程序的各种内核模式回调开发进程保护,则它们将使用通过 ntoskrnl.exe 的模式匹配扫描定位的非导出例程或不调用回调通知 API 的导出例程绕过它。如果远程攻击者在远程攻击者执行时,在您自己的进程中本地修补为线程创建/APC 调用的例程,他们将找到防止这种情况并绕过它的方法(例如,将进程地址空间中修补的例程修补回原始例程,注入,然后重新修补字节)。

如果您想停止使用迈克菲拥有的权限的安全软件,那么您就是在玩火。这类似于反作弊无法阻止具有内核模式访问权限的游戏黑客,并采取严厉措施,甚至标记现在启用的调试模式/测试模式。