如果我已经有内核驱动程序,如何创建一个设置了 PsProtectedSignerAntimalware 标志的进程?

Posted

技术标签:

【中文标题】如果我已经有内核驱动程序,如何创建一个设置了 PsProtectedSignerAntimalware 标志的进程?【英文标题】:How to create a process with PsProtectedSignerAntimalware flag set if i already have a kernel driver? 【发布时间】:2021-06-25 06:30:26 【问题描述】:

Windows 中的某些进程如何为它们设置 PsProtectedSignerAntimalware 标志?这意味着windows如何决定哪些进程在创建时应该设置这个标志?

有关此标志的更多信息:

https://www.crowdstrike.com/blog/evolution-protected-processes-part-1-pass-hash-mitigations-windows-81/

我怀疑微软是否在某处硬编码了防病毒列表,并根据证书决定哪些进程应该得到这个标志,那么 windows 是如何决定哪些进程应该得到这个标志的呢?

假设我已经加载了一个驱动程序,我是否可以强制我的用户模式进程具有此标志?

【问题讨论】:

如果您有驱动程序,可能在EPROCESS 对象中找到,PS_PROTECTION 驻留在其中,仅基于非常一般的假设。 @RbMm 是的,但显然修改 EPROCESS 结构并不是一个好主意,我不记得 patchguard 是否捕捉到它,但无论哪种方式都必须有更好的记录方式这样做 不,修改EPROCESS 没问题,而且是个好主意。当然 patchguard 无法捕捉到这一点,因为 EPROCESS 在设计上是易变的。这是 100% 有效且稳定的解决方案,我在自己的工具中使用了很多年 @RbMm 很高兴知道谢谢。但是windows本身是如何决定是否设置PsProtectedSignerAntimalware标志的呢? 这个我从不研究也不知道。可能 Ion Larrañaga 的答案是正确的。我在需要时在我的进程中自行修改 PS_PROTECTION,然后将其重置为 0。通常在打开受保护的进程/线程或调试它之前。以及为什么需要PsProtectedSignerAntimalware 级别?而不是PsProtectedSignerWinSystemPsProtectedSignerApp 【参考方案1】:

这似乎与用于签署二进制文件的证书的 EKU 有关。看看 Alex Ionescu 在幻灯片 11 和 19 上的演示文稿:

https://nosuchcon.org/talks/2014/D3_05_Alex_ionescu_Breaking_protected_processes.pdf

还有你提到的 URL 的第三部分:

https://www.crowdstrike.com/blog/protected-processes-part-3-windows-pki-internals-signing-levels-scenarios-signers-root-keys/

无论如何,我无法找到所需的 EKU 的确切值,但我认为如果您有兴趣,Microsoft 可以帮助您。

【讨论】:

你错了。可以从内核模式设置它。这也不会导致任何崩溃 - 没有任何理由。 嗯,很高兴知道这一点。我想象内核会对此有某种保护(尽管回想起来,即使它有,你已经在内核中运行,所以你甚至可以覆盖它)。我将从答案中删除该部分并保留其余部分,因为我仍然认为它对问题有效。 我只是在这个问题上分享我的经验和知识+想法。 内核会对此有某种保护 - 我不这么认为。基于什么 ?是否会定期检查exe,从哪个进程创建?我只这样看待。可能但不认为。这里最危险的是, PS_PROTECTION 的格式可能会改变(它已经在 win7 和 win8 之间改变过一次)。但无论如何存在可靠的方法检测这个位的位置,没有任何硬编码,这也适用于旧(win7)和新格式。 关于 EKU 我不研究这个,但很可能你就在这里 @IonLarrañaga 好像......你可以吗?这篇博文展示了将 EKU 添加到现有证书中,嗯! sysadmins.lv/blog-en/…

以上是关于如果我已经有内核驱动程序,如何创建一个设置了 PsProtectedSignerAntimalware 标志的进程?的主要内容,如果未能解决你的问题,请参考以下文章

如何从内核模式驱动程序中查看DbgPrint输出?

Linux内核链表

Linux系统如何将某一程序设置为开机自启动,linux 小白求详细讲解......

ps如何设置变量

如何将已经设置好的VC MFC 矩形按钮改成圆形 工程的基类是CView

如何将自己的应用程序设置为默认值