一文简析内存马攻击防护解决方案

 

背景:

“内存马”也被称为“无文件马”,顾名思义是一种仅存在于内存中的无文件恶意代码。

近年来,随着攻防演练范围不断扩大,攻防技术水平不断加强,专业的监测、防护手段被防守方广泛使用,传统的通过文件上传落地的Webshell或需以文件形式持续驻留目标服务器的恶意代码的方式逐渐失效,攻击难度逐步加大。攻击方开始采取更为高明的攻击方式,如0day/nday漏洞攻击、无文件攻击、内存Webshell、傀儡进程等基于内存的攻击手段。

攻击方通过操纵漏洞利用程序、合法工具、宏和脚本,可以破坏系统、提升特权或在网络上横向传播恶意代码,并在执行后不会留下任何痕迹,使其难以被检测和清除,在2020年的攻防演练中,内存马也成为攻击方手里的“王牌手段”。

 

内存马分类图谱

当前黑客攻击的目标不仅仅局限于终端,针对服务器的攻击也在日益增多。通过分析和梳理,内存马攻击通常发生在Web系统后端脚本、Java容器和操作系统平台脚本中。我们总结了部分基于运行环境的主流内存马分类图谱,如下图所示:

针对PC终端的内存马攻击主要有两类:1、PowerShell、WMI 、VBA、JS、VBS等类型的脚本攻击,它们会依托系统的一些白程序/工具,通过这些白程序/工具来在内存中执行脚本程序。2、二进制Shellcode攻击,这类攻击会通过控制程序执行流让Shellcode获得执行机会,Shellcode在磁盘中没有文件跟它对应,只在内存中存在。服务器上除了会有上述两类攻击外,由于服务器上主要运行Java和PHP等应用,攻击者还会重点利用Java内存马和PHP内存马来攻击服务器。

常见的内存马介绍

1、 JAVA内存马Java内存马根据实现技术可以分为以下类型:

① Servlet-api类Java Servlet 是运行在Java应用服务器上的组件。它用于处理来自HTTP 客户端的请求,访问后端数据源。利用 Servlet可截获来自网页表单的用户输入,获取、修改来自数据源数据,甚至还可以动态创建网页。

Servlet-api类内存马主要有Servlet和Filter两种类型。Servlet主要用于Tomcat、WebLogic等Java应用服务器。攻击者通过向Java应用服务器添加一个Servlet程序,以处理自己的后门请求。Tomcat由Adapter、Connector与Container构成,Connector主要负责处理网络请求,Container则负责装载Webapp,Adapter是Connector与Container的桥梁,负责两者之间信息的传递。Tomcat只有一个Adapter实现类,即CoyoteAdapter。Adapter的主要作用是将Request对象适配成容器能够识别的Request对象,例如:Servlet容器只能识别ServletRequest对象,因此需要Adapter适配器类为Servlet容器进行适配。

Filter即过滤器,它是应用程序开发较常用技术。开发人员利用Filter管理Web服务器所有Web资源:例如对Jsp, Servlet,静态图片文件或静态html文件等资源URL请求进行拦截,从而实现应用功能。例如:实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等。

② spring类Spring类主要有Listener和Controller两种类型。Listener接口由Spring框架定义,应用程序通过实现特定的Listener接口,并将接口注册到Spring框架,当程序关心的事件发生时,Spring框架会通知Listener,回调Listener方法。

Controller类型是SpringMVC提供的拦截器Interceptor,可用于验证用户登录。它与过滤器不同的是,拦截器由Spring框架提供的。

③ Java Instrumentation类利用Java Agent技术,直接修改Servlet的字节码,生成恶意代码。

2、 PHP内存马PHP-FPM未授权访问漏洞攻击和内存驻留Webshell是常见的PHP内存马:

① 当PHP-FPM启用时,通过Fastcgi协议(Fastcgi协议是服务器中间件和后端进行数据交换的协议)向PHP-FPM发起请求执行任意文件。如果PHP-FPM可被外部访问,攻击者通过Fastcgi协议可直接请求PHP-FPM执行”任意文件”。

② 内存驻留Webshell通常会在php执行起来后,删除php文件本体。

 

防护难点

1、内存马无逻辑结构边界,难以被发现内存马仅存在于进程的内存空间中,通常与正常的/合法的代码、数据混淆。内存马与传统恶意代码的不同之处在于它没有磁盘文件,会导致传统的检测防护手段失效。2、内存马缺乏稳定的静态特征,难以被识别内存马缺乏结构化的静态形式,它依附在进程运行期间的输入数据进入进程,数据可能被加密混淆,因此,无法通过特征识别内存马。3、 内存马种类多,检测机制复杂而多样内存马有二进制代码片段(Shellcode)、PowerShelll脚本、Web中间件等类型,每种类型又可细分,不同类型内存马的执行方式、恶意代码/行为触发机制各不相同。

 

防护方案

内存马的种类多,检测机制复杂多样,传统的安全产品或解决方案难以在第一时间发现并阻断内存马攻击。安芯神甲智能内存保护系统囊括了基于硬件虚拟化技术架构打造的内存保护、行为分析、漏洞防御、动态枚举等检测防御模块,可以有效帮助客户抵御各类内存马攻击。

(完)