首页
社区
课程
招聘
[翻译]Windows Defender Exploit Guard与进程(DLL)注入检测
2020-7-20 20:54 14815

[翻译]Windows Defender Exploit Guard与进程(DLL)注入检测

2020-7-20 20:54
14815

Windows Defender Exploit Guard与进程(DLL)注入检测

上一篇文章中,我们用一个测试应用程序中的缓冲区溢出漏洞对Exploit Guar控件进行了评估。我们用的是Matt Graeber的Exploit Guard文档作为操作指南。

 

不出所料,Exploit Guard这种旨在防止镜像加载的控件对缓冲区溢出漏洞并没有起到任何作用。

 

本文主要评估Exploit Guard的既定功能。

 

简单来说:Exploit Guard可以针对基于.dll进程的进程注入提供有效防护。

 

最新检测结果:

控件 是否有效?
阻止远程镜像加载
阻止低完整性镜像加载

为进程注入做准备

在我们进入下一步之前,我想感谢 reenz0h (Sektor7) 和他的教程: Red Team Operator: Malware Development Course. 我测试Exploit Guard控件所需的所有模块都是基于该课程,你都可以在他的课程中找到这些资源。我不打算提供我用来测试Exploit Guard的完整代码,因为这并非我的知识产权,不过在Sektor7课程中,本文中的所有示例都是作为易于使用的模板提供的。

 

首先,我们需要编译一个‘恶意’的.dll文件。

 

本例中,我只是用shellcode来启动64位版本的Windows 计算器。

 

我们要在visual studio c/c++工具中使用cl.exe:

 

cl.exe /O2 /D_USRDLL /D_WINDLL implantDLL.cpp implantDLL.def /MT /link /DLL /OUT:implantDLL.dll

 

imageload

 

下一步,我们需要编译该二进制文件,然后将我们的‘恶意’.dll注入到远程进程中。

 

为创建一个针对我们进程注入的二进制文件,我们需要编写一个程序,它会使用如下代码打开目标进程:

OpenProcess(PROCESS_ALL_ACCESS, FALSE, (DWORD)(pid));

这里的pid已经通过查找‘notepad.exe’的搜索功能进行了识别,而PROCESS_ALL_ACCESS参数已经提供给我们的OpenProcess调用。

 

接着,我们要在远程notepad进程中创建一个缓冲区,并将我们implant.dll中的所有字节复制到该缓冲区中。

 

最后,根据我们推送到该进程内存中shellcode,使用CreateRemoteThread在notepda.exe中创建一个线程。

 

像这样:

CreateRemoteThread(pHandle, NULL, 0, pLoadLibrary, remBuf, 0, NULL);

这里的remBuf是notepad中的一个缓冲区,就是我们已经加载DLL字节的那个缓冲区。

 

我们使用如下命令编译该进程注入程序:

cl.exe /nologo /Ox /MT /W0 /GS- /DNDEBUG /TcinjectDLL.cpp /link /OUT:injectDLL.exe /SUBSYSTEM:CONSOLE /MACHINE:x64

imageload-createlauncher

 

上面的命令给我们提供了进程注入需要的一切:

 

1.一个恶意dll,用于注入远程进程(本例中,只是calc.exe,但是坏人会有其他更好的选择)。

 

2.一个可运行程序,它的作用是将我们的恶意dll推送到远程进程(本例中是notepad.exe)。

测试

我们运行injectdll.exe程序,用来加载我们放在notepad.exe中的dll;然后用它就会用 CreateRemoteThread API执行该代码。

 

imageload-success

 

在process hacker视图中并没有我们的恶意代码的子进程,但是我们可以从截图中看到calc.exe。

 

唯一的蛛丝马迹是,notepad进程中地址空间中那块恐怖的、小小的.dll。

 

总结测试:

  • 使用OpenProcess 函数从我们的dll注入器程序中获取notepad的地址。
  • 在notepad.exe中划出了一些内存空间。
  • 将dll字节都复制到该控件。
  • 启动一个线程,指向用CreateRemoteThread植入的dll代码。

提醒:所有上面你需要的代码都在Secktor7 的课程内容里(这不是我能的知识产权,所以不能分享)。你可以直接在他的课程里拿到上面所需的模块(和很多其他的技术),而且他们会教你如何使用。

Exploit Guard vs 进程注入

现在,我们要配置Exploit Guard,并确定它对进程注入是否有防护效果。

阻止远程镜像加载

eg-bri

 

这个控件是用于“阻止远程镜像加载”。

 

如果进程注入是从本地文件夹初始化的,这个控件不会提供任何防护(根据设计);这种设计很有意义,因为从本地加载.dll文件是正常程序会做的。希望是,如果恶意.dll位于本地磁盘,它将被Defender吞噬。

 

为更好的评估该控件,我们将该dll文件移到远程共享文件夹,并更新注入代码(char dll[] = "Z:\\implantDLL.dll";);旨在模拟攻击者,将恶意dll放在远程主机上,将它复制到受害者进程内存中,以免被目标客户端发现。

 

有效!Exploit Guard介入了,然后我们看到了event 8:

Process '\Device\HarddiskVolume1\Windows\System32\notepad.exe' (PID 9644) was blocked from loading a binary from a remote share.

injection-remote

 

另一个发现是,在这次测试中notepad.exe没有崩溃。

 

该进程能够继续执行,同时仍然可以抵御远程镜像加载。

 

结论:成功防护。

阻止低完整性镜像加载

该文档提到这个控件“阻止低完整性镜像加载”。

 

vulnserver-bli

 

当我们配置好notepad.exe并尝试注入恶意.dll。

 

它依然有效。Event 6:

Process '\Device\HarddiskVolume1\Windows\System32\notepad.exe' (PID 4076) was blocked from loading the low-integrity binary '\;S:0000000000084b0e\dc1\sysvol\implantDLL.dll'.

exploit-li-event

 

而且,跟远程镜像加载一样,该进程没有收到任何损害——Exploit Guard并不需要终止进程,只是将我试图加载到进程中的低完整性镜像清除掉。

 

结论:成功防护。

 

原文链接:https://chadduffey.com/2020/07/01/ExploitGuardImageLoads.html
翻译:看雪翻译小组 lumou
校对:看雪翻译小组 fyb波


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2020-7-23 18:00 被lumou编辑 ,原因:
收藏
点赞1
打赏
分享
最新回复 (2)
雪    币: 797
活跃值: (1056)
能力值: ( LV5,RANK:78 )
在线值:
发帖
回帖
粉丝
bambooqj 2020-7-21 00:09
2
0
你是不是宋哥
雪    币: 34
活跃值: (864)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
lumou 1 2020-7-21 08:52
3
0
bambooqj 你是不是宋哥
宋哥是谁呀?我不是哦。
游客
登录 | 注册 方可回帖
返回