如何防止恶意的第三方DLL注入到进程,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
第一种防止恶意第三方DLL注入到进程的方法就是使用UpdateProcThreadAttribute,这个属性是PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY中一个我们可以自行设置的属性。
下面的代码段显示了如何使用MITIGATION策略来创建一个新的记事本进程,而这个进程将阻止任意非微软签名的代码注入其中。编译并执行下列代码后,将以进程缓解策略执行notepad.exe程序,并防止任意非微软签名的代码注入其中。我们可以使用Process Hacker来进行检查:
在下面这张GIF中,MITIGATION策略已经生效,任何非微软签名的代码都将被屏蔽,但是其中有一段微软代码通过并成功执行了:
值得一提的是,这种特性实际上是Cobalt Strike的blockdlls在“作怪”。
在研究第一种方法的过程中,我偶然发现了一个名叫SetProcessMitigationPolicy的API,这个API将允许我们针对调用进程本身设置缓解策略,而不是像第一种方法那样去为子进程设置缓解策略。mitigationpolicy.cpp的相关代码如下:
PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY sp = {};sp.MicrosoftSignedOnly = 1;SetProcessMitigationPolicy(ProcessSignaturePolicy, &sp, sizeof(sp));
在我的测试过程中,使用SetProcessMitigationPolicy并不能防止已知的EDR解决方案将其DLL注入到我们的进程中。通过调试会话的分析,我们确认了原因,即在注入DLL之后,缓解策略将会立刻被应用。当一个进程被初始化并且运行之后,任何非微软签名的代码都将无法注入到进程之中。
这里我有一个更好的办法,就是使用PowerShell的一个“Get-ProcessMitigation”cmdlet命令来枚举出使用了MicrosoftSignedOnly缓解策略的进程,然后对其进行分析调查,并设置基准线:
get-process | select -exp processname -Unique | % { Get-ProcessMitigation -ErrorAction SilentlyContinue -RunningProcesses $_ | select processname, Id, @{l="Block non-MS Binaries"; e={$_.BinarySignature|select -exp MicrosoftSignedOnly} } }
下图显示的是notepad.exe,它将允许微软签名的代码注入到其进程中:
关于如何防止恶意的第三方DLL注入到进程问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。