漏洞防护VS进程(DLL)注入 – 作者:zeroMLYN

一.前言

本文属于翻译文章,原文在这里:https://chadduffey.com/2020/07/01/ExploitGuardImageLoads.html

[上一篇文章]  https://chadduffey.com/2020/06/27/VulnServerVSExploitGuard.html 上一篇文章中,我们在一次测试程序中通过一个简单的缓冲区溢出漏洞评估了漏洞防护控制。我们通过Matt Graeber的漏洞防护手册作为指导。Here is https://github.com/palantir/exploitguard.

正如所期望的,设计用于防止映射加载的空间在那个场景中并没有生效。

本文是对他们专门为那个场景设计的图像加载控件的评估。

漏洞防护可以提供基于dll的进程注入有效性保护。

最新结果:

控制: 是否有效?

阻止远程映射加载 YES

阻止映射低完整性加载 YES

配置进程注入

在我们开始之前,我想要承认下ReenzOh(Sektor7) https://twitter.com/Sektor7Net 在红队一流的培训。操作员:恶意软件开发课程。https://institute.sektor7.net/red-team-operator-malware-development-essentials 我所使用的漏洞防护控件的模板都是基于这套课程的内容,在他的课上你将获得。在本文中我并不打算提供所有我用来测试漏洞防护控件的源码,因为这不是我的IP,但是在本文中提供的所有例子都是很容易使的模板,用来自Sektor7课程。

通过编译这个”evil” .dll来开始

在这个案例中,我仅仅想要使用shellcode在64位机器上来启动一个Windows的计算器。

我们使用来自Visual Studio C/C++ 工具里面的cl.exe。

cl.exe /02 /D_USRDLL /D_WINDLL implantDLL.cpp implantDLL.def /MT /link /DD /OUT:implantDLL.dll

图片[1]-漏洞防护VS进程(DLL)注入 – 作者:zeroMLYN-安全小百科

接下来我们编译这个二进制,打算注入我们的恶意 .dll到远程进程中。

为了创建一个专门设计用于我们进程注入的二进制文件,我们应该用下面的API写一个程序来打开目标进程:

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

pid通过一个搜索函数来寻找“notepad.exe”,然后提供的参数PROCESS_ALL_ACCESS供OpenProcess调用。

然后,我们在远程的notepad 进程创建一个缓冲区并且从我们的implant.dll复制所有的字节到缓冲区中。

最终,基于shellcode我们使用CreateRemoteThread来创建一个线程在notepad.exe里面,我们已经进入到了它的进程内存。

类似:

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

remBuf就在notepad里面的缓冲区,我们已经装载所有的dll字节了。

我们编译这个进程注入程序通过:

cl.exe /nologo /0x /MT /WO /GS- /DNDEBUG /TcinjectDll.cpp /link OUT:injectDLL.exe /SUBSYSTEM:CONSOLE /MACHINE:x64

图片[2]-漏洞防护VS进程(DLL)注入 – 作者:zeroMLYN-安全小百科

下面给出我们需要进程注入的所有东西:

  1. 一个恶意的dll注入到远程进程(在这个案例中,仅仅是calc.exe,但是一个坏家伙可能会有一个更好的注意。)

  2. 一个可执行程序 唯一的目的就是将我们的恶意的dll注入到远程进程(notepad.exe)

 

测试

我们运行这个injectdll.exe 程序载入我们的dll到notepad.exe进程;然后通过CreateRemoteThread API运行了代码。

图片[3]-漏洞防护VS进程(DLL)注入 – 作者:zeroMLYN-安全小百科

从 process hacker可以看到没有子进程运行我们的恶意代码,但是你可以清楚的看到calc.exe在屏幕上运行了。

唯一令人糟糕的是可怕的dll在notepad进程地址空间中。

图片[4]-漏洞防护VS进程(DLL)注入 – 作者:zeroMLYN-安全小百科

总结这次测试:

  • 从我们的dllinjector程序我们使用OpenProcess 函数进入到notepad

  • 在notepad.exe我们获取了一些地址空间.

  • 我们拷贝我们的dll字节到内存中

  • 我们通过使用CreateRemoteThread来启动一个线程,仅仅植入了我们的dll代码。

提醒:

上文中你需要的所有代码都在Secktor7课程内容中(这不是我的IP分享)

你将获取上面所有模板(而且有大量其他的技术。)学会上面的所有的东西是非常简单的。他们会告诉你如何使用它。

漏洞防护 v 进程注入

现在我们配置漏洞防护然后检验在本次场景中是否有效。

阻止远程映射加载

图片[5]-漏洞防护VS进程(DLL)注入 – 作者:zeroMLYN-安全小百科

这个控件被设计用来阻止从远程设备加载映射。

当进程注入是从本地文件夹发起的,这个设置不会提供任何保护。(就是这样设计的);这有了大量的场景因为从本地机器导入dll是个正常的进程都会干的。如果恶意的dll待在本地磁盘上,希望Windows Defender能够把它给吞没。

为了更好的评估这个设置,我们将移动dll到远程共享然后更新注入代码。(char dll[]=”Z:\implantDLL.dll”;)

;目的是在一个远程位置上模拟一个对手维持恶意的dll;从远程位置在目标客户端上复制它进入到一个受害进程来避免检测。

可以的!漏洞防护步骤如下 我们看事件8:(windows日志)

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

图片[6]-漏洞防护VS进程(DLL)注入 – 作者:zeroMLYN-安全小百科

另一个有用的发现是 notepad.exe没有崩溃。

进程能够继续运行,对于远程映射加载仍然能够保持弹性。

结果:成功的缓解

阻止低完整性映射负载

文档中说这个设置是“防止标有低完整性的映射记载”

图片[7]-漏洞防护VS进程(DLL)注入 – 作者:zeroMLYN-安全小百科

为notepad.exe一旦配置了,我们尝试注入我们的恶意dll

它也工作的了,事件6:

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

图片[8]-漏洞防护VS进程(DLL)注入 – 作者:zeroMLYN-安全小百科

and,似乎是远程映射加载,进程仍旧是无害的,漏洞防护组件不需要终止这个进程,

它试图简单地清楚我尝试加载的低完整性映像。

结果:成功的缓解

翻译文章,文中如有错误和语义上的曲解,还请师傅们不吝赐教。

来源:freebuf.com 2020-07-11 21:03:39 by: zeroMLYN

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论