一.前言
本文属于翻译文章,原文在这里:https://chadduffey.com/2020/07/01/ExploitGuardImageLoads.html
在
正如所期望的,设计用于防止映射加载的空间在那个场景中并没有生效。
本文是对他们专门为那个场景设计的图像加载控件的评估。
漏洞防护可以提供基于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
接下来我们编译这个二进制,打算注入我们的恶意 .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
下面给出我们需要进程注入的所有东西:
-
一个恶意的dll注入到远程进程(在这个案例中,仅仅是calc.exe,但是一个坏家伙可能会有一个更好的注意。)
-
一个可执行程序 唯一的目的就是将我们的恶意的dll注入到远程进程(notepad.exe)
测试
我们运行这个injectdll.exe 程序载入我们的dll到notepad.exe进程;然后通过CreateRemoteThread API运行了代码。
从 process hacker可以看到没有子进程运行我们的恶意代码,但是你可以清楚的看到calc.exe在屏幕上运行了。
唯一令人糟糕的是可怕的dll在notepad进程地址空间中。
总结这次测试:
-
从我们的dllinjector程序我们使用OpenProcess 函数进入到notepad
-
在notepad.exe我们获取了一些地址空间.
-
我们拷贝我们的dll字节到内存中
-
我们通过使用CreateRemoteThread来启动一个线程,仅仅植入了我们的dll代码。
提醒:
上文中你需要的所有代码都在Secktor7课程内容中(这不是我的IP分享)
你将获取上面所有模板(而且有大量其他的技术。)学会上面的所有的东西是非常简单的。他们会告诉你如何使用它。
漏洞防护 v 进程注入
现在我们配置漏洞防护然后检验在本次场景中是否有效。
阻止远程映射加载
这个控件被设计用来阻止从远程设备加载映射。
当进程注入是从本地文件夹发起的,这个设置不会提供任何保护。(就是这样设计的);这有了大量的场景因为从本地机器导入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.
另一个有用的发现是 notepad.exe没有崩溃。
进程能够继续运行,对于远程映射加载仍然能够保持弹性。
结果:成功的缓解
阻止低完整性映射负载
文档中说这个设置是“防止标有低完整性的映射记载”
为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’.
and,似乎是远程映射加载,进程仍旧是无害的,漏洞防护组件不需要终止这个进程,
它试图简单地清楚我尝试加载的低完整性映像。
结果:成功的缓解
翻译文章,文中如有错误和语义上的曲解,还请师傅们不吝赐教。
来源:freebuf.com 2020-07-11 21:03:39 by: zeroMLYN
请登录后发表评论
注册