导语:当前的网络攻击强调的是攻击活动完成后的“撤离”,高级的攻击者往往不会留下任何入侵证据,其攻击活动通常保持着隐身并实现持久性。
当前,黑客在实施攻击的时候最为关注的事情是,最好不要留下司法证据,如果做不到这一点的话,那么留下的证据越少越好,以便尽最大可能实现隐身和持久性。为了达到这个目的,攻击者会设法让exploit永久驻留在被利用的进程中,或者迁移到一个长使用期的进程中,这样一来,他们就不用创建或依赖磁盘上的文件了。在最近的博客中,我们描述了攻击者如何使用简单的跨进程迁移或者像Atom Bombing和Process Hollowing这样的高级注入技术来绕过安全检测。
攻击者常用的另一种注入方法是反射式动态链接库(DLL)加载技术,该技术能够在不使用Windows加载程序的情况下将DLL加载到进程内存中。
2004年,Skape和JT首次公开了in-memory型DLL加载技术,向人们展示了如何通过修改Windows加载程序,实现直接从内存而非从磁盘中加载DLL。到了2008年,Harmony Security的Stephen Fewer提出了反射型DLL加载方法,它可以在无需注册的情况下将DLL加载到进程中。眼下,许多现代攻击活动都是通过这种技术来绕过安全检测的。
实际上,实施反射式DLL加载并非易事——需要将DLL写入内存,然后解析其导出函数和/或对其进行重定位。要想实现反射型DLL加载,需要编写自己的专用加载程序。虽然大多数合法的应用程序都是使用Windows加载程序进行加载,但是攻击者却不愿意这样做,原因有两个:
1. 与使用Windows加载程序(通过调用LoadLibrary函数引用)不同,反射型DLL加载不要求将DLL保存在硬盘上。 因此,攻击者可以利用一个进程,直接将DLL映射到内存中,然后通过反射方式加载DLL,这样就不用把它保存到硬盘上了。
2. 由于没有保存在硬盘上,所以,如果不进行专业的取证分析(例如,检查可执行内存中是否具有类似于可执行代码的内容)的话,以这种方式加载的库很难被发现。
插桩技术与检测方法
反射型DLL加载技术的关键在于为DLL代码提供可执行的内存上面。为此,可以通过获取现有内存并修改其保护标志,或分配新的可执行内存来满足这一要求。 为DLL代码提供内存是我们识别反射型DLL加载的主要信号。
在Windows 10 Creators Update中,我们对两个与获取可执行内存相关的函数调用即VirtualAlloc和VirtualProtect,进行了插桩处理,以便可以为Windows Defender Advanced Threat Protection(Windows Defender ATP)生成相应的信号。基于此,我们建立了一个安全模型,可以在各种的高风险进程(例如浏览器和办公软件)中检测反射型DLL加载。
该模型采取双管齐下的方法,具体如图1所示:
1. 首先,该模型能够掌握进程正常的内存分配行为。例如,我们注意到,像Winword.exe这样的进程会分配4,000个对齐的可执行内存页,并设置特定的执行特性。在Winword进程中只有少数几个线程以这种方式分配内存。
2. 其次,我们发现进程在从事恶意活动(例如,执行恶意宏或利用漏洞)期间的可执行内存分配行为与正常情况下的行为相去甚远。
图1.进程在正常运行情况下的内存分配与进行恶意活动期间的内存分配
这个模型表明,我们可以将内存事件作为检测反射型DLL加载的主要信号。在实际模型中,还包含了一系列其他的特性,例如分配大小、分配历史、线程信息、分配标志,等等。同时,我们也注意到,应用程序的行为会受到诸如插件之类的其他因素的影响而出现较大的差异,所以我们添加了其他方面的行为信号,如网络连接行为等,以提高检测的有效性。
检测反射型DLL加载
下面,让我们来看看Windows Defender ATP是如何检测与社交工程配合使用的反射型DLL加载的。在这种攻击中,目标受害者通常会从文件共享中打开Microsoft Word文档。然后,攻击者会诱骗受害者运行一个宏代码,具体代码如图2所示。(注意:当用户中招时,仍有许多安全保护机制会尽量减轻这种攻击所带来的危害;此外,Office即将发布几项安全特性也能够针对这种攻击提供进一步的防护。)
图2 恶意宏代码
当宏代码运行时,Microsoft Word进程会与攻击者指定的C&C服务器建立连接,并接收与将要通过反射方式加载的DLL相关的内容。一旦这个DLL通过反射方式加载成功,它就会连接到C&C,并提供针对受害者机器的命令行访问权限。
请注意,这个DLL并不是原始文档的组成部分,也不会存放到磁盘。 除了带有一小段宏代码的原始文档会保存到硬盘之外,其余的攻击活动都是在内存中进行的。通过进行内存取证分析,我们发现有几个较大的RWX内存区域被映射到了Microsoft Word进程中,但是没有相应的DLL,如图3所示。这里展示的是通过反射方式加载的DLL所在的内存区域。
图3 打开恶意文档并执行恶意宏时,位于Microsoft Word进程中的大型RWX内存区域
如图4所示,Windows Defender ATP将这些内存分配行为视为异常,并会发出相应的警报。从图中还可以看出,Windows Defender ATP还提供了这个文档的上下文以及与命令和控制服务器的通信信息,以供安全运维人员通过这些信息来评估攻击范围,并采取相应的防御措施。
图4 WDATP上的示例警报
Microsoft Office 365 Advanced Threat Protection能够利用动态行为匹配技术来保护客户免受类似攻击的影响。在遇到这种攻击的时候,SecOps人员会在Office 365的“威胁资源管理器”页面中看到如图5所示的Office 365 ATP行为检测报告。
图5 Office 365 ATP检测示例
小结
Windows 10会一如既往地加强针对现代攻击的全面防御能力。在这篇文章中,我们演示了Windows Defender ATP如何检测反射型DLL加载技术。安全运维人员可以通过Windows Defender ATP提供的警报快速识别并响应企业网络中面临的各种攻击。
Windows Defender Advanced ATP是一种入侵后解决方案,可向SecOps人员发出有关攻击活动的警告。 Windows Defender ATP能够利用丰富的安全数据、高级行为分析和机器学习来检测攻击中不会变化的各种技术。Windows Defender ATP提供的插桩和检测功能可以更好地揭露各种隐蔽的攻击活动。
Windows Defender ATP还提供了详细的事件时间表和其他上下文信息,以便SecOps团队可以用来了解攻击活动并快速做出响应。Windows Defender ATP不断提升的功能使它们能够隔离受害机器并保护网络的其他部分。