首页
社区
课程
招聘
[翻译]反射型DLL技术介绍
发表于: 2018-9-19 19:16 9530

[翻译]反射型DLL技术介绍

2018-9-19 19:16
9530

2018年2月13日 ~ CPLSEC

大家好,

这篇文章将介绍反射型动态链接库(DLL),并将简单介绍如何编写。这是由Stephen Fewer开发的一种技术,我们将使用他的代码来见证奇迹。我知道这个话题已经被讨论过多次了,所以我会简明扼要地写这篇文章。

什么是DLL?DLL是可移植代码,通常被应用程序所共享。但是,就这篇文章而言,DLL可以让我们有机会执行代码。为什么要这么做呢?如果我们的目标是执行代码,为什么不在磁盘上写一个exe?暂且考虑下其占用的空间:写入磁盘,创建进程,然后运行;占用的空间会快速增加。进入DLL,加载DLL到内存的过程是如何呢?

通常,在进程启动时,DLL被加载到内存中;但是,DLL也可以注入到正在运行的进程中。通过DLL注入,我们不再需要创建进程来执行代码(各种DLL注入技术);但是,我们仍然需要将文件写入磁盘才能完成注入。反射型DLL注入解决了这个问题。该技术由Stephen Fewer开发,允许我们将代码注入现有进程而无需写入磁盘。因此,利用型反射DLL注入,我们可以跳过写入磁盘以及创建进程,直接将代码完整注入内存...谢谢Stephen。

终端防护平台(EPP)逐渐开始标记这些技术。就我个人而言,我会在运行EPP软件的终端上研究反射型DLL注入,看有没有可以突破的地方。此外,反射型DLL通常会调用Windows API来执行恶意代码,这是一个潜在的检测点。例如,createremotethread是一种流行的在远程进程中执行shellcode的技术。

在看了Raphael最新的关于in-memory evasion的文章后,下面还列出了其他一些工具:

以下演示步骤是使用Visual Studio 2017完成的。

pic1.png

Pic2.png

编译好我们的反射型DLL(希望如此),我们应该就能在无需写入磁盘的情况下实现注入。 Metasploit,Cobalt Strike和Empire(不确定)都有用于自定义反射型DLL注入的post exploitation模块。

Metasploit:

Pic6.png

在WIN10-DM桌面上:

Pic7.png

这种技术虽然有点过时但是还算好用。如果你使过任何流行的C2平台,那么你可能已经用过了反射型DLL注入。安全解决方案在捕获类似的内存攻击技术的方面做得越来越好,但是高级威胁攻击者针对对抗技术的适应能力也变得越来越强。在我看来,测试你的安全解决方案,看它是如何处理基本的反射型DLL注入,并不是一个坏主意。 像Meterpreter,Empire(不确定)和Cobalt Strike这样的post exploitation工具也使用反射型DLL,研究下究竟是什么会被标记以及原因,有益无害。

祝好。

原文链接:e69K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6A6K9Y4g2K6N6s2N6S2L8X3&6S2M7X3g2V1i4K6u0W2N6r3g2S2L8g2)9J5c8U0t1H3x3e0S2Q4x3V1j5H3x3W2)9J5c8U0p5K6i4K6u0r3M7X3g2X3L8r3g2U0N6r3W2$3k6g2)9J5k6r3c8D9L8s2y4Q4x3X3c8S2L8X3c8Q4x3X3c8&6L8%4g2Q4x3V1j5`.

翻译:看雪翻译小组 SpearMint

校对:看雪翻译小组 sudozhange

 
 
 
 
 
 
 
 
 
 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  junkboy   +1.00 2018/09/19
最新回复 (4)
雪    币: 41
活跃值: (460)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢
2018-9-19 20:18
0
雪    币: 8388
活跃值: (6318)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
语文好就是不一样.
2018-9-20 03:18
0
雪    币: 1535
活跃值: (695)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢分享
2018-9-21 14:51
0
雪    币: 9941
活跃值: (2273)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
// alloc memory (RWX) in the host process for the image...
			lpRemoteLibraryBuffer = VirtualAllocEx( hProcess, NULL, dwLength, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE ); 
			if( !lpRemoteLibraryBuffer )
				break;

			// write the image into the host process...
			if( !WriteProcessMemory( hProcess, lpRemoteLibraryBuffer, lpBuffer, dwLength, NULL ) )
				break;
			
			// add the offset to ReflectiveLoader() to the remote library address...
			lpReflectiveLoader = (LPTHREAD_START_ROUTINE)( (ULONG_PTR)lpRemoteLibraryBuffer + dwReflectiveLoaderOffset );

			// create a remote thread in the host process to call the ReflectiveLoader!
			hThread = CreateRemoteThread( hProcess, NULL, 1024*1024, lpReflectiveLoader, lpParameter, (DWORD)NULL, &dwThreadId );

这是不是 内存注入 的高级加强型叫法?
2018-10-7 11:10
0
游客
登录 | 注册 方可回帖
返回