27

如何防止恶意的第三方DLL注入到进程

 5 years ago
source link: https://www.freebuf.com/articles/system/219198.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

MZ7VBjn.jpg!web

虽然Windows系统的安全机制是不允许任何微软签名的代码注入到进程之中的,但是网络犯罪分子仍然会有很多方法来绕过这种安全机制,比如说通过执行用户态钩子向正在运行的进程注入DLL等等。而本文所介绍的技术也许对于某些反病毒产品、EDR和安全防御人员来说,也许会提供一些有价值的思路。

UpdateProcThreadAttribute

第一种防止恶意第三方DLL注入到进程的方法就是使用 UpdateProcThreadAttribute ,这个属性是PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY中一个我们可以自行设置的属性。

下面的代码段显示了如何使用MITIGATION策略来创建一个新的记事本进程,而这个进程将阻止任意非微软签名的代码注入其中。编译并执行下列代码后,将以进程缓解策略执行notepad.exe程序,并防止任意非微软签名的代码注入其中。我们可以使用Process Hacker来进行检查:

F7FVjen.jpg!web

在下面这张GIF中,MITIGATION策略已经生效,任何非微软签名的代码都将被屏蔽,但是其中有一段微软代码通过并成功执行了:

eeIzuqN.gif

值得一提的是,这种特性实际上是Cobalt Strike的blockdlls在“作怪”。

SetProcessMitigationPolicy

在研究第一种方法的过程中,我偶然发现了一个名叫SetProcessMitigationPolicy的API,这个API将允许我们针对调用进程本身设置缓解策略,而不是像第一种方法那样去为子进程设置缓解策略。mitigationpolicy.cpp的相关代码如下:

PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY sp = {};
sp.MicrosoftSignedOnly = 1;
SetProcessMitigationPolicy(ProcessSignaturePolicy, &sp, sizeof(sp));

bEf63m6.jpg!web

在我的测试过程中,使用SetProcessMitigationPolicy并不能防止已知的EDR解决方案将其DLL注入到我们的进程中。通过调试会话的分析,我们确认了原因,即在注入DLL之后,缓解策略将会立刻被应用。当一个进程被初始化并且运行之后,任何非微软签名的代码都将无法注入到进程之中。

yqe2aiI.gif

检测

这里我有一个更好的办法,就是使用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,它将允许微软签名的代码注入到其进程中:

v2Qby2Y.jpg!web


Recommend

  • 42
    • 微信 mp.weixin.qq.com 5 years ago
    • Cache

    如何有效防止SQL注入攻击

    如何有效防止SQL注入攻击 原创...

  • 17
    • feixiaoxing.blog.csdn.net 4 years ago
    • Cache

    随想录(程序调试与dll注入)

    随想录(程序调试与dll注入)

  • 10

    Blockdlls 防止EDR的DLL注入我的恶意进程2021-01-14 免杀Share on: cobaltstrike有一个blockdlls,该命令可以使产生的进程禁止加载非微软签名的dll,用来绕过一些注入D...

  • 15
    • www.ascotbe.com 4 years ago
    • Cache

    恶意程序研究之DLL劫持

    郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担! DLL劫持DLL劫持一直深受黑客们的喜欢,利用此技术可以实现启动木马后门,游戏外挂插件的注入,绕过UAC...

  • 5

    如何防止他人恶意调试你的web程序发布于 今天 17:31 English看到社区很多都在讨论如何调试...

  • 11

    0x00 远线程注入远线程注入是指一个进程在另一个进程中创建线程的技术。0x01 函数介绍OpenProcess作用: 打开现有的本地进程对象。函数声明:

  • 5
    • www.heibai.org 3 years ago
    • Cache

    DLL注入之全局钩子注入

    0x00 HOOK概述Hook也就是钩子,在Windows中大部分的应用程序都是基于消息机制,会根据不同的消息使用消息过程函数完成不同的功能。而钩子是一种消息处理机制,它可以比你的应用程序先获得消息,可以用来截获、监视系统的消息,改变执行流程实现特定的...

  • 9
    • paper.seebug.org 3 years ago
    • Cache

    深入理解反射式 dll 注入技术

    深入理解反射式 dll 注入技术 2022年03月23日 2022年03月23日

  • 11

    前段时间在训练营上课的时候就有朋友提到一个问题,为什么 Windbg 附加到 C# 程序后,程序就处于中断状态了?它到底是如何实现的? 其实简而言之就是线程的远程注入,这一篇就展开说一下。 二:实现原理 1. 基本思...

  • 8

    WinDBG详解进程初始化dll是如何加载的

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK