| 如何防止恶意的第三方DLL注入到进程 |
| 发布时间:2019-12-01 18:16:49 浏览次数: |
信息来源:FreeBuf 虽然Windows系统的安全机制是不允许任何微软签名的代码注入到进程之中的,但是网络犯罪分子仍然会有很多方法来绕过这种安全机制,比如说通过执行用户态钩子向正在运行的进程注入DLL等等。而本文所介绍的技术也许对于某些反病毒产品、EDR和安全防御人员来说,也许会提供一些有价值的思路。 UpdateProcThreadAttribute 第一种防止恶意第三方DLL注入到进程的方法就是使用UpdateProcThreadAttribute。 这个属性是PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY中一个我们可以自行设置的属性。 下面的代码段显示了如何使用MITIGATION策略来创建一个新的记事本进程,而这个进程将阻止任意非微软签名的代码注入其中。编译并执行下列代码后,将以进程缓解策略执行notepad.exe程序,并防止任意非微软签名的代码注入其中。我们可以使用Process Hacker来进行检查: 在下面这张GIF中,MITIGATION策略已经生效,任何非微软签名的代码都将被屏蔽,但是其中有一段微软代码通过并成功执行了: 值得一提的是,这种特性实际上是Cobalt Strike的blockdlls在“作怪”。 SetProcessMitigationPolicy 在研究第一种方法的过程中,我偶然发现了一个名叫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-expprocessname -Unique | % { Get-ProcessMitigation -ErrorAction SilentlyContinue -RunningProcesses $_ |selectprocessname, Id, @{l="Block non-MS Binaries"; e={$_.BinarySignature|select-expMicrosoftSignedOnly} } } 下图显示的是notepad.exe,它将允许微软签名的代码注入到其进程中: |
|
下一篇:Trickbot更新密码窃取模块 |
南京新葡的京集团35222科技有限公司 版权所有