防止EDR的DLL注入我的恶意进程

admin 2020年12月30日12:50:03评论384 views字数 2159阅读7分11秒阅读模式

cobaltstrike有一个blockdlls,该命令可以使产生的进程禁止加载非微软签名的dll,用来绕过一些注入DLL的edr有显著效果。

UpdateProcThreadAttribute

cs的实现方式是修改UpdateProcThreadAttribute属性

防止EDR的DLL注入我的恶意进程

图来自@xpn大佬


修改该属性会使子线程拒绝非微软签名的dll注入。

开了blockdlls以后任务子线程会加上Signatures restricted (Microsoft only)标志

防止EDR的DLL注入我的恶意进程


使用process hacker注入dll注入不进去。

防止EDR的DLL注入我的恶意进程

自己代码实现

// blockdlls.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <Windows.h>
int main(){ PROCESS_INFORMATION pi = {}; STARTUPINFOEXA si = {}; SIZE_T attributeSize = 0;
InitializeProcThreadAttributeList(NULL, 1, 0, &attributeSize); PPROC_THREAD_ATTRIBUTE_LIST attributes = (PPROC_THREAD_ATTRIBUTE_LIST)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, attributeSize); InitializeProcThreadAttributeList(attributes, 1, 0, &attributeSize);
DWORD64 policy = PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON; UpdateProcThreadAttribute(attributes, 0, PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY, &policy, sizeof(DWORD64), NULL, NULL); si.lpAttributeList = attributes;
CreateProcessA(NULL, (LPSTR)"notepad", NULL, NULL, TRUE, EXTENDED_STARTUPINFO_PRESENT, NULL, NULL, &si.StartupInfo, &pi); HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY, attributes);
return 0;}

CreateProcessA的记事本注入不了第三方dll

防止EDR的DLL注入我的恶意进程

SetProcessMitigationPolicy

这个api可以给当前线程添加 Signatures restricted (Microsoft only) 标识。

代码实现

// blockdlls.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <Windows.h>
int main(){ PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY sp = {}; sp.MicrosoftSignedOnly = 1; SetProcessMitigationPolicy(ProcessSignaturePolicy, &sp, sizeof(sp)); system("PAUSE"); return 0;}
防止EDR的DLL注入我的恶意进程

注入非微软签名的dll报错

防止EDR的DLL注入我的恶意进程

注入微软的user32.dll

防止EDR的DLL注入我的恶意进程

可以成功注入。

防止EDR的DLL注入我的恶意进程

检测

使用powershell可以看到当前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} } }
防止EDR的DLL注入我的恶意进程

参考

1.https://www.ired.team/offensive-security/defense-evasion/preventing-3rd-party-dlls-from-injecting-into-your-processes2.https://blog.xpnsec.com/protecting-your-malware/3.Cobalt_Strike的blockdlls利用分析[1]

References

[1] Cobalt_Strike的blockdlls利用分析: https://3gstudent.github.io/3gstudent.github.io/Cobalt_Strike%E7%9A%84blockdlls%E5%88%A9%E7%94%A8%E5%88%86%E6%9E%90/



分享、点赞、看就是对我们的一种支持!

防止EDR的DLL注入我的恶意进程


本文始发于微信公众号(ChaBug):防止EDR的DLL注入我的恶意进程

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年12月30日12:50:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   防止EDR的DLL注入我的恶意进程http://cn-sec.com/archives/226405.html

发表评论

匿名网友 填写信息